我正在将 Ubuntu 14.04 OpenLDAP 服务器升级到 16.04,但遇到了问题。有一个 (localhost) 导入脚本,它用于ldapdelete -r -Y EXTERNAL -H ldapi:///...
删除一些 OU,然后用新信息重新填充它们。我怀疑这是由于缺少/更改了属性而导致此操作失败olcAccess
。有人知道为什么它不起作用吗?
我手动运行了脚本中的一行,结果如下:
# ldapdelete -r -Y EXTERNAL -H ldapi:/// "ou=people,dc=my,dc=org"
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
ldap_delete: Insufficient access (50)
additional info: no write access to parent
我可以使用来olcRootDn
成功删除 OU,但是这需要将 rootdn 密码放在某处,而我不想这样做。
# ldapdelete -x -D "cn=admin,dc=my,dc=org" -W -h ldap1 "ou=people,dc=my,dc=org"
Enter LDAP Password:
# ldapdelete -x -D "cn=admin,dc=my,dc=org" -W -h ldap1 "ou=people,dc=my,dc=org"
Enter LDAP Password:
ldap_delete: No such object (32)
matched DN: dc=my,dc=org
我已经运行slapcat
查看olcAccess
属性——看来dn-exact=...
条目应该提供正确的权限,但那一定是不正确的。
dn: olcBackend={0}hdb,cn=config
objectClass: olcBackendConfig
olcBackend: {0}hdb
dn: olcDatabase={-1}frontend,cn=config
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: {-1}frontend
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
,cn=auth manage by * break
olcAccess: {1}to dn.exact="" by * read
olcAccess: {2}to dn.base="cn=Subschema" by * read
olcSizeLimit: 500
dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
,cn=auth manage by * break
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=my,dc=org
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
olcLastMod: TRUE
olcRootDN: cn=admin,dc=my,dc=org
olcRootPW: {SSHA}(removed)...
olcDbCheckpoint: 512 30
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcDbIndex: objectClass eq
olcDbIndex: cn,uid eq
olcDbIndex: uidNumber,gidNumber eq
olcDbIndex: member,memberUid eq
答案1
根据您的配置{1}房屋委员会数据库,缺少根系统用户的适当 ACL。您应该添加:
olcAccess:{0}至 * 由 dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external ,cn=auth 管理 由 * break
此 ACL必须是第一个对于此数据库(索引 {0})
相同的 ACL{-1}前端数据库是附加添加到 ACL 列表{1}房屋委员会。 这个意思添加到此列表末尾,即在“olcAccess: {2}to * by * read”指令之后。“to * by * read”指令导致 ACL 引擎停止仅有读取权限的处理。
来自OpenLDAP 管理员指南(看5.2.5.2.):
注意:前端定义的访问控制是附加对所有其他数据库的控制。