No Linux, as bibliotecas que controlam o login precisam ser redirecionadas para usar um back-end do LDAP, em oposição a procurar coisas em / etc / passwd.
Se você estiver usando o OpenLDAP, convém analisar duas coisas:
NSCD (Daemon de cache do servidor de nomes) que armazena em cache as consultas LDAP. Você executará isso em cada host em que os usuários efetuam login.
NSSLDAP (Switch de Servidor de Nome para LDAP) é a cola que faz com que os logins consultem o NSCD, que por sua vez consultará o backend LDAP ou o NSSLDAP consultará o backend LDAP diretamente se o NSCD for obsoleto ou não disponível.
Portanto, em cada estação de trabalho, você precisará instalar o OpenLDAP, o NSCD e o NSSLDAP, se não fizer parte de sua distribuição. O OpenLDAP é necessário para obter as bibliotecas do cliente que sabem como falar o protocolo LDAP.
Você precisa fazer edições em alguns arquivos:
/etc/nscd.conf Este arquivo controla o que é armazenado em cache. Aqui está um despejo de um dos meus sistemas que funciona como um servidor Samba:
enable-cache passwd yes
positive-time-to-live passwd 10
negative-time-to-live passwd 3
suggested-size passwd 211
check-files passwd yes
persistent passwd yes
shared passwd yes
max-db-size passwd 33554432
auto-propagate passwd yes
enable-cache group yes
positive-time-to-live group 3600
negative-time-to-live group 3
suggested-size group 211
check-files group yes
persistent group yes
shared group yes
max-db-size group 33554432
auto-propagate group yes
enable-cache hosts yes
positive-time-to-live hosts 3600
negative-time-to-live hosts 3
suggested-size hosts 211
check-files hosts yes
persistent hosts yes
shared hosts yes
max-db-size hosts 33554432
Você então precisará modificar seu arquivo nsswitch.ldap (leia os DOCs sobre ele, muito para entrar aqui).
UMA COISA MUITO IMPORTANTE !!!!
Se o seu servidor LDAP estiver inativo, você deseja garantir que a conta raiz local ainda possa fazer login. Ou, se uma de suas estações de trabalho estiver com problemas de rede, você deverá garantir que ainda possa fazer login. / p>
Então, quando minhas caixas de Linux inicializam, eu tenho um script que sempre copia um arquivo nsswitch.conf no lugar da seguinte forma:
passwd: compat grupo: compat
hosts: arquivos dns redes: arquivos
serviços: arquivos protocolos: arquivos rpc: arquivos éteres: arquivos netmasks: arquivos netgroup: arquivos bootparams: arquivos
montagem automática: arquivos aliases: arquivos
e uma vez que eu estou pronto para usar o LDAP para logins, eu substituo o arquivo nsswitch.conf com o seguinte:
passwd: arquivos ldap grupo: arquivos ldap shadow: arquivos ldap
hosts: arquivos dns redes: arquivos
serviços: arquivos protocolos: arquivos rpc: arquivos éteres: arquivos netmasks: arquivos netgroup: arquivos bootparams: arquivos
montagem automática: arquivos aliases: arquivos
O primeiro permite que eu faça o login localmente e o último permite que ambos, mas devido ao cache do NSCD, leva tempo para o NSCD ficar obsoleto, causando atrasos ou problemas de login.
Há muito mais a ser dito sobre isso, mas esperamos que você comece.
BTW: Eu sou o desenvolvedor do Pozix Linux e do Pozix Linux Small Business Server e temos mais de 400 sistemas Samba rodando desse jeito!
De acordo, os comentários do TRS80 são válidos, mas aqui está um script que usamos para criar arquivos LDIF a partir de arquivos / etc / passwd. O arquivo LDIF resultante pode ser usado para preencher seu banco de dados LDAP. Você precisará certificar-se de que, se executar este script em várias estações de trabalho, elimine nomes de conta duplicados para que você acabe com nomes de conta exclusivos com UIDs exclusivos.
cat /etc/passwd | while read i; do
uid='echo $i | cut -d : -f 1'
uidNumber='echo $i | cut -d : -f 3'
gidNumber='echo $i | cut -d : -f 4'
gecos='echo $i | cut -d : -f 5'
homeDirectory='echo $i | cut -d : -f 6'
loginShell='echo $i | cut -d : -f 6'
userPassword='cat /etc/shadow | grep $uid | cut -d : -f 2'
echo "dn: cn=$gecos,ou=people,dc=mycompany,dc=com"
echo "objectClass: account"
echo "objectClass: posixAccount"
echo "cn: $gecos"
echo "uid: $uid"
echo "uidNumber: $uidNumber"
echo "gidNumber: $gidNumber"
echo "homeDirectory: $homeDirectory"
echo "loginShell: $loginShell"
echo "userPassword: $userPassword"
done