LDAP (com ppolicy) erros ao alterar a senha de outro usuário

3

Eu configurei um servidor LDAP com a superposição ppolicy, mas agora estou tendo problemas para redefinir a senha do usuário em alguns casos: se o usuário tiver um login com falha, o atributo pwdFailureTime existe e o ldapmodify falha reclamando que não .

Se minha tentativa de login mais recente tiver sido bem-sucedida, então posso ligar como cn = admin e executar o arquivo ldif:

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

que tem sucesso. No entanto, se a última tentativa de logon foi com uma senha incorreta, ppolicy adiciona um atributo pwdFailureTime à conta e, em seguida, tentar executar o arquivo ldif acima resultados em:

$ 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

Se eu tentar excluir o atributo pwdFailureTime antes de redefinir a senha, obtenho:

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

Na vida real, se um usuário esqueceu sua senha e precisa redefini-la, geralmente tentará recuperar a senha várias vezes, então terá o atributo pwdFailureTime definido. Alguma sugestão?

    
por Anton 09.06.2017 / 17:13

1 resposta

0

Quanto ao rascunho da IETF :

8.2.7. Policy State Updates

If the steps have completed without causing an error condition, the server performs the following steps in order to update the necessary password policy state attributes:

If the value of either pwdMaxAge or pwdMinAge is non-zero, the server updates the pwdChangedTime attribute on the entry to the current time.

If the value of pwdInHistory is non-zero, the server adds the previous password (if one existed) to the pwdHistory attribute. If the number of attributes held in the pwdHistory attribute exceeds the value of pwdInHistory, the server removes the oldest excess passwords.

If the value the pwdMustChange is TRUE and the modification is performed by a password administrator, then the pwdReset attribute is set to TRUE. Otherwise, the pwdReset is removed from the user's entry if it exists.

The pwdFailureTime and pwdGraceUseTime attributes is removed from the user's entry if they exist.

Se não me engano, o LDIF é uma operação atômica, então quando o userPassword é modificado, ele se torna um atributo pwdFailureTime , daí porque quando a modificação de pwdReset parece acionar também a remoção de pwdFailureTime falha.

Por que você precisa definir o pwdReset para TRUE ? Você já redefiniu. Se é para garantir que o usuário deve "redefinir" a senha na primeira conexão:

pode ser que você tente modificar o atributo pwsMustChange para TRUE , que deve definir o atributo pwdReset como TRUE (de acordo com o IETF no qual se baseia a ppolicy do OpenLDAP)

ou pode ser apenas mudar as duas modificações no LDIF poderia fazer o truque.

    
por 14.06.2017 / 12:30

Tags