我正在尝试为OpenLDAP编写访问控制,以允许用户使用特定的基本dn进行search,但只能从某些子dn中获取结果。 我玩过很多不同的规则,但无法实现。 我不确定它甚至可能。
例如:
我有用户使用dn uid=testuser,ou=people,dc=example,dc=com 。 我希望此用户能够以dc=example,dc=com为基础进行search,并获取ou=people,dc=example,dc=com条目。 在dc=example,dc=com下还有很多其他的子OU,但是只有ou=people才能返回(为了奖励,我只希望返回某些属性)。
可以这样做吗?
终于明白了这一点。 有很多不同的部分,以使其工作。
首先是2个ACL规则:
Access to dn.base="dc=example,dc=com" by \ dn.base="uid=testuser,ou=people,dc=example,dc=com" \ search Access to dn.one="ou=people,dc=example,dc=com" \ attrs=entry,uid,cn,sn,gecos,mail,uidNumber,gidNumber by \ dn.base="uid=testuser,ou=people,dc=example,dc=com" \ read
dn.base 。 如果是“dn.children”,订单就很重要。 uid=testuser对dc=example,dc=comsearch访问权限,但是绝对没有其他限制。 如果没有第二条规则,那么所有会返回的是search是否匹配,而不是匹配。 uid=testuser对ou=people和孩子一级( dn.one )的读取权限。 search能力包含在读取权限中。 entry attr对于第二条规则很重要,因为执行search需要访问这个attr才能匹配条目。