更改其他用户密码时出现 LDAP(使用 ppolicy)错误

更改其他用户密码时出现 LDAP(使用 ppolicy)错误

我已经使用 ppolicy 覆盖设置了一个 LDAP 服务器,但是现在在某些情况下重置用户密码时遇到了麻烦:如果用户登录失败,则 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 属性。有什么建议吗?

答案1

至于IETF 草案状态 :

8.2.7. 策略状态更新

如果这些步骤已完成且未导致错误情况,则服务器将执行以下步骤以更新必要的密码策略状态属性:

如果 pwdMaxAge 或 pwdMinAge 的值非零,则服务器将条目上的 pwdChangedTime 属性更新为当前时间。

如果 pwdInHistory 的值不为零,则服务器会将前一个密码(如果存在)添加到 pwdHistory 属性中。如果 pwdHistory 属性中保存的属性数量超出 pwdInHistory 的值,则服务器会删除最旧的多余密码。

如果 pwdMustChange 值为 TRUE,且修改由密码管理员执行,则将 pwdReset 属性设置为 TRUE。否则,如果存在 pwdReset,则将其从用户条目中删除。

如果存在 pwdFailureTime 和 pwdGraceUseTime 属性,则将其从用户条目中删除。

如果我没记错的话,LDIF 是原子操作,所以当userPassword修改时,它会链接到删除该pwdFailureTime属性,因此当修改它pwdReset似乎也会触发删除pwdFailureTime失败时。

为什么需要将 设置pwdResetTRUE?您已经重置了它。如果是为了确保用户必须在第一次连接时“重置”自己的密码:

可以尝试将pwsMustChange属性修改为TRUE,这应该将属性设置pwdResetTRUE(根据基于 OpenLDAP 策略的 IETF)

或者可能只需切换 LDIF 上的两个修改即可解决问题。

相关内容