我试图限制对用户自己的userPassword
属性的写访问。但是现在惨败了几个小时。这是我到目前为止所做的:
- 在 Arch linux 上安装 OpenLDAP 2.4
- 通过 Apache Directory Studio配置基本 DN (
dc=exmaple,dc=org
) 和 Manager 以修改、添加和删除 - 添加了两个组织单位
people
和group
ou=people
在-uid=timo,ou=people,dc=example,dc=org
和下添加了两个用户uid=heike,...
我想做的下一件事是能够修改用户自己的 userPassword。为此,我创建了一个changepw.ldif
文件。
dn: uid=timo,ou=people,dc=example,dc=org
changetype: modify
replace: userPassword
userPassword: newpw
并像这样应用它
$ ldapmodify -x -D "uid=timo,ou=people,dc=example,dc=org" -W -f changepw.ldif
modifying entry "uid=timo,ou=people,dc=example,dc=org"
ldap_modify: Insufficient access (50)
我首先使用 Apache Directory Studio 为 uid=timo 设置了 userPassword 并验证它是否正常工作
到目前为止,一切都在正常工作(至少它符合我的期望:-P)。所以我向 /etc/openldap/slapd.conf 添加了访问控制,如下所示:
[...]
# if no access controls are present, the default policy
# allows anyone and everyone to read anything but restricts
# updates to rootdn. (e.g., "access to * by * read")
#
# rootdn can always read and write EVERYTHING!
access to attrs=userPassword by self write by anonymous auth by dn.base="cn=Manager,dc=example,dc=org" write by * none
#######################################################################
# MDB database definitions
database mdb
[...]
并做了通常的事情:
$ slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
$ chown -R ldap:ldap /etc/openldap/slapd.d
$ systemctl restart slapd
并再次尝试。
$ ldapmodify -x -D "uid=timo,ou=people,dc=example,dc=org" -W -f changepw.ldif
modifying entry "uid=timo,ou=people,dc=example,dc=org"
ldap_modify: Insufficient access (50)
由于某种原因,访问被拒绝。我打开了acl日志并得到了这个:
5f12f36a => access_allowed: result not in cache (userPassword)
5f12f36a => access_allowed: auth access to "uid=timo,ou=people,dc=example,dc=org" "userPassword" requested
5f12f36a => slap_access_allowed: backend default auth access granted to "(anonymous)"
5f12f36a => access_allowed: auth access granted by read(=rscxd)
5f12f36a => access_allowed: backend default write access denied to "uid=timo,ou=people,dc=example,dc=org"
我将不胜感激任何帮助!
在我发现有一个称为
slapacl
测试 ACL 的工具后,我想出了一个解决方案。让我向您展示它在进行任何更改之前的样子。
这基本上是我已经想到的,并给了我足够的证据来质疑配置生成命令(
slaptest -f ... -F ...
)。实际问题是配置目录 (
/etc/openldap/slapd.d
) 没有被覆盖您必须先删除该目录并再次生成配置目录。
这就是测试最初的样子。
我希望有人能从我的发现中受益。它仍然很好奇,手册页中没有提到这一点,并且没有
-f
(强制覆盖)标志。