第 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 列表来过滤和生成其成员资格列表。任何动态组都需要此对象类,并可与 groupOfNames 和 groupOfUniqueNames 一起使用。
- groupOfCertificates 与 groupOfURLs 类似,它使用 LDAP 过滤器搜索和识别证书(或实际、证书名称)来识别组成员。这对基于组的访问控制非常有用,因为可以授予组的特殊访问权限。用于确定此成员的属性是
memberCertificate
。
下表显示了组的默认属性:
组类型 | 组对象类 | 成员属性 |
---|---|---|
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
插件。在这种情况下,您必须在所有复制协议中排除memberOf
属性。有关排除属性的详情,请参考 第 15.1.7 节 “使用 DNATactional Replication 复制子属性集”。 - 仅在拓扑中的所有供应商服务器上启用
memberOf
插件。为此:- 您必须将
memberOf
属性的复制禁用到复制协议中所有启用了写的供应商。有关排除属性的详情,请参考 第 15.1.7 节 “使用 DNATactional Replication 复制子属性集”。 - 您需要在其复制协议中的所有只读副本中启用
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
属性。此对象类可以安全地添加到任何对象,且不需要进一步的操作才能使此插件正常工作。或者,您可以创建包含 inetUser 或 inetAdmin 对象类的用户对象。这两个对象类也支持 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: extensibleObjectcn: MemberOf Plugin
nsslapd-pluginPath: libmemberof-plugin
nsslapd-pluginInitfunc: memberof_postop_init
nsslapd-pluginType: postoperationnsslapd-pluginEnabled: on
nsslapd-plugin-depends-on-type: databasememberOfGroupAttr: 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 插件:
- 使用
dsconf
工具启用插件:# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof enable
- 重启实例:
# dsctl instance_name restart
8.1.4.4.2. 使用 Web 控制台启用 MemberOf 插件
使用 Web 控制台启用 MemberOf 插件:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”。
- 选择实例。
- 选择菜单。
- 选择 MemberOf 插件。
- 将状态更改为 ON 以启用插件。
- 重启实例。请参阅 第 1.5.2 节 “使用 Web 控制台启动和停止目录服务器实例”。
8.1.4.5. 在每个服务器上配置 MemberOf 插件
如果您不想复制 MemberOf 插件的配置,请在每台服务器中手动配置插件。
8.1.4.5.1. 使用命令行在每个服务器上配置 MemberOf 插件
使用命令行配置 MemberOf 插件:
- 启用插件。请参阅 第 8.1.4.4.1 节 “使用命令行启用 MemberOf 插件”。
- 要从与成员不同的属性(这是默认值)检索
组的成员
,请将memberOfGroupAttr
参数设置为对应的属性名称。例如,要从uniqueMember
属性读取组成员,请替换memberOfGroupAttr
的当前值:- 另外,还可显示当前配置的属性:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof show ... memberofgroupattr: member ...
命令显示目前只有member
属性配置为检索组的成员。 - 从当前设置的配置中删除所有属性:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --groupattr delete Successfully changed the cn=MemberOf Plugin,cn=plugins,cn=config
注意无法删除特定的组属性。 - 在配置中添加
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 ...
- 默认情况下,MemberOf 插件将
memberOf
属性添加到用户条目中。要使用其他属性,请在memberOfAttr
参数中设置属性的名称。例如,要将customMemberOf
属性添加到用户记录中,请替换memberOfAttr
的当前值:- 另外,还可显示当前配置的属性:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof show ... memberofattr: memberOf ...
- 配置 MemberOf 插件,将
customMemberOf
属性添加到用户条目中:# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --attr customMemberOf memberOfAttr set to "customMemberOf"
注意您只能将此参数设置为支持 DN 语法的属性。
- 在使用分布式数据库的环境中,您可以将插件配置为在所有数据库中搜索用户条目,而不是只搜索本地数据库:
dsconf -D "cn=Directory Manager" ldap://server.example.com plugin memberof set --allbackends on memberOfAllBackends enabled successfully
- 重启实例:
# dsctl instance_name restart
8.1.4.5.2. 使用 Web 控制台在每个服务器上配置 MemberOf 插件
使用命令行配置 MemberOf 插件:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”。
- 选择实例。
- 打开菜单。
- 选择 memberOf 插件。
- 将状态更改为 ON 以启用插件。
- 填写字段来配置插件。例如,如果将
uniqueMember
属性添加到组中,配置插件会将customMemberOf
属性添加到用户条目中: - 点击。
- 重启实例。请参阅 第 1.5.2 节 “使用 Web 控制台启动和停止目录服务器实例”。
8.1.4.7. 设置 MemberOf 插件的范围
如果您配置了几个后端或多嵌套后缀,您可以使用
memberOfEntryScope
和 memberOfEntryScopeExcludeSubtree
参数来设置 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
属性。如果没有指定过滤器,任务会在包含 inetUser、inetAdmin 或 nsMemberOf 对象类的所有条目中重新生成属性。
注意
重新生成任务在本地运行,即使条目本身被复制。这意味着,在复制更新的条目前,其他服务器上条目的
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 搜索,包括搜索范围和搜索过滤器(
autoMemberScope
和autoMemberFilter
) - 要添加成员条目的默认组(
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. 正则表达式条件
每个规则都可以包含多个包含和排除表达式。(不包括首先评估。) 如果条目与任何包含规则匹配,则会将其添加到组中。
只能指定一个用于正则表达式规则的目标组。
属性 | 描述 |
---|---|
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 定义:
- 启用 Auto Membership 插件:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin automember enable Enabled Auto Membership Plugin
- 创建 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!
- 另外,您可以在 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 条目描述。 - 重启实例:
# dsctl instance_name restart
8.1.5.2.2. 使用 Web 控制台配置自动成员资格定义
使用 Web 控制台创建 Auto Membership 定义:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”。
- 选择实例。
- 打开菜单。
- 选择 Auto Membership 插件。
- 将状态更改为 ON 以启用插件。
- 点。
- 填写字段。例如:
- (可选)添加正则表达式过滤器。
- 点击。
- 重启实例。请参阅 第 1.5.2 节 “使用 Web 控制台启动和停止目录服务器实例”。
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