openldap search acl

我正在尝试为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=testuserdc=example,dc=comsearch访问权限,但是绝对没有其他限制。 如果没有第二条规则,那么所有会返回的是search是否匹配,而不是匹配。
  • 第二条规则授予uid=testuserou=people和孩子一级( dn.one )的读取权限。 search能力包含在读取权限中。
  • entry attr对于第二条规则很重要,因为执行search需要访问这个attr才能匹配条目。
  • 一旦条目匹配,search将返回允许的所有其他属性。