OpenLdap LDAP 管理员组 ALC

OpenLdap LDAP 管理员组 ALC

我有以下 LDIF 文件来创建 ldapadmins。

dn: ou=Manager,dc=example,dc=org
objectClass: organizationalUnit
objectClass: top
ou: Manager

dn: ou=Customers,dc=example,dc=org
objectClass: organizationalUnit
objectClass: top
ou: Customers

dn: cn=customerAccountAdmin,ou=Manager,dc=example,dc=org
cn: customerAccountAdmin
objectClass: organizationalRole
objectClass: simpleSecurityObject
objectClass: top
userPassword: {SSHA}*removed*

dn: ou=Users,ou=Customers,dc=example,dc=org
objectClass: organizationalUnit
objectClass: top
ou: Users

dn: ou=Groups,ou=Customers,dc=example,dc=org
objectClass: organizationalUnit
objectClass: top
ou: Groups

我创建了以下 ldif 以允许 phpldap 管理员有多个管理员。(他们将管理多个客户)

dn: olcDatabase={1}mdb,cn=config
changetype: modify
delete: olcAccess
-
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by dn="cn=admin,dc=example,dc=org" write by anonymous auth by * none
olcAccess: {1}to * by self read by dn="cn=admin,dc=example,dc=org" write by * none
olcAccess: {2}to * by dn.base="cn=customerAccountAdmin,ou=Manager,dc=example,dc=org" write

登录到 phpldap 管理员后,customerAccountAdmin 无法看到树。但从 ALC 视图来看,它应该拥有所有权限。

我是否遗漏了什么?有没有更简单的方法来实现此目的?

答案1

access您的问题来自于指令的评估顺序:

在这个优先级中,访问指令按照它们在配置文件中出现的顺序进行检查。Slapd 停止于第一的 <what>与条目和/或属性匹配的选择器。相应的访问指令是 slapd 将用来评估访问权限的指令。

(参见访问控制评估)。这意味着您的第二个to *指令永远不会被评估,并且第一个指令适用于所有条目。

您应该修改访问规则如下:

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: to attrs=userPassword,shadowLastChange
  by self write
  by dn="cn=admin,dc=example,dc=org" write
  by anonymous auth
  by * none
olcAccess: to *
  by self read
  by dn="cn=admin,dc=example,dc=org" write
  by dn.base="cn=customerAccountAdmin,ou=Manager,dc=example,dc=org" write
  by * none

另一种选择(结合你的上一个问题)是创建一个cn=Administrators,dc=example,dc=org组,并授予该组成员对所有内容的写权限:

dn: cn=Administrators,dc=example,dc=org
changetype: add
cn: Administrators
objectClass: groupOfNames
member: cn=customerAccountAdmin,ou=Manager,dc=example,dc=org
member: cn=admin,dc=example,dc=org

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: to dn.exact="cn=Administrators,dc=example,dc=org"
  by dn.exact="cn=admin,dc=example,dc=org" write
  by * none
olcAccess: to attrs=userPassword,shadowLastChange
  by self write
  by group.exact="cn=Administrators,dc=example,dc=org" write
  by anonymous auth
  by * none
olcAccess: to *
  by self read
  by group.exact="cn=Administrators,dc=example,dc=org" write
  by * none

replace: olcAccess编辑:值得一提的是,如果您仍在使用默认值,则在添加之前使用或删除非常重要olcAccessadd: olcAccess不删除默认值olcAccess将不起作用,因为它不会覆盖它。

相关内容