如何在openldap服务器上配置反向组成员资格维护?(成员)


18

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

到目前为止,我已经实现了以下目标:

我对LDAP管理还很陌生,但是根据我在openldap管理指南中找到的内容,看起来反向组成员资格维护(又称为“ memberof overlay”)将完全达到我想要的效果。

我的服务器当前正在运行openldap 2.4.15的软件包安装(在ubuntu上扩展),该软件包使用“ cn = config”样式的运行时配置。我发现的大多数示例仍引用旧的静态配置“ slapd.conf”方法,并且我已尽力使配置适应新的基于目录的模型。

我添加了以下条目以启用memberof覆盖模块:

使用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

我目前的结果:

通过使用上述配置,我可以添加具有任意数量的“成员”条目的新“ groupOfNames”,并使用“ memberOf”属性更新所有涉及的DN。这是我期望的行为的一部分。尽管我相信使用memberof overlay应该可以完成以下工作,但我仍然不知道如何执行以下工作,我很乐意欢迎您提出任何建议:

  1. 向现有的“ groupOfNames”添加“成员”属性,并自动创建相应的“ memberOf”属性。
  2. 删除“成员”属性,并自动删除相应的“ memberOf”属性。

Answers:


10

我一直在为同一件事而苦苦挣扎,openldap文档非常简单,几乎没有帮助。当他们进入配置数据库时(原则上这不是一个坏主意),所有选项都改变了,因此当人们从/etc/ldap/slapd.conf中给出示例时,对于现代的slapd配置(例如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将它们添加到配置数据库中(与普通配置相同)。

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

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


1
是不是slapadd(在停止数据库),这样做的正确方法?
mad_vs 2013年

11

我最近在自己的博客www.jordaneunson.com上写了有关此内容的文章,并复制并粘贴了相关部分。

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

moduleload memberof.la
overlay memberof

我已经有一个名为vpn的groupOfNames,因此我必须创建一个具有以下内容的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

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

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

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

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

和ba!成功!

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

因此,自那时以来,我解雇了slapd服务,并获得了很多成功。对于新的GUI管理工具,我使用的是phpLDAPAdmin,并且对memberOf属性进行分配和未分配给用户都没有问题。

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

希望这可以帮助。

编辑:我刚刚使用Apache Directory Studio测试了您的问题:只要我如上所述输入整个属性成员值,它就可以正常工作。但是,memberOf属性不会显示在用户条目中。这是因为memberOf属性不属于LDAPv3模式。要验证它是否存在,请使用命令行工具ldapsearch:

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

1
不幸的是,加载模块并添加覆盖层正是我所做的。正如我所说的,问题不在于没有为新的groupOfNames条目添加“ memberOf”属性,而是当我仅向现有组中添加“ member”属性时就没有添加它们。我当前正在使用Apache Directory Studio浏览和配置LDAP,因此在浏览时它确实显示memberOf条目。隐藏它们不是问题。
emills

1
您如何在groupOfNames中创建member属性?是否使用整个DN?例如:“ uid = user,ou = People,dc = corp,dc = org”,或者您只是填写他们的用户名?为了使反向映射起作用,您需要使用整个DN,以便memberOf知道将反向映射放置在何处。
乔丹·尤森

1
编辑:我刚刚使用Apache Directory Studio测试了您的问题,只要如上所述输入属性成员值作为一个整体,它就可以正常工作。但是,memberOf属性不会显示在用户条目中。这是因为memberOf属性不属于LDAPv3模式。要验证它是否存在,请使用命令行工具ldapsearch。<code> ldapsearch -h ldap -x -b“ dc = shop,dc = lan”'(uid = jordan)'memberOf </ code>
Jordan Eunson 09年

1
我在成员条目中使用DN。正如我已经说过的,这并不是没有看到它的问题,只有在添加了新的groupOfNames之后才添加它们(因此可见),而不是在我将成员属性添加到现有组时才添加它们。
emills

1
<quote>它们只会被添加(因此可见)。</ quote>很抱歉,但这句话是不正确的。除非您专门查询,否则memberOf属性是不可见的。您能否发布上面列出的ldapsearch命令的输出?将用户更改为具有memberOf属性但不具有memberOf属性的用户。
2009年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.