Por que o getent não mostra usuários do OpenLdap?

4

Estou tentando configurar o Ubuntu 10.04 para que eu possa fazer o login usando as credenciais do ldap.

Eu segui estas etapas gerais de configuração descritas em vários tutoriais que encontrei:

1) Instale bibliotecas:

sudo apt-get install libpam-ldap libnss-ldap nss-updatedb libnss-db nscd

2) inserido nos detalhes da conexão quando solicitado pelo libnss_ldap

3) nsswitch.conf configurado para usar o ldap:

...
passwd: files ldap
group: files ldap
shadow: files ldap
...

4) configurado pam.d common- * files

Este é o conteúdo de "common-auth":

auth    [success=2 default=ignore]      pam_unix.so nullok_secure
auth    [success=1 default=ignore]      pam_ldap.so use_first_pass
# here's the fallback if no module succeeds
auth    requisite                       pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth    required                        pam_permit.so
# and here are more per-package modules (the "Additional" block)
# end of pam-auth-update config

Eu tentei isso em 2 servidores linux. Nenhum dos dois parece reconhecer nenhum usuário do ldap. Por exemplo, getent passwd <ldap username> não retorna nada. id <ldap username> retorna no such user .

Se eu tentar ssh usando minha credencial ldap, vejo isso no auth.log:

Jun  2 14:16:50 hostnameXX sshd[1527]: pam_unix(sshd:auth): check pass; user unknown
Jun  2 14:16:50 hostnameXX sshd[1527]: pam_unix(sshd:auth): authentication failure; logname=uid=0 euid=0 tty=ssh ruser= rhost=xx.xx.xx.xx

UPDATE

Eu descomentei o seguinte no arquivo ldap.conf:

nss_base_passwd ou=xxx,dc=xxx,dc=xxx
nss_base_shadow ou=xxx,dc=xxx,dc=xxx
nss_base_group  ou=xxx,dc=xxx,dc=xxx

e agora fazendo um pequeno progresso - agora estou vendo isso no auth.log:

Jun  2 16:15:03 <hostname> sshd[1566]: pam_ldap: error trying to bind as user cn=xxxx,ou=xxx,dc=xxx,dc=xx" (Invalid credentials)
Jun  2 16:15:05 <hostname> sshd[1566]: Failed password for invalid user xxxx from xx.xx.xx.xx port xxxx ssh2

Se eu fizer um ldapsearch usando o mesmo host e base dn conforme especificado em ldap.conf, posso consultar e encontrar minha conta de usuário ldap com sucesso.

O que estou perdendo? Talvez algum serviço precise ser iniciado? Muito obrigado por qualquer ajuda.

    
por Upgradingdave 02.06.2011 / 20:19

3 respostas

3

Eu iniciei nslcd no modo de depuração: nslcd -d e vi nas instruções que ele estava procurando por objectclass posixAccount. Todas as entradas no meu LDAP eram do tipo inetOrgPerson. Eu tive que incluir o nis.schema no arquivo slapd.conf e, em seguida, adicionar posixAccount como uma classe de objeto auxiliar para cada entrada. Então, eu poderia finalmente usar getent para ver as contas dentro do LDAP.

Cross postado aqui:

link

    
por 22.06.2011 / 03:21
1

Você tem o pam_ldap nos módulos pam? Faltando isso explicaria o comportamento.

    
por 02.06.2011 / 21:11
1

Nossos sistemas (Centos) usam LDAP (no Active Directory). Você configurou seu /etc/ldap.conf? O nosso mapeia as tags nss_ * para os DN's no LDAP. Se você não fez isso, é improvável que funcione. Confira este tutorial de autenticação openldap .

Existe um serviço que pode ajudar, nscd , daemon de cache do serviço de nomes. Como o nome sugere, ele apenas armazena em cache, portanto, não é provável que seja o seu problema, embora possa ajudar quando você descobrir o problema. Ele fica "preso" às vezes, e temos que rejeitá-lo quando ele não atualiza corretamente o cache.

    
por 02.06.2011 / 21:42