我正在尝试为 OpenLDAP 编写访问控制,以允许用户使用某个基本 DN 进行搜索,但只能从某些子 DN 获得结果。我尝试过很多不同的规则,但无法让它工作。我不确定这是否可行。
例如:
我有一个 dn 为 的用户uid=testuser,ou=people,dc=example,dc=com
。我希望此用户能够使用 的基数进行搜索dc=example,dc=com
并返回 中的条目ou=people,dc=example,dc=com
。 下还有许多其他子 OU dc=example,dc=com
,但只ou=people
应返回 中的条目(作为奖励,我只希望返回某些属性)。
这能做到吗?
答案1
终于搞明白了。要让它工作,需要很多不同的部分。
首先是 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
“access to”作为第一条规则。如果是“dn.children”,顺序就很重要了。 - 第一条规则授予
uid=testuser
搜索权限dc=example,dc=com
,但仅此而已。如果没有第二条规则,返回的结果只是搜索是否匹配,而不是匹配了什么。 - 第二条规则授予子级一级的
uid=testuser
读取权限( )。搜索能力包含在读取权限中。ou=people
dn.one
- 属性
entry
在第二条规则中很重要,因为执行搜索需要访问此属性才能匹配条目。 - 一旦条目匹配,搜索将返回所有允许的其他属性。