Вопрос или проблема
У меня CentOS6 с аутентификацией пользователей через LDAP, использующий OpenLDAP и SSSD. Я пытаюсь заставить пользователя изменить пароль. В соответствии с этим вопросом на ServerFault я попытался установить ShadowLastChange
на 0
, но, казалось, это просто игнорируется, когда пользователь входил в систему через SSH.
В этом вопросе есть предупреждение, что это может вызвать баг с бесконечным циклом запросов на изменение пароля, но я не получил ни одного запроса…
Вопрос содержал другое предложение,
Попробуйте атрибут passwordMustChange
Но когда я пытаюсь использовать его в своем .ldif
файле, я получаю ошибку Неопределенный тип атрибута (17)
.
Я также пытался использовать passwd -e username
для локального Unix-пользователя, просто чтобы убедиться, что это работает, и да – этот локальный пользователь был вынужден изменить пароль при входе через SSH.
ИЗМЕНЕНИЕ
Я нашел наложение Политики паролей
в документации OpenLDAP. Это должно помочь? (если да – это единственный способ решить мою проблему?)
ИЗМЕНЕНИЕ2
Политики паролей
также, похоже, не помогают.
ИЗМЕНЕНИЕ3
А.
На самом деле, Политика паролей работает. Сначала я пытался проверить это, воспользовавшись предложениями поддержки HP – но ppolicy
не отображалась в лог-файле.
Но затем я нашел хороший способ проверить Политику – установить pwdAllowUserChange
в FALSE
, и увидеть, что пользователь не может изменить пароль с помощью passwd
, с сообщением об ошибке от сервера. Или изменить pwdMaxAge
на 1
, войти в систему и увидеть, что пользователю предлагается изменить пароль.
Тем не менее, pwdMustChange: TRUE
все еще не помогает. После того как я изменил пароль пользователя (либо с помощью клиента JXplorer, либо из оболочки Unix ldapmodify
), пользователю не приходит уведомление о необходимости изменить пароль.
Может быть, я не устанавливаю пароль, как ожидалось? В slapo-ppolicy
говорится
pwdMustChange
Этот атрибут указывает, должны ли пользователи менять свои пароли, когда
они впервые связываются с каталогом после того, как пароль был установлен или
сброшен администратором, или нет. Если pwdMustChange имеет значение "TRUE",
пользователи должны менять свои пароли, когда они впервые связываются с
каталогом после установки или сброса пароля администратором.
Похоже, есть разница между установить
и сбросить
пароль. Я пытался установить
. Может быть, сбросить
поможет мне. Как я могу сбросить пароль?
Вот моя политика:
dn: cn=default,ou=policies,dc=***,dc=com
cn: default
objectClass: pwdPolicy
objectClass: person
objectClass: top
pwdAttribute: userPassword
pwdCheckQuality: 2
pwdExpireWarning: 604800
pwdFailureCountInterval: 30
pwdInHistory: 2
pwdLockout: TRUE
pwdLockoutDuration: 172800
pwdMinAge: 0
pwdMinLength: 6
pwdMustChange: TRUE
pwdSafeModify: FALSE
sn: dummy value
pwdAllowUserChange: FALSE
pwdGraceAuthNLimit: 0
pwdMaxFailure: 5
pwdMaxAge: 999999
Б.
(В ответ на вопросы Кэмерона Керра в комментариях)
Это CentOS 6.6. А вот мои файлы /etc/pam.d/system-auth*:
# cat /etc/pam.d/system-auth
#%PAM-1.0
# Этот файл создается автоматически.
# Изменения пользователей будут удалены в следующий раз при запуске authconfig.
auth required pam_env.so
auth sufficient pam_fprintd.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth sufficient pam_sss.so use_first_pass
auth required pam_deny.so
account required pam_unix.so broken_shadow
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok user_unknown=ignore] pam_sss.so
account required pam_permit.so
password requisite pam_cracklib.so try_first_pass retry=3 type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password sufficient pam_sss.so use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
session optional pam_oddjob_mkhomedir.so umask=0077
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_sss.so
# cat /etc/pam.d/system-auth-ac
#%PAM-1.0
# Этот файл создается автоматически.
# Изменения пользователей будут удалены в следующий раз при запуске authconfig.
auth required pam_env.so
auth sufficient pam_fprintd.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth sufficient pam_sss.so use_first_pass
auth required pam_deny.so
account required pam_unix.so broken_shadow
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok user_unknown=ignore] pam_sss.so
account required pam_permit.so
password requisite pam_cracklib.so try_first_pass retry=3 type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password sufficient pam_sss.so use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
session optional pam_oddjob_mkhomedir.so umask=0077
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_sss.so
ИЗМЕНЕНИЕ4
Хорошо, я обнаружил, что если я установлю pwdReset:TRUE
в записи пользователя, он будет вынужден изменить пароль при входе в систему. Я думаю, что это зависит от pwdMustChange: TRUE
в Политике паролей.
Это работает, но я не понимаю, почему это единственное решение, которое я мог найти. (и решение, которое Google не смог мне найти!) Более того, странно, что это изменение должно быть сделано с помощью ldapmodify
– JXplorer даже не показывала мне этот атрибут до того, как я его изменил…
Убедитесь, что атрибуты политики пароля LDAP и атрибуты shadowAccount согласованы (как предварительное условие). Похоже, что sssd не заботится о атрибутах shadowAccount, и ваш maxAge в 99999 соответствует 11,5 дням (примерно).
Ответ или решение
Проблема, с которой вы столкнулись при попытке принудительно заставить пользователя изменить пароль при аутентификации через LDAP с использованием OpenLDAP и SSSD, включает несколько ключевых аспектов, которые требуют внимательного рассмотрения.
Решение проблемы
-
Настройки политики паролей (Password Policies):
- Убедитесь, что конфигурация политики паролей настроена правильно и активирована. Вам необходимо, чтобы атрибуты, такие как
pwdMustChange
,pwdReset
, а также другие атрибуты политики паролей, такие какpwdMaxAge
, были установлены в соответствии с вашими требованиями. - Отметим, что
pwdMustChange
указывает на то, что пользователь должен изменить пароль при первом входе в систему после сброса пароля администратором. Однако, как вы заметили, это может не работать, если пароль не был "сброшен".
- Убедитесь, что конфигурация политики паролей настроена правильно и активирована. Вам необходимо, чтобы атрибуты, такие как
-
Сброс пароля:
- Используйте команду
ldapmodify
для изменения атрибутаpwdReset
наTRUE
для пользователя, чтобы заставить его изменить пароль при следующем входе. Это действительно подтверждает ваше наблюдение о том, что атрибуты политики паролей должны быть правильно связаны с пользователями. - Пример команды:
dn: uid=имя_пользователя,ou=пользователи,dc=***,dc=com changetype: modify replace: pwdReset pwdReset: TRUE
- Это изменение обязательно должно производиться с правами, которые позволяют вам модифицировать записи в LDAP.
- Используйте команду
-
Атрибут
ShadowLastChange
:- Как вы упомянули, использование атрибута
ShadowLastChange
не сработало. Это связано с тем, что при использовании SSSD и LDAP данный атрибут может игнорироваться, и фактическое управление политиками паролей производится черезppolicy
.
- Как вы упомянули, использование атрибута
-
Проверка и тестирование:
- После внесения изменений и настройки политики паролей вам следует выполнить тестирование с использованием пользователей, чтобы убедиться, что изменения вступили в силу.
- Проверьте журнал аутентификации (
/var/log/secure
или аналогичный) на наличие сообщений об ошибках в аутентификации или изменения пароля.
-
Использование JXplorer или других LDAP клиентов:
- Если JXplorer не показывает определенные атрибуты, это возможно из-за настроек видимости или прав доступа в вашем LDAP. Используйте
ldapsearch
для получения полной информации о пользователе и его атрибутах.
- Если JXplorer не показывает определенные атрибуты, это возможно из-за настроек видимости или прав доступа в вашем LDAP. Используйте
Заключение
Ваш подход к проблеме и обнаружение того, что установка pwdReset: TRUE
является решением, совершенно верны. Подобные нюансы в конфигурации могут быть непростыми для выявления, особенно когда документация или информация в Интернете не всегда охватывает все аспекты. Убедитесь, что все настройки актуальны и тестируйте систему после любых изменений, чтобы подтверждать их эффект.
Если у вас есть дополнительные вопросы или требуется дальнейшая помощь — не стесняйтесь обращаться!