我根据官方文档在 Ubuntu 10.04 上安装和设置了 slapd 2.4.21。现在 ldapsearch -x 什么都没有,但 ldapsearch -x -Drootdn -w rootpw 会输出所有内容。我确实有
olcAccess:通过 dn="cn=Manager,dc=a,dc=b" 向 * 写入,通过 * 读取
在后端配置中。出了什么问题?“getent passwd testuser”没有输出任何内容,一定是它造成的。提前谢谢您。
答案1
您必须执行身份验证,olcAccess 用于配置授权。简而言之,slapd 仍然需要您证明自己的身份(身份验证,出于某种奇怪的原因,在 LDAP 俚语中被称为“绑定”),然后才允许您读取数据。
这是正常的。如果您不想每次都提供 -D 和 -w,请使用 ldap.conf 中的相应 bind* 选项,该选项位于不同 unices 的不同位置。Google 表示在 Ubuntu 10.04 上
/etc/ldap/ldap.conf
答案2
尝试查看 slapd 的日志文件,大多数情况下,可以找到“到底发生了什么?”的答案。要读取数据,匿名用户还应该能够读取根 DSE 和“cn=Subschema”。相应的条目如下所示:
access to dn.base="" by * read
access to dn.base="cn=Subschema" by * read
这些条目应该放在全局配置中,而不是后端。
PS:rootdn 始终具有对后端的写访问权限,因此您无需在 ACL 中指定它
答案3
-Drootdn -w rootpw
-D/-w 用于绑定 dn,然后以经过身份验证的用户身份搜索 LDAP 树。请确保您的 OpenLDAP 允许匿名绑定。
如果您使用 slapd.conf 进行服务器配置,则可以在 slapd.conf 中使用此设置:
allow bind_anon_cred
以下设置用于禁用匿名绑定:
disallow bind_anon
此外,以下设置根本不起作用:
olcAccess: to * by dn="cn=Manager,dc=a,dc=b" write by * read
因为 root dn 始终具有所有权限,包括读取、写入。