第 8 章 整理和分组条目

目录中包含的条目可以以不同的方式分组,以简化用户帐户的管理。Red Hat Directory Server 支持各种方法对条目进行分组并在条目间共享属性。要充分利用角色和服务类提供的功能,请在规划目录部署时确定目录拓扑。

8.1. 使用组

与操作系统类似,您可以将用户添加到目录服务器中的组中。组以角色的形式工作。如果使用角色,则分配的角色的 DN 存储在用户对象的 nsRoleDN 属性中。如果您使用组,则属于此组成员的用户的 DN 存储在组对象的 成员属性 中。如果启用了 memberOf 插件,则该用户所属的组也存储在用户对象的 memberOf 属性中。启用此插件后,组也具有角色的好处,您可以列出用户的组成员资格,类似于使用角色时类似。另外,组比角色更快。
有关使用 memberOf 插件的详情,请参考 第 8.1.4 节 “列出用户条目中的组成员身份”

8.1.1. 组的不同类型

从命令行创建静态和动态组的过程类似。组条目包含组名称、组的类型和 members 属性。
组类型有几个不同的选项;这些选项在 Red Hat Directory Server 10 配置、命令和文件参考 中进行了更详细的描述。本例中 组的类型 指的是定义成员属性的类型:
  • groupOfNames (推荐)是一个一个简单的组,允许添加任何条目。用于确定此成员的属性是 成员
  • groupOfUniqueNames (如 groupOfNames )只是将用户 DN 列为成员,但成员必须是唯一的。这可防止用户作为组成员添加多次,这是防止自引用组成员资格的方法。用于确定此成员的属性是 uniqueMember
  • groupOfURLs 使用 LDAP URL 列表来过滤和生成其成员资格列表。任何动态组都需要此对象类,并可与 groupOfNamesgroupOfUniqueNames 一起使用。
  • groupOfCertificatesgroupOfURLs 类似,它使用 LDAP 过滤器搜索和识别证书(或实际、证书名称)来识别组成员。这对基于组的访问控制非常有用,因为可以授予组的特殊访问权限。用于确定此成员的属性是 memberCertificate
下表显示了组的默认属性:

表 8.1. 动态和静态组架构

组类型 组对象类 成员属性
Static groupOfNames [a] 成员
groupOfUniqueNames [a] uniqueMember
dynamic groupOfURLs memberURL
groupOfCertificates memberCertificate
[a] 如果此对象类与其中一个动态对象类一同使用,则组将变为动态。
以下两个示例显示了一个静态和动态组条目:

例 8.1. 静态组条目

静态组条目列出了组的特定成员。例如:
objectClass: top
objectClass: groupOfUniqueNames
cn: static group
description: Example static group.
uniqueMember: uid=mwhite,ou=People,dc=example,dc=com
uniqueMember: uid=awhite,ou=People,dc=example,dc=com

例 8.2. 动态组条目

动态组使用至少一个 LDAP URL 来识别属于组的条目,并可指定多个 LDAP URL,或者与 groupOfUniqueNames 等另一个组对象类一起使用,可以明确列出某些组成员以及动态 LDAP URL。例如:
objectClass: top
objectClass: groupOfUniqueNames
objectClass: groupOfURLs
cn: dynamic group
description: Example dynamic group.
memberURL: ldap:///dc=example,dc=com??sub?(&(objectclass=person)(cn=*sen*))
注意
memberOf 插件不支持动态生成的组成员资格。如果您设置了 memberURL 属性而不是列出属性中的组成员,则 memberOf 插件不会将 memberOf 属性添加到与过滤器匹配的用户对象。

8.1.2. 创建静态组

目录服务器仅支持使用命令行创建静态组。

8.1.2.1. 使用命令行创建静态组

这部分论述了如何使用命令行创建不同类型的静态组。
有关不同静态组的详情,请参考 第 8.1.1 节 “组的不同类型”

使用 groupOfNames 对象类创建静态组

dsidm 实用程序在指定的基本 DN 的 cn=Groups 条目中创建静态组。
例如,要在 cn=Groups,dc=example,dc=com 条目中使用 groupOfNames 对象类创建静态 example_group
# dsidm -D "cn=Directory Manager" ldap://server.example.com -b "dc=example,dc=com" group create --cn "example_group"

使用 groupOfUniqueNames 对象类创建静态组

要使用 groupOfUniqueNames 对象类创建静态组,请使用 ldapmodify 工具来添加该条目。
例如,要在 cn=Groups,dc=example,dc=com 条目中使用 groupOfUniqueNames 对象类创建静态 example_group 组:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
dn: cn=example_group,cn=Groups,dc=example,dc=com
changetype: add
objectClass: top
objectClass: groupOfUniqueNames
cn: example_group
description: Example static group with unique members

8.1.3. 创建动态组

目录服务器仅支持使用命令行创建动态组。

8.1.3.1. 使用命令行创建动态组

这部分论述了如何使用命令行创建不同类型的动态组。
有关不同动态组的详情,请参考 第 8.1.1 节 “组的不同类型”

使用 groupOfURLs 对象类创建动态组

例如,要在 cn=Groups,dc=example,dc=com 条目中使用 groupOfURLs 对象类创建动态 example_group 组:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
dn: cn=example_group,cn=Groups,dc=example,dc=com
changetype: add
objectClass: top
objectClass: groupOfURLs
cn: example_group
description: Example dynamic group for user entries
memberURL: ldap:///dc=example,dc=com??sub?(&(objectclass=person)(cn=*sen*))

使用 groupOfCertificates 对象类创建动态组

例如,要在 cn=Groups,dc=example,dc=com 条目中使用 groupOfCertificates 对象类创建动态 example_group 组:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
dn: cn=example_group,cn=Groups,dc=example,dc=com
changetype: add
objectClass: top
objectClass: groupOfURLs
cn: example_group
description: Example dynamic group for certificate entries
memberCertificate: ...

8.1.4. 列出用户条目中的组成员身份

属于组的条目在组条目本身中以某种方式定义。这样便可轻松查看组并查看其成员并集中管理组成员资格。但是,无法找出单个用户所属的组。用户条目中没有指示其成员资格,如角色有。
MemberOf 插件将组成员资格列表与对应的用户条目相关联。
MemberOf 插件分析组条目中的 member 属性,并在成员条目中自动写入对应的 memberOf 属性。(默认情况下,这将检查 member 属性,但可使用多个属性实例来支持多个不同的组类型。)
随着成员资格更改,插件会更新用户条目上的 memberOf 属性。MemberOf 插件提供了一种通过查看条目(包括嵌套组成员资格)查看用户所属的组的方法。通过嵌套组重新跟踪成员资格可能比较困难,但 MemberOf 插件显示所有组的成员资格,直接和间接。
MemberOf 插件管理静态组的成员属性,而不是动态组或循环组。

8.1.4.1. 使用 memberOf 插件时的注意事项

本节论述了在使用 memberOf 插件时的重要注意事项。
在 Replication Topology 中使用 memberOf 插件
在复制拓扑中有两个管理 memberOf 属性的方法:
使用带有分布式数据库的 memberOf 插件
第 2.2.1 节 “创建数据库” 所述,您可以将目录的子树存储在单独的数据库中。默认情况下,memberOf 插件仅更新存储在与组相同的数据库中的用户条目。要启用插件同时将不同数据库中的用户更新为组,您必须将 memberOfAllBackends 参数设置为 on。请参阅 第 8.1.4.5.2 节 “使用 Web 控制台在每个服务器上配置 MemberOf 插件”

8.1.4.2. memberOf Plug-In 所需的对象类

memberOf 插件 默认情况下,memberOf 插件会将 MemberOf 对象类添加到对象中,以提供 memberOf 属性。此对象类可以安全地添加到任何对象,且不需要进一步的操作才能使此插件正常工作。或者,您可以创建包含 inetUserinetAdmin 对象类的用户对象。这两个对象类也支持 memberOf 属性。
要配置嵌套组,组必须使用 Scalable Object 对象类。
注意
如果目录条目不包含支持所需属性的对象类,则操作会失败,并显示以下错误:
LDAP: error code 65 - Object Class Violation

8.1.4.3. MemberOf 插件语法

MemberOf 插件实例定义了两个属性,一个用于组成员属性(memberOfGroupAttr),另一个用于在成员用户条目中创建和管理的属性(memberOfAttr)。
memberOfGroupAttr 属性是多值。由于不同类型的组使用不同的成员属性,因此使用多个 memberOfGroupAttr 属性允许插件管理多种类型的组。
该插件实例还提供插件路径和功能来标识 MemberOf 插件,并包含一个 state 设置来启用插件,这两个插件都是所有插件所必需的。默认 MemberOf 插件显示在 例 8.3 “默认 MemberOf 插件条目” 中。

例 8.3. 默认 MemberOf 插件条目

 dn: cn=MemberOf Plugin,cn=plugins,cn=config
 objectClass: top
 objectClass: nsSlapdPlugin
 objectClass: extensibleObject
 cn: MemberOf Plugin  
 nsslapd-pluginPath: libmemberof-plugin  
 nsslapd-pluginInitfunc: memberof_postop_init  
 nsslapd-pluginType: postoperation
 nsslapd-pluginEnabled: on  
 nsslapd-plugin-depends-on-type: database
 memberOfGroupAttr: member  
 memberOfGroupAttr: uniqueMember  
 memberOfAttr: memberOf  
 memberOfAllBackends: on  
 nsslapd-pluginId: memberOf
 nsslapd-pluginVersion: X.Y.Z
 nsslapd-pluginVendor: Red Hat, Inc.
 nsslapd-pluginDescription: memberOf plugin
有关示例和其他您可以设置的参数的详细信息,请参阅 Red Hat Directory Server Command, Configuration, Configuration, and File Reference 中的 MemberOf Plug-in Attributes 部分。
注意
为了保持与旧版本的目录服务器的向后兼容性,仅允许单个成员属性(默认为 成员),可能需要包含 成员 组属性或之前使用的任何成员属性,除了插件配置中使用的任何新成员属性。
 memberOfGroupAttr: member  
 memberOfGroupAttr: uniqueMember  

8.1.4.4. 启用 MemberOf 插件

本节论述了如何启用 MemberOf 插件。
8.1.4.4.1. 使用命令行启用 MemberOf 插件
使用命令行启用 MemberOf 插件:
  1. 使用 dsconf 工具启用插件:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof enable
  2. 重启实例:
    # dsctl instance_name restart
8.1.4.4.2. 使用 Web 控制台启用 MemberOf 插件
使用 Web 控制台启用 MemberOf 插件:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”
  2. 选择实例。
  3. 选择 Plugins 菜单。
  4. 选择 MemberOf 插件。
  5. 将状态更改为 ON 以启用插件。

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

如果您不想复制 MemberOf 插件的配置,请在每台服务器中手动配置插件。
8.1.4.5.1. 使用命令行在每个服务器上配置 MemberOf 插件
使用命令行配置 MemberOf 插件:
  1. 要从与成员不同的属性(这是默认值)检索 组的成员,请将 memberOfGroupAttr 参数设置为对应的属性名称。
    例如,要从 uniqueMember 属性读取组成员,请替换 memberOfGroupAttr 的当前值:
    1. 另外,还可显示当前配置的属性:
      # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof show
      ...
      memberofgroupattr: member
      ...
      命令显示目前只有 member 属性配置为检索组的成员。
    2. 从当前设置的配置中删除所有属性:
      # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --groupattr delete
      Successfully changed the cn=MemberOf Plugin,cn=plugins,cn=config
      注意
      无法删除特定的组属性。
    3. 在配置中添加 uniqueMember 属性:
      # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --groupattr uniqueMember
      successfully added memberOfGroupAttr value "uniqueMember"
      要设置多个属性,请将全部传递到 --groupattr 参数。例如:
      # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --groupattr member uniqueMember ...
  2. 默认情况下,MemberOf 插件将 memberOf 属性添加到用户条目中。要使用其他属性,请在 memberOfAttr 参数中设置属性的名称。
    例如,要将 customMemberOf 属性添加到用户记录中,请替换 memberOfAttr 的当前值:
    1. 另外,还可显示当前配置的属性:
      # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof show
      ...
      memberofattr: memberOf
      ...
    2. 配置 MemberOf 插件,将 customMemberOf 属性添加到用户条目中:
      # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --attr customMemberOf
      memberOfAttr set to "customMemberOf"
      注意
      您只能将此参数设置为支持 DN 语法的属性。
  3. 在使用分布式数据库的环境中,您可以将插件配置为在所有数据库中搜索用户条目,而不是只搜索本地数据库:
    dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --allbackends on
    memberOfAllBackends enabled successfully
  4. 重启实例:
    # dsctl instance_name restart
8.1.4.5.2. 使用 Web 控制台在每个服务器上配置 MemberOf 插件
使用命令行配置 MemberOf 插件:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”
  2. 选择实例。
  3. 打开 Plugins 菜单。
  4. 选择 memberOf 插件。
  5. 将状态更改为 ON 以启用插件。
  6. 填写字段来配置插件。例如,如果将 uniqueMember 属性添加到组中,配置插件会将 customMemberOf 属性添加到用户条目中:
  7. 点击 Save

8.1.4.6. 使用 MemberOf 插件共享配置

默认情况下,MemberOf 插件的配置存储在每台服务器上。使用插件的共享配置功能,配置可以存储在 cn=config 后缀和复制之外。管理员可以使用相同的设置,而无需在每个服务器上手动配置插件。
  1. MemberOf 插件添加共享配置条目。例如:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof config-entry add "cn=shared_MemberOf_config,dc=example,dc=com" --groupattr "member" --attr "memberOf"
    这会在您运行命令的服务器上自动启用共享配置条目。
  2. 重启实例:
    # dsctl instance_name restart
  3. 在应使用共享配置的复制拓扑中的所有其他服务器上,启用共享配置:
    1. 设置存储共享配置的 DN。例如:
      # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --config-entry cn=shared_MemberOf_config,dc=example,dc=com
    2. 重启实例:
      # dsctl instance_name restart
重要
启用共享配置后,插件会忽略 cn=MemberOf Plugin,cn=plugins,cn=config 插件条目中设置的所有参数,并使用共享配置条目的设置。

8.1.4.7. 设置 MemberOf 插件的范围

如果您配置了几个后端或多嵌套后缀,您可以使用 memberOfEntryScopememberOfEntryScopeExcludeSubtree 参数来设置 MemberOf 插件在哪些后缀。
如果您将用户添加到组中,则 MemberOf 插件仅当用户和组都位于插件范围内时,才会将 memberOf 属性添加到组中。例如,要将 MemberOf 插件配置为在 dc=example,dc=com 中的所有条目上工作,但要排除 ou=private,dc=example,dc=com 中的条目:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --scope "dc=example,com"
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --exclude "dc=group,dc=example,com"
如果您使用 --scope DN 参数将用户条目从范围移出:
  • 组成员属性(如 成员 )在组条目中更新,以删除用户 DN 值。
  • memberOf 属性在用户条目中更新,以删除组 DN 值。
注意
--exclude 参数中设置的值的优先级高于 --scope 中设置的值。如果两个参数中设置的范围都重叠,则 MemberOf 插件仅适用于非重叠的目录条目。

8.1.4.8. 重新生成 memberOf

MemberOf 插件根据组条目中的配置自动管理组成员条目上的 memberOf 属性。但是,可以在用户条目中手动编辑 memberOf 属性,或者新条目可以被导入或复制到已设置了 memberOf 属性的服务器。这些情况会在由服务器插件管理的 memberOf 配置和条目中定义的实际成员资格之间造成不一致的情况。
例如,要在 dc=example,dc=com 条目和子条目中重新生成 memberOf 值:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof fixup -f "(|(objectclass=inetuser)(objectclass=inetadmin)(objectclass=nsmemberof))" "dc=example,dc=com"
Attempting to add task entry...
Successfully added task entry
-f filter 选项是可选的。使用过滤器在与过滤器匹配的用户条目中重新生成 memberOf 属性。如果没有指定过滤器,任务会在包含 inetUserinetAdminnsMemberOf 对象类的所有条目中重新生成属性。
注意
重新生成任务在本地运行,即使条目本身被复制。这意味着,在复制更新的条目前,其他服务器上条目的 memberOf 属性不会更新。

8.1.5. 自动添加条目来指定组

组管理是管理目录数据的一个关键因素,特别是对于使用 Directory Server 数据和机构或者组将功能应用到条目的客户端。组可以更轻松地在目录中一致、可靠地应用策略。密码策略、访问控制列表和其他规则都可以基于组成员资格。
能够在创建帐户时自动将新条目分配给组,确保适当的策略和功能会立即应用到这些条目 - 无需管理员干预。
动态组是自动创建组和自动分配成员的方法,因为组中自动包含任何匹配的条目。要应用目录服务器策略和设置,这就足够了。但是,LDAP 应用程序和客户端通常需要静态和显式组成员列表,才能执行任何操作。静态组中的所有成员都必须手动添加到这些组中。
静态组本身无法搜索动态组等成员,但有一种方法允许静态组自动向其添加成员 - Auto Membership 插件
自动成员规则本质上允许静态组像动态组一样操作。不同的自动成员定义创建在所有新目录条目上自动运行的搜索。自动成员规则搜索和识别匹配的条目,就像动态搜索过滤器一样,然后将这些条目作为成员明确添加到静态组中。
注意
默认情况下,cn=Auto Membership Plugin,cn=plugins,cn=config 条目中的 autoMemberProcessModifyOps 参数设置为 on。使用这个设置时,当管理员通过编辑用户条目将用户移到其他组时,自动成员插件也会更新组成员资格。
如果将 autoMemberProcessModifyOps 设置为 off,则目录服务器仅在向用户添加组条目时调用插件,您必须手动运行修复任务来更新组成员资格。
Auto Membership 插件可以针对目录中存储的任何类型的对象:用户、机器和网络设备、客户数据或其他资产。
注意
Auto Membership 插件根据定义的标准添加新成员到现有组中。它不会为新条目创建一个组。
要在创建特定类型的新条目时创建对应的组条目,请使用 Managed Entries 插件。这在 第 8.3 节 “自动创建双条目” 中阐述。

8.1.5.1. 查看自动成员规则的结构

Auto Membership 插件本身是 cn=plugins,cn=config 中的容器条目。组分配通过子条目定义。
8.1.5.1.1. 自动成员配置条目
自动成员规则分配是通过主定义条目(一个 Auto Membership 插件条目的子条目)创建的。每个定义条目定义三个元素:
  • 用于识别条目的 LDAP 搜索,包括搜索范围和搜索过滤器(autoMemberScopeautoMemberFilter)
  • 要添加成员条目的默认组(autoMemberDefaultGroup)
  • 成员条目格式,即组条目中的属性,如 member 和属性值,如 dn (自动MemberGroupingAttr)
定义是自动成员规则的基本配置。它识别所有需要的信息:匹配的成员条目是什么,以及该成员所属的组。
例如,此定义将对象类设置为 ntUser 的所有用户分配给 cn=windows-users 组:
dn: cn=Windows Users,cn=Auto Membership Plugin,cn=plugins,cn=config
objectclass: autoMemberDefinition
autoMemberScope: ou=People,dc=example,dc=com
autoMemberFilter: objectclass=ntUser
autoMemberDefaultGroup: cn=windows-group,cn=groups,dc=example,dc=com
autoMemberGroupingAttr: member:dn
有关此条目中可以设置的属性和其他属性的详情,请查看 红帽目录服务器 配置、命令和文件参考 中的 cn=Auto Membership Plugin,cn=plugins,cn=config 条目描述。
8.1.5.1.2. 其他正则表达式条目
对于与用户组类似,可能所有匹配条目都应当添加为成员,简单的定义就足够了。但是,根据其他属性的值,可能存在与 LDAP 搜索过滤器匹配的实例。例如,可能需要根据其 IP 地址或物理位置将机器添加到不同的组中;用户可能需要根据其员工 ID 号在不同的组中。
自动成员规则可以使用正则表达式在组中包含或排除条目上提供额外的条件,然后是一个新的、特定的组来将这些所选条目添加到其中。
例如,自动成员定义将要添加到通用主机组的所有计算机设置为通用主机组。

例 8.4. 主机组的自动定义

dn: cn=Hostgroups,cn=Auto Membership Plugin,cn=plugins,cn=config
objectclass: autoMemberDefinition
cn: Hostgroups
autoMemberScope: dc=example,dc=com
autoMemberFilter: objectclass=ipHost
autoMemberDefaultGroup: cn=systems,cn=hostgroups,dc=example,dc=com
autoMemberGroupingAttr: member:dn
添加了正则表达式规则,以便给定范围内具有完全限定域名的任何机器都添加到 web 服务器组中。

例 8.5. Web 服务器组的正则表达式条件

dn: cn=webservers,cn=Hostgroups,cn=Auto Membership Plugin,cn=plugins,cn=config
objectclass: autoMemberRegexRule
description: Group for webservers
cn: webservers
autoMemberTargetGroup: cn=webservers,cn=hostgroups,dc=example,dc=com
autoMemberInclusiveRegex: fqdn=^www\.web[0-9]+\.example\.com
因此,添加的任何主机机器都带有一个完全限定域名,它与表达式 ^www\.web[0-9]+\.example\.com (如 www.web1.example.com )添加到为该精确正则表达式定义的 cn=webservers 组中。任何其它机器条目都与 LDAP 过滤器 objectclass=ipHost 匹配,但具有不同的完全限定域名,也会添加到主定义条目中定义的通用主机组 cn=systems
然后,定义中的组是与常规定义匹配的条目的回退,但不满足正则表达式规则中的条件。
正则表达式规则是自动成员定义的子条目。

图 8.1. 正则表达式条件

正则表达式条件
每个规则都可以包含多个包含和排除表达式。(不包括首先评估。) 如果条目与任何包含规则匹配,则会将其添加到组中。
只能指定一个用于正则表达式规则的目标组。

表 8.2. 正则表达式条件属性

属性 描述
autoMemberRegexRule (必需对象类) 将条目标识为正则表达式规则。此条目必须是自动成员定义的子项(对象类:autoMemberDefinition)。
autoMemberInclusiveRegex 设置用于标识要包含的条目的正则表达式。只有匹配的条目才会添加到组中。可以使用多个正则表达式,如果条目与其中任何一个表达式匹配,它将包含在组中。
表达式的格式是一个 Perl 兼容的正则表达式(PCRE)。有关 PCRE 模式的更多信息,请参阅 pcresyntax(3) man page。
这是一个多值属性。
autoMemberExclusiveRegex 设置正则表达式,用于识别要排除的条目。如果条目与排除条件匹配,则 不会包含在 组中。可以使用多个正则表达式,如果条目与其中任何一个表达式匹配,它将包含在组中。
表达式的格式是一个 Perl 兼容的正则表达式(PCRE)。有关 PCRE 模式的更多信息,请参阅 pcresyntax(3) man page。
这是一个多值属性。
注意
排除条件会首先评估,优先于 include 条件。
autoMemberTargetGroup 如果满足正则表达式条件,则设置要将条目添加到成员的组。

8.1.5.2. 配置自动成员资格 定义

要使用 Auto Membership 插件,请为插件创建定义。
8.1.5.2.1. 使用命令行配置 自动成员资格定义
使用命令行创建 Auto Membership 定义:
  1. 启用 Auto Membership 插件:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin automember enable
    Enabled Auto Membership Plugin
  2. 创建 Auto Membership 定义。例如:
    #  dsconf -D "cn=Directory Manager" ldap://server.example.com plugin automember definition definition_name add --default-group "cn=windows-group,cn=groups,dc=example,dc=com" --scope "ou=People,dc=example,dc=com" --filter "objectclass=ntUser" --grouping-attr "member:dn"
    Automember definition created successfully!
  3. 另外,您可以在 Auto Membership 定义中设置更多参数,例如,使用正则表达式来识别条目包含。使用 ldapmodify 工具在 cn=definition_name,cn=Auto Membership Plugin,cn=plugins,cn=config 条目中添加或更新这些参数。有关您可以设置的参数,请参阅 Red Hat Directory Server Configuration, Command, and File Reference 中的 cn=Auto Membership Plugin,cn=plugins,cn=config 条目描述。
  4. 重启实例:
    # dsctl instance_name restart
8.1.5.2.2. 使用 Web 控制台配置自动成员资格定义
使用 Web 控制台创建 Auto Membership 定义:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”
  2. 选择实例。
  3. 打开 Plugins 菜单。
  4. 选择 Auto Membership 插件。
  5. 将状态更改为 ON 以启用插件。
  6. Add Definition
  7. 填写字段。例如:
  8. (可选)添加正则表达式过滤器。
  9. 点击 Save

8.1.5.3. 更新现有条目以应用自动成员资格定义

默认情况下,cn=Auto Membership Plugin,cn=plugins,cn=config 条目中的 autoMemberProcessModifyOps 参数被启用。使用这个设置时,当管理员通过编辑用户条目将用户移到其他组时,自动成员 插件也会更新组成员资格。但是,如果您将 autoMemberProcessModifyOps 设置为 off,您必须在向目录添加新条目或更改现有条目时手动运行修复任务。
创建任务条目:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin automember fixup -f "filter" -s scope
任务完成后,该条目将从目录配置中删除。

8.1.5.4. 自动成员规则示例

自动成员规则通常将应用到用户和机器(尽管可应用到任何类型的条目)。有一些示例在规划自动成员规则时可能很有用:
  • 基于 IP 地址的不同主机组
  • Windows 用户组
  • 基于员工 ID 的不同用户组

例 8.6. 按 IP 地址的主机组

自动成员规则首先定义规则的范围和目标。第 8.1.5.1.2 节 “其他正则表达式条目” 中的示例使用配置组来定义 fallback 组和正则表达式条目来排序匹配的条目。
范围用于查找 所有 主机条目。然后,插件通过正则表达式条目进行迭代。如果条目与包含正则表达式匹配,则会将其添加到该主机组中。如果它与任何组不匹配,则会将其添加到默认组中。
实际的插件配置条目配置如下,用于定义条目和两个正则表达式条目,用于将主机过滤到 Web 服务器组或邮件服务器组中。
configuration entry
dn: cn=Hostgroups,cn=Auto Membership Plugin,cn=plugins,cn=config
objectclass: autoMemberDefinition
cn: Hostgroups
autoMemberScope: dc=example,dc=com
autoMemberFilter: objectclass=bootableDevice
autoMemberDefaultGroup: cn=orphans,cn=hostgroups,dc=example,dc=com
autoMemberGroupingAttr: member:dn

regex entry #1
dn: cn=webservers,cn=Hostgroups,cn=Auto Membership Plugin,cn=plugins,cn=config
objectclass: autoMemberRegexRule
description: Group placement for webservers
cn: webservers
autoMemberTargetGroup: cn=webservers,cn=hostgroups,dc=example,dc=com
autoMemberInclusiveRegex: fqdn=^www[0-9]+\.example\.com
autoMemberInclusiveRegex: fqdn=^web[0-9]+\.example\.com
autoMemberExclusiveRegex: fqdn=^www13\.example\.com
autoMemberExclusiveRegex: fqdn=^web13\.example\.com

regex entry #2
dn: cn=mailservers,cn=Hostgroups,cn=Auto Membership Plugin,cn=plugins,cn=config
objectclass: autoMemberRegexRule
description: Group placement for mailservers
cn: mailservers
autoMemberTargetGroup: cn=mailservers,cn=hostgroups,dc=example,dc=com
autoMemberInclusiveRegex: fqdn=^mail[0-9]+\.example\.com
autoMemberInclusiveRegex: fqdn=^smtp[0-9]+\.example\.com
autoMemberExclusiveRegex: fqdn=^mail13\.example\.com
autoMemberExclusiveRegex: fqdn=^smtp13\.example\.com

例 8.7. Windows 用户组

第 8.1.5.1.1 节 “自动成员配置条目” 中显示的基本用户组使用 posixAccount 属性来识别所有新用户。目录服务器内创建的所有新用户都使用 posixAccount 属性创建,因此对于新的目录服务器用户而言,它是安全捕获的。但是,当用户帐户从 Windows 域同步到目录服务器时,会创建 Windows 用户帐户,但没有 posixAccount 属性。
Windows 用户由 ntUser 属性标识。可将所有用户组规则修改为专门用于目标 Windows 用户,然后可以添加到默认的 all-users 组或特定于 Windows 的组中。
dn: cn=Windows Users,cn=Auto Membership Plugin,cn=plugins,cn=config
objectclass: autoMemberDefinition
autoMemberScope: dc=example,dc=com
autoMemberFilter: objectclass=ntUser
autoMemberDefaultGroup: cn=Windows Users,cn=groups,dc=example,dc=com
autoMemberGroupingAttr: member:dn

例 8.8. 按 Employee Type 组成用户组

Auto Membership 插件可用于自定义属性,这对于由其他应用程序管理的条目非常有用。例如,人工资源应用程序可以在自定义 employeeType 属性中根据员工类型创建然后引用用户。
例 8.6 “按 IP 地址的主机组” 一样,用户类型规则使用两种正则表达式过滤器来对完整时间和临时员工进行排序,只有这个示例使用显式值而不是 true 正则表达式。对于其他属性,可能更适合使用正则表达式,如将过滤器放在员工 ID 编号范围上。
configuration entry
dn: cn=Employee groups,cn=Auto Membership Plugin,cn=plugins,cn=config
objectclass: autoMemberDefinition
cn: Hostgroups
autoMemberScope: ou=employees,ou=people,dc=example,dc=com
autoMemberFilter: objectclass=inetorgperson
autoMemberDefaultGroup: cn=general,cn=employee groups,ou=groups,dc=example,dc=com
autoMemberGroupingAttr: member:dn

regex entry #1
dn: cn=full time,cn=Employee groups,cn=Auto Membership Plugin,cn=plugins,cn=config
objectclass: autoMemberRegexRule
description: Group for full time employees
cn: full time
autoMemberTargetGroup: cn=full time,cn=employee groups,ou=groups,dc=example,dc=com
autoMemberInclusiveRegex: employeeType=full

regex entry #2
dn: cn=temporary,cn=Employee groups,cn=Auto Membership Plugin,cn=plugins,cn=config
objectclass: autoMemberRegexRule
description: Group placement for interns, contractors, and seasonal employees
cn: temporary
autoMemberTargetGroup: cn=temporary,cn=employee groups,ou=groups,dc=example,dc=com
autoMemberInclusiveRegex: employeeType=intern
autoMemberInclusiveRegex: employeeType=contractor
autoMemberInclusiveRegex: employeeType=seasonal

8.1.5.5. 测试自动成员定义

由于自动成员插件的每个实例都是一组用于定义和正则表达式的相关目录,因此很难查看用户如何映射到组。当有多个以不同用户子集为目标的规则时,这变得更加困难。
有两个空运行任务可用于确定所有不同的自动成员插件定义是否按照设计正确分配组。

使用现有条目进行测试

cn=automember export updates 针对目录中现存的条目运行,并基于规则导出哪些用户被加入到哪些组的信息。这可用于针对现有用户测试现有规则,以查看您的实际部署方式。

此任务需要与 cn=automember 重建成员资格 任务相同的信息 - 要搜索、搜索过滤器和搜索范围的基本 DN,并有一个额外的参数来指定 export LDIF 文件来记录所提议的条目更新。
# ldapadd -D "cn=Directory Manager" -W -p 389 -h server.example.com -x

dn: cn=test_export,cn=automember export updates,cn=tasks,cn=config
objectClass: top
objectClass: extensibleObject
cn: test_export
basedn: dc=example,dc=com
filter: (uid=*)
scope: sub
ldif: /tmp/automember-updates.ldif

使用导入 LDIF 测试

cn=automember 映射更新 取新用户的 导入 LDIF,然后根据当前的自动成员规则 运行新用户。在将新规则应用到新或现有用户条目之前,这对测试新规则非常有用。

这称为映射任务,因为它将提议的新条目的映射或相关更改映射到现有规则。
此任务只需要两个属性:输入 LDIF 的位置(必须至少包含一些用户条目)和输出 LDIF 文件,用于将建议的条目更新写入。输入和输出 LDIF 文件都是本地机器上的绝对路径。
例如,使用 ldapmodify
# ldapadd -D "cn=Directory Manager" -W -p 389 -h server.example.com -x

dn: cn=test_mapping, cn=automember map updates,cn=tasks,cn=config
objectClass: top
objectClass: extensibleObject
cn: test_mapping
ldif_in: /tmp/entries.ldif
ldif_out: /tmp/automember-updates.ldif

8.1.5.6. 取消 Auto Membership 插件任务

如果目录服务器有复杂的配置(大的组、复杂的规则以及与其他插件交互),则 Auto Membership 插件任务可以在服务器上生成高 CPU 使用量。要防止性能问题,您可以取消 Auto Membership 插件任务。

流程

  • 要取消 Auto Membership 插件任务,请输入:
    # dsconf server.example.com plugin automember abort-fixup

验证

  • 要查看所有 Auto Membership 插件任务列表,包括取消的任务,请输入:
    # dsconf server.example.com plugin automember fixup-status