如何在OpenLDAP服务器上configuration反向组成员资格维护? (成员)

我目前正在将LDAP身份validation集成到一个系统中,我想限制基于LDAP组的访问。 唯一的方法是通过searchfilter,因此我相信我唯一的select是在我的searchfilter中使用“memberOf”属性。 我的理解是,“memberOf”属性是服务器可以为我创build的操作属性,只要服务器上的任何“groupOfNames”条目创build新的“成员”属性。 我的主要目标是能够将“member”属性添加到现有的“groupOfNames”条目,并将匹配的“memberOf”属性添加到我提供的DN中。

到目前为止我所能达到的目标是:

对于LDAPpipe理,我还是一个相当新的东西,但是基于我在openldappipe理员指南中find的内容,它看起来像Reverse member Membership Maintence (又名“memberof overlay”)可以达到我期待的效果。

我的服务器当前正在运行使用“cn = config”样式运行时configuration的openldap 2.4.15的软件包安装(在Ubuntu上为slapd)。 我发现的大部分示例仍然引用静态configuration的较旧的“slapd.conf”方法,并且尽力使configuration适应新的基于目录的模型。

我已经添加了以下条目来启用成员的覆盖模块:

使用olcModuleLoad启用模块

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.la structuralObjectClass: olcModuleList entryUUID: a410ce98-3fdf-102e-82cf-59ccb6b4d60d creatorsName: cn=config createTimestamp: 20090927183056Z entryCSN: 20091009174548.503911Z#000000#000#000000 modifiersName: cn=admin,cn=config modifyTimestamp: 20091009174548Z 

为数据库启用覆盖,并允许它使用它的默认设置(groupOfNames,member,memberOf等)

 cn=config/olcDatabase={1}hdb/olcOverlay\=\{0\}memberof dn: olcOverlay={0}memberof objectClass: olcMemberOf objectClass: olcOverlayConfig objectClass: olcConfig objectClass: top olcOverlay: {0}memberof structuralObjectClass: olcMemberOf entryUUID: 6d599084-490c-102e-80f6-f1a5d50be388 creatorsName: cn=admin,cn=config createTimestamp: 20091009104412Z olcMemberOfRefInt: TRUE entryCSN: 20091009173500.139380Z#000000#000#000000 modifiersName: cn=admin,cn=config modifyTimestamp: 20091009173500Z 

我目前的结果:

通过使用上述configuration,我能够添加一个新的“groupOfNames”任意数量的“成员”条目,并使所有涉及的DN更新与“memberOf”属性。 这是我期望的行为的一部分。 虽然我相信下面的工作应该已经完成​​了,但是我仍然不知道如何做,我很乐意提供任何build议:

  1. 将“member”属性添加到现有的“groupOfNames”中,并自动创build相应的“memberOf”属性。
  2. 删除一个“成员”属性,并有相应的“memberOf”属性“自动删除。

我一直在努力,同样的事情,openldap文档是极简主义的,几乎没有帮助。 当他们到一个configuration数据库(原则上不是一个坏主意)时,所有的选项都改变了,所以当人们从/etc/ldap/slapd.conf中给出的例子时,用现代的slapdconfiguration(比如Ubuntu)是没有用的。

我终于得到了这个工作。 这里是总结…第一个LDIF文件:

 dn: cn=module,cn=config objectClass: olcModuleList cn: module olcModulePath: /usr/lib/ldap olcModuleLoad: memberof 

第二个LDIF文件:

 dn: olcOverlay=memberof,olcDatabase={1}hdb,cn=config objectClass: olcMemberOf objectClass: olcOverlayConfig objectClass: olcConfig objectClass: top olcOverlay: memberof olcMemberOfDangling: ignore olcMemberOfRefInt: TRUE olcMemberOfGroupOC: groupOfNames olcMemberOfMemberAD: member olcMemberOfMemberOfAD: memberOf 

使用ldapadd将它们添加到configuration数据库(正常configuration的东西一样)。

它不会自动更新数据库中的现有数据 ,因此我需要使用slapcat将所有内容复制到一个临时文件中,然后访问每个组,删除该组并重新添加相同的组(强制更新memberOf属性正确)。 如果你是从一个空的数据库开始,那么它会正确地更新添加对象的属性。

此外,请注意“olcDatabase = {1} hdb”是非常典型的,但不能保证与您的设置相匹配。 一定要检查一个。

我最近在我的博客上写了这个关于www.jordaneunson.com的文章。我复制并粘贴了相关部分。

我所要做的就是停止我的LDAP服务器上的“slapd”服务并编辑我的slapd.conf文件并添加以下两行。

 moduleload memberof.la overlay memberof 

我已经有一个名为vpn的groupOfNames,所以我必须创build一个LDIF文件,其内容如下:

 dn: cn=vpn,ou=Groups,dc=shop,dc=lan objectclass: groupofnames cn: vpn description: Users allowed to connect on VPN member: uid=jordan,ou=People,dc=shop,dc=lan 

并将其添加到我的ldap数据库

 slapadd -f file.ldif 

在此之后,我在debugging中启动了ldap服务器以检查错误

 slapd -d 99 -f /etc/ldap/slapd.conf 

并检查以确保我的用户条目中列出了“vpn”的组成员资格。

 ldapsearch -h ldap -x -b "dc=shop,dc=lan" '(uid=jordan)' memberOf 

和砰! 成功!

 jordan, People, shop.lan dn: uid=jordan,ou=People,dc=shop,dc=lan memberOf: cn=vpn,ou=Groups,dc=shop,dc=lan 

所以我把slapd服务解雇了,从那以后取得了很大的成功。 对于新的GUIpipe理工具,我正在使用phpLDAPAdmin,并且没有将memberOf属性分配给未分配给我的用户的问题。

最后要注意的是,“memberOf”属性不是基本的LDAP v3模式的一部分,因此除非特别查询,否则执行ldapsearch不会显示此属性。 这就是为什么在我上面的例子中,它是在ldapsearch参数的末尾声明的。

希望这可以帮助。

编辑:我只是用Apache Directory Studiotesting你的问题:只要我input如上所述的属性成员值作为一个整体,它工作A – 确定。 但是,memberOf属性不会显示在用户条目中。 这是因为memberOf属性不是LDAPv3模式的一部分。 要validation它是否在那里使用命令行工具ldapsearch:

 ldapsearch -h ldap -x -b "dc=shop,dc=lan" '(uid=jordan)' memberOf