我在 Debian 7.1 上安装了 OpenLDAP (OpenLDAP 2.4.31),我正在尝试设置 memberof 覆盖。我的配置就像我在互联网上的许多网站上读到的一样,但它仍然对我不起作用。
问题是,实体的 memberOf 属性仅在我创建组时更新,但在我修改或删除组时不会更新。实际上,这个问题曾经在这里被问过:如何在 openldap 服务器上配置反向组成员身份维护?(memberOf),但即使将其检查为已回答,我也找不到答案中任何可用的信息。 (根据评论,即使原始海报也无法对答案做任何事情......)
我的配置是这样的:cn=config/cn=module{0}.ldif
dn: cn=module{0}
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb
olcModuleLoad: {1}memberof
structuralObjectClass: olcModuleList
对于模块:cn=config/olcDatabase={1}hdb/olcOverlay={0}memberof.ldif
dn: olcOverlay={0}memberof
objectClass: olcMemberOf
objectClass: olcOverlayConfig
olcOverlay: {0}memberof
structuralObjectClass: olcMemberOf
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
olcMemberOfRefInt: TRUE
我添加的群组:
dn: cn=test,ou=services,dc=x,dc=y
cn: test
objectClass: groupOfNames
objectClass: top
description: test group
member: cn=Almafa Teszt,ou=users,dc=x,dc=y
我运行的查询:
$ ldapsearch -LLL -h localhost -x -D cn=admin,dc=x,dc=y -b u=users,dc=x,dc=y -W '(memberOf=cn=test,ou=services,dc=x,dc=y)' memberOf
所以问题不在于如何查询属性,而在于修改或删除组后,搜索结果不会改变......
更新:至于Brian的回答,我也设置了refint覆盖,其配置如下:
$ ldapsearch -LLL -b cn=module{0},cn=config
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb
olcModuleLoad: {1}memberof.la
olcModuleLoad: {2}refint
$ ldapsearch -LLL -b olcOverlay={1}refint,olcDatabase={1}hdb,cn=config
dn: olcOverlay={1}refint,olcDatabase={1}hdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: {1}refint
olcRefintAttribute: memberof member manager owner
但是它既没有修复 memberof overlay,也没有自行起作用。当我修改组成员的名称时,组的成员属性没有更新。这两个问题有关联吗?
答案1
听起来你可能需要配置 refint 覆盖,这有助于在你所描述的情况下维护目录的引用完整性。有一个页面位于http://www.zarafa.com/wiki/index.php/OpenLDAP_referential_integrity这可能对设置这个覆盖有帮助。
答案2
我们遇到了同样的问题(与您描述的症状相同)。结果发现我们遗漏了olcRootDN
So dn: olcDatabase={1}hdb,cn=config
add(例如)olcRootDN: cn=admin,cn=config
。