web-dev-qa-db-ja.com

pam_ldapおよびldapsがLDAPサーバーに接続できない

CentOSホストシステムでLDAPによる認証を許可しようとしています。しかし、pam_ldapから常にCannot contact LDAP serverエラーが表示されます。

LDAPサーバーはping可能で、認証はldap://では完全に機能しますが、ldaps://では機能しません。また、debian OSではldaps://と完全に連携しますが、CentOSでは連携しません。

$ ldapsearch ...でもCa n't contactエラーが発生しましたが、設定TLS_REQCERT allow/etc/openldap/ldap.confにあります。ただし、これを/etc/pam_ldap.confに設定しても効果はありません。

私がしたステップ:

  • $ yum install pam_ldap nss-pam-ldapd openldap-clients
  • $ authconfig-tuiおよび認証のためにLDAPをアクティブ化
  • 変更/ etc/pam_ldap
  • 変更/ etc/nslcd.conf
  • 変更/ etc/openldap/ldap.conf
  • 作成/ etc/ldap/ldap.conf(フォールバック構成ファイルのパスであることがどこかで読み取られます)
  • 作成/ etc/ldap.conf(/etc/ldap/ldap.confと同じ内容)
  • nscdおよびnslcdサービスを再起動します。

その他の情報:

  • lDAP-ServerからのCA-Certは誰でも読み取り可能です。
  • iptablesが無効になっています

/ var/log/secureのIPも混乱しています。そこでは10.1.1.1からtestuserのパスワードが失敗しましたとありますが、LDAPサーバーの構成済みIPは10.1.1.42で、ホストIPは10.1.1.27です。とにかく、私がuri ldap://10.1.1.42を使用し、ssl on行にコメントを付けると、認証は魅力のように機能します。

何か案は?

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

$ ldapsearch -v -H ldaps://10.1.1.42/ -D cn = admin、dc = sub、dc = example、dc = org -W -x -b dc = sub、dc = example、 dc = org -d1 ldaps //が機能しているかどうかを確認します。 (はい、うまくいきます)

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
...

/ 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

/ 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

/ 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

/ etc/ldap.confおよび/ 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
3
Lukas Schulze

Migtorは私を正しい方向に押しました。ありがとうございました!

TLS_REQCERTを削除し、ldapsearchエラーをチェックすると、TLS: error: connect - force handshake failure: errno 2 - moznss error -8172

私のCA証明書は正しいものですが、openldapは認証局をチェックするためにデフォルトでMozilla Network Security Services(MozNSS)を使用します。そのため、このデータベースに自己署名CAを追加する必要があります。

編集:Migtorが彼のコメントで指摘したように、これはCentOS、RHELおよび派生物にのみ適用されます。

解決

まず、CA証明書をクライアントにコピーします(私のパス:/etc/openldap/cacerts/ldap-cacert.pem)

pam_ldapをインストールした後、MozNSSデータベースは/ etc/openldap/certsにあります:

  • 実行# certutil -d /etc/openldap/certs -A -n "ldap CA" -t TCu,Cu,Tuw -a -i /etc/openldap/cacerts/ldap-cacert.pem
    • -n "ldap CA"は、MozNSSデータベースで証明書を識別するための単なる名前です
  • 確認: # certutil -L -d /etc/openldap/certs

My/ 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

Nss-pam-ldapdはどうですか?

これはもう必要ありません。削除すると、/ etc/nslcd.confが使用できなくなります。

出典:

2
Lukas Schulze

手がかりは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

それは言う:certificate ... is not valid... Peer's certificate issuer has been marked as not trusted by the user。つまり、サーバー証明書の発行に使用されるCAは信頼されていません。 CACERTFILE TLS_CACERTFILE /srv/ldap-cacert.pemには正しいCA証明書が含まれていません。エラーclean ldapsearch出力が表示されるまで機能しません。

それが解決されると、証明書のCNが原因でエラーが発生する可能性があります。もしそうなら、ldaps://sub.example.org/の代わりにURIとしてldaps://10.1.1.42/。 DNSがその名前を解決しない場合は、/etc/hostsファイル(テストのためだけに、DNSレコードを更新する必要があります)。

5
Migtor