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 插件只更新存储在与组相同的数据库中的用户条目。要在所有数据库中更新用户,您必须在 上将 memberOfAllBackends 参数设置为。有关设置 memberOfAllBackends 参数的详情,请参阅使用 Web 控制台在每个服务器上配置 MemberOf 插件

1.5.2. MemberOf 插件所需的对象类

默认情况下,MemberOf 插件将 nsMemberOf 对象类添加到用户条目中,以提供 memberOf 属性。nsMemberOf 对象类足以使插件正常工作。

另外,您可以创建包含 inetUser,inetAdmin,inetOrgPerson 对象类的用户条目。这些对象类支持 memberOf 属性。

要配置嵌套组,组必须使用 extensibleObject 对象类。

注意

如果目录条目不包含支持所需属性操作的对象类失败,并显示以下错误:

LDAP: error code 65 - Object Class Violation
Copy to Clipboard Toggle word wrap

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
Copy to Clipboard Toggle word wrap

有关示例中的参数以及您可以设置的其他参数的详情,请参阅"配置和架构参考"文档中的 MemberOf 插件 部分。

1.5.4. 启用 MemberOf 插件

您可以使用命令行或 Web 控制台启用 MemberOf 插件。

1.5.4.1. 使用命令行启用 MemberOf 插件

使用 dsconf 实用程序启用 MemberOf 插件。

流程

  1. 启用插件:

    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof enable
    Copy to Clipboard Toggle word wrap
  2. 重启实例:

    # dsctl instance_name restart
    Copy to Clipboard Toggle word wrap

验证

  • 查看插件配置详情:

    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof show
    
    dn: cn=MemberOf Plugin,cn=plugins,cn=config
    ...
    nsslapd-pluginEnabled: on
    ...
    Copy to Clipboard Toggle word wrap

1.5.4.2. 使用 Web 控制台启用 MemberOf 插件

您可以使用 Web 控制台启用 MemberOf 插件。

先决条件

流程

  1. 导航到 Plugins 菜单。
  2. 在插件列表中选择 MemberOf 插件。
  3. 将状态更改为 ON 以启用插件。
  4. 重新启动实例。有关重启实例的说明,请参阅使用 Web 控制台启动和停止目录服务器实例

1.5.5. 在每个服务器上配置 MemberOf 插件

如果您不想复制 MemberOf 插件的配置,请使用命令行或 Web 控制台在每台服务器上手动配置插件。

默认情况下,MemberOf 插件从组条目读取 成员 成员资格属性,并将 memberOf 属性添加到用户条目中。但是,您可以将插件配置为读取组中的其他成员资格属性,将另一个属性添加到用户条目,跳过嵌套组,适用于所有数据库和其他设置。

例如,您希望 MemberOf 插件执行以下操作:

  • 从组条目读取 uniqueMember 属性以识别成员资格。
  • 跳过嵌套组。
  • 搜索所有数据库中的用户条目。

先决条件

流程

  1. (可选):显示 MemberOf 插件配置,以查看插件当前从组条目读取的成员资格属性:

    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof show
    
    ...
    memberofgroupattr: member
    ...
    Copy to Clipboard Toggle word wrap

    该插件目前从 group 条目读取 member 属性,以检索成员。

  2. uniqueMember 属性设置为插件配置中的 memberOfGroupAttr 参数:

    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --groupattr uniqueMember
    Copy to Clipboard Toggle word wrap

    memberOfGroupAttr 参数是多值,您可以通过将它们全部传递给- groupattr 参数来设置多个值。例如:

    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --groupattr member uniqueMember
    Copy to Clipboard Toggle word wrap
  3. 在使用分布式数据库的环境中,将插件配置为搜索所有数据库中的用户条目,而不是只使用本地数据库:

    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --allbackends on
    Copy to Clipboard Toggle word wrap

    命令设置 memberOfAllBackends 参数。

  4. 配置插件以跳过嵌套组:

    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --skipnested on
    Copy to Clipboard Toggle word wrap

    命令设置 memberOfSkipNested 参数。

  5. 可选:默认情况下,如果用户条目没有允许 memberOf 属性的对象类,插件会将 nsMemberOf 对象类添加到用户条目中。要配置插件,将 inetUser 对象类添加到用户条目而不是 nsMemberOf 中,请运行:

    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --autoaddoc inetUser
    Copy to Clipboard Toggle word wrap

    命令设置 memberOfAutoAddOC 参数。

  6. 重启实例:

    # dsctl instance_name restart
    Copy to Clipboard Toggle word wrap

验证

  • 查看 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
    ...
    Copy to Clipboard Toggle word wrap

默认情况下,MemberOf 插件从组条目读取 成员 成员资格属性,并将 memberOf 属性添加到用户条目中。但是,您可以将插件配置为读取组中的其他成员资格属性,跳过嵌套组,使用 Web 控制台处理所有数据库和其他设置。

例如,您希望 MemberOf 插件执行以下操作:

  • 组条目 读取成员和 uniqueMember 属性,以识别成员资格。
  • 将插件的范围设置为 dc=example,dc=com
  • 跳过嵌套组。
  • 搜索所有数据库中的用户条目。

前提条件

流程

  1. 导航到 LDAP 浏览器 菜单。
  2. 从插件列表中选择 MemberOf 插件。
  3. uniqueMember 属性添加到 Group Attribute 字段。
  4. 将插件的范围设置为 dc=example,dc=com

    1. Subtree Scope 字段中输入 dc=example,dc=com
    2. 单击下拉列表中的 Create "dc=example,dc=com "。

      configuring the memberof 1

  5. 可选:设置要排除的子树。例如,您不希望插件在 ou=private,dc=example,dc=com 子树中工作:

    1. 输入 ou=private,dc=example,dc=comExclude Subtree 字段。
    2. 单击下拉列表中的 Create "ou=private,dc=example,dc=com "。
  6. 检查 All Backends,将插件配置为搜索所有数据库中的用户条目,而不是只搜索本地数据库。
  7. 选中 Skip Nested,以配置插件来跳过嵌套组。
  8. 单击 Save Config

1.5.6. 在服务器间共享 MemberOf 插件配置

默认情况下,每个服务器存储自己的 MemberOf 插件配置。通过插件的共享配置,您可以使用相同的设置,而无需在每个服务器上手动配置插件。目录服务器在 cn=config 后缀外存储共享配置并复制它。

例如,您要将插件共享配置存储在 cn=shared_MemberOf_config,dc=example,dc=com 条目中。

重要

启用共享配置后,插件会忽略 cn=MemberOf Plugin,cn=plugins,cn=config 插件条目中设置的所有参数,并且仅使用共享配置条目中的设置。

前提条件

  • 您可以在复制拓扑中的所有服务器上启用了 MemberOf 插件。详情请参阅 启用 MemberOf 插件

流程

  1. 在服务器上启用共享配置条目:

    # 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
    Copy to Clipboard Toggle word wrap

    命令将 nsslapd-pluginConfigArea 属性设置为 cn=shared_MemberOf_config,dc=example,dc=com

  2. 重启实例:

    # dsctl instance_name restart
    Copy to Clipboard Toggle word wrap
  3. 在复制拓扑中的其他服务器上启用共享配置,这些配置应使用共享配置:

    1. 设置存储共享配置条目的可分辨名称(DN):

      # dsconf -D "cn=Directory Manager" ldap://server2.example.com plugin memberof set --config-entry cn=shared_MemberOf_config,dc=example,dc=com
      Copy to Clipboard Toggle word wrap
    2. 重启实例:

      # dsctl instance_name restart
      Copy to Clipboard Toggle word wrap

验证

  1. 检查 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
    ...
    Copy to Clipboard Toggle word wrap
  2. 可选:检查共享配置设置:

    # 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
    Copy to Clipboard Toggle word wrap

1.5.7. 设置 MemberOf 插件的范围

如果您配置了几个后端或多个嵌套后缀,您可以使用 memberOfEntryScopememberOfEntryScopeExcludeSubtree 参数来设置 MemberOf 插件可以正常工作的后缀。

如果您将用户添加到组中,则 MemberOf 插件只有在用户和组中都位于插件范围内时,将 memberOf 属性添加到组中。

例如,以下流程将 MemberOf 插件配置为对 dc=example,dc=com 中的所有条目工作,但要排除 ou=private,dc=example,dc=com 中的条目。

前提条件

  • 您可以在复制拓扑中的所有服务器上启用了 MemberOf 插件。详情请参阅 启用 MemberOf 插件

流程

  1. 将 MemberOf 插件的 scope 值设置为 dc=example,dc=com

    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --scope "dc=example,dc=com"
    Copy to Clipboard Toggle word wrap
  2. 排除 ou=private,dc=example,dc=com 中的条目:

    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --exclude "ou=private,dc=example,com"
    Copy to Clipboard Toggle word wrap

    如果您使用范围 DN 参数将用户条目 移出范围

    • MemberOf 插件在组条目中更新 membership 属性(如 member )以删除用户 DN 值。
    • MemberOf 插件更新用户条目中的 memberOf 属性,以删除组 DN 值。

      注意

      在- -exclude 参数中设置的值的优先级高于 范围中设置的值。如果这两个参数中设置的范围都重叠,MemberOf 插件仅适用于非覆盖的目录条目。

有关为 MemberOf 插件设置范围的详情,请参阅使用 Web 控制台在每个服务器上配置 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
    Copy to Clipboard Toggle word wrap

    默认情况下,修复任务会在包含 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"
    Copy to Clipboard Toggle word wrap

    在这个版本中,任务会更新包含 inetUser,inetAdmin,nsMemberOf, 或 inetOrgPerson 对象类的所有条目中的 memberOf 值。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat