pam_ldap e ldaps não podem entrar em contato com o servidor ldap

3

Estou tentando permitir a autenticação via LDAP em um sistema host do CentOS. Mas eu sempre recebo um erro Não consigo contatar o servidor LDAP do pam_ldap.

O servidor LDAP é pingável e a autenticação funciona perfeitamente com ldap: //, mas não com ldaps: //. Ele também funciona perfeitamente com ldaps: // no sistema operacional da Debian, mas não no CentOS.

Eu tenho o erro Não consigo contatar também com $ ldapsearch ... mas consertei a configuração TLS_REQCERT allow em / etc / openldap / ldap.conf. Mas definir isso para /etc/pam_ldap.conf não ajuda.

Passos que fiz:

  • $ yum instalar o pam_ldap nss-pam-ldapd openldap-clients
  • $ authconfig-tui e ativar o LDAP para autenticação
  • modificar / etc / pam_ldap
  • modificar /etc/nslcd.conf
  • modificar /etc/openldap/ldap.conf
  • crie /etc/ldap/ldap.conf (leia em algum lugar que é um caminho de arquivo de configuração de fallback)
  • crie /etc/ldap.conf (com o mesmo conteúdo de /etc/ldap/ldap.conf)
  • reinicie os serviços nscd e nslcd

Mais algumas informações:

  • o CA-Cert do servidor LDAP é legível para todos.
  • iptables está desativado

Também é confuso o IP em / var / log / secure . Lá está escrito Senha com falha para testuser de 10.1.1.1 , mas o IP configurado para o servidor LDAP é 10.1.1.42 e o IP do host é 10.1.1.27. De qualquer forma, se eu usar o uri ldap: //10.1.1.42 e comentar a autenticação da linha ssl on funciona como um charme.

Alguma idéia?

.

Tentando autenticar via pam, / var / log / secure

Sep 15 09:50:37 client-server unix_chkpwd[16146]: password check failed for user (testuser)
Sep 15 09:50:37 client-server sshd[16144]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.1.1.1  user=testuser
Sep 15 09:50:37 client-server sshd[16144]: pam_ldap: ldap_simple_bind Can't contact LDAP server
Sep 15 09:50:37 client-server sshd[16144]: pam_ldap: reconnecting to LDAP server...
Sep 15 09:50:37 client-server sshd[16144]: pam_ldap: ldap_simple_bind Can't contact LDAP server
Sep 15 09:50:40 client-server sshd[16144]: Failed password for testuser from 10.1.1.1 port 11339 ssh2
Sep 15 09:50:40 client-server sshd[16145]: Received disconnect from 10.1.1.1: 13: Unable to authenticate

Executa $ ldapsearch -v -H ldaps: //10.1.1.42/ -Dcn = admin, dc = sub, dc = exemplo, dc = org -W -x -b dc = sub, dc = Por exemplo, dc = org -d1 para verificar se ldaps // está funcionando. (Sim, funciona)

ldap_url_parse_ext(ldaps://10.1.1.42/)
ldap_initialize( ldaps://10.1.1.42:636/??base )
ldap_create
ldap_url_parse_ext(ldaps://10.1.1.42:636/??base)
Enter LDAP Password:
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP 10.1.1.42:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying 10.1.1.42:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
TLS: certificate [CN=sub.example.org,OU=test-ou,O=test-o,ST=test-st,C=DE] is not valid - error -8172:Peer's certificate issuer has been marked as not trusted by the user..
TLS certificate verification: subject: CN=sub.example.org,OU=test-ou,O=test-o,ST=test-st,C=DE, issuer: CN=sub.example.org,OU=test-ou,O=test-o,ST=test-st,C=DE, cipher: AES-128, security level: high, secret key bits: 128, total key bits: 128, cache hits: 0, cache misses: 0, cache not reusable: 0
ldap_open_defconn: successful
ldap_send_server_request
...

Conteúdo do /etc/pam_ldap.conf

ldap_version 3
pam_password crypt
uri ldaps://10.1.1.42:636
base dc=sub,dc=example,dc=org
ssl on
tls_reqcert allow
tls_cacertfile /srv/ldap-cacert.pem
tls_checkpeer no

Conteúdo do /etc/openldap/ldap.conf

TLS_REQCERT allow
TLS_CACERTFILE /srv/ldap-cacert.pem
URI ldaps://10.1.1.42:636/
BASE dc=sub,dc=example,dc=org

Conteúdo do /etc/nslcd.conf

uid nslcd
gid ldap
ssl on
tls_reqcert allow
tls_cacertfile /srv/ldap-cacert.pem
uri ldaps://10.1.1.42:636/
base dc=sub,dc=example,dc=org

Conteúdo do /etc/ldap.conf e do /etc/ldap/ldap.conf :

tls_checkpeer no
tls_reqcert allow
tls_cacertfile /srv/ldap-cacert.pem
uri ldaps://10.1.1.42:636/
base dc=sub,dc=example,dc=org
    
por Lukas Schulze 15.09.2014 / 10:30

2 respostas

2

Migtor me empurrou na direção certa. Obrigada!

Quando removi TLS_REQCERT e verifiquei os erros ldapsearch , também obtive TLS: error: connect - force handshake failure: errno 2 - moznss error -8172 .

Meu certificado de CA é o correto, mas o openldap usa o Mozilla Network Security Services (MozNSS) por padrão para verificar a autoridade. Então eu tenho que adicionar minha CA auto-assinado a este banco de dados.

Editar: Como Migtor apontou em seu comentário abaixo, isso deve se aplicar apenas ao CentOS, RHEL e derivados.

.

Solução

Primeiro copie seu certificado de CA para o cliente (meu caminho: /etc/openldap/cacerts/ldap-cacert.pem)

Depois de instalar o pam_ldap , um banco de dados do MozNSS está localizado em / etc / openldap / certs:

  • executar # certutil -d /etc/openldap/certs -A -n "ldap CA" -t TCu,Cu,Tuw -a -i /etc/openldap/cacerts/ldap-cacert.pem
    • -n "ldap CA" é apenas um nome para identificar seu certificado no banco de dados do MozNSS
  • verifique: # certutil -L -d /etc/openldap/certs

Novo conteúdo do meu /etc/pam_ldap.conf

ldap_version 3
pam_password crypt
uri ldaps://[FQDN-of-my-ldap-server]:636
base dc=sub,dc=example,dc=org
ssl on
tls_cacertdir /etc/openldap/certs

.

E o nss-pam-ldapd?

Isso não é mais necessário. Eu purgei e /etc/nslcd.conf não está mais disponível.

.

Fontes:

por 18.09.2014 / 10:45
5

A pista está na saída do comando ldapsearch :

TLS: certificate [CN=sub.example.org,OU=test-ou,O=test-o,ST=test-st,C=DE] is not valid - error -8172:Peer's certificate issuer has been marked as not trusted by the user..
TLS certificate verification: subject: CN=sub.example.org,OU=test-ou,O=test-o,ST=test-st,C=DE, issuer: CN=sub.example.org,OU=test-ou,O=test-o,ST=test-st,C=DE, cipher: AES-128, security level: high, secret key bits: 128, total key bits: 128, cache hits: 0, cache misses: 0, cache not reusable: 0

Diz: certificate ... is not valid... Peer's certificate issuer has been marked as not trusted by the user . Isso significa que a CA usada para emitir o certificado do servidor não é confiável. Parece-me que o CACERTFILE TLS_CACERTFILE /srv/ldap-cacert.pem não contém o certificado CA correto. Não funcionará até você receber um erro de limpeza ldapsearch output.

Depois que isso for resolvido, você poderá receber erros devido ao CN do certificado. Se fizer isso, tente usar ldaps://sub.example.org/ como URI em vez de ldaps://10.1.1.42/ . Se o seu DNS não resolver esse nome, basta colocá-lo no seu arquivo /etc/hosts (apenas para testes, você deve atualizar seus registros de DNS).

    
por 15.09.2014 / 11:32