我一直在使用 AWS EC2 在 Linux 实例上配置 LDAP 服务器。到目前为止,我已成功设置 LDAP 和 phpLDAPadmin 以协同工作。
我已经创建了用户和组“组织单位”。我已将用户和组添加到这些“OU”。现在我想将 LDAP 树的特定部分的访问权限授予“组”中的“用户”成员。这是我到目前为止无法配置的...
我的 LDAP 树如下所示:
+--> dc=www,dc=website,dc=com (3)
---> cn=admin
+--> ou=groups (4)
| ---> cn=admin_users
| ---> cn=app1_users
| ---> cn=app2_users
| ---> cn=basic_users
+--> ou=users (3)
| ---> cn=user1
| ---> cn=user2
| ---> cn=user3
假设我将 user1 + user2 添加到“app1_users”的“memberUid”列表中,将 user2 + user3 添加到“app2_users”的“memberUid”列表中。
我想:
- cn=admin 对树有完全权限/访问权限
- app1_users 可以连接(phpLDAPadmin)并将新成员添加到组本身
- 对于 app2_users 的用户来说也是如此
连接的用户(在 phpLDAPadmin 上)应该只能看到他所属的树(和子树)。
这是我尝试过的 ACI(但显然不起作用):
access to attrs=shadowLastChange
by self write
by dn="cn=admin,dc=www,dc=website,dc=com" write
by * read
access to attrs=userPassword
by self write
by dn="cn=admin,dc=www,dc=website,dc=com" write
by anonymous auth by * none
access to dn.base=""
by * read
access to dn.subtree="cn=app1_users,ou=groups,dc=www,dc=website,dc=com"
by group.base="cn=app1_users,dc=www,dc=website,dc=com" write
by dn.base="cn=admin,dc=www,dc=website,dc=com" write
by * none
access to dn.subtree="cn=app2_users,ou=groups,dc=www,dc=website,dc=com"
by group.base="cn=app2_users,dc=www,dc=website,dc=com" write
by dn.base="cn=admin,dc=www,dc=website,dc=com" write
by * none
access to *
by self write
by dn="cn=admin,dc=www,dc=website,dc=com" write
by * read
我的配置有问题吗?
答案1
假设我将 user1 + user2 添加到“app1_users”的“memberUid”列表中,将 user2 + user3 添加到“app2_users”的“memberUid”列表中。
这不适用于posix集团条目会员编号作为成员属性。会员编号仅包含短用户名,不包含 DN。
作为slapd.访问(5)明确指出组 ACL 仅适用于包含每个成员条目的完整可分辨名称 (DN) 的成员属性:
The statement group=<group> means that access is granted to requests
whose DN is listed in the group entry whose DN is given by <group>.
The optional parameters <objectclass> and <attrname> define the
objectClass and the member attributeType of the group entry. The
defaults are groupOfNames and member, respectively.
关于 ACL 的一些注意事项:
- 省略属性的 ACL影子最后更改因为 LDAP 影子映射是一个有问题的概念。如果您确实使用影子映射,您的 ACL(可能从某些操作指南中复制粘贴)将允许用户规避影子密码过期。
- 不要授予隐式读取权限用户密码通过使用包容性写入访问权限。请改用只写权限
=w
。
另请参阅我对这个问题的回答服务器故障:
在 OpenLDAP 中设置 ACL,以便用户可以从过滤的子树中找到自己的条目
在自己走这条路之前,我建议您考虑使用我在其他答案中提到的系统之一: