如何让一个组更改用户密码?

我有以下openldap服务器configuration:

access to attrs=userPassword by self write by anonymous auth by set="[cn=users,ou=Group,dc=my-company,dc=de]/memberUid & user/uid" write by * none # Allow everybody adding and changing Contacts access to dn.subtree="ou=Contacts,dc=my-company,dc=de" by set="[cn=users,ou=Group,dc=my-company,dc=de]/memberUid & user/uid" write by * read access to * by self write by dn.base="cn=admin,dc=my-company,dc=de" write by set="[cn=sysadm,ou=Group,dc=my-company,dc=de]/memberUid & user/uid" write by * read 

它应该做的是这样的:

  1. 允许每个人更改自己的密码
  2. 允许所有用户添加和更改联系人
  3. 允许组中的所有“sysadm”来改变一切

问题是,系统pipe理员不能更改任何用户密码。 任何提示?

引用OpenLDAPpipe理员指南 :

访问指令的评估顺序使得它们在configuration文件中的位置很重要。 如果一个访问指令比它select的条目更具体,它应该首先出现在configuration文件中。 同样,如果一个select器比另一个更具体,它应该首先进入访问指令。

长话短说,请尝试以下内容:

 access to attrs=userPassword by dn.base="cn=admin,dc=my-company,dc=de" write by set="[cn=sysadm,ou=Group,dc=my-company,dc=de]/memberUid & user/uid" write by self write by anonymous auth by * none # Allow everybody adding and changing Contacts access to dn.subtree="ou=Contacts,dc=my-company,dc=de" by dn.base="cn=admin,dc=my-company,dc=de" write by set="[cn=sysadm,ou=Group,dc=my-company,dc=de]/memberUid & user/uid" write by set="[cn=users,ou=Group,dc=my-company,dc=de]/memberUid & user/uid" write by * read access to * by dn.base="cn=admin,dc=my-company,dc=de" write by set="[cn=sysadm,ou=Group,dc=my-company,dc=de]/memberUid & user/uid" write by self write by * read 

顺便说一句,你真的想授予所有用户访问他们自己的对象的所有属性(“ 访问* …通过自写 ”)? 由于您只在第一个ACL中限制对userPassword属性的写入权限,所以我会说这不是您想要的。

如果你这样做会怎样?

 access to dn.subtree"[cn=users,ou=Group,dc=my-company,dc=de]" by self write by dn.base="cn=admin,dc=my-company,dc=de" write by set="[cn=sysadm,ou=Group,dc=my-company,dc=de]/memberUid & user/uid" write by * read 

IIRC slapd使用第一个匹配规则。 由于第一个模块与userPassword匹配,但不允许系统pipe理员修改,所以不允许修改。