我有一个设置OpenLDAP v2.3这是我过去几年一直在使用的。以下是slapd.conf
用于访问控制的行。
access to dn.one="o=abc, c=IN"
by * read
access to dn.base="o=abc, c=IN"
by * none
当我使用匿名绑定执行 ldapsearch 时给出了结果。
例如以下命令给出结果。
ldapsearch -x -h localhost -b "o=abc,c=IN"
现在我将操作系统 CentOS 从 5.5 升级到了 6.3,因此 OpenLDAP 的版本是OpenLDAP v2.4。我们没有改变架构。
但现在同样的问题ldapsearch
出现了result: 32 No such object
错误。
但是当我在访问控制配置中添加以下行时,它就起作用了。
access to dn.one="o=abc, c=IN"
by * read
access to dn.base="o=abc, c=IN"
by anonymous read
by * none
这可能是什么原因?这样做是否存在安全风险?
答案1
我在 OpenLDAP 邮件列表上发布了这个问题并得到了答案。感谢 Pierangelo Masarati。
在 OpenLDAP v2.4 中,搜索操作需要对搜索库的“entry”伪属性具有“搜索”权限,而 v2.3 中则并非如此。
人 slapd.access(5):
[...]
搜索操作需要对 searchBase 的条目伪属性具有搜索 (=s) 权限(注意:这是 OpenLDAP 2.4 引入的)。
[...]
因此我不需要授予匿名者对基础的读取权限。仅授予搜索权限就足够了,如下所示。
access to dn.base="o=abc, c=IN"
by anonymous search
by * none
我测试成功了。