Boa noite á todos,

Esta solução concerteza vai deixar muitos felizes assim como eu quando resolvi =D, após pesquisas e pesquisas sobre o assunto, infelizmente em diversos lugares todos quase chegavam a solucionar mas nunca dava certo, ao reiniciar o sistema operacional voltava a estaca 0.

O erro da qual vos escrevo hoje é sobre o serviço Winbind da qual é responsável pelo intermediário de autenticação entre um Active Directory e um servidor Linux Samba.

Há diversos tutoriais sobre como criar um Samba integrado ao AD, porém felizmente alguns o problema não ocorre e para outros o buraco é mais em baixo, de qualquer forma vou falar sobre o problema de forma resumida.

SE você tem um servidor Samba integrado ao AD e está tudo funcionando porém quando reinicia o servidor, o mesmo para de buscar informações dos usuários e grupos do AD, esta pode ser a sua solução.

SE você tem um servidor Samba integrado ao AD e faz o uso de acl´s para restringir acesso aos diretórios e arquivos, e nestas restrições são usuários obtidos através da integração, porém de uma hora para a outra o servidor Windows para de autenticar devido a uma falha e reinicia, seu Linux de forma alguma funciona, tendo que reiniciar o serviço manualmente para resolver, esta pode ser a sua solução.

SE você está cansado de ter que reiniciar o servidor e ter que ir no console ou via SSH e digitar “/etc/init.d/winbind restart” ou “invoke-rc.d winbind restart” ou até mesmo “service winbind restart”, toda vez que ve a mensagem de falha ao obter usuários do AD, esta pode ser a sua solução.

SE você verifica o log do winbind e contém a seguinte mensagem quando o mesmo não faz a autenticação:

[2010/04/21 11:07:32, 1] winbindd/winbindd_util.c:trustdom_recv(260)
Could not receive trustdoms

Esta pode ser a sua solução.

SE você tem a certeza que os arquivos de configuração /etc/nsswitch.conf, /etc/krb5.conf; /etc/samba/smb.conf, o comando net join funciona, wbinfo, mas o problema retorna quando reinicia o servidor, esta pode ser a sua solução.

SE você desistiu do winbind para integrar ao AD e procurou o famoso “likewise-open” para contornar o problema, mas mesmo quando o servidor reinicia ocorre o mesmo problema, esta pode ser a sua solução.

Ao longo de semanas aumentando o debug do log do Winbind, nada descobri, em meio a buscas desesperadoras sobre uma solução, o tópico que mais ajudou foi uma postagem no grupo debian com o assunto “Bug winbind Lenny”, mas em meio a tantas mensagens vi que o problema era idêntico, até o log, mudando ás vezes em alguns casos, quando pensei que o problema estava prestes a ser resolvido, lia as seguintes respostas:

“Faça um restart manual através do script rc.local…”

“Deixe o Winbind reiniciar por último no servidor…”

“Deixe o samba subir primeiro do que o winbind…”

“Recompile o samba…”

“Instale em outra distribuição…”

Ai pensei, putz.. fiz tudo isto e nada de resolver =/. Resolvi investir mais no rc.local, fiz o script de restart e com o uso do comando “getent passwd” a lista parecia ir, mas não ia…, adicionei um sleep de 40 segundos, o mesmo funcionou trazendo a lista de usuários, porém quando se acessava os compartilhamentos, havia aquele grande e velho erro dizendo que não há servidores para autenticação.

Fui mais a frente descobrindo que o erro só podia ser contornado quando a shell era liberada no console para o login, logo pedi ajuda para alguns amigos e me disseram para colocar o script do rc.local em “background”, fiz o procedimento, porém o erro persistia em não funcionar a autenticação, mesmo trazendo a lista de usuários.

Irritado, alterei o script colocando 3 restarts e um sleep menor, gerando arquivos de log para cada restart, mas infelizmente nada..=/. Com mais insistência, tentei colocar o sleep maior ainda e colocar junto aos 3 restarts mais 3 getent, para minha esperança o acesso QUASE funcionava, mas dava erro ao final. Logo, não desisit, e tentei no outro dia com mais calma, dividi o tempo do sleep intercalado entre os 3 restarts, juntamente com os getent, e quaseee mas deu erro denovo, porém demorou mais, falei bom.. estou no caminho certo, acho que o processo está ficando preso, mesmo com o exit 0 no final do script.

Falei já sei…. vou matar o processo ao fim do script e ta feito! Resultado? FUNCIONOU =) ;).

Para as pessoas que passam pelo mesmo problema, segue o script que salvou minha vida e do sistema de chamados:

arqsp03:~# cat /opt/fix_auth
# Reinicia winbind
sleep 10
/etc/init.d/winbind restart
sleep 10
echo “Capturando lista de usuarios…”
getent passwd 2&> /dev/null
/etc/init.d/winbind restart
sleep 10
echo “Capturando lista de usuarios…”
getent passwd 2&> /dev/null
/etc/init.d/winbind restart
echo “Capturando lista de usuarios…”
getent passwd 2&> /dev/null
echo “Matando o processo em background…”
/bin/kill -SIGKILL $
exit 0

Troque o nome se quiser, e chame-o pelo rc.local com um & para que o mesmo seja colocado em background.

Desculpem-me o tamanho do post, porém precisava desabafar e mostra o quão díficil foi algo que parecia simples =D.

Depois disso vou pensar em um artigo sobre o uso de ACL´s em um samba integrado ao um AD, junto com um ftp que usa contas do sistema mas precisa de ACL´s também.

Bom proveito.

Att.
Heitor Lessa

Anúncios