389-ds на сервере Ubuntu 12.04 и работает. Включено Fine-grained password policies
и User must change password after reset
для всего дерева. Впоследствии создал тестового пользователя.
Вход из клиента CentOS: пользователю предлагается сменить пароль: You are required to change your password immediately.
Вход из клиента Ubuntu: пользователь входит в систему, нет подсказки.
Файлы конфигурации клиента CentOS скопированы на клиент Ubuntu, а именно /etc/pam_ldap.conf (в Ubuntu это /etc/ldap.conf), /etc/nslcd.conf, /etc/openldap/ldap.conf (в Ubuntu / etc / ldap / ldap.conf) - без кубиков.
Оба клиента успешно аутентифицируются, оба могут изменять пароли пользователей.
Все логины являются терминальными, без графического интерфейса.
PAM на обоих клиентах:
Ubuntu:
/etc/pam.d/common-account
аккаунт [success = 2 new_authtok_reqd = done default = ignore]
Учетная запись pam_unix.so [success = 1 default = ignore] pam_ldap.so реквизит учетной записи pam_deny.so требуется учетная запись
pam_permit.so
/etc/pam.d/common-auth
auth [success = 2 default = ignore] pam_unix.so nullok_secure auth [success = 1 default = ignore] pam_ldap.so use_first_pass auth
реквизит pam_deny.so требуется авторизация
pam_permit.so auth необязательный pam_cap.so
/etc/pam.d/common-password
пароль [success = 2 default = ignore] pam_unix.so неясный пароль sha512 [success = 1 user_unknown = ignore default = die]
pam_ldap.so try_first_pass пароль реквизит
pam_deny.so требуется пароль
pam_permit.so пароль необязательный pam_gnome_keyring.so
CentOS
/etc/pam.d/system-auth-ac
#% PAM-1.0 требуется аутентификация pam_env.so auth достаточная pam_fprintd.so auth достаточная pam_unix.so nullok try_first_pass auth Requisite pam_succeed_if.so uid> = 500 тихая аутентификация достаточная pam_ldap.so use_first_pass auth
требуется pam_deny.soтребуется учетная запись pam_unix.so broken_shadow account
достаточно учетной записи pam_localuser.so достаточно
pam_succeed_if.so uid <500 тихая учетная запись [default = bad success = ok user_unknown = ignore] Требуется учетная запись pam_ldap.so
pam_permit.soтребуемый пароль pam_cracklib.so try_first_pass retry = 3 type = пароль достаточный pam_unix.so sha512 shadow nullok try_first_pass use_authtok пароль достаточный pam_ldap.so use_authtok пароль требуется pam_deny.so
сеанс необязательный pam_keyinit.so требуется отменить сеанс
pam_limits.so сеанс необязательный сеанс pam_mkhomedir.so
[success = 1 default = ignore] Служба pam_succeed_if.so в crond тихом сеансе use_uid требуется сеанс pam_unix.so необязательно
pam_ldap.so
/etc/pam.d/passwd-auth-ac
#% PAM-1.0 требуется авторизация pam_env.so auth достаточная pam_unix.so nullok try_first_pass auth Requisite
pam_succeed_if.so uid> = 500 достаточно тихой аутентификации
pam_ldap.so use_first_pass требуется авторизация pam_deny.soтребуется учетная запись pam_unix.so broken_shadow account
достаточно учетной записи pam_localuser.so достаточно
pam_succeed_if.so uid <500 тихая учетная запись [default = bad success = ok user_unknown = ignore] Требуется учетная запись pam_ldap.so
pam_permit.soтребуемый пароль pam_cracklib.so try_first_pass retry = 3 type = пароль достаточный pam_unix.so sha512 shadow nullok try_first_pass use_authtok пароль достаточный pam_ldap.so use_authtok пароль требуется pam_deny.so
сеанс необязательный pam_keyinit.so требуется отменить сеанс
pam_limits.so сеанс необязательный сеанс pam_mkhomedir.so
[success = 1 default = ignore] Служба pam_succeed_if.so в crond тихом сеансе use_uid требуется сеанс pam_unix.so необязательно
pam_ldap.so
Одно отличие состоит в том, что на Ubuntu у меня не установлен cracklib. Планирую сделать это позже, сейчас просто тестирую.
Интересно, присоединяется ли клиент LDAP Ubuntu к Windows AD, как он получает от него уведомления об истечении срока действия пароля. Должно быть что-то похожее, но я не могу понять.
Как заставить клиента Ubuntu соблюдать / подчиняться политике паролей? Почему я не вижу You are required to change your password immediately.
подскажите при входе в систему, учитывая, что такая же конфигурация работает с CentOS?
Спасибо!
Счастливых праздников!
Я играл с 389-ds на Ubuntu для рабочего проекта и столкнулся с той же проблемой.
Я не уверен, что копирую конфигурацию из CentOS - у меня не было под рукой коробки.
Но когда я посмотрел и прочитал PAM, оказалось, что все в файле /etc/pam.d/common-account.
pam_unix.so был выше pam_ldap.so, и у него также было [success = 2 default = ignore], что означает, что в случае успеха пропустить следующие два правила и для всего остального игнорировать строку.
Теперь, поскольку учетные записи LDAP являются действительными учетными записями UNIX, поскольку мы добавили ldap в /etc/nsswitch.conf, это правило вернет успех, и модуль pam_ldap.so никогда не запустится.
Чтобы обойти это, мой /etc/pam.d/common-account теперь выглядит так:
# here are the per-package modules (the "Primary" block)
account [success=1 default=bad] pam_succeed_if.so user ingroup auth-access quiet
account [success=reset default=bad] pam_succeed_if.so uid <= 500 quiet
account [success=2 user_unknown=ignore default=ok] pam_ldap.so
account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so
# here's the fallback if no module succeeds
account requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
account required pam_permit.so
# and here are more per-package modules (the "Additional" block)
# end of pam-auth-update config
Как видите, я также добавил несколько правил, чтобы разрешить пользователям из группы LDAP «auth-access» или пользователей системы с UID ниже 500 считаться действительными учетными записями.
И немного поясню:
Мы попали в первое правило
account [success=1 default=bad] pam_succeed_if.so user ingroup auth-access quiet
Что будет успешным, если пользователь находится в этой группе, и если это так, мы пропускаем следующую строку, поскольку знаем, что это не удастся (они действительный пользователь LDAP, поэтому у них не будет системного UID ниже 500) - если это не так не удалось, вернуть ошибку (плохо).
Затем следующее правило, если оно не было пропущено
account [success=reset default=bad] pam_succeed_if.so uid <= 500 quiet
Поэтому, если это успешно (поскольку UID ниже 500), сбросьте значение ошибки, установленное вышеуказанным модулем, потому что они не будут частью этой группы LDAP.
И важная часть
account [success=2 user_unknown=ignore default=ok] pam_ldap.so
Проверьте сервер LDAP на статус учетной записи - если это удастся, мы знаем, что пользователь LDAP является действительным пользователем UNIX, поэтому пропустите следующие две строки (чтобы перейти к pam_permit.so и позволить пользователю войти в систему). Если пользователь неизвестен серверу LDAP, проигнорируйте эту строку и перейдите к следующей - и для всех других статусов «ok» означает, что можно передавать эти коды возврата как есть, что будет передавать такие вещи, как срок действия пароля и т. Д. .
А потом:
account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so
Если мы попали в это правило, мы не были действующим пользователем LDAP, поэтому проверьте, действуем ли мы как системный пользователь - в случае успеха пропустите следующую 1 строку (приведет нас к pam_permit.so). В противном случае игнорируйте, что приведет нас к pam_deny.so.
Надеюсь, это поможет объяснить немного больше - документ, который помог мне, если меня было не очень легко понять, был: http://uw714doc.sco.com/en/SEC_pam/pam-4.html
С уважением, iamacarpet