如何允许某个组更改用户密码?

如何允许某个组更改用户密码?

我有以下 openldap 服务器配置:

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”组中的所有人更改所有内容

问题是,sysadms 无法更改任何用户密码。有什么提示吗?

答案1

引用OpenLDAP 管理指南

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

长话短说,请尝试以下操作:

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 属性的写访问,因此我认为这不是您想要的。

答案2

如果你这样做,会发生什么情况?

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

答案3

IIRC slapd 使用第一个匹配规则。由于第一个块匹配用户密码但不允许系统管理员修改,因此他们无权修改。

相关内容