1.5. 列出用户条目中的组成员资格
组通过使用 membership 属性定义属于此组的条目。易于查看 组并查找其成员。例如,带有 groupOfNames 对象类的静态组存储其成员的可分辨名称(DN) 作为成员 的值。但是,您无法快速查找单个用户所属的组。使用组时,用户条目不包含表示用户成员资格的任何内容,这与角色不同。
要解决这个问题,您可以使用 MemberOf 插件。MemberOf 插件分析组条目中的 membership 属性,并在指向组的用户条目中自动写入 memberOf 属性。默认情况下,插件检查组中的 member 属性,但您可以使用几个属性来支持不同的组类型。
当您添加或删除某个组的成员时,插件会更新用户条目中的 memberOf 属性。使用 MemberOf 插件,您可以对特定用户条目执行简单的搜索,以查找该用户所属的所有组。MemberOf 插件显示所有组的直接和间接成员资格。
MemberOf 插件仅为 静态 组管理成员资格属性。
1.5.1. 使用 MemberOf 插件时的注意事项 复制链接链接已复制到粘贴板!
使用 MemberOf 插件时,请考虑以下几点:
复制拓扑中的 MemberOf 插件
在复制拓扑中,您可以以两种方式管理 MemberOf 插件:
-
在拓扑中的所有供应商和消费者服务器上启用 MemberOf 插件。在这种情况下,您必须从所有复制协议中的复制中排除用户条目的
memberOf属性。 仅在拓扑中的所有供应商服务器上启用 MemberOf 插件。要做到这一点:
-
您必须禁用
memberOf属性到复制协议中所有启用了写入的供应商复制。 -
您必须启用
memberOf属性到其复制协议中所有消费者副本的复制。 - 您必须在消费者副本中禁用 MemberOf 插件。
-
您必须禁用
-
在拓扑中的所有供应商和消费者服务器上启用 MemberOf 插件。在这种情况下,您必须从所有复制协议中的复制中排除用户条目的
带有分布式数据库的 MemberOf 插件
如 创建和维护数据库 中所述,您可以将目录的子树存储在单独的数据库中。默认情况下,MemberOf 插件只更新存储在与组相同的数据库中的用户条目。要在所有数据库中更新用户,您必须在
上将memberOfAllBackends参数设置为。有关设置memberOfAllBackends参数的详情,请参阅使用 Web 控制台在每个服务器上配置 MemberOf 插件。
1.5.2. MemberOf 插件所需的对象类 复制链接链接已复制到粘贴板!
默认情况下,MemberOf 插件将 nsMemberOf 对象类添加到用户条目中,以提供 memberOf 属性。nsMemberOf 对象类足以使插件正常工作。
另外,您可以创建包含 inetUser,inetAdmin,inetOrgPerson 对象类的用户条目。这些对象类支持 memberOf 属性。
要配置嵌套组,组必须使用 extensibleObject 对象类。
如果目录条目不包含支持所需属性操作的对象类失败,并显示以下错误:
LDAP: error code 65 - Object Class Violation
1.5.3. MemberOf 插件语法 复制链接链接已复制到粘贴板!
在配置 MemberOf 插件时,您可以设置主要两个属性:
-
memberOfGroupAttr.定义要从组条目轮询哪个成员资格属性。memberOfGroupAttr属性是 multi-valued。因此,插件可以管理多种类型的组。默认情况下,插件轮询member属性。 -
memberOfAttr.定义在成员的用户条目中创建和管理的成员资格属性。默认情况下,插件将memberOf属性添加到用户条目中。
此外,插件语法提供插件路径、用于标识 MemberOf 插件、插件状态和其他配置参数的功能。
以下示例显示了默认的 MemberOf 插件条目配置:
dn: cn=MemberOf Plugin,cn=plugins,cn=config
cn: MemberOf Plugin
memberofallbackends: off
memberofattr: memberOf
memberofentryscope: dc=example,dc=com
memberofgroupattr: member
memberofskipnested: off
nsslapd-plugin-depends-on-type: database
nsslapd-pluginDescription: memberof plugin
nsslapd-pluginEnabled: off
nsslapd-pluginId: memberof
nsslapd-pluginInitfunc: memberof_postop_init
nsslapd-pluginPath: libmemberof-plugin
nsslapd-pluginType: betxnpostoperation
nsslapd-pluginVendor: 389 Project
nsslapd-pluginVersion: 2.4.5
objectClass: top
objectClass: nsSlapdPlugin
objectClass: extensibleObject
有关示例中的参数以及您可以设置的其他参数的详情,请参阅"配置和架构参考"文档中的 MemberOf 插件 部分。
1.5.4. 启用 MemberOf 插件 复制链接链接已复制到粘贴板!
您可以使用命令行或 Web 控制台启用 MemberOf 插件。
1.5.4.1. 使用命令行启用 MemberOf 插件 复制链接链接已复制到粘贴板!
使用 dsconf 实用程序启用 MemberOf 插件。
流程
启用插件:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof enable重启实例:
# dsctl instance_name restart
验证
查看插件配置详情:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof show dn: cn=MemberOf Plugin,cn=plugins,cn=config ... nsslapd-pluginEnabled: on ...
1.5.4.2. 使用 Web 控制台启用 MemberOf 插件 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台启用 MemberOf 插件。
先决条件
- 在 web 控制台中登录到实例。有关登录到 Web 控制台的详情,请参阅使用 Web 控制台登录到目录服务器。
流程
- 导航到 Plugins 菜单。
- 在插件列表中选择 MemberOf 插件。
-
将状态更改为
ON以启用插件。 - 重新启动实例。有关重启实例的说明,请参阅使用 Web 控制台启动和停止目录服务器实例。
1.5.5. 在每个服务器上配置 MemberOf 插件 复制链接链接已复制到粘贴板!
如果您不想复制 MemberOf 插件的配置,请使用命令行或 Web 控制台在每台服务器上手动配置插件。
1.5.5.1. 使用命令行在每个服务器上配置 MemberOf 插件 复制链接链接已复制到粘贴板!
默认情况下,MemberOf 插件从组条目读取 成员 成员资格属性,并将 memberOf 属性添加到用户条目中。但是,您可以将插件配置为读取组中的其他成员资格属性,将另一个属性添加到用户条目,跳过嵌套组,适用于所有数据库和其他设置。
例如,您希望 MemberOf 插件执行以下操作:
-
从组条目读取
uniqueMember属性以识别成员资格。 - 跳过嵌套组。
- 搜索所有数据库中的用户条目。
先决条件
- 您已启用了 MemberOf 插件。详情请参阅 启用 MemberOf 插件。
流程
(可选):显示 MemberOf 插件配置,以查看插件当前从组条目读取的成员资格属性:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof show ... memberofgroupattr: member ...该插件目前从 group 条目读取
member属性,以检索成员。将
uniqueMember属性设置为插件配置中的memberOfGroupAttr参数:# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --groupattr uniqueMembermemberOfGroupAttr参数是多值,您可以通过将它们全部传递给-groupattr 参数来设置多个值。例如:# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --groupattr member uniqueMember在使用分布式数据库的环境中,将插件配置为搜索所有数据库中的用户条目,而不是只使用本地数据库:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --allbackends on命令设置
memberOfAllBackends参数。配置插件以跳过嵌套组:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --skipnested on命令设置
memberOfSkipNested参数。可选:默认情况下,如果用户条目没有允许
memberOf属性的对象类,插件会将nsMemberOf对象类添加到用户条目中。要配置插件,将inetUser对象类添加到用户条目而不是nsMemberOf中,请运行:# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --autoaddoc inetUser命令设置
memberOfAutoAddOC参数。重启实例:
# dsctl instance_name restart
验证
查看 MemberOf 插件配置:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof show dn: cn=MemberOf Plugin,cn=plugins,cn=config cn: MemberOf Plugin memberofallbackends: on memberofattr: memberOf memberofautoaddoc: inetuser memberofentryscope: dc=example,dc=com memberofgroupattr: uniqueMember memberofskipnested: on ... nsslapd-pluginEnabled: on ...
1.5.5.2. 使用 Web 控制台在每个服务器上配置 MemberOf 插件 复制链接链接已复制到粘贴板!
默认情况下,MemberOf 插件从组条目读取 成员 成员资格属性,并将 memberOf 属性添加到用户条目中。但是,您可以将插件配置为读取组中的其他成员资格属性,跳过嵌套组,使用 Web 控制台处理所有数据库和其他设置。
例如,您希望 MemberOf 插件执行以下操作:
-
从
组条目读取成员和uniqueMember属性,以识别成员资格。 -
将插件的范围设置为
dc=example,dc=com。 - 跳过嵌套组。
- 搜索所有数据库中的用户条目。
前提条件
- 在 web 控制台中登录到实例。有关登录到 Web 控制台的详情,请参阅使用 Web 控制台登录到目录服务器。
- 您已启用了 MemberOf 插件。详情请参阅 启用 MemberOf 插件。
流程
- 导航到 LDAP 浏览器 菜单。
- 从插件列表中选择 MemberOf 插件。
-
将
uniqueMember属性添加到 Group Attribute 字段。 将插件的范围设置为
dc=example,dc=com:-
在 Subtree Scope 字段中输入
dc=example,dc=com。 单击下拉列表中的 Create "dc=example,dc=com "。
-
在 Subtree Scope 字段中输入
可选:设置要排除的子树。例如,您不希望插件在
ou=private,dc=example,dc=com子树中工作:-
输入
ou=private,dc=example,dc=com到 Exclude Subtree 字段。 - 单击下拉列表中的 Create "ou=private,dc=example,dc=com "。
-
输入
- 检查 All Backends,将插件配置为搜索所有数据库中的用户条目,而不是只搜索本地数据库。
- 选中 Skip Nested,以配置插件来跳过嵌套组。
- 单击 。
1.5.6. 在服务器间共享 MemberOf 插件配置 复制链接链接已复制到粘贴板!
默认情况下,每个服务器存储自己的 MemberOf 插件配置。通过插件的共享配置,您可以使用相同的设置,而无需在每个服务器上手动配置插件。目录服务器在 cn=config 后缀外存储共享配置并复制它。
例如,您要将插件共享配置存储在 cn=shared_MemberOf_config,dc=example,dc=com 条目中。
启用共享配置后,插件会忽略 cn=MemberOf Plugin,cn=plugins,cn=config 插件条目中设置的所有参数,并且仅使用共享配置条目中的设置。
前提条件
- 您可以在复制拓扑中的所有服务器上启用了 MemberOf 插件。详情请参阅 启用 MemberOf 插件。
流程
在服务器上启用共享配置条目:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof config-entry add "cn=shared_MemberOf_config,dc=example,dc=com" --attr memberOf --groupattr member Successfully created the cn=shared_MemberOf_config,dc=example,dc=com MemberOf attribute nsslapd-pluginConfigArea (config-entry) was set in the main plugin config命令将
nsslapd-pluginConfigArea属性设置为cn=shared_MemberOf_config,dc=example,dc=com。重启实例:
# dsctl instance_name restart在复制拓扑中的其他服务器上启用共享配置,这些配置应使用共享配置:
设置存储共享配置条目的可分辨名称(DN):
# dsconf -D "cn=Directory Manager" ldap://server2.example.com plugin memberof set --config-entry cn=shared_MemberOf_config,dc=example,dc=com重启实例:
# dsctl instance_name restart
验证
检查 MemberOf 插件是否使用共享配置:
# dsconf -D "cn=Directory Manager" ldap://server1.example.com plugin memberof show dn: cn=MemberOf Plugin,cn=plugins,cn=config cn: MemberOf Plugin ... nsslapd-pluginConfigArea: cn=shared_MemberOf_config,dc=example,dc=com ...可选:检查共享配置设置:
# dsconf -D "cn=Directory Manager" ldap://server1.example.com plugin memberof config-entry show "cn=shared_MemberOf_config,dc=example,dc=com" dn: cn=shared_MemberOf_config,dc=example,dc=com cn: shared_MemberOf_config memberofattr: memberOf memberofgroupattr: member objectClass: top objectClass: extensibleObject
1.5.7. 设置 MemberOf 插件的范围 复制链接链接已复制到粘贴板!
如果您配置了几个后端或多个嵌套后缀,您可以使用 memberOfEntryScope 和 memberOfEntryScopeExcludeSubtree 参数来设置 MemberOf 插件可以正常工作的后缀。
如果您将用户添加到组中,则 MemberOf 插件只有在用户和组中都位于插件范围内时,将 memberOf 属性添加到组中。
例如,以下流程将 MemberOf 插件配置为对 dc=example,dc=com 中的所有条目工作,但要排除 ou=private,dc=example,dc=com 中的条目。
前提条件
- 您可以在复制拓扑中的所有服务器上启用了 MemberOf 插件。详情请参阅 启用 MemberOf 插件。
流程
将 MemberOf 插件的 scope 值设置为
dc=example,dc=com:# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --scope "dc=example,dc=com"排除
ou=private,dc=example,dc=com中的条目:# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --exclude "ou=private,dc=example,com"如果您使用范围 DN 参数将用户条目
移出范围:-
MemberOf 插件在组条目中更新 membership 属性(如
member)以删除用户 DN 值。 MemberOf 插件更新用户条目中的
memberOf属性,以删除组 DN 值。注意在-
-exclude参数中设置的值的优先级高于范围中设置的值。如果这两个参数中设置的范围都重叠,MemberOf 插件仅适用于非覆盖的目录条目。
-
MemberOf 插件在组条目中更新 membership 属性(如
有关为 MemberOf 插件设置范围的详情,请参阅使用 Web 控制台在每个服务器上配置 MemberOf 插件。
1.5.8. 使用修复任务更新用户条目中的 memberOf 属性值 复制链接链接已复制到粘贴板!
MemberOf 插件根据 group 条目中的配置自动管理组成员条目中的 memberOf 属性。但是,您需要在以下情况中运行 fixup 任务,以避免在服务器插件管理以及用户条目中定义的实际成员资格之间的不一致:
- 在启用 MemberOf 插件前,您已将组成员添加到组中。
-
您可以在用户条目中手动编辑
memberOf属性。 -
您已将新用户条目导入或复制到已具有
memberOf属性的服务器。
请注意,您只能 在本地运行 修复任务。在复制环境中,Directory 服务器会在 Directory 服务器复制更新的条目后更新其他服务器上的 memberOf 属性。
前提条件
- 您可以在复制拓扑中的所有服务器上启用了 MemberOf 插件。详情请参阅 启用 MemberOf 插件。
流程
例如,要更新
dc=example,dc=com条目和子项中的memberOf值,请运行:# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof fixup "dc=example,dc=com" Attempting to add task entry... Successfully added task entry默认情况下,修复任务会在包含
inetUser,inetAdmin, 或nsMemberOf对象类的所有条目中更新memberOf值。如果您希望修复任务也可以用于包含其他对象类的条目,请使用
-f过滤器选项:# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof fixup -f "(|(objectclass=inetuser)(objectclass=inetadmin)(objectclass=nsmemberof)(objectclass=nsmemberof)(objectclass=inetOrgPerson))" "dc=example,dc=com"在这个版本中,任务会更新包含
inetUser,inetAdmin,nsMemberOf, 或inetOrgPerson对象类的所有条目中的memberOf值。