quarta-feira, 29 de julho de 2009

Autenticação NTLM e Basic no Apache, com o mesmo módulo, em GNU/Linux

Continuamente há a necessidade de se integrar um novo ambiente, em um dado CCD, ao sistema de autenticação corrente. Fato é fato: o serviço de autenticação foi implementado antes deste e não vai mudar por causa dele. Ou se integre ou...

No meu caso; um serviço de controle de versão SVN provido por Apache2+SSL. Não falarei aqui sobre o serviço de controle de versão, mas sim de como este é autorizado através da autenticação NTLM. Esta é outra história. Pense apenas em um serviço X. O sistema de autenticação? MS Active Directory do Windows Server 2008 com 33 domínios de confiança e uma floresta de logins e recursos enorme.

Depois de testar várias alternativas, cheguei ao mod_auth_ntlm_winbind. Ótima opção!

Primeiramente o seu servidor GNU/Linux deve fazer parte do domínio AD, como qualquer máquina MS Windows. Para tanto, você precisará instalar e configurar o samba e o winbind. Outra coisa, levo em consideração a distribuição Debian GNU/Linux 5.0.2 (Lenny). Mas é possível para qualquer Unix-like.

svn@poe:~$ sudo apt-get install samba smbclient winbind krb5-clients ntpdate apache2-mpm-worker apache2-threaded-dev
...


Rede

Deve-se saber algumas informações sobre a rede. Para tanto execute os passos a seguir:

svn@poe:~$ nslookup sufixo_dns

Server: 10.8.X.Y
Address: 10.8.X.Y#53

Name: sufixo_dns
Address: 10.8.N.M
Name: sufixo_dns
Address: 10.8.I.J
...

svn@poe:~$ nslookup 10.8.N.M
Server: 10.8.I.J
Address: 10.8.I.J#53

N.M.8.10.in-addr.arpa name = svr0001.sufixo_dns.
...


No meu caso, os servidores de DNS também são os servidores KDC. Como fiquei sabendo disso?

svn@poe:~$ telnet svr0001 88
Trying 10.8.N.M...
Connected to svr0001.sufixo_dns (10.8.N.M).
Escape character is '^]'.
Connection closed by foreign host.
...



Kerberos

svn@poe:~$ sudo mv /etc/krb5.conf /etc/krb5.conf_ORIG

svn@poe:~$ sudo vi /etc/krb5.conf

[logging]
default = FILE:/var/log/krb5.log

[libdefaults]
clockskew = 300
default_realm = SUFIXO_DNS_EM_LETRAS_MAIÚSCULAS
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true

[realms]
SUFIXO_DNS_EM_LETRAS_MAIÚSCULAS = {
kdc = svr0001:88
kdc = svr0002:88
kdc = svr0003:88
kdc = svr0004:88

default_domain = SUFIXO_DNS_EM_LETRAS_MAIÚSCULAS
}

[domain_realm]
.sufixo_dns_em_letras_minúsculas = SUFIXO_DNS_EM_LETRAS_MAIÚSCULAS
sufixo_dns_em_letras_minúsculas = SUFIXO_DNS_EM_LETRAS_MAIÚSCULAS



Execute os comandos como no quadro abaixo e se a saída for parecida com a ali apresentada, tudo está correto.

svn@poe:~$ kinit cperpetuo@SUFIXO_DNS_EM_LETRAS_MAIÚSCULAS
Password for cperpetuo@SUFIXO_DNS_EM_LETRAS_MAIÚSCULAS:
svn@sac0344:~$ klist
Ticket cache: FILE:/tmp/krb5cc_1001
Default principal: cperpetuo@SUFIXO_DNS_EM_LETRAS_MAIÚSCULAS

Valid starting Expires Service principal
07/29/09 13:47:52 07/30/09 01:48:00 krbtgt/SUFIXO_DNS_EM_LETRAS_MAIÚSCULAS@SUFIXO_DNS_EM_LETRAS_MAIÚSCULAS
renew until 07/30/09 13:47:52


Kerberos 4 ticket cache: /tmp/tkt1001
klist: You have no tickets cached
...


Samba

svn@poe:~$ sudo mv /etc/samba/smb.conf /etc/samba/smb.conf_ORIG

svn@poe:~$ sudo vi /etc/samba/smb.conf

[global]
workgroup = DOMÍNIO
server string = SVN Server
realm = SUFIXO_DNS_EM_LETRAS_MAIÚSCULAS
security = ADS
password server = *
restrict anonymous = 2
client NTLMv2 auth = Yes
printcap name = /dev/null
idmap uid = 10000-200000
idmap gid = 10000-200000
template homedir = /tmp
template shell = /bin/false
winbind separator = \\
idmap backend = ad
winbind enum users = Yes
winbind enum groups = Yes
printing = bsd
printcap name = /dev/null
~


NTP

Também no meu caso, os servidores de DNS também são servidores NTP.

svn@poe:~$ mv /etc/default/ntpdate /etc/default/ntpdate_ORIG

svn@poe:~$ vi /etc/default/ntpdate

# The settings in this file are used by the program ntpdate-debian, but not
# by the upstream program ntpdate.

# Set to "yes" to take the server list from /etc/ntp.conf, from package ntp,
# so you only have to keep it in one place.
NTPDATE_USE_NTP_CONF=no

# List of NTP servers to use (Separate multiple servers with spaces.)
# Not used if NTPDATE_USE_NTP_CONF is yes.
NTPSERVERS="svr0001 svr0002 svr0003 svr0004"

# Additional options to pass to ntpdate
NTPOPTIONS="-s"
~

svn@poe:~$ sudo ln -s /usr/sbin/ntpdate-debian /etc/cron.daily/


Inserção da máquina no domínio

svn@poe:~$ sudo invoke-rc.d samba start
svn@poe:~$ sudo invoke-rc.d winbind start
svn@poe:~$ sudo net -W DOMÍNIO -S svr0001 -U administrador_de_domínio


Se tudo está correto:
klaux@poe:~$ sudo net ads testjoin
Join is OK

klaux@poe:~$ sudo net rpc testjoin
Join to 'DOMÍNIO' is OK

klaux@poe:~$ wbinfo -i DOMÍNIO\\cperpetuo
DOMÍNIO\cperpetuo:*:10000:10000:Clauzio 'KlauX' Perpétuo:/tmp:/bin/false


mod_auth_ntlm_winbind

A segunda parte é justamente baixar o mod_auth_ntlm_winbind, compilá-lo, instalá-lo e configurá-lo.
klaux@poe:~$ svn co svn://svnanon.samba.org/lorikeet/trunk/mod_auth_ntlm_winbind \
> mod_auth_ntlm_winbind
...

Sugiro a aplicação do diff abaixo, pois os valores padrões para algumas flags do módulo estão sem o path absoluto e no meu caso isso foi um problema. Isso também evita a necessidade de se passar valores para as flags PlaintextAuthHelper e NTLMAuthHelper.
klaux@poe:~/mod_auth_ntlm_winbind_svn$ svn diff mod_auth_ntlm_winbind.c
Index: mod_auth_ntlm_winbind.c
===================================================================
--- mod_auth_ntlm_winbind.c (revisão 801)
+++ mod_auth_ntlm_winbind.c (cópia de trabalho)
@@ -884,9 +884,9 @@
crec->negotiate_on = 0;
crec->ntlm_basic_on = 0;
crec->ntlm_basic_realm = "REALM";
- crec->ntlm_auth_helper = "ntlm_auth --helper-protocol=squid-2.5-ntlmssp";
- crec->negotiate_ntlm_auth_helper = "ntlm_auth --helper-protocol=gss-spnego";
- crec->ntlm_plaintext_helper = "ntlm_auth --helper-protocol=squid-2.5-basic";
+ crec->ntlm_auth_helper = "/usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp";
+ crec->negotiate_ntlm_auth_helper = "/usr/bin/ntlm_auth --helper-protocol=gss-spnego";
+ crec->ntlm_plaintext_helper = "/usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic";

return crec;
}


klaux@poe:~$ sudo apxs2 -DAPACHE2 -c -i mod_auth_ntlm_winbind.c
...

klaux@poe:~$ sudo echo "LoadModule \
> auth_ntlm_winbind_module \
> /usr/lib/apache2/modules/mod_auth_ntlm_winbind.so" >\
> /etc/apache2/mods-available/auth_ntlm_winbind.load
...

klaux@poe:~$ sudo a2enmod auth_ntlm_winbind
...

klaux@poe:~$ sudo vi /etc/apache2/conf.d/pasta
<Location /pasta>
AuthName "SVN - ECT"

NTLMAuth on
NTLMBasicAuth on
NTLMBasicAuthoritative on
AuthType NTLM

SSLRequireSSL

Require valid-user
</Location>
~

klaux@poe:~$ sudo invoke-rc.d apache2 restart

Pronto! Agora é só acessar http(s)://localhost/pasta por um cliente, MS IE, TortoiseSVN etc., em máquinas MS Windows, que suporte o tipo de autenticação NTLM. Neste serão utilizadas as mesmas ACLs do login no SO, ou seja, não será solicitada senha alguma.

No caso dos clientes que não suportem o tipo de autenticação NTLM, o próprio módulo, através da flag 'NTLMBasicAuth on', providenciará a autenticação pelo método Basic. Muita atenção aqui: o método de autenticação Basic passa suas informações em texto plano, ou seja, instale o módulo SSL no Apache.

Fonte:www.debian-administration.org, adldap.sourceforge.net

segunda-feira, 6 de julho de 2009

VMWare e os caracteres "/" e "?" no teclado ABNT2

Quem utiliza tanto o VMWare Workstation quanto o VMWare Player, instalado em um GNU/Linux com teclado ABNT2, deve ter percebido que a tecla responsável pelos caracteres "/" e "?" não funciona.

Pois bem, seguem os passos necessários para corrigir esse problema.

Abra o arquivo /usr/lib/vmware/config para edição:
sudo vi /usr/lib/vmware/config

Acrescente a seguinte linha no final do arquivo:
xkeymap.keycode.211 = 0x073

Reinicie o vmware:
/etc/init.d/vmware restart

Pronto, agora é só entrar na(s) máquina(s) guest que a tecla estará funcionando!

Fonte: hamacker.wordpress.com

quarta-feira, 13 de maio de 2009

2D barcodes: QR Code e Data matrix


Existem hoje dois "padrões" para códigos de barra 2D bem difundidos no mundo: O japonês QR Code e o Data matrix. Este último recomendado pela (EIA) para identificar pequenos componentes eletrônicos como periféricos para PCs e Notebooks.




Essa tecnologia está cada vez mais presente na Internet e fora dela. É uma excelente forma de difundir pequenas quantidades de informação como dados pessoais (nome, telefone, e-mail), números de série de placas de computador etc. Mas, a principal vantagem, acredito, é a possibilidade de se utilizar um simples celular com câmera digital para ter acesso a tais informações. Imagine colocar no seu portal um QR code com seu cartão de visitas. As pessoas interessadas poderiam simplesmente escaneá-lo para terem acesso aos seus dados. Só preste muita atenção na capacidade de leitura entre os dispositivos disponíveis e a quantidade de informação codificada. Isso é diretamente proporcional: Veja mais: Versões, correção de erros e máximo de caracteres.

Um boa forma de se inteirar um pouco mais sobre o assunto é assistindo o vídeo QR code: o que é isso? da Profª Martha Gabriel. Lá ela apresenta o i-nigma. Tanto o leitor que pode ser instalado em celulares com JVM quanto o portal onde se pode gerar códigos de barra bidimencionais nos formatos já apresentados.

Alguns links relacionados:

-= Geradores =-
http://www.mobile-barcodes.com/qr-code-generator/
http://code.google.com/intl/pt-BR/apis/chart/#qrcodes
http://zxing.appspot.com/generator/
http://www.quickmark.com.tw/En/diy/?qrVcard
http://www.i-nigma.com/Create.asp
http://mobilecodes.nokia.com/create.jsp?terms=accepted
http://qrcode.kaywa.com/
http://datamatrix.kaywa.com/

-= Leitores =-
http://code.google.com/p/zxing/
http://mobilecodes.nokia.com/scan.htm
http://reader.kaywa.com
http://www.i-nigma.com/GetReader.asp
http://www.upc.fi/en/upcode/download/
http://www.neoreader.com/download.html --> Lê mais formatos Aztec Code, Data matrix, UPC, Code 128.

Fonte: tvig.ig.com.br, blog.mazolini.com.br e code.google.com

quarta-feira, 6 de maio de 2009

Tecla Caps Lock invertida

A uns dias aconteceu algo estranho em uma máquina Debian GNU/Linux 5.0r0 (lenny) que acompanho. Esta instalada como Desktop padrão, Gnome é claro. :-) A tecla Caps Lock ficou invertida, ou seja, com o led acesso letras minúsculas e com o led apagado maiúsculas.

Depois de muito procurar descobri que o culpado era o OpenOffice. Existe uma opção de autocorreção chamada "Correct accidental use of cAPS LOCK key" que causa essa confusão. O que fiz foi desabilitá-la.

Para acessar tal opção:
menu Ferramentas > AutoCorreção... > Opções > Correct accidental use of cAPS LOCK key > OK.

Não testei em outro sistema operacional e nem em outra versão do OpenOffice, além da 2.4.1.

T+

terça-feira, 5 de maio de 2009

Usando o VMware Virtual Disk Manager

Os exemplos abaixo ilustram como se deve usar o virtual disk manager. Você deve executar o virtual disk manager a partir do prompt de comando.

Criando um Disco Virtual

Para criar um novo disco virtual, execute o comando como demonstrado abaixo:

vmware-vdiskmanager -c -t 0 -s 40GB -a ide myDisk.vmdk
Isso cria um disco IDE de 40GB com o nome de myDisk.vmdk. Todo o disco virtual corresponde a um único arquivo .vmdk e o espaço em disco não está pré-alocado.

Convertendo um Disco Virtual

Para converter um disco virtual do tipo pré-alocado para alocação dinâmica, execute o comando como demonstrado abaixo:

vmware-vdiskmanager -r sourceDisk.vmdk -t 0 targetDisk.vmdk
Isso converte um disco virtual originalmente do tipo pré-alocado para o tipo alocação dinâmica em um único arquivo. O espaço do disco virtual não mais é pré-alocado, e o virtual disk manager requisitará o espaço necessário, até sua capacidade, na medida que o conteúdo do disco virtual aumenta.

Expandindo o tamanho de um Disco Virtual

Para expandir o tamanho de um disco virtual, execute o comando como demonstrado abaixo:

vmware-vdiskmanager -x 40GB myDisk.vmdk
Isso aumenta a capacidade máxima do disco para 40GB.

Desfragmentando um Disco Virtual

Para desfragmentar um disco virtual, execute o comando como demonstrado abaixo:

vmware-vdiskmanager -d myDisk.vmdk

Atenção:
não se pode desfragmentar um disco virtual caso este seja do tipo pré-alocado. Também não se pode desfragmentar um disco físico.

Preparando um Disco Virtual para Encolhimento (Shrinking)

Isso apenas é necessário em máquinas MS Windows. Para mais detalhes acesse o documento original da VMware

Encolhendo um Disco Virtual

Para encolher um disco virtual, execute o comando como demonstrado abaixo:

vmware-vdiskmanager -k myDisk.vmdk

Atenção:
Não se pode encolher um disco virtual caso este seja do tipo pré-alocado (preallocated) e também não se pode encolher um disco físico.

Para que a operação seja bem sucedida, será necessário o dobro do tamanho do disco virtual no disco físico.

Caso o disco virtual tenha um snapshot, será necessário removê-lo primeiro.

Alguns Tipos de Discos Virtuais Suportados

0 : Disco virtual dinâmico simples
1 : Disco virtual dinâmico repartido em arquivos de 2G
2 : Disco virtual pré-alocado
3 : Disco virtual pré-alocado repartido em arquivos de 2G

Fonte: www.vmware.com e www.nanolime.eti.br

segunda-feira, 4 de maio de 2009

Acertando o formato de data do Trac

Uma das várias funcionalidades interessantes que o Trac oferece, além do próprio controle de mudança (que é fundamental para a Gerência de Configuração de Software), é o relatório dos eventos por data, o timeline. Entretanto, muitas vezes a data é apresentada no formato americano (MM/DD/YYYY) e não no formato que usamos aqui no Brasil (DD/MM/YYYY).

A boa notícia é que é muito simples acertar isso. O que define o formato de apresentação de data usado pelo Trac é o Locale configurado no servidor. Sendo assim, basta mudar o Locale para que o formato fique no formato desejado.

Uma das maneiras de fazer isso é configurar uma variável de ambiente do Apache. No Debian GNU/Linux, basta acrescentar a seguinte linha no arquivo /etc/apache2/envvars:

export LC_ALL=pt_BR.UTF-8

Não esqueça de fazer o restart do Apache depois.

Fonte: pronus.eng.br