Я пытаюсь разрешить аутентификацию через LDAP в хост-системе CentOS. Но я всегда получаю Не удается связаться с сервером LDAP ошибка от pam_ldap.
Сервер LDAP доступен для проверки связи, и аутентификация отлично работает с ldap: //, но не с ldaps: //. Он также отлично работает с ldaps: // в ОС Debian, но не в CentOS.
Я получил Не могу связаться ошибка также с $ ldapsearch ... но я исправил настройку TLS_REQCERT разрешить в /etc/openldap/ldap.conf. Но установка этого параметра для /etc/pam_ldap.conf не помогает.
Шаги, которые я сделал:
Дополнительная информация:
Также сбивает с толку IP в / var / журнал / безопасный. Там сказано Не удалось ввести пароль для testuser из 10.1.1.1, но настроенный IP-адрес для LDAP-сервера - 10.1.1.42, а IP-адрес хоста - 10.1.1.27. В любом случае, если я использую uri ldap: //10.1.1.42 и прокомментирую строку ssl на аутентификация работает как шарм.
Любые идеи?
.
Пытаюсь пройти аутентификацию через pam, / var / журнал / безопасный
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
Подсказка в 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
. Это означает, что ЦС, используемый для выдачи сертификата сервера, не является доверенным. Мне кажется, что CACERTFILE TLS_CACERTFILE /srv/ldap-cacert.pem
не содержит правильный сертификат CA. Это не будет работать, пока вы не получите сообщение об ошибке. ldapsearch
вывод.
Как только это будет решено, вы можете получить ошибки из-за CN сертификата. Если да, попробуйте использовать ldaps://sub.example.org/
как URI вместо ldaps://10.1.1.42/
. Если ваш DNS не разрешает это имя, просто введите его в свой /etc/hosts
файл (просто для тестирования вам следует обновить записи DNS).
Мигтор подтолкнул меня в правильном направлении. Спасибо!
Когда я удалил TLS_REQCERT и проверил ldapsearch ошибки я тоже получил TLS: error: connect - force handshake failure: errno 2 - moznss error -8172
.
Мой сертификат CA правильный, но openldap по умолчанию использует Mozilla Network Security Services (MozNSS) для проверки полномочий. Поэтому мне нужно добавить свой самозаверяющий ЦС в эту базу данных.
Редактировать: Как указал 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
# certutil -L -d /etc/openldap/certs
Новое содержание моего /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
.
Это больше не требуется. Я очистил его, и /etc/nslcd.conf больше не доступен.
.
Источники: