大约两周以来,我一直在尝试允许属于某个组(例如cn=Admins,dc=mydomain,dc=com
:)的 openLDAP 用户访问create, modify, update, and delete
属于另一个组organizationalUnit
(例如ou=Users,dc=mydomain,dc=com
:)的用户。我尽了一切努力来解决这个问题。例如通过 Google 搜索,通过服务器故障,最后搜索堆栈溢出但无济于事。我对 openLDAP 还很陌生,这可能是一个错误和/或我忽略了olcAccess
中的属性dn: olcDatabase={1}hdb,cn=config
。
管理组.ldif
dn: cn=Admins,dc=ldapserver,dc=com
changetype: add
objectClass: groupOfNames
objectClass: top
member: cn=admin,ou=Users,dc=ldapserver,dc=com
cn: Admins
用户.ldif
dn: ou=Users,dc=ldapserver,dc=com
changetype: add
objectClass: organizationalUnit
objectClass: top
ou: Users
默认 olcAccess
笔记:这是全新安装的 openLDAP 服务器附带的默认 ACL。
dn: olcDatabase={1}hdb,cn=config
olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {1}to attrs=shadowLastChange by self write by * read
olcAccess: {2}to * by * read
请注意1:ACLs
因为我对 openLDAP 还很陌生,所以除了第一次安装 openLDAP 服务器时默认的设置之外,我没有设置任何其他设置。
请注意2:在我提出问题之前我尝试过这个问题这里这显然对我不起作用。
谢谢,亚历克斯
答案1
在 openldap 中,ACL 总是按照编号为 {0}、{1} 的行列表从上到下进行评估。一旦满足条件,就会进行评估立即地已停止(假设未使用中断)。
在 Ubuntu 设置且兼容的默认 ACL 中有这一行:
olc访问:{2}到 *由 * 阅读
至 * 由 *:满足一切要求,在其后添加行完全没有效果。
讨论的解决方案此链接以上内容应该可以解决您的问题,我建议您尝试这个 ACL 列表:
olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {1}to attrs=shadowLastChange by self write by * read
olcAccess: {2}to dn.subtree="ou=Users,dc=ldapserver,dc=com"
by group/groupOfUniqueNames/uniqueMember="cn=Admins,dc=ldapserver,dc=com" write
并将管理员组的objectClass更改为groupOfUniqueNames。