我在 LDAP 服务器 (slapd) 的 ACL 配置方面遇到了问题。以下 ACL 条目是第一个适用的规则:
{0}to dn.subtree="ou=some,ou=where,ou=beneath,dc=the,dc=rain,dc=bow" attrs=entry,children by users write
现在奇怪的是,根据该规则,我可以向相应的 DN 添加条目,但如果我想用同一个用户修改它,那么我会得到
0x32 (LDAP_INSUFFICIENT_ACCESS)
有人能提示我问题可能出在哪里吗?
答案1
如果您想允许修改整个条目,则需要attrs=
完全删除该选项。
我认为您误解了它的attrs=entry
作用。它不允许您修改整个条目。该entry
属性仅向条目本身授予权限(不是它的属性),基本上只允许您删除它。children
属性允许您在该条目下创建新的子项。但是一旦创建了子项,您就无法修改它,因为它属于匹配项dn.subtree
,并且您的 ACL 禁止修改除删除条目和创建子项之外的任何内容。
从http://www.openldap.org/doc/admin24/access-control.html:
有两个特殊的伪属性 entry 和 children。要读取(并因此返回)目标条目,主体必须具有对目标条目属性的读取权限。要执行搜索,主体必须具有对搜索库的条目属性的搜索权限。要添加或删除条目,主体必须具有对条目的条目属性的写入权限,并且必须具有对条目父项的子项属性的写入权限。要重命名条目,主体必须具有对条目的条目属性的写入权限,并且具有对旧父项和新父项的子项属性的写入权限。本节末尾的完整示例应该有助于澄清问题。
如上所述,解决方案是删除该attrs
选项。这会使 ACL 默认为所有内容,因此当您指定时write
,它允许您写入该条目上的所有内容。