Ошибки LDAP (с ppolicy) при изменении пароля другого пользователя

Я настроил сервер LDAP с наложением ppolicy, но теперь у меня в некоторых случаях возникают проблемы со сбросом пароля пользователя: если у пользователя произошел сбой входа в систему, то существует атрибут pwdFailureTime и ldapmodify не может пожаловаться, что это не так.

Если моя последняя попытка входа в систему была успешной, то Я могу выполнить привязку как cn = admin и запустить файл ldif:

dn: uid=anton,ou=accounts,dc=[redacted],dc=ca
changetype: modify
replace: userPassword
userPassword: foobar
-
replace: pwdReset
pwdReset: TRUE

, что успешно. Однако, если последняя попытка входа была с неправильным паролем, ppolicy добавляет к учетной записи атрибут pwdFailureTime, а затем попытка запустить указанный выше файл ldif приводит к следующему:

$ ldapmodify -x -D "cn=admin,dc=[redacted],dc=ca" -W -H ldap:// -f pwreset.ldif
Enter LDAP Password: 
modifying entry "uid=anton,ou=accounts,dc=[redacted],dc=ca"
ldap_modify: No such attribute (16)
    additional info: modify/delete: pwdFailureTime: no such attribute

Если я попытаюсь удалить атрибут pwdFailureTime перед сбросом пароля , тогда я получаю:

ldap_modify: Constraint violation (19)
    additional info: pwdFailureTime: no user modification allowed

В реальной жизни, если пользователь забыл свой пароль и нуждается в его сбросе, он, как правило, пытается вспомнить пароль несколько раз, поэтому для него будет установлен атрибут pwdFailureTime. Какие-либо предложения?

3
задан 9 June 2017 в 18:13
1 ответ

Что касается IETF, то проект гласит :

8.2.7. Обновления состояния политики

Если шаги завершены, не вызвав условия ошибки, то сервер выполняет следующие действия, чтобы обновить необходимый атрибуты состояния политики паролей:

Если значение pwdMaxAge или pwdMinAge не равно нулю, то сервер обновляет атрибут pwdChangedTime на записи к текущему времени.

Если значение pwdInHistory ненулевое, то сервер добавляет предыдущее пароль (если он существовал) к атрибуту pwdHistory. Если номер атрибутов, содержащихся в атрибуте pwdHistory, превышает значение параметра pwdInHistory, сервер удаляет самые старые избыточные пароли.

Если значение pwdMustChange равно TRUE и модификация равна выполняемый администратором пароля, то атрибут pwdReset имеет вид установлено на TRUE. В противном случае pwdReset удаляется из записи пользователя. если он существует.

Атрибуты pwdFailureTime и pwdGraceUseTime убираются из Если я не ошибаюсь, LDIF является атомарной операцией, поэтому при изменении userPassword он цепляется за удаление атрибута pwdFailureTime, следовательно, почему, когда модификация pwdReset, которая, кажется, запускает также и удаление pwdFailureTime, не удается.

Зачем нужно устанавливать pwdReset на TRUE ? Вы уже перезагрузили его. Если это необходимо для того, чтобы при первом подключении пользователь сам "сбросил" пароль : вместо этого можно попробовать изменить атрибут pwsMustChange на TRUE, который должен установить атрибут pwdReset на TRUE (в соответствии с IETF, на котором основана политика OpenLDAP)

, или можно просто переключить две модификации в LDIF, что может помочь.

0
ответ дан 3 December 2019 в 07:53

Теги

Похожие вопросы