Я пытаюсь настроить аутентификацию LDAP с помощью STARTTLS (я читал, что TLS/ldaps устарела). Кстати, незашифрованная аутентификация LDAP работает, но это не то, что я хочу.
Мне удалось настроить сервер каталогов LDAP, используя это руководство, начиная со свежей установки Ubuntu Server 16.10 (2 машины VirtualBox, одна для сервера, одна для клиента), и выполнил каждый шаг, включая необязательный последний шаг, чтобы разрешить только соединения TLS.
Теперь я могу запускать команды ldapwhoami
и ldapsearch
с аргументом -Z
как на сервере, так и на клиенте. Так что, похоже, LDAP-соединения с сервером через STARTTLS работают. Когда я пытаюсь подключиться без -Z
я получаю следующую (ожидаемую) ошибку:
Confidentiality required (13)
Additional information: TLS confidentiality required
Теперь я хочу использовать сервер для аутентификации пользователей LDAP на клиенте. Для этого я выполнил следующие команды на клиенте:
sudo apt-get install ldap-auth-client
# LDAP Server: ldap://ldap.example.com
# Base DN: dc=example,dc=com
# Bind DN: cn=admin,dc=example,dc=com
sudo auth-client-config -t nss -p lac_ldap
sudo vi /usr/share/pam-configs/mkhomedir
# changed "Default: no" to "Default: yes"
# changed "optional" to "required"
sudo pam-auth-update
# enabled "Create home directory on login"
Теперь, когда я хочу изменить пользователя на клиенте с помощью su - otheruser
следующее сообщение об ошибке добавляется в /var/log/auth.log
на клиенте:
nss_ldap: failed to bind to LDAP server ldap://ldap.example.com: Confidentiality required
Это то же сообщение об ошибке, что и при попытке запустить команды LDAP без STARTTLS (см. Выше), поэтому проблема заключается в том, что nss_ldap
неправильно настроен для использования STARTTLS.
Я попытался (безуспешно) добавить записи в /etc/ldap/ldap.conf
. Теперь это выглядит так:
BASE dc=example,dc=com
URI ldap://ldap.example.com
TLS_CACERT /etc/ldap/ca_certs.pem
LDAP_VERSION 3
SSL start_tls
TLS_REQCERT allow