如何在ApacheDS上解锁用户

时间:2015-09-02 09:00:23

标签: ldap apacheds password-policy

我设置了启用了默认密码策略的ApacheDS。对于测试建议我通过输入错误的凭证多次锁定一个简单的User(objectClass =使用某个自定义User-objectClass扩展的Person)。正如我所料,用户已被锁定(错误消息:用户被永久锁定)。

现在的问题是:如何再次解锁用户?有没有更好的方法,然后再删除并添加?

我尝试使用扩展用户(objectClass = pwdPolicy),但在用户被锁定时没有添加pwd *属性。

4 个答案:

答案 0 :(得分:7)

最近,我在工作中遇到了同样的问题。但是,似乎互联网上没有答案。最后,我通过查看此文档找到了答案:

Password Policy for LDAP Directories draft-behera-ldap-password-policy

  • 在第5.3.3节:pwdAccountLockedTime
  

此属性包含用户帐户被锁定的时间。一个
  锁定帐户意味着密码可能不再用于
  认证。 000001010000Z值表示该帐户已为
  永久锁定, 只有密码管理员可以解锁   帐户

  • 在第5.2.12节:pwdLockoutDuration
  

此属性保存密码不能的秒数   由于太多的失败绑定尝试,用于进行身份验证。如果
  此属性不存在,或 如果值为0,则为密码
  在通过密码重置之前不能用于验证   管理员

通过以上两节,我们可以假设我们应该与管理员连接到ApacheDS服务器(默认情况下:uid = admin,ou = system,password = secret),并删除用户的userPassword属性。通过这种方式,永久锁定的用户可以解锁。

我练习了这种闷热,效果很好。

我建议您为 pwdLockoutDuration 属性设置值,在这种情况下,用户无法永久锁定。

了解更多信息:

ApacheDS password Policy

答案 1 :(得分:4)

使用ApacheDS并以管理员身份登录,找到用户,右键单击并选择" Fetch->获取操作属性"。现在pwdAccountLockedTime可见,您可以将其删除以解锁用户

答案 2 :(得分:2)

Mister's的答案非常适合解锁帐户,如果您想为单个用户设置pwdLockoutDuration(假设用户已经实现了objectClass pwdPolicy

还有一个全局配置文件:

ou=config
  *  ads-directoryServiceId=<default>
    * ou=interceptors
       * ads-interceptorId=authenticationInterceptor
          * ou=passwordPolicies

我们可以在此设置默认密码策略:

enter image description here

由于我的只是一个测试服务器,因此我已将ads-pwdlockout设置为FALSE,从而完全禁用了锁定功能。有关配置密码策略的更多信息,请阅读official docs

答案 3 :(得分:0)

作为参考,这是通过java在服务器上启用它的方式:

AuthenticationInterceptor authenticationInterceptor = new AuthenticationInterceptor();      
PasswordPolicyConfiguration config = new PasswordPolicyConfiguration();
config.setPwdLockout(true);
authenticationInterceptor.setPwdPolicies(config);      

然后可以编写客户端方法,以启用/禁用特定帐户,类似于:

 public void disableUser(String dn) throws LdapException, UnsupportedEncodingException 
 {
   Modification disablePassword = new DefaultModification( 
   ModificationOperation.REPLACE_ATTRIBUTE, "pwdAccountLockedTime","000001010000Z" );
   connection.modify(dn,disablePassword);
 }   

 public void enableUser(String dn) throws LdapException, UnsupportedEncodingException 
 {    
   Modification disablePassword = new DefaultModification(ModificationOperation.REMOVE_ATTRIBUTE, "pwdAccountLockedTime");
   connection.modify(dn,disablePassword);
 }