我正在尝试在 Arch Linux 上配置 OpenLDAP (2.6.39) 的新安装。我使用默认核心包来安装和配置它,但是我无法让它遵守设置文件中的任何访问控制声明。
我/etc/openldap/slapd.conf
只有这两个声明来自文档:
access to attr=userPassword
by self =xw
by anonymous auth
by * none
access to *
by self write
by users read
by * none
我已经正常启动了服务,大多数事情似乎都正常。我可以使用 pam/nslcd 登录并使用 phpldapadmin。但是上述访问限制似乎不起作用。从 phpldapadmin,我能够查看和更改除我连接的 uid 之外的其他用户的密码字段。使用命令行客户端也会发生同样的情况(输出已裁剪):
$ ldapsearch -D 'uid=user2,ou=People,dc=example,dc=com' -w 1234 '(uid=user1)'
userPassword:: e1NTSEF9VEZ4K2U1M0JtUEU0NkljdlBPaTBycE41RTh2aXJNeTg=
如您所见,我正在使用用户 2 进行身份验证,但能够查询用户 1 的条目并查看密码字段。
中的其他声明slapd.conf
显然有效,因此我没有编辑错误的文件或类似的东西。我尝试设置严格的规则access to * by * none
作为唯一规则,但仍然能够从任何用户那里看到目录中的任何内容。我将访问行放在默认配置中示例行所在的位置。
我如何让 OpenLDAP 真正留意其配置文件中的 acl 而不是忽略它们?
答案1
OpenLDAP 的大多数配置(包括 ACL)实际上都属于cn=config
配置子树。其中可能有一些内容会覆盖 中的语句slapd.conf
。请参阅本文档了解配置 LDAP 服务器的现代方法。
作为一项过渡措施,Arch Linux OpenLDAP 软件包附带一个slapd.conf
文件,但如果你按照维基百科上的说明您将发现在设置部分的末尾他们会自动将其转换为新格式。
注意:从 OpenLDAP 2.4 开始,slapd.config 的配置已弃用。从此版本开始,所有配置设置都存储在 /etc/openldap/slapd.d/ 中。
要将 slapd.conf 中的最新更改存储到新的 slapd-config 配置设置中,我们必须先删除旧的配置文件:
# rm -rf /etc/openldap/slapd.d/*
然后我们使用以下命令生成新配置:
# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
每次更改 slapd.conf 时都必须运行这最后一个命令。
特别注意最后的那行。如果您选择以旧格式进行将来的配置更改,则每次都需要转换它们。