我正在尝试在运行 slapd 的 OpenLdap 服务器上创建一个简单的管理员组。目前没有 slapd 文件,我一直在使用 cn=config 格式。
- 操作系统:CentOS Linux 版本 7.6.1810(核心)
- OpenLDAP:$OpenLDAP:slapd 2.4.44
我的目标是能够将用户放入这个管理组“cn=admins-group,ou=groups,dc=example,dc=com”,以便他们可以登录 Phpldapadmin 网络界面并能够在“ou=People,dc=example,dc=com”中创建用户。
这是管理员组的 ldif:(admin-group.ldif)
dn: cn=admin-group,ou=groups,dc=example,dc=com
objectClass: posixGroup
cn: admin-group
gidNumber: 12345
memberUid: admin1
我意识到实现我的目标需要采取的步骤之一是创建一个 ACL 规则,允许管理员组的用户访问他们需要的资源。
这是我编写的用于修改 olcDatabase={1}monitor 中已存在规则的 ldif:(accesschange.ldif)
dn: olcDatabase={1}monitor,cn=config
changetype: modify
add: olcAccess
olcAccess: to *
by self write
by group/posixGroup/uniqueMember=cn=admins- group,ou=groups,dc=example,dc=com write
我使用以下命令运行了此文件:
ldapmodify -x -W -D "cn=ldapadm,dc=example,dc=com" -f monitor.ldif
运行起来没有问题。但是,当我尝试在 People OU 下添加用户时,phpldapadmin 仍然出现以下错误
Could not add the object to the LDAP server.
LDAP said: Insufficient access
Error number: 0x32 (LDAP_INSUFFICIENT_ACCESS)
Description: You do not have sufficient permissions to perform that operation.
我已经研究这个问题 2 周了,但毫无进展。有人能帮忙吗?
编辑:我正在查看 /etc/openldap/slapd.d/cn\=config/ 下的 olcDatabase:{1}monitor 文件,但没有看到我添加的新规则。也许这是我使用 ldapmodify 的方式的问题?
编辑#2:通过使用 ldapmodify 与 EXTERNAL 修复写入问题,如下所示:
ldapmodify -Y EXTERNAL -H ldapi:/// -f monitor.ldif
我将新的 ACL 规则放入 monitor.ldif 中并按如下方式运行。Monitor.ldif 如下所示。
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external, cn=auth" read by dn.base="cn=ldapadm,dc=fsr,dc=local" read by * none
olcAccess: to *
by self write
by group/groupOfNames/member.exact="cn=admins,ou=groups,dc=fsr,dc=local" write
但是,我仍然无法使用一个 admin1 创建用户。我不确定我遗漏了什么。我可以在 olcDatabase:{1}monitor 文件中看到我创建的规则,但我仍然无法创建用户。
答案1
who 子句中使用的组架构错误。您必须使用具有完整 DN 的组架构作为成员属性。memberUid
不起作用。
更好的使用:
by group/groupNames/member="cn=admins-group,ou=groups,dc=example,dc=com" write
组条目应如下所示:
dn: cn=admins-group,ou=groups,dc=example,dc=com
objectClass: groupOfNames
cn: admins-group
member: uid=foo1,ou=users,dc=example,dc=com
答案2
我正在创建新的管理员组,这是我的 .ldif 文件,可以继续吗?
dn:cn=xs-administrators,ou=groups,dc=example,dc=com objectClass:groupOfNames cn:xs-administrators member:uid=adm-user1,dc=example,dc=com dn:olcDatabase={1}monitor,cn=config changetype:修改 add:olcAccess olcAccess:to * by self write by group/groupNames/member="cn=xs-administrators,ou=groups,dc=example,dc=com" write