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

emi*_*lls 19 openldap ldap

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

到目前为止我已经成功实现了:

我对 LDAP 管理还是很陌生,但根据我在 openldap 管理员指南中的发现,反向组成员身份维护(也称为“成员覆盖”)似乎可以达到我正在寻找的效果。

我的服务器当前正在运行 openldap 2.4.15 的软件包安装(在 ubuntu 上为 slapd),它使用“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
Run Code Online (Sandbox Code Playgroud)

为数据库启用覆盖并允许它使用它的默认设置(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
Run Code Online (Sandbox Code Playgroud)

我目前的结果:

通过使用上述配置,我可以添加一个新的“groupOfNames”和任意数量的“成员”条目,并使用“memberOf”属性更新所有涉及的 DN。这是我期望的行为的一部分。虽然我认为应该使用 memberof 覆盖完成以下操作,但我仍然不知道如何执行以下操作,我很乐意接受任何建议:

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

Jor*_*son 11

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

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

moduleload memberof.la
overlay memberof
Run Code Online (Sandbox Code Playgroud)

我已经有一个名为 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
Run Code Online (Sandbox Code Playgroud)

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

slapadd -f file.ldif
Run Code Online (Sandbox Code Playgroud)

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

slapd -d 99 -f /etc/ldap/slapd.conf 
Run Code Online (Sandbox Code Playgroud)

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

ldapsearch -h ldap -x -b "dc=shop,dc=lan" '(uid=jordan)' memberOf 
Run Code Online (Sandbox Code Playgroud)

砰!成功!

jordan, People, shop.lan
dn: uid=jordan,ou=People,dc=shop,dc=lan
memberOf: cn=vpn,ou=Groups,dc=shop,dc=lan
Run Code Online (Sandbox Code Playgroud)

所以我重新启动了 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 
Run Code Online (Sandbox Code Playgroud)


Tel*_*dys 10

我一直在为同样的事情苦苦挣扎,openldap 文档是极简主义的,几乎没有帮助。当他们转到配置数据库(原则上不是一个坏主意)时,所有选项都发生了变化,因此当人们从 /etc/ldap/slapd.conf 给出示例时,现代 slapd 配置(例如 Ubuntu)毫无用处。

我终于得到了这个工作。这是摘要...第一个 LDIF 文件:

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/ldap
olcModuleLoad: memberof
Run Code Online (Sandbox Code Playgroud)

第二个 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
Run Code Online (Sandbox Code Playgroud)

使用 ldapadd(与普通配置内容相同)将它们添加到配置数据库中。

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

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