2017-08-03 102 views
0

我已经在Ubuntu 14.04上安装了ldap 2.4.3。我配置了pwdPolicy覆盖,当用户更改他/她自己的密码以及管理员更改密码时,它将工作。问题是,当管理员更改密码时,策略不被遵守。因此,我创建了另一个名为usermanagement的帐户,并将该dn添加到oclAccess。我可以修改使用usermanagement帐户尝试过的所有字段,但用户密码除外。ldap oclAccess似乎不适用于pwdPolicy

当运行ldappasswd我得到Insufficient access (50)

这是我的olcAccess:

olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by dn="cn=admin,dc=zed,dc=com" write by dn="cn=usermanagement,dc=zed,dc=com" write by anonymous auth by * none 
olcAccess: {1}to dn.base="" by * read 
olcAccess: {2}to * by self write by dn="cn=admin,dc=zed,dc=com" write by dn="cn=usermanagement,dc=zed,dc=com" write by * read 

编辑

我已经启用调试,然后执行ldappasswd -H ldap://localhost -x -D "uid=luis,ou=users,dc=zed,dc=com" -W -S "uid=vixian,ou=users,dc=zed,dc=com"。日志显示:

983c0f8 bdb_dn2entry("cn=passworddefault,ou=policies,dc=zed,dc=com") 
5983c0f8 => bdb_entry_get: found entry: "cn=passworddefault,ou=policies,dc=zed,dc=com" 
5983c0f8 bdb_entry_get: rc=0 
5983c0f8 change password must use DELETE followed by ADD/REPLACE 
5983c0f8 send_ldap_result: conn=1004 op=1 p=3 
5983c0f8 send_ldap_result: err=50 matched="" text="Must supply old password to be changed as well as new one" 
5983c0f8 send_ldap_extended: err=50 oid= len=0 
5983c0f8 send_ldap_response: msgid=2 tag=120 err=50 

我又试图使用ldapmodify可以删除的userPassword,它是成功的,但更换或增加生产否认了相同的结果权限。

我已经更新了olcAccess以下@ejp建议:

olcAccess: {0}to attrs=userPassword,shadowLastChange 
    by group/groupOfUniqueNames/uniqueMember.exact="cn=itinst,ou=groups,dc=zed,dc=com" write 
    by anonymous auth 
    by self write 
olcAccess: {1}to dn.base="" by * read 
olcAccess: {2}to * 
    by self write 
    by group/groupOfUniqueNames/uniqueMember.exact="cn=itinst,ou=groups,dc=zed,dc=com" write 
    by users read by anonymous search 

回答

1

的问题是,当管理员更改密码的政策并没有遵守。

managerDN更改密码'不遵守政策'。你不应该使用任何东西managerDN这就是服务器运行的帐号,当然它可以做任何事情。您应该在DIT中定义一个单独的admin帐户,并为其提供适当的访问权限,正如我在以下示例中的整个ldap admins组中所述。

它与您的olcAccess没有任何关系。查看文档以了解如何正确执行此操作。我有:

olcAccess {0}to attrs=userPassword 
    by dn.base="cn=replicator,dc=verismart,dc=com,c=us" write 
    by group/groupOfUniqueNames/uniqueMember.exact="cn=ldap admins,ou=groups,dc=verismartlabs,dc=com" write 
    by group/groupOfUniqueNames/uniqueMember.exact="cn=applications,ou=groups,dc=verismartlabs,dc=com" write 
    by anonymous auth by self write 
olcAccess {1}to dn.base="" by * read 
olcAccess {2}to * 
    by self write 
    by dn.base="cn=replicator,dc=verismart,dc=com,c=us" write 
    by group/groupOfUniqueNames/uniqueMember.exact="cn=ldap admins,ou=groups,dc=verismartlabs,dc=com" write 
    by group/groupOfUniqueNames/uniqueMember.exact="cn=applications,ou=groups,dc=verismartlabs,dc=com" write 
    by users read 
    by anonymous search 

编辑当你正在使用的ppolicy覆盖:

  1. 您应该使用-e ppolicy参数ldappasswd,所以你可以看到,如果任何扩展响应。
  2. 用户还必须使用-a选项至ldappasswd指定旧密码,如日志建议或-A以使其提示您。更改日志说change password must use DELETE followed by ADD/REPLACE,这意味着你必须提供旧密码和新密码。 ldappasswd将为旧值发送DELETE,为新值发送ADD或REPLACE。
  3. 如何让管理员在不知道旧密码的情况下做到这一点是另一个问题,看起来......通过应用程序为我工作,但我从来没有通过ldappasswd完成。也许-e ppolicy也是这个答案。

EDIT 2这是因为你在你的密码策略有pwdSafeModify=TRUE。这种无用的设置使得管理员无法在不知道旧密码的情况下重置密码,并且如果知道旧密码,则根本不需要管理员重置。我已将其关闭,但随后所有密码仅由Java代码更改:一个用于用户自己,另一个用于管理员,因此我可以自己执行pwdSafeModify

+0

我已经从olcAccesss中删除了管理员;也许我的配置被格式化的缺乏所误导,但匿名没有被赋予写入权限。我已经在DIT中添加了一个帐户,但仍然无法访问。 – Luis

+0

好吧,我误读了,解决了这个问题,并且看到了编辑。你能发布你的密码政策条目吗?和'ppolicy'配置? – EJP

相关问题