quinta-feira, 23 de janeiro de 2014

Bug com smb_auth no Squid3 do Ubuntu 12.04


Há muito tempo que não instalava um Squid e eis que surgiu a necessidade de fazê-lo.

Esta instalação, diferente das anteriores que havia realizado, precisava autenticar no Windows Active Directory 2012, mas como tratava-se de uma autenticação simples, ao invés de Kerberos, Winbind e afins, optei por utilizar a autenticação básica, com os comandos squid_ldap_group e o smb_auth.

Depois da instalação e da configuração finalizadas, iniciei os testes dos mecanismos de comunicação com o AD. Primeiro o squid_ldap_group, que comportou-se como o esperado e depois o smb_auth, que acabou falhando.

Mesmo após vários testes e verificações me deparava sempre com o mesmo problema:
/usr/lib/squid3/smb_auth -d -W MEUDOMINIO -U 192.168.1.2
meu_usuario minha_senha
Domain name: MEUDOMINIO
Pass-through authentication: no
Query address options: -U 192.168.1.2 -R
Domain controller IP address: 192.168.1.2
Domain controller NETBIOS name: MEUDOMINIODC1
Contents of //MEUDOMINIODC1/NETLOGON/proxyauth:
ERR

Como eu tinha certeza de que estava tudo correto, decidi debugar os softwares. Já que o smb_auth era um binário, iniciei a investigação pelo script /usr/lib/squid3/smb_auth.sh

Aparentemente não havia nada de errado com o mesmo, mas ele também falhava nos testes. Resolvi então testar o script passo a passo e acabei  me depararando com um erro lamentável. O comando que verificava o conteúdo do arquivo proxyauth no compartilhamento netlogon não estava enviando os dados de autenticação, como podemos ver abaixo:
authinfo=`smbclient "//$dcname/$AUTHSHARE" -I $dcip -d 0 -E -W "$DOMAINNAME" -c "get $authfilebs -" 2>/dev/null`

Corrigi então o código, que ficou da seguinte maneira:
authinfo=`smbclient "//$dcname/$AUTHSHARE" -I $dcip -d 0 -E -W "$DOMAINNAME" -c "get $authfilebs -" -U $USER 2>/dev/null`
Voilà, problema resolvido:  
/usr/lib/squid3/smb_auth -d -W MEUDOMINIO -U 192.168.1.2
meu_usuario minha_senha
Domain name: MEUDOMINIO
Pass-through authentication: no
Query address options: -U 192.168.1.2 -R
Domain controller IP address: 192.168.1.2
Domain controller NETBIOS name: MEUDOMINIODC1
Contents of //MEUDOMINIODC1/NETLOGON/proxyauth: allow
OK
Espero que este post seja útil e evite que você perca tanto tempo quanto eu perdi numa tarefa tão corriqueira.