Openldap ACL 不起作用

Openldap ACL 不起作用

我有以下结构:

 dc=th,dc=company,dc=com
  |
  |->dmc
      |
      |->dmc_customer_company

我创建了一个组来管理write访问dmc_customer_company

分组,按级别划分:

 app_all
 app_dmc
 app_dmc_company1

我的脚本(格式化以帮助理解)

  dn: olcDatabase={1}hdb,cn=config
  changetype: modify
  replace: olcAccess
  olcAccess: {0}to attrs=userPassword,shadowLastChange 
      by self write 
      by anonymous auth 
      by dn="cn=admin,dc=th,dc=company,dc=com" write by * none

  olcAccess: {1}to dn.base="" by * read

  olcAccess: {2}to * by self write 
      by dn="cn=admin,dc=th,dc=company,dc=com" write by * read

  olcAccess: {3}to dn.subtree="dc=th,dc=company,dc=com" 
      by self write 
      by group.exact="cn=app_all,ou=Groups,dc=th,dc=company,dc=com" manage 
      by * break

  olcAccess: {4}to dn.subtree="o=dmc,dc=th,dc=company,dc=com" 
      by self write 
      by group.exact="cn=app_dmc,ou=Groups,dc=th,dc=company,dc=com" manage 
      by * break

  olcAccess: {5}to dn.subtree="o=dmc_company1,o=dmc,dc=th,dc=company,dc=com" 
      by self write 
      by group.exact="cn=app_dmc_company1,ou=Groups,dc=th,dc=company,dc=com" manage 
      by * break

我有用户:

 cn=company1_admin,ou=application,dc=th,dc=company,dc=com

和:

 dn: cn=app_dmc_company1,ou=Groups,dc=th,dc=company,dc=com
 objectClass: groupOfNames
 objectClass: top
 cn: app_dmc_company1
 member: cn=company1_admin,ou=application,dc=th,dc=company,dc=com
 member: ou=Groups,dc=th,dc=company,dc=com

我申请:ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f <file>

我使用以下命令检查配置:ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config"它们在配置内部

我错在哪里了?因为当:

  • 我用company1_admin
  • 编写或创建其他用户
  • 里面o=dmc_company1,o=dmc,dc=th,dc=company,dc=com

我收到Ldap code: 50 LDAP_INSUFFICIENT_ACCESS

我在 Ubuntu 14.04 中使用没有 slapd.conf 的 OpenLDAP。OpenLDAP 版本是 2.4.1

谢谢

答案1

我会检查对“儿童”伪条目的访问权限

根据openldap-2.4手册,acl部分:

要添加或删除条目,主体必须具有对该条目的条目属性的写访问权限,并且必须具有对该条目的父级的子级属性的写访问权限

因此,作为起点:

olcAccess: {5}to dn.subtree="o=dmc_company1,o=dmc,dc=th,dc=company,dc=com" 
  by self write 
  by group.exact="cn=app_dmc_company1,ou=Groups,dc=th,dc=company,dc=com" write 
  by * break

olcAccess: {6}to dn.children="o=dmc_company1,o=dmc,dc=th,dc=company,dc=com" 
  by group.exact="cn=app_dmc_company1,ou=Groups,dc=th,dc=company,dc=com" write 
  by * break

相关内容