При настройке pam_ldap в Debian Jessie при изменении пароля конечного пользователя используется rootbinddn, обходя наложение ppolicy OpenLDAP. Это позволяет конечным пользователям изменять свои пароли без соответствия политике паролей, определенной в OpenLDAP, например, они могут повторять пароли и игнорировать минимальную длину пароля. Я хотел бы, чтобы изменения пароля выполнялись с использованием DNS конечных пользователей с соблюдением политик паролей.
Каждая соответствующая конфигурация, которую я могу придумать, соответствует моей рабочей конфигурации в Debian Squeeze / Wheezy, но эта проблема возникает во всех протестированных установках Debian Jessie.
Я создал ошибку Debian, но продолжаю исследовать возможность (вероятность) того, что это ошибка конфигурации. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=790488
Блоки соответствующих файлов конфигурации выглядят следующим образом:
/etc/pam_ldap.conf и libnss-ldap.conf идентичны:
debug 0
base dc=internal,dc=net
uri ldaps://ldap-server/
ldap_version 3
rootbinddn cn=admin,dc=internal,dc=net
port 636
pam_password exop
ssl on
tls_checkpeer yes
tls_cacertfile /etc/ssl/certs/ldap-server.pem
/etc/pam.d/common-passwd:
password [success=2 default=ignore] pam_unix.so obscure sha512
password [success=1 user_unknown=ignore default=die] pam_ldap.so try_first_pass
password requisite pam_deny.so
password required pam_permit.so
/etc/nsswitch.conf:
passwd: compat ldap
group: compat ldap
shadow: compat
То, что пароль меняется с помощью rootbinddn, подтверждается журналами аудита на сервере OpenLDAP, примером записи смены пароля с сервера Debian Wheezy, за которым следует сервер Debian Jessie:
# modify 1435351337 dc=internal,dc=net uid=wrttest,ou=People,dc=internal,dc=net IP=172.16.11.141:48084 conn=1066
dn: uid=wrttest,ou=People,dc=internal,dc=net
changetype: modify
replace: userPassword
userPassword:: e1NTSEFUdIkewk5eUlOaFA4bmMvMzlvVjg=
-
replace: pwdChangedTime
pwdChangedTime: 20150626204217Z
-
delete: pwdHistory
pwdHistory: 20150327201545Z#1.3.6.1.4.1.1466.115.121.1.40#38#{SSHA}NxOHHViV
zwlUZs2TKWKJsdatrfeO3OF
-
add: pwdHistory
pwdHistory: 20150626204217Z#1.3.6.1.4.1.1466.115.121.1.40#38#{SSHA}DJJkErb9
CEyPPPYYYAAAAESjR3wDqRj9
-
replace: entryCSN
entryCSN: 20150626204217.320385Z#000000#001#000000
-
replace: modifiersName
modifiersName: uid=wrttest,ou=People,dc=internal,dc=net
-
replace: modifyTimestamp
modifyTimestamp: 20150626204217Z
-
# end modify 1435351337
# modify 1435595556 dc=internal,dc=net cn=admin,dc=internal,dc=net IP=172.16.11.158:34413 conn=1080
dn: uid=wrttest,ou=People,dc=internal,dc=net
changetype: modify
replace: userPassword
userPassword:: e1HUHJFIzFeQHpacEJQGd2VvU08=
-
replace: pwdChangedTime
pwdChangedTime: 20150629163236Z
-
delete: pwdHistory
pwdHistory: 20150626204102Z#1.3.6.1.4.1.1466.115.121.1.40#38#{SSHA}Xi1p3Z44556K5c
5tcFOeLaBIL1i
-
add: pwdHistory
pwdHistory: 20150629163236Z#1.3.6.1.4.1.1466.115.121.1.40#38#{SSHA}13lTJmGHfgf
Y45672xoyuVVswcgIP
-
replace: entryCSN
entryCSN: 20150629163236.253982Z#000000#001#000000
-
replace: modifiersName
modifiersName: cn=admin,dc=internal,dc=net
-
replace: modifyTimestamp
modifyTimestamp: 20150629163236Z
-
# end modify 1435595556
Пытаясь определить, откуда возникла проблема, я понизил версию пакета Debian Jessie до версии libpam-ldap для Wheezy. Я внес различные изменения в конфигурацию PAM, которые либо не устранили проблему, либо полностью нарушили аутентификацию LDAP. Включив отладку в pam_ldap, оставив ее выключенной в libnss-ldap, я убедился, что маршрутизация смены пароля обрабатывается pam_ldap, а не libnss-ldap. Я просмотрел код пакета pam_ldap, чтобы узнать, могу ли я определить, где что-то идет не так.
Обновление: в попытке отладить это, у меня есть работающая система Jessie, в которой я понизил следующие пакеты, чтобы попытаться определить, какой пакет вызывает проблему: libpam-modules 1.1.3-7.1 libpam-modules-run 1.1.3- 7.1 libpam-runtime 1.1.3-7.1 passwd 1: 4.1.5.1-1 libpam0g 1.1.3-7.1 libpam-ldap 184-8.6
Я также попытался удалить libpam-systemd
Обновление 2: после различных тестов я определил, что проблема связана с libldap. Если система wheezy обновлена до версии 2.4.31 + действительно2.4.40 + dfsg-1 ~ bpo70 + 1, она начинает проявлять такое поведение. И если система jessie понижается до версии 2.4.31-2, проблема перестает проявляться. Я отправил обновление для ошибки Debian и попытался переназначить его на libldap-2.4-2
Ошибка, которая вызывает эту конкретную проблему, существует в исходном коде libpam-ldap в течение длительного времени, но ее эффект проявился только после исправления отдельной ошибки в библиотеке gnutls, которую использует libldap-2.4-2. Подробности можно найти в разъясняющем письме от Райана Тэнди на странице ошибок Debian для этой проблемы. ( Ошибка Debian 790488 ).
Я уже знал, что libpam-ldap активно не разрабатывалась, но она предоставляла функции, которые упускала libpam-ldapd (в частности, поддержка политики паролей). Я решил, что лучшим вариантом было бы фактически перенести более новые системы на систему sssd, которая находится в стадии активной разработки, поддерживает наложения политик паролей и другие функции.
Прекратите использовать RootDN каталога в качестве DNS для учетной записи root локальной системы. Rootdn каталога не подлежит контролю доступа. Используйте (при необходимости создайте) запись DNS с соответствующими разрешениями на вашем сервере LDAP, чтобы правильно изменять пароли.