Migração NIS -> LDAP + SAMBA mantendo a senha

Publicado por Ulisses Ziech em 16/03/2010

[ Hits: 8.095 ]

 


Migração NIS -> LDAP + SAMBA mantendo a senha



Achei vários artigos na internet ensinando a migrar o sistema de autenticação de Nis para LDAP, mas pouco a respeito da manutenção das senhas quando introduzida a autenticação via Samba. Neste artigo mostro a solução que eu encontrei.

Na empresa onde trabalho a autenticação dos usuários era feita a partir de um servidor NIS. Os usuários utilizam o Squirrelmail para visualizar suas caixas de e-mail e o servidor IMAP é o dovecot.

Como primeira providência, era necessário modificar a autenticação dos usuários para utilizar o LDAP. Para mudar de NIS para LDAP, não ocorreu nenhum problema, bastou utilizar os scripts fornecidos em:
Mas surgiu a ideia de centralizar toda autenticação, inclusive dos computadores Windows. Para isso foi necessário incluir o SAMBA na jogada, e não consegui usar os scripts da PADL para adicionar as entradas corretas para o Samba.

Para autenticar usuários Windows, o Samba não usa o mesmo campo de senha que utilizado por usuários Linux, inclusive o hash é diferente e para gerá-lo, é necessário fornecer a senha em texto puro ou então zerar a senha de todos os usuários colocando uma senha padrão e no primeiro login, fazer com que os usuários coloquem uma senha nova (se alguém souber uma outra forma para manter a senha, por favor me avise).

Já que o Dovecot utiliza o campo de senha do Linux (que eu consigo migrar utilizando as ferramentas da PADL), decidi manter a senha antiga que estava no no /etc/shadow e adicionar algumas linhas no código do Squirrelmail para modificar a senha Windows sempre que uma autenticação for bem sucedida, assim consigo migrar também a senha antiga para o Windows.

Modificando os arquivos

Estou levando em consideração que o usuário já possua conta no LDAP (usuários GNU/Linux autenticando corretamente) com as entradas necessárias para o SAMBA e que só falte replicar o campo userPassword para os campos sambaLMPassword e sambaNTPassword, utilizando o hash correto. É necessário o utilitário mkntpwd (para gerar o hash do Windows, ele vem juntamente com o plugin change_ldappass do squirrelmail, é este que utilizo) e que o usuário tenha permissão para modificar os campos de senha e data, para isso, adicionei as linhas a seguir no slapd.conf:

#Para que o usuário possa modificar a senha
access to attrs=userPassword,sambaLMPassword,sambaNTPassword
by self write
#Para não ter problemas com a senha no primeiro login
access to attrs=sambaPwdMustChange,sambaPwdLastSet
by self write

Editei o arquivo /usr/share/squirrelmail/functions/imap_general.php e procurei onde é feita a verificação de resposta OK para a autenticação, ou seja, se a autenticação foi bem sucedida com as credenciais fornecidas pelo usuário, então a senha do Samba poderá ser alterada. Adicionei as seguintes linhas neste arquivo:

if ($response = 'OK') {

   $ldapsmb_ntpassword = 'sambaNTPassword' ;
   $ldapsmb_lmpassword = 'sambaLMPassword' ;
   $ldap_password_field = 'userPassword';
   $samba_pwd_last_set = 'sambaPwdLastSet';
   $samba_pwd_must_change = 'sambaPwdMustChange';
   $mkntpwd = '/usr/share/squirrelmail/plugins/change_ldappass/mkntpwd/mkntpwd';

   $newinfo=array();
   $exe = "$mkntpwd " . escapeshellarg($password) . " 2>&1" ;
   $retval = 1;
   $ntString = exec($exe, $retarray, $retval);
   if ( $retval == "0" && preg_match("/^[0-9A-F]+:[0-9A-F]+$/",$ntString )) {
      list($lmPassword, $ntPassword) = explode (":", $ntString);
      $newinfo[$ldapsmb_ntpassword] = $ntPassword;
      $newinfo[$ldapsmb_lmpassword] = $lmPassword;
   }

   $last_change=time();
   $newinfo["$samba_pwd_last_set"] = $last_change;
   $newinfo["$samba_pwd_must_change"] = $last_change;

   $ds=ldap_connect('localhost');
   ldap_set_option($ds,LDAP_OPT_PROTOCOL_VERSION,3);
   //Precisa alterar para o seu caso
   //As variaveis $username e $password ja foram definidas anteriormente
   $dn = 'uid='.$username.',ou=usuarios,dc=empresa,dc=etc,d c=br';
   ldap_bind($ds, $dn, $password);

   ldap_modify($ds,$dn,$newinfo);

}

Toda vez que o usuário autenticar no webmail, o dovecot responde confirmando ou negando o login. As linhas acima capturam a resposta e modificam a senha nos campos do samba. Não sou programador, portanto o script é bem burrinho, não vai verificar se o usuário já alterou a senha alguma vez, portanto, vou deixar rodando durante um tempo depois eu retiro, os usuários que fizerem autenticação no webmail durante este tempo, vão poder fazer login em máquinas Windows, aqueles que não fizerem login, vou alterar manualmente, definindo uma senha padrão.

Segui os seguintes tutoriais para migrar de nis para ldap:
Espero que ajude alguém. Qualquer coisa, estou por aí para tentar ajudar.

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Criando teclas de atalho no Ubuntu 9.04

I Semana do Software Livre de Americana - SP

Peppermint 10 em um PC da "pré-histórico"

Atualizando Kernel, Xorg e KDE de maneira simples no Slackware 10.2

lshell - Limitando ambiente e comandos a usuários/grupos

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts