Долго бился над проблемой корректного обновления паролей для авторизуемых через LDAP пользователей.
Настройки умолчанию позволяли корректно логинится и изменять себе пароль без проблем, но в случае истекания срока действия пароля начинались странности — все необходимые атрибуты проверялись успешно и при логине система корректно рапортовала о необходимости обновления пароля:
You are required to change you LDAP password immediately.,но после столь обнадеживающей фразы процесс смены пароля заканчивался печально
Authentication failed.
Поиск ничего путного не выдавал по данной проблеме, пришлось дебажить и исправлять самостоятельно.
Ищем проблему
Может быть дело в LDAP?
Сначала подозрение пало на некорректно настроенные права доступа в OpenLDAP. Включил полный доступ на запись всем, ситуация не изменилась. При таком поведении, подозрения с LDAP'а были сняты, оставался PAM.
PAM
Просмотрев бегло исходники модуля pam_ldap, и не обнаружив ничего подозрительного начал экспериментировать с общими настройками в /etc/pam.d/common-* В качестве средства дебага, я воспользовался модулем pam_echo для вывода трейсовых сообщений.
В результате проблема локализовалась в account части, ответственной за проверку "протухания" пароля. После того как она отрабатывала для ldap аккаунтов, передача управления в password не происходило.
Решение
Исходный конфиг для common-account при работе unix и ldap аккаунтов в Ubuntu Server выглядит так:
account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so account [success=1 default=die] pam_ldap.so account requisite pam_deny.so account required pam_permit.so
В результате экспериментов оказалось, что некорректо были настроены секция контрольных флагов (contol-flags) для модуля pam_ldap. Для правильной обработки истекшего пароля необходимо, как и в секции pam_unix, добавить указание для обработки new_authtok_reqd
account [success=1 new_authtok_reqd=done default=die] pam_ldap.soПри внесении данной правки, при попытке залогиниться пользователем с истекшим паролем, форма логина будет радовать нас предложением ввести новый пароль. Стоит отметить что использование стандартной директивы sufficient вместо детального указания отдельных флагов тоже исправляет проблему с передачей управления дальше.
Проблема и её решение работают и в других дистрибутивах. Так в ALT Легкий и в ПСПО настройки по умолчанию также не позволяют менять пароль при его "протухании" и исправляются аналогичным образом.
Спасибо!
ОтветитьУдалить