Menu Close
管理 IdM 用户组主机和访问控制规则
配置用户和主机,在组中管理它们,并使用基于主机的(HBAC)和基于角色的访问控制(RBAC)规则来控制访问权限
摘要
使开源包含更多
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息。
对红帽文档提供反馈
我们感谢您对文档提供反馈信息。请让我们了解如何改进文档。
关于特定内容的简单评论:
- 请确定您使用 Multi-page HTML 格式查看文档。另外,确定 Feedback 按钮出现在文档页的右上方。
- 用鼠标指针高亮显示您想评论的文本部分。
- 点在高亮文本上弹出的 Add Feedback。
- 按照显示的步骤操作。
要通过 Bugzilla 提交反馈,请创建一个新的 ticket:
- 进入 Bugzilla 网站。
- 在 Component 中选择 Documentation。
- 在 Description 中输入您要提供的信息。包括文档相关部分的链接。
- 点 Submit Bug。
第 1 章 IdM 命令行工具简介
以下章节描述了使用身份管理(IdM)命令行工具的基础知识。
先决条件
已安装并可访问 IdM 服务器。
详情请参阅 安装身份管理。
- 要使用 IPA 命令行界面,请使用有效的 Kerberos ticket 向 IdM 进行身份验证。
1.1. 什么是 IPA 命令行界面
IPA 命令行界面(CLI)是 Identity Management(IdM)管理的基本命令行界面。
它支持很多用于管理 IdM 的子命令,如 ipa user-add
命令来添加新用户。
IPA CLI 允许您:
- 在网络中添加、管理或删除用户、组、主机和其他对象。
- 管理证书。
- 搜索条目。
- 显示和列出对象。
- 设置访问权限。
- 获取正确命令语法的帮助。
1.2. IPA 帮助是什么
IPA 帮助是 IdM 服务器的内置文档系统。
IPA 命令行界面(CLI)从载入 IdM 插件模块中生成可用帮助主题。要使用 IPA 帮助工具,您必须:
- IdM 服务器已安装并运行。
- 使用有效的 Kerberos 票据进行了身份验证。
在不使用选项的情况下输入 ipa help
命令会显示有关基本帮助用法和最常见的命令示例的信息。
您可以将以下选项用于不同的 ipa 帮助
用例:
$ ipa help [TOPIC | COMMAND | topics | commands]
-
[]
- 方括号表示所有参数都是可选的,您可以只写ipa help
,命令就可执行。 |
- 管道符表示 或 。因此,您可以使用基本ipa help
命令指定TOPIC
、COMMAND
或主题
、命令
:-
主题
InventoryService-jaxbYou 可以运行命令ipa 帮助主题
来显示 IPA 帮助涵盖的主题列表,如用户
、cert
、server
等。 -
TOPIC
带有 大写字母的 TOP IC 是一个变量。因此,您可以指定一个特定的主题,例如ipa help user
。 -
命令
can enter命令ipa help 命令以显示 IPA 帮助命令
涵盖的命令列表,如user-add
、ca-enable
、server-show
和 many others。 -
COMMAND
10.10.10.2-用于大写字母的 COMMAND 是一个变量。因此,您可以指定特定的命令,例如ipa help user-add
。
-
1.3. 使用 IPA 帮助主题
以下流程描述了如何在命令行界面中使用 IPA 帮助。
步骤
- 打开一个终端,再连接到 IdM 服务器。
输入
ipa help topics
来显示帮助所涵盖的主题列表。$ ipa help topics
选择其中一个主题并按照以下模式创建一个命令:
ipa help [topic_name]
.添加在上一步中列出的主题之一,而不是topic_name
字符串。在这个示例中,我们使用以下主题:
user
$ ipa help user
如果 IPA 帮助输出太长且您无法看到整个文本,则使用以下语法:
$ ipa help user | less
然后您可以向下滚动,并阅读全部帮助。
IPA CLI 显示 user
主题的帮助页。阅读完概述后,您可以看到许多使用主题命令的模式示例。
1.4. 使用 IPA help 命令
以下流程描述了如何在命令行界面中创建 IPA 帮助命令。
步骤
- 打开一个终端,再连接到 IdM 服务器。
输入
ipa help commands
来显示 help 所涵盖的命令列表。$ ipa help commands
根据以下模式选择一个命令并创建 help 命令:
ipa help < COMMAND>
.添加在上一步中列出的其中一个命令,而不是 <COMMAND
> 字符串。$ ipa help user-add
其他资源
-
ipa
手册页。
1.5. IPA 命令的结构
IPA CLI 区分以下命令类型:
- IdM 服务器中提供了内置命令 InventoryService-sHistoryLimitBuilt-in 命令。
- 插件提供的命令
IPA 命令的结构允许您管理各种类型的对象。例如:
- 用户,
- 主机、
- DNS 记录、
- 证书、
以及许多其他信息。
对于大多数这些对象,IPA CLI 包括以下命令来:
-
添加(
add
) -
修改(
mod
) -
删除(
del
) -
搜索(
find
) -
显示(
show
)
命令具有以下结构:
ipa user-add
, ipa user-mod
, ipa user-del
, ipa user-find
, ipa user-show
ipa host-add
, ipa host-mod
, ipa host-del
, ipa host-find
, ipa host-show
ipa dnsrecord-add
, ipa dnsrecord-mod
, ipa dnsrecord-del
, ipa dnsrecord-find
, ipa dnrecord-show
您可以使用 ipa user-add [options]
创建用户,其中 [options]
是可选的。如果您只使用 ipa user-add
命令,脚本将逐个询问您详细信息。
要更改现有对象,您需要定义对象,因此该命令还包括一个对象: ipa user-mod USER_NAME [options]
。
1.6. 使用 IPA 命令将用户帐户添加到 IdM
以下流程描述了如何使用命令行添加新用户到 Identity Management(IdM)数据库。
先决条件
- 您需要拥有管理员特权才能将用户帐户添加到 IdM 服务器。
步骤
- 打开一个终端,再连接到 IdM 服务器。
输入命令来添加新用户:
$ ipa user-add
该命令将运行一个脚本,用于提示您提供创建用户帐户所需的基本数据。
- 在 First name: 字段中,输入新用户的名字,然后按 Enter 键。
- 在 Last name: 字段中,输入新用户的姓氏,然后按 Enter 键。
在 User login [suggested 用户名]: 输入用户名,或者按 Enter 键接受推荐的用户名。
整个 IdM 数据库的用户名必须是唯一的。如果发生错误,因为用户名已存在,使用
ipa user-add
命令重复该过程,并使用不同的唯一用户名。
添加用户名后,用户帐户将添加到 IdM 数据库,IPA 命令行界面(CLI)会输出:
---------------------- Added user "euser" ---------------------- User login: euser First name: Example Last name: User Full name: Example User Display name: Example User Initials: EU Home directory: /home/euser GECOS: Example User Login shell: /bin/sh Principal name: euser@IDM.EXAMPLE.COM Principal alias: euser@IDM.EXAMPLE.COM Email address: euser@idm.example.com UID: 427200006 GID: 427200006 Password: False Member of groups: ipausers Kerberos keys available: False
默认情况下,没有为用户帐户设置用户密码。要在创建用户帐户时添加密码,请使用以下语法使用 ipa user-add
命令:
$ ipa user-add --first=Example --last=User --password
然后 IPA CLI 会提示您添加或确认用户名和密码。
如果已创建了该用户,您可以使用 ipa user-mod
命令添加密码。
其他资源
-
运行
ipa help user-add
命令来了解有关参数的更多信息。
1.7. 使用 IPA 命令修改 IdM 中的用户帐户
您可以为每个用户帐户更改多个参数。例如,您可以为用户添加新密码。
基本命令语法与 user-add
语法不同,因为您需要定义要对其执行更改的现有用户帐户,例如,添加密码。
先决条件
- 您需要具有管理员特权才能修改用户帐户。
步骤
- 打开一个终端,再连接到 IdM 服务器。
输入
ipa user-mod
命令,指定要修改的用户,以及任何选项,如--password
来添加密码:$ ipa user-mod euser --password
命令将运行脚本,您可以在其中添加新密码。
- 输入新密码并按 Enter 键。
IPA CLI 输出以下输出:
---------------------- Modified user "euser" ---------------------- User login: euser First name: Example Last name: User Home directory: /home/euser Principal name: euser@IDM.EXAMPLE.COM Principal alias: euser@IDM.EXAMPLE.COM Email address: euser@idm.example.com UID: 427200006 GID: 427200006 Password: True Member of groups: ipausers Kerberos keys available: True
现在,为帐户设置了用户密码,用户可以登录 IdM 了。
其他资源
-
运行
ipa help user-mod
命令来了解有关参数的更多信息。
1.8. 如何为 IdM 工具提供值列表
身份管理(IdM)将多值属性的值存储在列表中。
IdM 支持以下提供多值列表的方法:
在同一命令调用中多次使用相同的命令行参数:
$ ipa permission-add --right=read --permissions=write --permissions=delete ...
或者,您可以将列表用大括号括起来,在这种情况下,shell 执行展开:
$ ipa permission-add --right={read,write,delete} ...
上面的示例显示了一个命令 permissions -add
,它为对象添加权限。示例中没有提及对象。需要添加要为其添加权限的对象,而不是 …
。
当您从命令行更新此类多值属性时,IdM 会使用新列表完全覆盖以前的值列表。因此,当更新多值属性时,您必须指定整个新列表,而不只是您要添加的单个值。
例如,在以上命令中,权限列表包括读取、写入和删除。当您决定使用 permission-mod
命令更新列表时,您必须添加所有的值,否则未提及的值将被删除。
示例 1: -ipa permission-mod
命令更新所有以前添加的权限。
$ ipa permission-mod --right=read --right=write --right=delete ...
或者
$ ipa permission-mod --right={read,write,delete} ...
示例 2 - ipa permission-mod
命令会删除 --right=delete
参数,因为它没有包含在命令中:
$ ipa permission-mod --right=read --right=write ...
或者
$ ipa permission-mod --right={read,write} ...
1.9. 如何在 IdM 工具中使用特殊字符
将包含特殊字符的命令行参数传递给 ipa
命令时,请使用反斜杠(\)转义这些字符。例如,常见的特殊字符包括尖括号(< 和 >)、and(&)、星号(*)或竖线(|)。
例如,要转义星号(*):
$ ipa certprofile-show certificate_profile --out=exported\*profile.cfg
包含未转义特殊字符的命令无法按预期工作,因为 shell 无法正确解析这些字符。
第 2 章 使用命令行管理用户帐户
本章包含 IdM(身份管理)中用户生命周期的基本描述。以下部分介绍了如何进行:
- 创建用户帐户
- 激活 stage 用户帐户
- 保留用户帐户
- 删除 active、stage 或 preserved 用户帐户
- 恢复 preserved 用户帐户
2.1. 用户生命周期
身份管理(IdM)支持三个用户帐户状态:
- Stage(预发布) 用户不允许进行身份验证。这是初始状态。活动用户所需的一些用户帐户属性无法在这里设置,例如组成员资格。
- Active(活跃)用户被允许进行身份验证。所有必需的用户帐户属性都需要在这个阶段设置。
- Preserved(保留)用户是以前活跃的用户,但现在被视为不活跃且无法通过 IdM 进行身份验证。保留用户保留他们作为活跃用户的大多数帐户属性,但它们不属于任何用户组。
您可以从 IdM 数据库永久删除用户条目。
删除的用户帐户无法恢复。当您删除用户帐户时,与帐户相关的所有信息都将永久丢失。
只能由具备管理员权限的用户(如默认的 admin 用户)才能创建新的管理员。如果您意外删除所有管理员帐户,目录管理器必须在 Directory 服务器中手动创建新管理员。
不要删除 admin
用户。由于 admin
是 IdM 所需的预定义用户,因此此操作会导致某些命令出现问题。如果要定义和使用另外的 admin 用户,请先至少为一个其他用户授予 admin
权限,然后再使用 ipa user-disable admin
命令来禁用预定义的 admin 用户。
不要将本地用户添加到 IdM。NSS(Name Service Switch)在解析本地用户和组前,总会先解析 IdM 的用户和组。这意味着 IdM 组成员资格不适用于本地用户。
2.2. 使用命令行添加用户
您可以将用户添加为:
- Active - 可以被他们的用户主动使用的用户账户。
- stage - 无法使用这些帐户。如果要准备新用户帐户,请使用它。当用户准备好使用其帐户时,您可以激活他们。
以下流程描述了使用 ipa user-add
命令将活跃用户添加到 IdM 服务器中。
同样,您可以使用 ipa stageuser-add
命令创建stage 用户帐户。
IdM 自动给新用户帐户分配唯一的用户 ID(UID)。您也可以手动执行此操作,但服务器不会验证 UID 号是否是唯一的。因此,多个用户条目可能被分配了相同的 ID 号。红帽建议防止多个条目具有相同的 UID 。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 获得 Kerberos ticket。
步骤
- 打开终端并连接到 IdM 服务器。
添加用户登录、用户名、姓氏以及可选,您也可以添加其电子邮件地址。
$ ipa user-add user_login --first=first_name --last=last_name --email=email_address
IdM 支持可通过以下正则表达式描述的用户名:
[a-zA-Z0-9_.][a-zA-Z0-9_.-]{0,252}[a-zA-Z0-9_.$-]?
注意支持以末尾的美元符号($)结尾的用户名,以启用 Samba 3.x 机器支持。
如果您添加了包含大写字符的用户名,IdM 会在保存名称时自动将其转换为小写。因此,IdM 总是需要在登录时以小写形式输入用户名。此外,不能添加仅在字母大小写上不同的用户名,比如 user 和 User。
用户名的默认最大长度为 32 个字符。要更改它,请使用
ipa config-mod --maxusername
命令。例如,要将最大用户名长度增加到 64 个字符:$ ipa config-mod --maxusername=64 Maximum username length: 64 ...
ipa user-add
命令包含许多参数。要全部列出它们,请使用 ipa help 命令:$ ipa help user-add
有关
ipa help
命令的详情,请查看 什么是 IPA help 。
您可以通过列出所有 IdM 用户帐户来验证新用户帐户是否已成功创建:
$ ipa user-find
此命令列出所有用户帐户及详细信息。
2.3. 使用命令行激活用户
要通过将用户帐户从 stage 移到 active 来激活它,,请使用 ipa stageuser-activate
命令。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 获得 Kerberos ticket。
步骤
- 打开终端并连接到 IdM 服务器。
使用以下命令激活用户帐户:
$ ipa stageuser-activate user_login ------------------------- Stage user user_login activated ------------------------- ...
您可以通过列出所有 IdM 用户帐户来验证新用户帐户是否已成功创建:
$ ipa user-find
此命令列出所有用户帐户及详细信息。
2.4. 使用命令行保留用户
如果要删除用户帐户,您可以保留该帐户,保留这个选项以便以后恢复。要保留用户帐户,请使用 ipa user-del
或 ipa stageuser-del
命令的 --preserve
选项。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 获得 Kerberos ticket。
步骤
- 打开终端并连接到 IdM 服务器。
使用以下命令保留用户帐户:
$ ipa user-del --preserve user_login -------------------- Deleted user "user_login" --------------------
注意尽管输出说用户帐户已删除,但实际上是被保留了。
2.5. 使用命令行删除用户
IdM(身份管理)可让您永久删除用户。您可以删除:
-
活动用户,使用以下命令:
ipa user-del
-
Stage 用户,使用以下命令:
ipa stageuser-del
-
Preserved 用户,使用以下命令:
ipa user-del
删除多个用户时,请使用 --continue
选项强制命令继续,而不论出现什么错误。命令完成后,会将成功和失败的操作摘要输出到 stdout
标准输出流。
$ ipa user-del --continue user1 user2 user3
如果不使用 --continue
,命令会继续删除用户,直到它遇到错误,然后它会停止并退出。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 获得 Kerberos ticket。
步骤
- 打开终端并连接到 IdM 服务器。
使用以下命令删除用户帐户:
$ ipa user-del user_login -------------------- Deleted user "user_login" --------------------
用户帐户从 IdM 永久删除。
2.6. 使用命令行恢复用户
您可以将 preserved 用户恢复成:
-
Active 用户:
ipa user-undel
-
Stage 用户:
ipa user-stage
恢复用户帐户不会恢复帐户之前的所有属性。例如,用户的密码不会被恢复,必须再次设置。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 获得 Kerberos ticket。详情请参阅 使用 kinit 手动登录到 IdM。
步骤
- 打开终端并连接到 IdM 服务器。
使用以下命令激活用户帐户:
$ ipa user-undel user_login ------------------------------ Undeleted user account "user_login" ------------------------------
或者,您可以将用户帐户恢复为暂存的用户帐户:
$ ipa user-stage user_login ------------------------------ Staged user account "user_login" ------------------------------
验证步骤
您可以通过列出所有 IdM 用户帐户来验证新用户帐户是否已成功创建:
$ ipa user-find
此命令列出所有用户帐户及详细信息。
第 3 章 使用 IdM Web UI 管理用户帐户
身份管理(IdM)提供了 多个阶段,可帮助您管理各种用户工作生命周期情况:
- 创建用户帐户
在员工在公司开始职业生涯之前 创建 stage 用户帐户,并提前在员工出现在办公室并想要激活客户的那天前做好准备。
您可以省略此步骤,并直接创建活动的用户帐户。这个流程与创建 stage 用户帐户的流程类似。
- 激活用户帐户
- 激活帐户 在员工的第一个工作日。
- 禁用用户帐户
- 如果用户要休几个月的产假,您需要 临时禁用该帐户。
- 启用用户帐户
- 用户返回时,您需要 重新启用该帐户。
- 保留用户帐户
- 如果用户想要离开公司,您需要删除该 帐户,并有可能恢复它, 因为人们可以在一段时间后回到公司。
- 恢复用户帐户
- 两年后,用户回来了,您需要 恢复保留的帐户。
- 删除用户帐户
- 如果取消了员工,请在没有备份的情况下删除帐户。
3.1. 用户生命周期
身份管理(IdM)支持三个用户帐户状态:
- Stage(预发布) 用户不允许进行身份验证。这是初始状态。活动用户所需的一些用户帐户属性无法在这里设置,例如组成员资格。
- Active(活跃)用户被允许进行身份验证。所有必需的用户帐户属性都需要在这个阶段设置。
- Preserved(保留)用户是以前活跃的用户,但现在被视为不活跃且无法通过 IdM 进行身份验证。保留用户保留他们作为活跃用户的大多数帐户属性,但它们不属于任何用户组。
您可以从 IdM 数据库永久删除用户条目。
删除的用户帐户无法恢复。当您删除用户帐户时,与帐户相关的所有信息都将永久丢失。
只能由具备管理员权限的用户(如默认的 admin 用户)才能创建新的管理员。如果您意外删除所有管理员帐户,目录管理器必须在 Directory 服务器中手动创建新管理员。
不要删除 admin
用户。由于 admin
是 IdM 所需的预定义用户,因此此操作会导致某些命令出现问题。如果要定义和使用另外的 admin 用户,请先至少为一个其他用户授予 admin
权限,然后再使用 ipa user-disable admin
命令来禁用预定义的 admin 用户。
不要将本地用户添加到 IdM。NSS(Name Service Switch)在解析本地用户和组前,总会先解析 IdM 的用户和组。这意味着 IdM 组成员资格不适用于本地用户。
3.2. 在 Web UI 中添加用户
通常,您需要在新员工开始工作前创建新的用户帐户。这样的 stage 帐户无法访问,您需要之后将其激活。
或者,您可以直接创建活动的用户帐户。要添加活动的用户,请按照下面的流程,并在 Active users 选项卡中添加用户帐户。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
步骤
- 登录到 IdM Web UI。
进到 Users → Stage Users 选项卡。
另外,您可以在 Users → Active users 中添加用户帐户,但是您无法将用户组添加到帐户中。
- 单击 + Add 图标。
- 在 Add stage user 对话框中,输入新用户的 First name 和 Last name。
[可选] 在 User login 字段中,添加一个登录名称。
如果您将其留空,IdM 服务器将以以下形式创建登录名称:名字的第一个字母和姓氏。整个登录名最多可有 32 个字符。
- [可选] 在 GID 下拉菜单中,选择应包含该用户的组。
- [可选] 在 Password 和 Verify password 字段中,输入您的密码并确认,确保它们都匹配。
点击 Add 按钮。
此时,您可以在 Stage Users 表中看到用户帐户。
如果点击用户名,您可以编辑高级设置,如添加电话号码、地址或职业。
3.3. 在 IdM Web UI 中 stage 用户
用户登录到 IdM 之前,以及该用户被添加到 IdM 组之前,stage 用户帐户必须被激活 。本节论述了如何激活 stage 用户帐户。
先决条件
- 管理 IdM Web UI 或用户管理员角色的管理员特权。
- IdM 中至少有一个 stage 用户帐户。
步骤
- 登录到 IdM Web UI。
- 进到 Users → Stage users 选项卡。
- 单击您要激活的用户帐户的复选框。
单击 Activate 按钮。
- 在 Confirmation 对话框中,单击 OK 按钮。
如果激活成功,IdM Web UI 会显示绿色的确认信息,表示用户已激活,并且用户帐户已移到 Active 用户。帐户处于活动状态,用户才可以向 IdM 域和 IdM Web UI 进行身份验证。在第一次登录时,系统将提示用户更改密码。
在此阶段,您可以向用户组添加活动的用户帐户。
3.4. 在 Web UI 中禁用用户帐户
您可以禁用活动的用户帐户。禁用用户帐户会停用该帐户,因此用户帐户无法进行身份验证,并使用 IdM 服务,如 Kerberos 或执行任何任务。
禁用的用户帐户仍然在 IdM 中存在,所有相关信息保持不变。与保留的用户帐户不同,禁用的用户帐户保持活动状态,并且可以是用户组的成员。
禁用用户帐户后,任何现有的连接都会保持有效,直到用户的 Kerberos TGT 和其他票据过期为止。票据过期后,用户将无法续订。
先决条件
- 管理 IdM Web UI 或用户管理员角色的管理员特权。
步骤
- 登录到 IdM Web UI。
- 进到 Users → Active users 选项卡。
- 点击您要禁用的用户帐户的复选框。
单击 Disable 按钮。
- 在 Confirmation 对话框中,单击 OK 按钮。
如果禁用过程成功,您可以在 Active users 表中的 Status 列中验证。
3.5. 在 Web UI 中启用用户帐户
通过 IdM,您可以启用禁用的活动用户帐户。启用用户帐户可激活禁用的帐户。
先决条件
- 管理 IdM Web UI 或用户管理员角色的管理员特权。
步骤
- 登录到 IdM Web UI。
- 进到 Users → Active users 选项卡。
- 单击您要启用的用户帐户的复选框。
单击 Enable 按钮。
- 在 Confirmation 对话框中,单击 OK 按钮。
如果更改成功,您可以在 Active users 表中的 Status 列中验证。
3.6. 在 IdM Web UI 中保留活动的用户
保留用户帐户可让您从 Active users 选项卡中删除帐户,而将这些帐户保留在 IdM 中。
如果员工离开了公司,可保留用户帐户。如果您要禁用用户帐户数周或数月(例如,产假),请禁用该帐户。详情请参阅 在 Web UI 中禁用用户帐户。保留的帐户不是活动的,用户无法使用它们访问内部网络,但该帐户及所有数据都保留在数据库中。
您可以将恢复的帐户移回到活动模式。
处于保留状态的用户列表可以提供过去用户帐户的历史记录。
先决条件
- 管理 IdM(身份管理)Web UI 或用户管理员角色的管理员特权。
步骤
- 登录到 IdM Web UI。
- 进到 Users → Active users 选项卡。
- 单击您要保留的用户帐户的复选框。
单击 Delete 按钮。
- 在 Remove users 对话框中,将 Delete mode 单选按钮切换到 preserve。
单击 Delete 按钮。
因此,用户帐户被移到 Preserved users。
如果需要恢复保留的用户,请参阅 在 IdM Web UI 中恢复用户。
3.7. 在 IdM Web UI 中恢复用户
IdM(身份管理)可让您将保留的用户帐户恢复回活动状态。
先决条件
- 管理 IdM Web UI 或用户管理员角色的管理员特权。
步骤
- 登录到 IdM Web UI。
- 进到 Users → Preserved users 选项卡。
- 单击您要恢复的用户帐户的复选框。
单击 Restore 按钮。
- 在 Confirmation 对话框中,单击 OK 按钮。
IdM Web UI 显示一条绿色确认信息,并将用户帐户移到 Active users 选项卡中。
3.8. 在 IdM Web UI 中删除用户
删除用户是一种不可逆的操作,导致用户帐户被从 IdM 数据库中永久删除,包括组成员资格和密码。任何对用户的外部配置,如系统帐户和主目录,都不会被删除,但无法通过 IdM 来访问。
您可以删除:
Active 用户 - IdM Web UI 为您提供了选项:
临时保留用户
详情请查看 在 IdM Web UI 中保留活动用户。
- 永久删除它们
- Stage 用户 - 您可以永久删除 stage 用户。
- Preserved 用户 - 您可以永久删除 preserved 用户。
以下流程描述了删除活动用户。同样,您可以删除用户帐户,在:
- Stage users 选项卡
- Preserved users 选项卡
先决条件
- 管理 IdM Web UI 或用户管理员角色的管理员特权。
步骤
- 登录到 IdM Web UI。
进到 Users → Active users 选项卡。
或者,您可以在 Users → Stage users 或 Users → Preserved users 删除用户账户。
- 点 Delete 图标。
- 在 Remove users 对话框中,将 Delete mode 单选按钮切换到 delete。
- 单击 Delete 按钮。
用户帐户从 IdM 永久删除。
第 4 章 使用 Ansible playbook 管理用户帐户
您可以使用 Ansible playbook 管理 IdM 中的用户。在介绍了用户生命周期后,本章将介绍如何将 Ansible playbook 用于以下操作:
4.1. 用户生命周期
身份管理(IdM)支持三个用户帐户状态:
- Stage(预发布) 用户不允许进行身份验证。这是初始状态。活动用户所需的一些用户帐户属性无法在这里设置,例如组成员资格。
- Active(活跃)用户被允许进行身份验证。所有必需的用户帐户属性都需要在这个阶段设置。
- Preserved(保留)用户是以前活跃的用户,但现在被视为不活跃且无法通过 IdM 进行身份验证。保留用户保留他们作为活跃用户的大多数帐户属性,但它们不属于任何用户组。
您可以从 IdM 数据库永久删除用户条目。
删除的用户帐户无法恢复。当您删除用户帐户时,与帐户相关的所有信息都将永久丢失。
只能由具备管理员权限的用户(如默认的 admin 用户)才能创建新的管理员。如果您意外删除所有管理员帐户,目录管理器必须在 Directory 服务器中手动创建新管理员。
不要删除 admin
用户。由于 admin
是 IdM 所需的预定义用户,因此此操作会导致某些命令出现问题。如果要定义和使用另外的 admin 用户,请先至少为一个其他用户授予 admin
权限,然后再使用 ipa user-disable admin
命令来禁用预定义的 admin 用户。
不要将本地用户添加到 IdM。NSS(Name Service Switch)在解析本地用户和组前,总会先解析 IdM 的用户和组。这意味着 IdM 组成员资格不适用于本地用户。
4.2. 使用 Ansible playbook 确保存在一个 IdM 用户
以下流程描述了确保使用 Ansible playbook 在 IdM 中存在用户。
先决条件
- 您知道 IdM 管理员密码。
- ansible-freeipa 软件包安装在 Ansible 控制器上。
步骤
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
创建一个 Ansible playbook 文件,其中包含您要确保的 IdM 中存在的用户数据。要简化此步骤,您可以复制并修改
/usr/share/doc/ansible-freeipa/playbooks/user/add-user.yml
文件中的示例。例如,创建名为 idm_user 的用户并添加 Password123 作为用户密码:--- - name: Playbook to handle users hosts: ipaserver become: true tasks: - name: Create user idm_user ipauser: ipaadmin_password: MySecret123 name: idm_user first: Alice last: Acme uid: 1000111 gid: 10011 phone: "+555123457" email: idm_user@acme.com passwordexpiration: "2023-01-19 23:59:59" password: "Password123" update_password: on_create
您必须使用以下选项来添加用户:
- name:登录名称
- first:名(字符串)
- last:姓(字符串)
有关可用用户选项的完整列表,请参阅
/usr/share/doc/ansible-freeipa/README-user.md
Markdown 文件。注意如果您使用
update_password: on_create
选项,Ansible 仅在创建用户时创建用户密码。如果已使用密码创建了用户,Ansible 不会生成新的密码。运行 playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-IdM-user.yml
验证步骤
您可以使用
ipa user-show
命令验证 IdM 中是否存在新用户帐户:以 admin 用户身份登录
ipaserver
:$ ssh admin@server.idm.example.com Password: [admin@server /]$
为 admin 请求一个 Kerberos ticket:
$ kinit admin Password for admin@IDM.EXAMPLE.COM:
请求有关 idm_user 的信息:
$ ipa user-show idm_user User login: idm_user First name: Alice Last name: Acme ....
IdM 中存在名为 idm_user 的用户。
4.3. 使用 Ansible playbook 确保存在多个 IdM 用户
以下流程描述了使用 Ansible playbook 确定在 IdM 中存在多个用户。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
步骤
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
创建一个 Ansible playbook 文件,其中包含您要在 IdM 中确保存在的用户的数据。要简化此步骤,您可以复制并修改
/usr/share/doc/ansible-freeipa/playbooks/user/ensure-users-present.yml
文件中的示例。例如,要创建用户 idm_user_1、idm_user_2 和 idm_user_3,并添加 Password123 作为密码 idm_user_1 :--- - name: Playbook to handle users hosts: ipaserver become: true tasks: - name: Create user idm_users ipauser: ipaadmin_password: MySecret123 users: - name: idm_user_1 first: Alice last: Acme uid: 10001 gid: 10011 phone: "+555123457" email: idm_user@acme.com passwordexpiration: "2023-01-19 23:59:59" password: "Password123" - name: idm_user_2 first: Bob last: Acme uid: 100011 gid: 10011 - name: idm_user_3 first: Eve last: Acme uid: 1000111 gid: 10011
注意如果没有指定 update_password: on_create 选项,Ansible 每次运行 playbook 时都会重新设置用户密码:如果用户自上次运行 playbook 起更改了密码,则 Ansible 重新设置密码。
运行 playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-users.yml
验证步骤
您可以使用
ipa user-show
命令验证用户帐户是否存在于 IdM 中:以管理员身份登录到
ipaserver
:$ ssh administrator@server.idm.example.com Password: [admin@server /]$
显示有关 idm_user_1 的信息:
$ ipa user-show idm_user_1 User login: idm_user_1 First name: Alice Last name: Acme Password: True ....
IdM 中存在名为 idm_user_1 的用户。
4.4. 使用 Ansible playbook 确保存在 JSON 文件中的多个 IdM 用户
以下流程描述了如何使用 Ansible playbook 确保在 IdM 中存在多个用户。用户存储在 JSON
文件中。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
步骤
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
创建包含必要任务的 Ansible playbook 文件。使用您要确保存在的用户数据引用
JSON
文件。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/ensure-users-present-ymlfile.yml
文件中的示例:--- - name: Ensure users' presence hosts: ipaserver become: true tasks: - name: Include users.json include_vars: file: users.json - name: Users present ipauser: ipaadmin_password: MySecret123 users: "{{ users }}"
创建
users.json
文件,并将 IdM 用户添加到其中。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/user/users.json
文件中的示例。例如,要创建用户 idm_user_1、idm_user_2 和 idm_user_3,并添加 Password123 作为密码 idm_user_1 :{ "users": [ { "name": "idm_user_1", "first": "Alice", "last": "Acme", "password": "Password123" }, { "name": "idm_user_2", "first": "Bob", "last": "Acme" }, { "name": "idm_user_3", "first": "Eve", "last": "Acme" } ] }
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-users-present-jsonfile.yml
验证步骤
您可以使用
ipa user-show
命令验证 IdM 中是否存在用户帐户:以管理员身份登录到
ipaserver
:$ ssh administrator@server.idm.example.com Password: [admin@server /]$
显示有关 idm_user_1 的信息:
$ ipa user-show idm_user_1 User login: idm_user_1 First name: Alice Last name: Acme Password: True ....
IdM 中存在名为 idm_user_1 的用户。
4.5. 确保没有用户使用 Ansible playbook
以下流程描述了如何使用 Ansible playbook 来确保 IdM 中没有特定用户。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
步骤
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
创建 Ansible playbook 文件,使其包含没有 IdM 的用户。要简化此步骤,您可以复制并修改
/usr/share/doc/ansible-freeipa/playbooks/user/ensure-users-present.yml
文件中的示例。例如,要删除用户 idm_user_1、idm_user_2 和 idm_user_3 :--- - name: Playbook to handle users hosts: ipaserver become: true tasks: - name: Delete users idm_user_1, idm_user_2, idm_user_3 ipauser: ipaadmin_password: MySecret123 users: - name: idm_user_1 - name: idm_user_2 - name: idm_user_3 state: absent
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/delete-users.yml
验证步骤
您可以使用 ipa user-show
命令验证 IdM 中是否不存在用户帐户:
以管理员身份登录到
ipaserver
:$ ssh administrator@server.idm.example.com Password: [admin@server /]$
请求有关 idm_user_1 的信息:
$ ipa user-show idm_user_1 ipa: ERROR: idm_user_1: user not found
IdM 中不存在名为 idm_user_1 的用户。
4.6. 其他资源
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-user.md
Markdown 文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/user
目录中的 Ansible playbook 示例。
第 5 章 为 IdM 客户端上的 IdM 用户授予 sudo 访问权限
本节论述了如何为身份管理中的用户授予 sudo
访问权限。
5.1. IdM 客户端上的 sudo 访问权限
系统管理员可以授予 sudo
访问权限,以允许非 root 用户执行通常为 root
用户保留的管理命令。因此,当用户需要执行通常为 root
用户保留的管理命令时,他们会在此命令前面使用 sudo
。输入密码后,将像 root
用户一样执行 命令。要将 sudo
命令作为另一个用户或组(如数据库服务帐户)执行,您可以为 sudo
规则配置 RunAs 别名。
如果 Red Hat Enterprise Linux (RHEL) 8 主机注册为 Identity Management (IdM) 客户端,您可以指定 sudo
规则来定义哪些 IdM 用户可以在主机上执行哪些命令:
-
本地的
/etc/sudoers
文件中 - 集中在 IdM 中
本节论述了使用命令行界面 (CLI) 和 IdM Web UI 为 IdM 客户端创建 中央 sudo
规则。
您还可以使用通用安全服务应用程序编程接口 (GSSAPI) 为 sudo
配置免密码身份验证,这是基于 UNIX 的操作系统访问和验证 Kerberos 服务的本地方式。您可以使用 pam_sss_gss.so
可插拔验证模块 (PAM) 通过 SSSD 服务调用 GSSAPI 身份验证,允许用户通过有效的 Kerberos 票据向 sudo
命令进行身份验证。
其他资源
5.2. 使用 CLI 向 IdM 客户端上的 IdM 用户授予 sudo 访问权限
在 Identity Management (IdM) 中,您可以将特定命令的 sudo
访问权限授予特定 IdM 主机上的 IdM 用户帐户。首先,添加 sudo
命令,然后为一个或多个命令创建 sudo
规则。
例如,完成这个过程以创建 idm_user_reboot
sudo
规则,为 idm_user
帐户授予在 idmclient
机器上运行 /usr/sbin/reboot
命令的权限。
先决条件
- 以 IdM 管理员身份登录。
-
您已在 IdM 中创建
了 idm_user
的用户帐户,并通过为用户创建密码来解锁帐户。有关使用 CLI 添加新 IdM 用户的详情,请参阅使用命令行添加用户。 -
idmclient
主机上没有本地的idm_user
。idm_user
用户未列在本地/etc/passwd
文件中。
步骤
获取 Kerberos 票据作为 IdM
admin
。[root@idmclient ~]# kinit admin
在
sudo
命令的 IdM 数据库中添加/usr/sbin/reboot
命令:[root@idmclient ~]# ipa sudocmd-add /usr/sbin/reboot ------------------------------------- Added Sudo Command "/usr/sbin/reboot" ------------------------------------- Sudo Command: /usr/sbin/reboot
创建名为
idm_user_reboot
的sudo
规则:[root@idmclient ~]# ipa sudorule-add idm_user_reboot --------------------------------- Added Sudo Rule "idm_user_reboot" --------------------------------- Rule name: idm_user_reboot Enabled: TRUE
在
idm_user_reboot
规则中添加/usr/sbin/reboot
命令:[root@idmclient ~]# ipa sudorule-add-allow-command idm_user_reboot --sudocmds '/usr/sbin/reboot' Rule name: idm_user_reboot Enabled: TRUE Sudo Allow Commands: /usr/sbin/reboot ------------------------- Number of members added 1 -------------------------
将
idm_user_reboot
规则应用到 IdMidmclient
主机:[root@idmclient ~]# ipa sudorule-add-host idm_user_reboot --hosts idmclient.idm.example.com Rule name: idm_user_reboot Enabled: TRUE Hosts: idmclient.idm.example.com Sudo Allow Commands: /usr/sbin/reboot ------------------------- Number of members added 1 -------------------------
在
idm_user_reboot
规则中添加idm_user
帐户:[root@idmclient ~]# ipa sudorule-add-user idm_user_reboot --users idm_user Rule name: idm_user_reboot Enabled: TRUE Users: idm_user Hosts: idmclient.idm.example.com Sudo Allow Commands: /usr/sbin/reboot ------------------------- Number of members added 1 -------------------------
将更改从服务器传播到客户端可能需要几分钟时间。
验证步骤
-
以
idm_user
帐户身份登录idmclient
主机。 显示允许
idm_user
帐户执行的sudo
规则。[idm_user@idmclient ~]$ sudo -l Matching Defaults entries for idm_user on idmclient: !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY KRB5CCNAME", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin User idm_user may run the following commands on idmclient: (root) /usr/sbin/reboot
使用
sudo
重新启动计算机。在提示时输入idm_user
的密码:[idm_user@idmclient ~]$ sudo /usr/sbin/reboot [sudo] password for idm_user:
5.3. 使用 IdM Web UI 向 IdM 客户端上的 IdM 用户授予 sudo 访问权限
在 Identity Management (IdM) 中,您可以将特定命令的 sudo
访问权限授予特定 IdM 主机上的 IdM 用户帐户。首先,添加 sudo
命令,然后为一个或多个命令创建 sudo
规则。
完成此步骤以创建 idm_user_reboot
sudo 规则,为 idm_user
帐户授予在 idmclient
计算机上运行 /usr/sbin/reboot
命令的权限。
先决条件
- 以 IdM 管理员身份登录。
-
您已在 IdM 中创建
了 idm_user
的用户帐户,并通过为用户创建密码来解锁帐户。有关使用命令行界面添加新 IdM 用户的详情,请参阅使用命令行添加用户。 -
idmclient
主机上没有本地的idm_user
。idm_user
用户未列在本地/etc/passwd
文件中。
步骤
在
sudo
命令的 IdM 数据库中添加/usr/sbin/reboot
命令:- 导航到 Policy → Sudo → Sudo Commands。
- 单击右上角的 Add,以打开 Add sudo 命令对话框。
输入您希望用户能够使用
sudo
执行的命令:/usr/sbin/reboot
。图 5.1. 添加 IdM sudo 命令
- 点击 Add。
使用新的
sudo
命令条目创建一个 sudo 规则来允许 idm_user 重启 idmclient 机器:- 导航到 Policy → Sudo → Sudo rules。
- 单击右上角的 Add,以打开 Add sudo 规则对话框。
-
输入
sudo
规则的名称: idm_user_reboot。 - 点 Add and Edit。
指定用户:
- 在 Who 部分中,选中指定的用户和组单选按钮。
- 在 User category the rule applies to 子小节中,点 Add 打开 Add users into sudo rule "idm_user_reboot" 对话框。
- 在 Available 栏的 Add users into sudo rule "idm_user_reboot" 对话框中,选择 idm_user,并把它移到 Prospective 栏。
- 点击 Add。
指定主机:
- 在 Access this host 部分中,选中指定的 Hosts and Groups 单选按钮。
- 在 Host category this rule applies to 子小节中,点 Add 打开 Add hosts into sudo rule "idm_user_reboot" 对话框。
- 在 Available 列中的 Add hosts to sudo rule "idm_user_reboot" 对话框中,选中 idmclient.idm.example.com 复选框,并将它移到 Prospective 列。
- 点击 Add。
指定命令:
- 在 Run Commands 一节的 Command category the rule applies to 子小节中,选择 Specified Commands and Groups 单选按钮。
- 在 Sudo Allow Commands 子节中,单击 Add 以打开 Add allow sudo commands into sudo rule "idm_user_reboot"对话框。
-
在 Available 列中的 Add allow sudo commands into sudo rule "idm_user_reboot" 对话框中,选中
/usr/sbin/reboot
复选框,并将它移到 Prospective 列。 - 点 Add 返回到 idm_sudo_reboot 页。
图 5.2. 添加 IdM sudo 规则
- 单击左上角的 Save。
新规则默认为启用。
将更改从服务器传播到客户端可能需要几分钟时间。
验证步骤
-
以
idm_user
用户身份登录idmclient
。 使用
sudo
重新启动计算机。在提示时输入idm_user
的密码:$ sudo /usr/sbin/reboot [sudo] password for idm_user:
如果正确配置了 sudo
规则,机器将重启。
5.4. 在 CLI 上创建 sudo 规则,以作为 IdM 客户端上的服务帐户运行命令
在 IdM 中,您可以使用 RunAs alias 配置 sudo
规则,以便以另一个用户或组身份运行 sudo
命令。例如,您可能有一个托管数据库应用的 IdM 客户端,您需要以与该应用对应的本地服务帐户运行命令。
使用此示例在名为 run_third-party-app_report
的命令行上创建 sudo
规则,以允许 idm_user
帐户在 idmclient
主机上以 thirdpartyapp
服务账户运行 /opt/third-party-app/bin/report
命令。
先决条件
- 以 IdM 管理员身份登录。
-
您已在 IdM 中创建
了 idm_user
的用户帐户,并通过为用户创建密码来解锁帐户。有关使用 CLI 添加新 IdM 用户的详情,请参阅使用命令行添加用户。 -
idmclient
主机上没有本地的idm_user
。idm_user
用户未列在本地/etc/passwd
文件中。 -
在
idmclient
主机上安装了名为third-party-app
的自定义应用。 -
third-party-app
应用程序的report
命令安装在/opt/third-party-app/bin/report
目录中。 -
您已创建了一个名为
thirdapp
的本地服务帐户,为第三方应用
执行命令。
步骤
获取 Kerberos 票据作为 IdM
admin
。[root@idmclient ~]# kinit admin
将
/opt/third-party-app/bin/report
命令添加到sudo
命令的 IdM 数据库:[root@idmclient ~]# ipa sudocmd-add /opt/third-party-app/bin/report ---------------------------------------------------- Added Sudo Command "/opt/third-party-app/bin/report" ---------------------------------------------------- Sudo Command: /opt/third-party-app/bin/report
创建名为
run_third-party-app_report
的sudo
规则:[root@idmclient ~]# ipa sudorule-add run_third-party-app_report -------------------------------------------- Added Sudo Rule "run_third-party-app_report" -------------------------------------------- Rule name: run_third-party-app_report Enabled: TRUE
使用
--users= <user
> 选项指定sudorule-add-runasuser
命令的 RunAs 用户:[root@idmclient ~]# ipa sudorule-add-runasuser run_third-party-app_report --users=thirdpartyapp Rule name: run_third-party-app_report Enabled: TRUE RunAs External User: thirdpartyapp ------------------------- Number of members added 1 -------------------------
使用
--groups=*
选项指定的用户(或组)可以在 IdM 的外部,如本地服务帐户或 Active Directory 用户。不要为组名称添加%
前缀。将
/opt/third-party-app/bin/report
命令添加到idm_user_reboot
规则中:[root@idmclient ~]# ipa sudorule-add-allow-command run_third-party-app_report --sudocmds '/opt/third-party-app/bin/report' Rule name: run_third-party-app_report Enabled: TRUE Sudo Allow Commands: /opt/third-party-app/bin/report RunAs External User: thirdpartyapp ------------------------- Number of members added 1 -------------------------
将
run_third- party-app_report
规则应用到 IdMidmclient
主机:[root@idmclient ~]# ipa sudorule-add-host run_third-party-app_report --hosts idmclient.idm.example.com Rule name: run_third-party-app_report Enabled: TRUE Hosts: idmclient.idm.example.com Sudo Allow Commands: /opt/third-party-app/bin/report RunAs External User: thirdpartyapp ------------------------- Number of members added 1 -------------------------
将
idm_user
帐户添加到run_third- party-app_report
规则中:[root@idmclient ~]# ipa sudorule-add-user run_third-party-app_report --users idm_user Rule name: run_third-party-app_report Enabled: TRUE Users: idm_user Hosts: idmclient.idm.example.com Sudo Allow Commands: /opt/third-party-app/bin/report RunAs External User: thirdpartyapp ------------------------- Number of members added 1
将更改从服务器传播到客户端可能需要几分钟时间。
验证步骤
-
以
idm_user
帐户身份登录idmclient
主机。 测试新的 sudo 规则:
显示允许
idm_user
帐户执行的sudo
规则。[idm_user@idmclient ~]$ sudo -l Matching Defaults entries for idm_user@idm.example.com on idmclient: !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY KRB5CCNAME", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin User idm_user@idm.example.com may run the following commands on idmclient: (thirdpartyapp) /opt/third-party-app/bin/report
作为
thirdpartyapp
服务帐户,运行report
命令。[idm_user@idmclient ~]$ sudo -u thirdpartyapp /opt/third-party-app/bin/report [sudo] password for idm_user@idm.example.com: Executing report... Report successful.
5.5. 在 IdM Web UI 中创建 sudo 规则,该规则在 IdM 客户端中作为服务帐户运行命令
在 IdM 中,您可以使用 RunAs alias 配置 sudo
规则,以便以另一个用户或组身份运行 sudo
命令。例如,您可能有一个托管数据库应用的 IdM 客户端,您需要以与该应用对应的本地服务帐户运行命令。
使用此示例在名为 run_third-party-app_report
的 IdM Web UI 中创建一个 sudo
规则,允许 idm_user
帐户将 /opt/third-party-app/bin/report
命令作为partyapp
服务帐户在 idmclient
主机上运行。
先决条件
- 以 IdM 管理员身份登录。
-
您已在 IdM 中创建
了 idm_user
的用户帐户,并通过为用户创建密码来解锁帐户。有关使用 CLI 添加新 IdM 用户的详情,请参阅使用命令行添加用户。 -
idmclient
主机上没有本地的idm_user
。idm_user
用户未列在本地/etc/passwd
文件中。 -
在
idmclient
主机上安装了名为third-party-app
的自定义应用。 -
third-party-app
应用程序的report
命令安装在/opt/third-party-app/bin/report
目录中。 -
您已创建了一个名为
thirdapp
的本地服务帐户,为第三方应用
执行命令。
步骤
将
/opt/third-party-app/bin/report
命令添加到sudo
命令的 IdM 数据库:- 导航到 Policy → Sudo → Sudo Commands。
- 单击右上角的 Add,以打开 Add sudo 命令对话框。
输入命令:
/opt/third-party-app/bin/report
.- 点击 Add。
使用新的
sudo
命令条目创建新sudo
规则:- 导航到 Policy → Sudo → Sudo rules。
- 单击右上角的 Add,以打开 Add sudo 规则对话框。
输入
sudo
规则的名称: run_third-party-app_report。- 点 Add and Edit。
指定用户:
- 在 Who 部分中,选中指定的用户和组单选按钮。
- 在 User category the rule applies to 子小节中,点 Add 打开 Add users into sudo rule "run_third-party-app_report" 对话框。
在 Available 栏的 Add users into sudo rule "run_third-party-app_report" 对话框中,选择 idm_user,并把它移到 Prospective 栏。
- 点击 Add。
指定主机:
- 在 Access this host 部分中,选中指定的 Hosts and Groups 单选按钮。
- 在 Host category the rule applies to 子小节中,点 Add 打开 Add hosts into sudo rule "run_third-party-app_report" 对话框。
在 Available 栏的 Add hosts to sudo rule "run_third- party-app_report" 对话框中,选中 idmclient.idm.example.com 复选框,并将它移到 Prospective 列。
- 点击 Add。
指定命令:
- 在 Run Commands 一节的 Command category the rule applies to 子小节中,选择 Specified Commands and Groups 单选按钮。
- 在 Sudo Allow Commands 子节中,单击 Add 以打开 Add allow sudo commands into sudo rule "run_third-party-app_report"对话框。
在 Available 栏的 Add allow sudo commands into sudo rule "run_third-party-app_report" 对话框中,选中
/opt/third-party-app/bin/report
并将其移到 Prospective 栏。- 单击 Add,以返回到 run_third-party-app_report 页面。
指定 RunAs 用户:
- 在 As Whom 部分中 ,选中指定的用户和组 单选按钮。
- 在 RunAs Users 子节中,点 Add 以打开 Add RunAs users into sudo rule "run_third-party-app_report"对话框。
在 Add RunAs users into sudo rule "run_third-party-app_report" 对话框中,在 External 部分输入
thirdpartyapp
服务账户,并将它移到 Prospective 栏。- 单击 Add,以返回到 run_third-party-app_report 页面。
- 单击左上角的 Save。
新规则默认为启用。
图 5.3. sudo 规则详情

将更改从服务器传播到客户端可能需要几分钟时间。
验证步骤
-
以
idm_user
帐户身份登录idmclient
主机。 测试新的 sudo 规则:
显示允许
idm_user
帐户执行的sudo
规则。[idm_user@idmclient ~]$ sudo -l Matching Defaults entries for idm_user@idm.example.com on idmclient: !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY KRB5CCNAME", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin User idm_user@idm.example.com may run the following commands on idmclient: (thirdpartyapp) /opt/third-party-app/bin/report
作为
thirdpartyapp
服务帐户,运行report
命令。[idm_user@idmclient ~]$ sudo -u thirdpartyapp /opt/third-party-app/bin/report [sudo] password for idm_user@idm.example.com: Executing report... Report successful.
5.6. 在 IdM 客户端上为 sudo 启用 GSSAPI 身份验证
以下流程描述了通过 pam_sss_gss.so
PAM 模块在 IdM 客户端中启用通用安全服务应用程序接口(GSSAPI)身份验证,用于 sudo
和 sudo -i
命令。使用这个配置,IdM 用户可以通过 Kerberos ticket 向 sudo
命令进行身份验证。
先决条件
-
您已为应用于 IdM 主机的 IdM 用户创建了
sudo
规则。在本例中,您已创建了idm_user_reboot
sudo
规则,为idm_user
帐户授予在idmclient
主机上运行/usr/sbin/reboot
命令的权限。 -
您需要
root
权限来修改/etc/sssd/sssd.conf
文件和/etc/pam.d/
目录中的 PAM 文件。
步骤
-
打开
/etc/sssd/sssd.conf
配置文件: 在
[domain/<domain_name> ]
部分中添加以下条目。[domain/<domain_name>] pam_gssapi_services = sudo, sudo-i
-
保存并关闭
/etc/sssd/sssd.conf
文件。 重启 SSSD 服务以载入配置更改。
[root@idmclient ~]# systemctl restart sssd
-
打开
/etc/pam.d/sudo
PAM 配置文件。 添加下列条目,作为
/etc/pam.d/sudo
文件中的auth
部分的第一行。#%PAM-1.0 auth sufficient pam_sss_gss.so auth include system-auth account include system-auth password include system-auth session include system-auth
-
保存并关闭
/etc/pam.d/sudo
文件。 -
打开
/etc/pam.d/sudo-i
PAM 配置文件。 添加下列条目,作为
/etc/pam.d/sudo-i
文件中的auth
部分的第一行。#%PAM-1.0 auth sufficient pam_sss_gss.so auth include sudo account include sudo password include sudo session optional pam_keyinit.so force revoke session include sudo
-
保存并关闭
/etc/pam.d/sudo-i
文件。
验证步骤
以
idm_user
帐户身份登录到主机。[root@idm-client ~]# ssh -l idm_user@idm.example.com localhost idm_user@idm.example.com's password:
验证您有一个票据授予票据作为
idm_user
帐户。[idmuser@idmclient ~]$ klist Ticket cache: KCM:1366201107 Default principal: idm_user@IDM.EXAMPLE.COM Valid starting Expires Service principal 01/08/2021 09:11:48 01/08/2021 19:11:48 krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM renew until 01/15/2021 09:11:44
(可选) 如果您没有
idm_user
帐户的 Kerberos 凭证,请销毁您当前的 Kerberos 凭证,并请求正确的凭证。[idm_user@idmclient ~]$ kdestroy -A [idm_user@idmclient ~]$ kinit idm_user@IDM.EXAMPLE.COM Password for idm_user@idm.example.com:
使用
sudo
重启机器,而不用指定密码。[idm_user@idmclient ~]$ sudo /usr/sbin/reboot
其他资源
- IdM 术语 列表中的 GSSAPI 条目
- 使用 IdM Web UI ,授予 sudo 访问 IdM 客户端上 IdM 用户的权限
- 使用 CLI 向 IdM 客户端上的 IdM 用户授予 sudo 访问权限。
-
pam_sss_gss(8)
手册页 -
sssd.conf(5)
手册页
5.7. 在 IdM 客户端上为 sudo 启用 GSSAPI 身份验证,并强制实施 Kerberos 身份验证指标
以下流程描述了通过 pam_sss_gss.so
PAM 模块在 IdM 客户端中启用通用安全服务应用程序接口(GSSAPI)身份验证,用于 sudo
和 sudo -i
命令。此外,只有已使用智能卡登录的用户才能使用 他们的 Kerberos 票据对这些命令进行身份验证。
您可以将此流程作为模板,使用 SSSD 为其他 PAM 感知的服务配置 GSSAPI 身份验证,并进一步限制只对那些在其 Kerberos 票据上附加了特定身份验证指标的用户进行访问。
先决条件
-
您已为应用于 IdM 主机的 IdM 用户创建了
sudo
规则。在本例中,您已创建了idm_user_reboot
sudo
规则,为idm_user
帐户授予在idmclient
主机上运行/usr/sbin/reboot
命令的权限。 -
您已为
idmclient
主机配置了智能卡身份验证。 -
您需要
root
权限来修改/etc/sssd/sssd.conf
文件和/etc/pam.d/
目录中的 PAM 文件。
步骤
-
打开
/etc/sssd/sssd.conf
配置文件: 将以下条目添加到
[domain/<domain_name>]
部分中。[domain/<domain_name>] pam_gssapi_services = sudo, sudo-i pam_gssapi_indicators_map = sudo:pkinit, sudo-i:pkinit
-
保存并关闭
/etc/sssd/sssd.conf
文件。 重启 SSSD 服务以载入配置更改。
[root@idmclient ~]# systemctl restart sssd
-
打开
/etc/pam.d/sudo
PAM 配置文件。 添加下列条目,作为
/etc/pam.d/sudo
文件中的auth
部分的第一行。#%PAM-1.0 auth sufficient pam_sss_gss.so auth include system-auth account include system-auth password include system-auth session include system-auth
-
保存并关闭
/etc/pam.d/sudo
文件。 -
打开
/etc/pam.d/sudo-i
PAM 配置文件。 添加下列条目,作为
/etc/pam.d/sudo-i
文件中的auth
部分的第一行。#%PAM-1.0 auth sufficient pam_sss_gss.so auth include sudo account include sudo password include sudo session optional pam_keyinit.so force revoke session include sudo
-
保存并关闭
/etc/pam.d/sudo-i
文件。
验证步骤
以
idm_user
帐户登录到主机,并使用智能卡进行身份验证。[root@idmclient ~]# ssh -l idm_user@idm.example.com localhost PIN for smart_card
验证作为智能卡用户,您有一个票据授予票据。
[idm_user@idmclient ~]$ klist Ticket cache: KEYRING:persistent:1358900015:krb_cache_TObtNMd Default principal: idm_user@IDM.EXAMPLE.COM Valid starting Expires Service principal 02/15/2021 16:29:48 02/16/2021 02:29:48 krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM renew until 02/22/2021 16:29:44
显示允许
idm_user
帐户执行的sudo
规则。[idm_user@idmclient ~]$ sudo -l Matching Defaults entries for idmuser on idmclient: !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY KRB5CCNAME", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin User idm_user may run the following commands on idmclient: (root) /usr/sbin/reboot
使用
sudo
重启机器,而不用指定密码。[idm_user@idmclient ~]$ sudo /usr/sbin/reboot
其他资源
- SSSD 选项控制对 PAM 服务的 GSSAPI 身份验证
- IdM 术语 列表中的 GSSAPI 条目
- 为智能卡验证配置身份管理
- Kerberos 认证指示符
- 使用 IdM Web UI ,授予 sudo 访问 IdM 客户端上 IdM 用户的权限
- 使用 CLI 向 IdM 客户端上的 IdM 用户授予 sudo 访问权限。
-
pam_sss_gss(8)
手册页 -
sssd.conf(5)
手册页
5.8. SSSD 选项控制对 PAM 服务的 GSSAPI 身份验证
您可以对 /etc/sssd/sssd.conf
配置文件使用以下选项来调整 SSSD 服务中的 GSSAPI 配置。
- pam_gssapi_services
-
默认情况下,禁用带有 SSSD 的 GSSAPI 身份验证。您可以使用此选项来指定一个以逗号分隔的 PAM 服务列表,允许这些服务使用
pam_sss_gss.gss.so
PAM 模块尝试 GSSAPI 身份验证。要显式禁用 GSSAPI 身份验证,将这个选项设为-
。 - pam_gssapi_indicators_map
这个选项只适用于身份管理(IdM)域。使用这个选项列出授予 PAM 访问服务所需的 Kerberos 身份验证指标。配对的格式必须是
<PAM_service>: _<required_authentication_indicator>_
。有效的验证指标为:
-
OTP
用于双因素身份验证 -
radius
用于 RADIUS 身份验证 -
pkinit
用于 PKINIT、智能卡或证书身份验证 -
hardened
用于强化的密码
-
- pam_gssapi_check_upn
-
默认启用这个选项,并将其设为
true
。如果启用了这个选项,SSSD 服务要求用户名与 Kerberos 凭证匹配。如果为false
,pam_ss_gss.so
PAM 模块将对能够获取所需服务票据的每个用户进行身份验证。
示例
以下选项为 sudo
和 sudo-i
服务启用 Kerberos 身份验证,要求 sudo
用户使用一次性密码进行身份验证,用户名必须与 Kerberos 主体匹配。由于这些设置位于 [pam]
部分中,因此适用于所有域:
[pam] pam_gssapi_services = sudo, sudo-i pam_gssapi_indicators_map = sudo:otp pam_gssapi_check_upn = true
您还可以在单独的 [domain]
部分中设置这些选项,来覆盖 [pam]
部分中的任何全局值。以下选项对每个域应用不同的 GSSAPI 设置:
- 对于
idm.example.com
域 -
为
sudo
和sudo -i
服务启用 GSSAPI 身份验证。 -
sudo
命令需要证书或智能卡身份验证器。 -
sudo -i
命令需要一次性密码身份验证器. - 强制匹配用户名和 Kerberos 主体.
-
为
- 对于
ad.example.com
域 -
仅为
sudo
服务启用 GSSAPI 身份验证。 - 不强制匹配用户名和主体。
-
仅为
[domain/idm.example.com] pam_gssapi_services = sudo, sudo-i pam_gssapi_indicators_map = sudo:pkinit, sudo-i:otp pam_gssapi_check_upn = true ... [domain/ad.example.com] pam_gssapi_services = sudo pam_gssapi_check_upn = false ...
其他资源
5.9. sudo 的 GSSAPI 身份验证故障排除
如果您无法使用 IdM 的 Kerberos 票据对 sudo
服务进行身份验证,请使用以下场景对您的配置进行故障排除。
先决条件
-
您已为
sudo
服务启用了 GSSAPI 身份验证。请参阅 在 IdM 客户端上为 sudo 启用 GSSAPI 身份验证。 -
您需要
root
权限来修改/etc/sssd/sssd.conf
文件和/etc/pam.d/
目录中的 PAM 文件。
步骤
如果您看到以下错误,Kerberos 服务可能无法为基于主机名的服务票据解析正确的域:
Server not found in Kerberos database
在这种情况下,将主机名直接添加到
/etc/krb5.conf
Kerberos 配置文件中的[domain_realm]
部分:[idm-user@idm-client ~]$ cat /etc/krb5.conf ... [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM server.example.com = EXAMPLE.COM
如果看到以下错误,则您没有任何 Kerberos 凭证:
No Kerberos credentials available
在这种情况下,使用
kinit
工具检索 Kerberos 凭证,或者通过 SSSD 进行身份验证:[idm-user@idm-client ~]$ kinit idm-user@IDM.EXAMPLE.COM Password for idm-user@idm.example.com:
如果您在
/var/log/sssd/sssd_pam.log
日志文件中看到以下错误之一,则 Kerberos 凭证与当前登录的用户的用户名不匹配:User with UPN [<UPN>] was not found. UPN [<UPN>] does not match target user [<username>].
在这种情况下,验证您使用 SSSD 进行身份验证,或考虑禁用
/etc/sssd/sssd.conf
文件中的pam_gssapi_check_upn
选项:[idm-user@idm-client ~]$ cat /etc/sssd/sssd.conf ... pam_gssapi_check_upn = false
若要进行额外的故障排除,您可以对
pam_sss_gss.so
PAM 模块启用调试输出。在 PAM 文件(如
/etc/pam.d/sudo
和/etc/pam.d/sudo-i
)中所有pam_sss_gss.so
条目的末尾添加debug
选项:[root@idm-client ~]# cat /etc/pam.d/sudo #%PAM-1.0 auth sufficient pam_sss_gss.so debug auth include system-auth account include system-auth password include system-auth session include system-auth
[root@idm-client ~]# cat /etc/pam.d/sudo-i #%PAM-1.0 auth sufficient pam_sss_gss.so debug auth include sudo account include sudo password include sudo session optional pam_keyinit.so force revoke session include sudo
尝试使用
pam_sss_gss.so
模块进行身份验证,并查看控制台输出。在本例中,用户没有任何 Kerberos 凭据。[idm-user@idm-client ~]$ sudo ls -l /etc/sssd/sssd.conf pam_sss_gss: Initializing GSSAPI authentication with SSSD pam_sss_gss: Switching euid from 0 to 1366201107 pam_sss_gss: Trying to establish security context pam_sss_gss: SSSD User name: idm-user@idm.example.com pam_sss_gss: User domain: idm.example.com pam_sss_gss: User principal: pam_sss_gss: Target name: host@idm.example.com pam_sss_gss: Using ccache: KCM: pam_sss_gss: Acquiring credentials, principal name will be derived pam_sss_gss: Unable to read credentials from [KCM:] [maj:0xd0000, min:0x96c73ac3] pam_sss_gss: GSSAPI: Unspecified GSS failure. Minor code may provide more information pam_sss_gss: GSSAPI: No credentials cache found pam_sss_gss: Switching euid from 1366200907 to 0 pam_sss_gss: System error [5]: Input/output error
5.10. 使用 Ansible playbook 确保 IdM 客户端上的 IdM 用户具有 sudo 访问权限
在身份管理(IdM)中,您可以确保对特定命令的 sudo
访问权限被授予给特定 IdM 主机上的 IdM 用户帐户。
完成此流程以确保名为 idm_user_reboot 的 sudo
规则存在。该规则授予 idm_user 在 idmclient 机器上运行 /usr/sbin/reboot
命令的权限。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
- 您知道 IdM 管理员密码。
- 您已 确保 IdM 中存在 idm_user 用户帐户,并通过为用户创建密码解锁了帐户。有关使用命令行界面添加新 IdM 用户的详情,请参阅使用命令行添加用户。
- 您已 确保 IdM 中存在 idm_user 用户帐户,并通过为用户创建密码解锁了帐户。有关使用命令行界面添加新 IdM 用户的详情,请参阅使用命令行添加用户。
- 您已 确保 IdM 中存在 idm_user 用户帐户,并通过为用户创建密码解锁了帐户。有关使用命令行界面添加新 IdM 用户的详情,请参阅使用命令行添加用户。
-
idmclient 中没有本地 idm_user 帐户。idm_user 用户未列在 idmclient 上的
/etc/passwd
文件中。
步骤
创建一个清单文件,如
inventory.file
,并在其中定义ipaservers
:[ipaservers] server.idm.example.com
添加一个或多个
sudo
命令:创建一个
ensure-reboot-sudocmd-is-present.yml
Ansible playbook,来确保sudo
命令的 IdM 数据库中存在/usr/sbin/reboot
命令。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/sudocmd/ensure-sudocmd-is-present.yml
文件中的示例:--- - name: Playbook to manage sudo command hosts: ipaserver become: true tasks: # Ensure sudo command is present - ipasudocmd: ipaadmin_password: MySecret123 name: /usr/sbin/reboot state: present
运行 playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-reboot-sudocmd-is-present.yml
创建一个引用命令的
sudo
规则:创建一个
ensure-sudorule-for-idmuser-on-idmclient-is-present.yml
Ansible playbook,来使用sudo
命令条目确保存在 sudo 规则。sudo 规则允许 idm_user 重新启动 idmclient 机器。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/sudorule/ensure-sudorule-is-present.yml
文件中的示例:--- - name: Tests hosts: ipaserver become: true tasks: # Ensure a sudorule is present granting idm_user the permission to run /usr/sbin/reboot on idmclient - ipasudorule: ipaadmin_password: MySecret123 name: idm_user_reboot description: A test sudo rule. allow_sudocmd: /usr/sbin/reboot host: idmclient.idm.example.com user: idm_user state: present
运行 playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-sudorule-for-idmuser-on-idmclient-is-present.yml
验证步骤
通过验证 idm_user 能够使用 sudo
重启 idmclient,来测试您在 IdM 服务器上确认其存在性的 sudo
规则是否在 idmclient 上可以工作。请注意,可能需要过几分钟后,服务器上所做的更改才会对客户端生效。
- 以 idm_user 用户身份登录到 idmclient。
使用
sudo
重新启动计算机。在提示时输入 idm_user 的密码:$ sudo /usr/sbin/reboot [sudo] password for idm_user:
如果正确配置了 sudo
,则机器将重启。
其他资源
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-sudocmd.md
,README-sudocmdgroup.md
, 和README-sudorule.md
文件。
第 6 章 使用 ldapmodify 在外部管理 IdM 用户
您可以使用 ldapmodify
和 ldapdelete
工具直接从命令行界面(CLI)修改身份管理(IdM)LDAP。这些工具提供了用于添加、编辑和删除目录内容的完整功能。您可以使用这些工具管理服务器的配置条目以及用户条目中的数据。这些工具也可用于编写脚本,来执行一个或多个目录的批量管理。
6.1. 在外部管理 IdM 用户帐户的模板
本节描述了 IdM 中各种用户管理操作的模板。模板显示您必须使用 ldapmodify
修改哪些属性才能实现以下目标:
- 添加新的 stage 用户
- 修改用户属性
- 启用用户
- 禁用用户
- 保留用户
模板的格式为 LDAP 数据交换格式(LDIF)。LDIF 是一种标准的纯文本数据交换格式,用来表示 LDAP 目录内容和更新请求。
使用模板,您可以配置调配系统的 LDAP 提供者来管理 IdM 用户帐户。
如需详细的示例流程,请参阅以下部分:
用于添加新 stage 用户的模板
用于添加 自动分配了 UID 和 GID 的用户的模板。所创建的条目的可区别的名称(DN)必须以
uid=user_login
开头:dn: uid=user_login,cn=staged users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com changetype: add objectClass: top objectClass: inetorgperson uid: user_login sn: surname givenName: first_name cn: full_name
用于添加 静态分配了 UID 和 GID 的用户的模板:
dn: uid=user_login,cn=staged users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com changetype: add objectClass: top objectClass: person objectClass: inetorgperson objectClass: organizationalperson objectClass: posixaccount uid: user_login uidNumber: UID_number gidNumber: GID_number sn: surname givenName: first_name cn: full_name homeDirectory: /home/user_login
在添加 stage 用户时,您不需要指定任何 IdM 对象类。在激活用户后,IdM 自动添加这些类。
用于修改现有用户的模板
修改用户的属性 :
dn: distinguished_name changetype: modify replace: attribute_to_modify attribute_to_modify: new_value
禁用用户 :
dn: distinguished_name changetype: modify replace: nsAccountLock nsAccountLock: TRUE
启用用户 :
dn: distinguished_name changetype: modify replace: nsAccountLock nsAccountLock: FALSE
更新
nssAccountLock
属性不会对 stage 和preserved 用户造成影响。虽然更新操作成功完成,属性值也会保持nssAccountLock:TRUE
。保留用户 :
dn: distinguished_name changetype: modrdn newrdn: uid=user_login deleteoldrdn: 0 newsuperior: cn=deleted users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com
在修改用户之前,使用用户的登录名进行搜索来获取用户的可区别名称(DN)。在以下示例中,user_allowed_to_modify_user_entries 用户是允许修改用户和组信息的用户,如 activator 或 IdM 管理员。示例中的密码是这个用户的密码:
[...]
# ldapsearch -LLL -x -D "uid=user_allowed_to_modify_user_entries,cn=users,cn=accounts,dc=idm,dc=example,dc=com" -w "Secret123" -H ldap://r8server.idm.example.com -b "cn=users,cn=accounts,dc=idm,dc=example,dc=com" uid=test_user
dn: uid=test_user,cn=users,cn=accounts,dc=idm,dc=example,dc=com
memberOf: cn=ipausers,cn=groups,cn=accounts,dc=idm,dc=example,dc=com
6.2. 在外部管理 IdM 组帐户的模板
本节描述了 IdM 中各种用户组管理操作的模板。模板显示您必须使用 ldapmodify
修改哪些属性来实现以下目标:
- 创建新组
- 删除现有组
- 将成员添加到组中
- 从组中删除成员
模板的格式为 LDAP 数据交换格式(LDIF)。LDIF 是一种标准的纯文本数据交换格式,用来表示 LDAP 目录内容和更新请求。
通过使用模板,您可以配置调配系统的 LDAP 提供者来管理 IdM 组帐户。
创建新组
dn: cn=group_name,cn=groups,cn=accounts,dc=idm,dc=example,dc=com changetype: add objectClass: top objectClass: ipaobject objectClass: ipausergroup objectClass: groupofnames objectClass: nestedgroup objectClass: posixgroup uid: group_name cn: group_name gidNumber: GID_number
修改组
删除现有组 :
dn: group_distinguished_name changetype: delete
将成员添加到组中 :
dn: group_distinguished_name changetype: modify add: member member: uid=user_login,cn=users,cn=accounts,dc=idm,dc=example,dc=com
不要向组中添加 stage 或 preserved 的用户。即使更新操作成功完成,也不会作为组的成员更新用户。只有活动的用户才能属于组。
从组中删除成员 :
dn: distinguished_name changetype: modify delete: member member: uid=user_login,cn=users,cn=accounts,dc=idm,dc=example,dc=com
在修改组之前,使用组的名称进行搜索来获取组的可区别名称(DN)。
# ldapsearch -YGSSAPI -H ldap://server.idm.example.com -b "cn=groups,cn=accounts,dc=idm,dc=example,dc=com" "cn=group_name"
dn: cn=group_name,cn=groups,cn=accounts,dc=idm,dc=example,dc=com
ipaNTSecurityIdentifier: S-1-5-21-1650388524-2605035987-2578146103-11017
cn: testgroup
objectClass: top
objectClass: groupofnames
objectClass: nestedgroup
objectClass: ipausergroup
objectClass: ipaobject
objectClass: posixgroup
objectClass: ipantgroupattrs
ipaUniqueID: 569bf864-9d45-11ea-bea3-525400f6f085
gidNumber: 1997010017
6.3. 使用 ldapmodify 保留 IdM 用户
本节描述了如何使用 ldapmodify
来保留 IdM 用户;即,如何在员工离开公司后停用用户帐户。
先决条件
- 您可以作为具有角色的 IdM 用户进行身份验证,来保留用户。
步骤
以具有角色的 IdM 用户身份登录,来保留用户:
$ kinit admin
输入
ldapmodify
命令,并指定通用安全服务API(GSSAPI)作为用于身份验证的简单身份验证和安全层(SASL)机制:# ldapmodify -Y GSSAPI SASL/GSSAPI authentication started SASL username: admin@IDM.EXAMPLE.COM SASL SSF: 256 SASL data security layer installed.
输入您要保留的用户的
dn
:dn: uid=user1,cn=users,cn=accounts,dc=idm,dc=example,dc=com
输入 modrdn 作为您要执行的更改的类型:
changetype: modrdn
为用户指定 newrdn :
newrdn: uid=user1
表示您要保留用户:
deleteoldrdn: 0
指定 新的高级 DN:
newsuperior: cn=deleted users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com
保存用户会将条目移到目录信息树(DIT)中的新位置。因此,您必须将新父条目的 DN 指定为新的高级 DN。
再次按
Enter
键确认输入结束:[Enter] modifying rdn of entry "uid=user1,cn=users,cn=accounts,dc=idm,dc=example,dc=com"
- 使用 Ctrl + C 退出连接。
验证步骤
通过列出所有 preserved 用户来验证用户是否已保留:
$ ipa user-find --preserved=true -------------- 1 user matched -------------- User login: user1 First name: First 1 Last name: Last 1 Home directory: /home/user1 Login shell: /bin/sh Principal name: user1@IDM.EXAMPLE.COM Principal alias: user1@IDM.EXAMPLE.COM Email address: user1@idm.example.com UID: 1997010003 GID: 1997010003 Account disabled: True Preserved user: True ---------------------------- Number of entries returned 1 ----------------------------
第 7 章 为用户的外部调配配置 IdM
作为系统管理员,您可以配置身份管理(IdM),来通过管理身份的外部解决方案支持用户的调配。
外部调配系统的管理员不必使用 ipa
工具,而是使用 ldapmodify
工具来访问 IdM LDAP。管理员可以 使用 ldapmodify 或 使用 LDIF 文件 从 CLI 来添加单个 stage 用户。
假设您作为 IdM 管理员完全信任外部调配系统,来仅添加经过验证的用户。但是,您不想为外部调配系统的管理员分配 用户管理员
的 IdM 角色,以便他们能够直接添加新的活动用户。
您可以 配置一个脚本,来自动将外部调配系统创建的 stage 用户移到活动用户。
本章包含以下章节:
- 准备身份管理(IdM) 来使用外部调配系统向 IdM 添加 stage 用户。
- 创建一个脚本,来将外部调配系统添加的用户从stage 移到活动用户。
使用外部调配系统添加 IdM stage 用户。您可以通过两种方式进行此操作:
7.1. 为 stage 用户帐户的自动激活准备 IdM 帐户
此流程演示了如何配置供外部调配系统使用的两个 IdM 用户帐户。通过使用合适的密码策略将帐户添加到组中,您可以使外部调配系统来管理 IdM 中的用户调配。在以下部分中,外部系统用来添加 stage 用户的用户帐户命名为 provisionator。用来自动激活 stage 用户的用户帐户命名为 activator。
先决条件
- 您在其上执行该步骤的主机已注册到 IdM 中。
步骤
以 IdM 管理员身份登录:
$ kinit admin
创建名为 provisionator 的用户,其具有用于添加 stage 用户的特权。
- 添加 provisionator 用户帐户:
$ ipa user-add provisionator --first=provisioning --last=account --password
为 provisionator 用户授予所需的特权。
创建一个自定义角色
System Provisioning
,来管理添加 stage 用户:$ ipa role-add --desc "Responsible for provisioning stage users" "System Provisioning"
将
Stage User Provisioning
特权添加到该角色。这个特权提供了添加 stage 用户的能力:$ ipa role-add-privilege "System Provisioning" --privileges="Stage User Provisioning"
将 provisionator 用户添加到角色中:
$ ipa role-add-member --users=provisionator "System Provisioning"
- 验证 provisionator 在 IdM 中是否存在:
$ ipa user-find provisionator --all --raw -------------- 1 user matched -------------- dn: uid=provisionator,cn=users,cn=accounts,dc=idm,dc=example,dc=com uid: provisionator [...]
创建用户 activator,其具有管理用户帐户的特权。
添加 activator 用户帐户:
$ ipa user-add activator --first=activation --last=account --password
通过将用户添加到默认的
User Administrator
角色来授予 activator 用户所需的特权:$ ipa role-add-member --users=activator "User Administrator"
为应用程序帐户创建用户组:
$ ipa group-add application-accounts
更新组的密码策略。以下策略可防止帐户的密码过期和锁住,但通过要求复杂的密码来弥补潜在的风险:
$ ipa pwpolicy-add application-accounts --maxlife=10000 --minlife=0 --history=0 --minclasses=4 --minlength=8 --priority=1 --maxfail=0 --failinterval=1 --lockouttime=0
(可选)验证密码策略是否在 IdM 中存在:
$ ipa pwpolicy-show application-accounts Group: application-accounts Max lifetime (days): 10000 Min lifetime (hours): 0 History size: 0 [...]
将调配和激活帐户添加到应用程序帐户的组中:
$ ipa group-add-member application-accounts --users={provisionator,activator}
更改用户帐户的密码:
$ kpasswd provisionator $ kpasswd activator
更改密码是必需的,因为新的 IdM 用户密码会立即过期。
其他资源:
- 请参阅 使用命令行管理用户帐户。
- 请参阅 向用户委托权限。
- 请参阅 定义 IdM 密码策略。
7.2. 配置 IdM stage用户帐户的自动激活
此流程演示了如何为激活 stage 用户创建脚本。系统在指定的时间间隔自动运行脚本。这样可确保新用户帐户被自动激活,并在创建后很快可用。
该流程假定外部调配系统的所有者已经验证了用户,并且在脚本将它们添加到 IdM 之前,它们不需要在 IdM 端进行额外的验证。
这对于仅在一个 IdM 服务器上启用激活过程足够了。
先决条件
- provisionator 和 activator 帐户在 IdM 中存在。详情请参阅 为 stage 用户帐户的自动激活准备 IdM 帐户。
- 在运行该流程的 IdM 服务器上您需要有 root 权限。
- 以 IdM 管理员身份登录。
- 您信任外部调配系统。
步骤
为激活帐户生成 keytab 文件:
# ipa-getkeytab -s server.idm.example.com -p "activator" -k /etc/krb5.ipa-activation.keytab
如果您要在多个 IdM 服务器上启用激活过程,请仅在一个服务器上生成 keytab 文件。然后,将 keytab 文件复制到其他服务器上。
创建一个包含以下内容的
/usr/local/sbin/ipa-activate-all
脚本来激活所有用户:#!/bin/bash kinit -k -i activator ipa stageuser-find --all --raw | grep " uid:" | cut -d ":" -f 2 | while read uid; do ipa stageuser-activate ${uid}; done
编辑
ipa-activate-all
脚本的权限和所有权来使其可执行:# chmod 755 /usr/local/sbin/ipa-activate-all # chown root:root /usr/local/sbin/ipa-activate-all
创建一个 systemd 单元文件
/etc/systemd/system/ipa-activate-all.service
,内容如下:[Unit] Description=Scan IdM every minute for any stage users that must be activated [Service] Environment=KRB5_CLIENT_KTNAME=/etc/krb5.ipa-activation.keytab Environment=KRB5CCNAME=FILE:/tmp/krb5cc_ipa-activate-all ExecStart=/usr/local/sbin/ipa-activate-all
创建一个 systemd 计时器
/etc/systemd/system/ipa-activate-all.timer
,内容如下:[Unit] Description=Scan IdM every minute for any stage users that must be activated [Timer] OnBootSec=15min OnUnitActiveSec=1min [Install] WantedBy=multi-user.target
重新载入新配置:
# systemctl daemon-reload
启用
ipa-activate-all.timer
:# systemctl enable ipa-activate-all.timer
启动
ipa-activate-all.timer
:# systemctl start ipa-activate-all.timer
(可选)验证
ipa-activate-all.timer
守护进程是否正在运行:# systemctl status ipa-activate-all.timer ● ipa-activate-all.timer - Scan IdM every minute for any stage users that must be activated Loaded: loaded (/etc/systemd/system/ipa-activate-all.timer; enabled; vendor preset: disabled) Active: active (waiting) since Wed 2020-06-10 16:34:55 CEST; 15s ago Trigger: Wed 2020-06-10 16:35:55 CEST; 44s left Jun 10 16:34:55 server.idm.example.com systemd[1]: Started Scan IdM every minute for any stage users that must be activated.
7.3. 添加 LDIF 文件中定义的 IdM stage 用户
本节描述了外部配置系统的管理员如何访问 IdM LDAP,并使用 LDIF 文件来添加 stage 用户。虽然下例中演示了添加一个单独的用户,但可以以批量模式在一个文件中添加多个用户。
先决条件
- IdM 管理员已为其创建了 provisionator 帐户及密码。详情请参阅 为 stage 用户帐户的自动激活准备 IdM 帐户。
- 作为外部管理员,您知道 provisionator 帐户的密码。
- 您可以从 LDAP 服务器通过 SSH 连接到 IdM 服务器。
您可以提供 IdM stage 用户必须有的最小的属性集来允许正确处理用户生命周期,即:
-
可区分的名称
(dn) -
通用名称
(cn) -
姓氏
(sn) -
uid
-
步骤
在外部服务器上,创建一个包含有关新用户信息的 LDIF 文件:
dn: uid=stageidmuser,cn=staged users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com changetype: add objectClass: top objectClass: inetorgperson uid: stageidmuser sn: surname givenName: first_name cn: full_name
将 LDIF 文件从外部服务器传到 IdM 服务器:
$ scp add-stageidmuser.ldif provisionator@server.idm.example.com:/provisionator/ Password: add-stageidmuser.ldif 100% 364 217.6KB/s 00:00
使用
SSH
协议,以 provisionator 身份连接到 IdM 服务器:$ ssh provisionator@server.idm.example.com Password: [provisionator@server ~]$
在 IdM 服务器上,获取 provisionator 帐户的 Kerberos 票据授予票(TGT):
[provisionator@server ~]$ kinit provisionator
输入
ldapadd
命令,以及 -f 选项和 LDIF 文件的名称。指定 IdM 服务器的名称和端口号:~]$ ldapadd -h server.idm.example.com -p 389 -f add-stageidmuser.ldif SASL/GSSAPI authentication started SASL username: provisionator@IDM.EXAMPLE.COM SASL SSF: 256 SASL data security layer installed. adding the entry "uid=stageidmuser,cn=staged users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com"
7.4. 使用 ldapmodify 直接从 CLI 添加 IdM stage 用户
本节描述了外部调配系统的管理员如何访问身份管理(IdM)LDAP,并使用 ldapmodify
工具添加 stage 用户。
先决条件
- IdM 管理员已为其创建了 provisionator 帐户和密码。详情请参阅 为 stage 用户帐户的自动激活准备 IdM 帐户。
- 作为外部管理员,您知道 provisionator 帐户的密码。
- 您可以从 LDAP 服务器通过 SSH 连接到 IdM 服务器。
您可以提供 IdM stage 用户必须有的最小的属性集来允许正确处理用户生命周期,即:
-
可区分的名称
(dn) -
通用名称
(cn) -
姓氏
(sn) -
uid
-
步骤
使用您的 IdM 身份和凭证,通过
SSH
协议连接到 IdM 服务器:$ ssh provisionator@server.idm.example.com Password: [provisionator@server ~]$
获取 provisionator 帐户的 TGT,这是具有添加新 stage 用户角色的 IdM 用户:
$ kinit provisionator
输入
ldapmodify
命令,并将通用安全服务 API(GSSAPI)指定为用于身份验证的简单身份验证和安全层(SASL)机制。指定 IdM 服务器的名称和端口:# ldapmodify -h server.idm.example.com -p 389 -Y GSSAPI SASL/GSSAPI authentication started SASL username: provisionator@IDM.EXAMPLE.COM SASL SSF: 56 SASL data security layer installed.
输入您要添加的用户的
dn
:dn: uid=stageuser,cn=staged users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com
输入 add 作为您要执行的更改的类型:
changetype: add
指定允许正确处理用户生命周期所需的 LDAP 对象类类别:
objectClass: top objectClass: inetorgperson
您可以指定其他对象类。
输入用户的
uid
:uid: stageuser
输入用户的
cn
:cn: Babs Jensen
输入用户的姓氏:
sn: Jensen
再次按
Enter
键确认输入结束:[Enter] adding new entry "uid=stageuser,cn=staged users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com"
- 使用 Ctrl + C 退出连接。
验证步骤
验证 stage 条目的内容,以确保您的调配系统添加了所有必需的 POSIX 属性,并且 stage 条目已准备好被激活。
要显示新 stage 用户的 LDAP 属性,请输入
ipa stageuser-show --all --raw
命令:$ ipa stageuser-show stageuser --all --raw dn: uid=stageuser,cn=staged users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com uid: stageuser sn: Jensen cn: Babs Jensen has_password: FALSE has_keytab: FALSE nsaccountlock: TRUE objectClass: top objectClass: inetorgperson objectClass: organizationalPerson objectClass: person
-
请注意,通过
saccountlock
属性,用户被显式禁用了。
-
请注意,通过
7.5. 其他资源
第 8 章 使用 CLI 管理 IdM 中的自助服务规则
本章介绍了身份管理(IdM)中的自助服务规则,并描述了如何在命令行界面(CLI)上创建和编辑自助服务访问规则。
8.1. IdM 中的自助服务访问控制
自助服务访问控制规则定义 Identity Management (IdM) 实体可以在其 IdM 目录服务器条目上执行的操作:例如,IdM 用户能够更新自己的密码。
这种控制方法允许经过身份验证的 IdM 实体编辑其 LDAP 条目中的特定属性,但不允许对整个条目的 add
或 delete
操作。
使用自助服务访问控制规则时要小心:不当配置访问控制规则可能会意外地提升实体的特权。
8.2. 使用 CLI 创建自助服务规则
这个流程描述了使用命令行界面(CLI)在 IdM 中创建自助服务访问规则。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 一个活跃的 Kerberos 票据。详情请参阅 使用 kinit 手动登录到 IdM。
步骤
要添加自助服务规则,请使用
ipa selfservice-add
命令,并指定以下两个选项:--permissions
- 设置访问控制指令(ACI)授予的 读 和 写 权限。
--attrs
- 设置此 ACI 授予权限的属性的完整列表。
例如,要创建一个自助服务规则,允许用户修改其自己的名称详情:
$ ipa selfservice-add "Users can manage their own name details" --permissions=write --attrs=givenname --attrs=displayname --attrs=title --attrs=initials ----------------------------------------------------------- Added selfservice "Users can manage their own name details" ----------------------------------------------------------- Self-service name: Users can manage their own name details Permissions: write Attributes: givenname, displayname, title, initials
8.3. 使用 CLI 编辑自助服务规则
这个流程描述了使用命令行界面(CLI)编辑 IdM 中的自助服务访问规则。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 一个活跃的 Kerberos 票据。详情请参阅 使用 kinit 手动登录到 IdM。
流程
-
可选 :使用
ipa selfservice-find
命令显示现有的自助服务规则。 -
可选 :使用
ipa selfservice-show
命令显示您要修改的自助服务规则的详情。 -
使用
ipa selfservice-mod
命令来编辑自助服务规则。
例如:
$ ipa selfservice-mod "Users can manage their own name details" --attrs=givenname --attrs=displayname --attrs=title --attrs=initials --attrs=surname -------------------------------------------------------------- Modified selfservice "Users can manage their own name details" -------------------------------------------------------------- Self-service name: Users can manage their own name details Permissions: write Attributes: givenname, displayname, title, initials
使用 ipa selfservice-mod
命令覆盖之前定义的权限和属性,因此始终包含现有权限和属性的完整列表,以及您要定义的任何新的权限和属性。
验证步骤
-
使用
ipa selfservice-show
命令显示您编辑的自助服务规则。
$ ipa selfservice-show "Users can manage their own name details" -------------------------------------------------------------- Self-service name: Users can manage their own name details Permissions: write Attributes: givenname, displayname, title, initials
8.4. 使用 CLI 删除自助服务规则
这个流程描述了使用命令行界面(CLI)删除 IdM 中的自助服务访问规则。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 一个活跃的 Kerberos 票据。详情请参阅 使用 kinit 手动登录到 IdM。
步骤
-
使用
ipa selfservice-del
命令删除自助服务规则。
例如:
$ ipa selfservice-del "Users can manage their own name details" ----------------------------------------------------------- Deleted selfservice "Users can manage their own name details" -----------------------------------------------------------
验证步骤
-
使用
ipa selfservice-find
命令显示所有自助服务规则。您刚才删除的规则应该消失了。
第 9 章 使用 IdM Web UI 管理自助服务规则
本章介绍了身份管理(IdM)中的自助服务规则,并描述了如何在 Web 界面(IdM Web UI)中创建和编辑自助服务访问规则。
9.1. IdM 中的自助服务访问控制
自助服务访问控制规则定义 Identity Management (IdM) 实体可以在其 IdM 目录服务器条目上执行的操作:例如,IdM 用户能够更新自己的密码。
这种控制方法允许经过身份验证的 IdM 实体编辑其 LDAP 条目中的特定属性,但不允许对整个条目的 add
或 delete
操作。
使用自助服务访问控制规则时要小心:不当配置访问控制规则可能会意外地提升实体的特权。
9.2. 使用 IdM Web UI 创建自助服务规则
这个流程描述了如何使用 Web 界面(IdM Web UI)在 IdM 中创建自助服务访问规则。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 您已登录到 IdM Web UI。详情请参阅 在 Web 浏览器中访问 IdM Web UI。
步骤
- 在 IPA Server 选项卡中,打开 Role-Based Access Control 子菜单,然后选择 Self Service Permissions。
点击自助服务访问规则列表右上角的 Add :
此时将打开 Add Self Service Permission 窗口。在 Self-service name 字段中输入新自助服务规则的名称。允许空格:
- 选中您希望用户能够编辑的属性旁边的复选框。
可选 :如果您要提供访问权限的属性没有列出,您可以为其添加一个列表:
- 点击 Add 按钮。
- 在以下 Add Custom Attribute 窗口的 Attribute 文本字段中输入属性名称。
- 单击 OK 按钮来添加该属性
- 验证是否已选中新属性
-
单击表单底部的 Add 按钮,来保存新的自助服务规则。
或者,您可以通过单击 Add and Edit 按钮来保存并继续编辑自助服务规则,或者通过单击 Add and Add another 按钮来保存并添加其他规则。
9.3. 使用 IdM Web UI 编辑自助服务规则
这个流程描述了如何使用 Web 界面(IdM Web UI)编辑 IdM 中的自助服务访问规则。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 您已登录到 IdM Web UI。详情请参阅 在 Web 浏览器中访问 IdM Web UI。
步骤
- 在 IPA Server 选项卡中,打开 Role-Based Access Control 子菜单,然后选择 Self Service Permissions。
单击您要修改的自助服务规则的名称。
- 编辑页面只允许您编辑您要添加或删除自助服务规则的属性列表。选择或取消选择合适的复选框。
- 单击 Save 按钮,将更改保存到自助服务规则。
9.4. 使用 IdM Web UI 删除自助服务规则
这个流程描述了如何使用 Web 界面(IdM Web UI)删除 IdM 中的自助服务访问规则。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 您已登录到 IdM Web UI。详情请参阅 在 Web 浏览器中访问 IdM Web UI。
步骤
- 在 IPA Server 选项卡中,打开 Role-Based Access Control 子菜单,然后选择 Self Service Permissions。
选中您要删除的规则旁边的复选框,然后单击列表右侧的 Delete 按钮。
- 此时会打开一个对话框,单击 Delete 进行确认。
第 10 章 使用 Ansible playbook 管理 IdM 中的自助服务规则
本节介绍 Identity Management (IdM) 中的自助服务规则,并介绍如何使用 Ansible playbook 创建和编辑自助服务访问规则。自助服务访问控制规则允许 IdM 实体在其 IdM 目录服务器条目上执行指定操作。
本节涵盖了以下主题:
10.1. IdM 中的自助服务访问控制
自助服务访问控制规则定义 Identity Management (IdM) 实体可以在其 IdM 目录服务器条目上执行的操作:例如,IdM 用户能够更新自己的密码。
这种控制方法允许经过身份验证的 IdM 实体编辑其 LDAP 条目中的特定属性,但不允许对整个条目的 add
或 delete
操作。
使用自助服务访问控制规则时要小心:不当配置访问控制规则可能会意外地提升实体的特权。
10.2. 使用 Ansible 确保存在自助服务规则
以下流程描述了如何使用 Ansible playbook 定义自助服务规则并确保它们在身份管理 (IdM) 服务器上存在。在本例中,新的 Users can manage their own name details 规则会授予用户更改其 givenname
、displayname
、title
和 initials
属性的权限。例如,这允许他们更改其显示名称或缩写(如果想更改)。
先决条件
- 您知道 IdM 管理员密码。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 在 ~/MyPlaybooks/ 目录中,您使用配置这些选项的 IdM 服务器的完全限定域名(FQDN)创建了一个 Ansible 清单文件。
步骤
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
复制位于
/usr/share/doc/ansible-freeipa/playbooks/selfservice/
目录中的selfservice-present.yml
文件副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/selfservice/selfservice-present.yml selfservice-present-copy.yml
-
打开
selfservice-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipaselfservice
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为新自助服务规则的名称。 -
将
权限
变量设置为以逗号分隔的权限列表,以授予:read
和write
。 -
将
attribute
变量设置为用户可以自己管理的属性列表:givenname
、displayname
、title
和initials
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Self-service present hosts: ipaserver become: true tasks: - name: Ensure self-service rule "Users can manage their own name details" is present ipaselfservice: ipaadmin_password: Secret123 name: "Users can manage their own name details" permission: read, write attribute: - givenname - displayname - title - initials
-
将
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory selfservice-present-copy.yml
其他资源
- 请参阅 IdM 中的自助服务访问控制。
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-selfservice.md
文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/selfservice
目录。
10.3. 使用 Ansible 确保缺少自助服务规则
以下流程描述了如何使用 Ansible playbook 来确保 IdM 配置中没有指定的自助服务规则。以下示例描述了如何确保 Users can manage their own name details 自助服务规则在 IdM 中不存在。这将确保用户无法更改自己的显示名称或缩写。
先决条件
- 您知道 IdM 管理员密码。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 在 ~/MyPlaybooks/ 目录中,您使用配置这些选项的 IdM 服务器的完全限定域名(FQDN)创建了一个 Ansible 清单文件。
步骤
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
创建位于
/usr/share/doc/ansible-freeipa/playbooks/selfservice/
目录中的selfservice-absent.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/selfservice/selfservice-absent.yml selfservice-absent-copy.yml
-
打开
selfservice-absent-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipaselfservice
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为自助服务规则的名称。 -
将
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Self-service absent hosts: ipaserver become: true tasks: - name: Ensure self-service rule "Users can manage their own name details" is absent ipaselfservice: ipaadmin_password: Secret123 name: "Users can manage their own name details" state: absent
-
将
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory selfservice-absent-copy.yml
其他资源
- 请参阅 IdM 中的自助服务访问控制。
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-selfservice.md
文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/selfservice
目录中的 playbook 示例。
10.4. 使用 Ansible 确保自助服务规则具有特定属性
以下流程描述了如何使用 Ansible playbook 确保现有自助服务规则具有特定的设置。在示例中,您可以确认 Users can manage their own name details 自助服务规则也具有 surname
成员属性。
先决条件
- 您知道 IdM 管理员密码。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 在 ~/MyPlaybooks/ 目录中,您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
- Users can manage their own name details 自助服务规则存在于 IdM 中。
步骤
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
创建位于
/usr/share/doc/ansible-freeipa/playbooks/selfservice/
目录中的selfservice-member-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/selfservice/selfservice-member-present.yml selfservice-member-present-copy.yml
-
打开
selfservice-member-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipaselfservice
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为要修改的自助服务规则的名称。 -
将
attribute
变量设置为surname
。 -
将
action
变量设置为member
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Self-service member present hosts: ipaserver become: true tasks: - name: Ensure selfservice "Users can manage their own name details" member attribute surname is present ipaselfservice: ipaadmin_password: Secret123 name: "Users can manage their own name details" attribute: - surname action: member
-
将
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory selfservice-member-present-copy.yml
其他资源
- 请参阅 IdM 中的自助服务访问控制。
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中提供的README-selfservice.md
文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/selfservice
目录中的 playbook 示例。
10.5. 使用 Ansible 确保自助服务规则没有特定属性
以下流程描述了如何使用 Ansible playbook 来确保自助服务规则没有特定的设置。您可以使用此 playbook 确保自助服务规则没有授予不需要的访问权限。在示例中,您可以确定 Users can manage their own name details 自助服务规则没有包括 givenname
和 surname
成员属性。
先决条件
- 您知道 IdM 管理员密码。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 在 ~/MyPlaybooks/ 目录中,您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
- Users can manage their own name details 自助服务规则存在于 IdM 中。
步骤
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
创建位于
/usr/share/doc/ansible-freeipa/playbooks/selfservice/
目录中的selfservice-member-absent.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/selfservice/selfservice-member-absent.yml selfservice-member-absent-copy.yml
-
打开
selfservice-member-absent-copy.yml
Ansible playbook 文件进行编辑。 通过在
ipaselfservice
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为您要修改的自助服务规则的名称。 -
将
attribute
变量设置为givenname
和 topname
。 -
将
action
变量设置为member
。 -
将
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Self-service member absent hosts: ipaserver become: true tasks: - name: Ensure selfservice "Users can manage their own name details" member attributes givenname and surname are absent ipaselfservice: ipaadmin_password: Secret123 name: "Users can manage their own name details" attribute: - givenname - surname action: member state: absent
-
将
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory selfservice-member-absent-copy.yml
其他资源
- 请参阅 IdM 中的自助服务访问控制。
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-selfservice.md
文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/selfservice
目录中的 playbook 示例。
第 11 章 在 IdM CLI 中管理用户组
本章介绍了使用 IdM CLI 的用户组管理。
用户组是一组具有常见特权、密码策略和其他特征的用户。
Identity Management (IdM) 中的用户组可以包括:
- IdM 用户
- 其他 IdM 用户组
- 外部用户,即 IdM 之外的用户
11.1. IdM 中的不同组类型
IdM 支持以下类型的组:
- POSIX 组(默认)
POSIX 组支持其成员的 Linux POSIX 属性。请注意,与 Active Directory 交互的组无法使用 POSIX 属性。
POSIX 属性将用户识别为单独的实体。与用户相关的 POSIX 属性示例包括
uidNumber
(一个用户号 (UID))和gidNumber
(一个组号 (GID))。- 非 POSIX 组
非 POSIX 组不支持 POSIX 属性。例如,这些组没有定义 GID。
这种组的所有成员必须属于 IdM 域。
- 外部组
使用外部组添加存在于 IdM 域外部的身份存储中的组成员,例如:
- 本地系统
- Active Directory 域
- 目录服务
外部组不支持 POSIX 属性。例如,这些组没有定义 GID。
表 11.1. 默认创建的用户组
组名称 | 默认组成员 |
---|---|
| 所有 IdM 用户 |
|
具有管理特权的用户,包括默认的 |
| 这是一个旧的组,不再具有任何特殊权限 |
| 具有管理 Active Directory 信任权限的用户 |
将用户添加到用户组时,该用户将获得与组关联的特权和策略。例如,若要向用户授予管理特权,可将该用户添加到 admins
组。
不要删除 admins
组。由于 admins
是 IdM 要求的预定义组,因此此操作会导致某些命令出现问题。
另外,当在 IdM 中创建新用户时,IdM 默认会创建用户私有组。有关私有组的更多信息,请参阅在没有私有组的情况下添加用户。
11.2. 直接和间接组成员
IdM 中的用户组属性适用于直接和间接成员:当组 B 是组 A 的成员时,组 B 中的所有用户都被视为组 A 的间接成员。
例如,在下图中:
- 用户 1 和用户 2 是组 A 的直接成员。
- 用户 3、用户 4 和用户 5 是组 A 的间接成员。
图 11.1. 直接和间接组成员身份

如果您为用户组 A 设置密码策略,该策略也适用于用户组 B 中的所有用户。
11.3. 使用 IdM CLI 添加用户组
本节描述了如何使用 IdM CLI 添加用户组。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
步骤
使用
ipa group-add group_name
命令添加用户组。例如,创建 group_a:$ ipa group-add group_a --------------------- Added group "group_a" --------------------- Group name: group_a GID: 1133400009
默认情况下,
ipa group-add
添加 POSIX 用户组。要指定不同的组类型,请在ipa group-add
中添加选项:-
--nonposix
用来创建非 POSIX 组 --external
用来创建外部组有关组类型的详情,请查看 IdM 中不同的组类型。
您可以使用
--gid=custom_GID
选项来在添加用户组时指定自定义的 GID。如果您这样做,请小心以避免 ID 冲突。如果没有指定自定义的 GID,IdM 会自动从可用的 ID 范围内分配一个 GID。-
不要将本地组添加到 IdM。NSS(Name Service Switch)在解析本地用户和组前,总会先解析 IdM 的用户和组。这意味着 IdM 组成员资格不适用于本地用户。
11.4. 使用 IdM CLI 搜索用户组
本节描述了如何使用 IdM CLI 搜索现有用户组。
步骤
使用
ipa group-find
命令显示所有用户组。要指定组类型,请在ipa group-find
中添加选项:-
使用
ipa group-find --posix
命令显示所有 POSIX 组。 -
使用
ipa group-find --nonposix
命令显示所有非 POSIX 组。 使用
ipa group-find --external
命令显示所有外部组。有关不同组类型的更多信息,请参阅 IdM 中不同的组类型。
-
使用
11.5. 使用 IdM CLI 删除用户组
本节描述了如何使用 IdM CLI 删除用户组。请注意,删除组不会从 IdM 中删除组成员。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
步骤
使用
ipa group-del group_name
命令删除用户组。例如,要删除 group_a:$ ipa group-del group_a -------------------------- Deleted group "group_a" --------------------------
11.6. 使用 IdM CLI 将成员添加到用户组中
本节描述了如何使用 IdM CLI 将成员添加到用户组中。您可以将用户和用户组添加为用户组的成员。如需更多信息,请参阅 IdM 中不同的组类型 和 直接和间接组成员 。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
步骤
使用
ipa group-add-member
命令向用户组添加成员。使用这些选项指定成员类型:
-
--users
添加 IdM 用户 -
--external
添加一个存在于 IdM 域外的用户,格式为DOMAIN\user_name
或user_name@domain
-
--groups
添加 IdM 用户组
例如,将 group_b 添加为 group_a 的成员:
$ ipa group-add-member group_a --groups=group_b Group name: group_a GID: 1133400009 Member users: user_a Member groups: group_b Indirect Member users: user_b ------------------------- Number of members added 1 -------------------------
group_b 的成员现在是 group_a 的间接成员。
-
将组添加为另一个组的成员时,请勿创建递归组。例如,如果组 A 是组 B 的成员,则不要将组 B 添加为组 A 的成员。递归组可能会导致无法预料的行为。
将成员添加到用户组后,更新可能需要一些时间才能传播到身份管理环境中的所有客户端。这是因为,当任何给定主机解析用户、组和网络组时,系统安全服务守护进程
(SSSD)首先检查其缓存,并且仅对丢失或过期的记录执行服务器查找。
11.7. 添加没有用户私有组的用户
默认情况下,每当在 IdM 中创建新用户时,IdM 都会创建用户私有组(UPG)。UPG 是特定的组类型:
- UPG 与新创建的用户具有相同的名称。
- 用户是 UPG 的唯一成员。UPG 不能包含任何其他成员。
- 私有组的 GID 与用户的 UID 相匹配。
不过,可以添加用户而不创建 UPG 。
11.7.1. 没有用户私有组的用户
如果 NIS 组或其他系统组已使用将要分配给用户私有组的 GID,则有必要避免创建 UPG。
您可以通过两种方式执行此操作:
- 添加没有 UPG 的新用户,而不全局禁用私有组。请参阅 全局启用私有组时添加没有用户私有组的用户 。
- 对所有用户全局禁用 UPG,然后添加新用户。请参阅 对所有用户全局禁用用户私有组,和 在用户私有组全局禁用时添加用户。
在这两种情况下,在添加新用户时,IdM 都需要指定 GID,否则操作将失败。这是因为对于新用户,IdM 需要 GID,但默认用户组 ipausers
是一个非 POSIX 组,因此没有关联的 GID。您指定的 GID 不必对应于已经存在的组。
指定 GID 不会创建新组。它仅为新用户设置 GID 属性,因为 IdM 需要属性。
11.7.2. 在全局启用私有组时添加没有用户私有组的用户
您可以添加用户而不创建用户私有组(UPG),即使系统上启用了 UPG。这需要为新用户手动设置 GID。有关为何需要此功能的详情,请查看 没有用户私有组的用户。
步骤
要防止 IdM 创建 UPG,请在
ipa user-add
命令中添加--noprivate
选项。请注意,若要命令成功,您必须指定一个自定义的 GID。例如,使用 GID 10000 添加新用户:
$ ipa user-add jsmith --first=John --last=Smith --noprivate --gid 10000
11.7.3. 对所有用户全局禁用用户私有组
您可以在全局范围内禁用用户私有组(UPG)。这样可防止为所有新用户创建 UPG。现有用户不会受到这一更改的影响。
步骤
获取管理员权限:
$ kinit admin
IdM 使用目录服务器管理的条目插件来管理 UPG。列出插件的实例:
$ ipa-managed-entries --list
要确保 IdM 不创建 UPG,请禁用负责管理用户私有组的插件实例:
$ ipa-managed-entries -e "UPG Definition" disable Disabling Plugin
注意要在稍后重新启用
UPG Definition
实例,请使用ipa-managed-entries -e "UPG Definition" enable
命令。重新启动目录服务器来加载新配置。
$ sudo systemctl restart dirsrv.target
要在禁用 UPG 后添加用户,您需要指定 GID。如需更多信息,请参阅在用户私有组群全局禁用时添加用户
验证步骤
要检查 UPG 是否全局禁用,请再次使用 disable 命令:
$ ipa-managed-entries -e "UPG Definition" disable Plugin already disabled
11.7.4. 当全局禁用用户私有组时添加用户
当全局禁用用户私有组(UPG)时,IdM 不会自动为新用户分配 GID。要成功添加用户,您必须手动分配 GID,或使用自动成员规则来分配 GID。有关为何需要此功能的详情,请查看 没有用户私有组的用户。
先决条件
- 必须对所有用户全局禁用 UPG。如需更多信息,请参阅对所有用户全局禁用用户私有组
步骤
要确保在禁用创建 UPG 时成功添加新用户,请选择以下之一:
添加新用户时指定自定义的 GID。GID 不必对应于已经存在的用户组。
例如,当从命令行添加用户时,请在
ipa user-add
命令中添加--gid
选项。- 使用自动成员规则将用户添加到具有 GID 的现有组中。
11.8. 使用 IdM CLI 将用户或组作为成员管理者添加到 IdM 用户组中
本节描述了如何使用 IdM CLI 将用户或组作为成员管理者添加到 IdM 用户组中。成员管理者可以将用户或组添加到 IdM 用户组中,但不能更改组的属性。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
- 您必须具有要添加为成员管理器的用户名以及您要管理的组的名称。
步骤
使用
ipa group-add-member-manager
命令,将用户作为成员管理者添加到 IdM 用户组。例如,要将用户
test
添加为group_a
的成员管理者:$ ipa group-add-member-manager group_a --users=test Group name: group_a GID: 1133400009 Membership managed by users: test ------------------------- Number of members added 1 -------------------------
用户
test
现在可以管理group_a
的成员。使用
ipa group-add-member-manager
命令,将组作为成员管理者添加到 IdM 用户组。例如,要将
group_admins
添加为group_a
的成员管理者:$ ipa group-add-member-manager group_a --groups=group_admins Group name: group_a GID: 1133400009 Membership managed by groups: group_admins Membership managed by users: test ------------------------- Number of members added 1 -------------------------
组
group_admins
现在可以管理group_a
的成员。
将成员管理者添加到用户组后,可能需要过些时间,才能将更新传播到身份管理环境中的所有客户端。
验证步骤
使用
ipa group-show
命令来验证用户和组是否已被添加为成员管理者。$ ipa group-show group_a Group name: group_a GID: 1133400009 Membership managed by groups: group_admins Membership managed by users: test
其他资源
-
如需了解更多详细信息,请参阅
ipa group-add-member-manager --help
。
11.9. 使用 IdM CLI 查看组成员
本节描述了如何使用 IdM CLI 来查看组成员。您可以查看直接和间接组成员。如需更多信息,请参阅 直接和间接组成员。
流程:
要列出组成员,请使用
ipa group-show group_name
命令。例如:$ ipa group-show group_a ... Member users: user_a Member groups: group_b Indirect Member users: user_b
注意间接成员列表不包括来自可信活动目录域的外部用户。活动目录信任用户对象在身份管理界面中不可见,因为它们在身份管理中不作为 LDAP 对象存在。
11.10. 使用 IdM CLI 从用户组中删除成员
本节描述了如何使用 IdM CLI 从用户组中删除成员。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
步骤
-
可选。使用
ipa group-show
命令确认组是否包含您要删除的成员。 使用
ipa group-remove-member
命令从用户组中删除成员。使用这些选项来指定要删除的成员:
-
--users
删除 IdM 用户 -
--external
删除存在于 IdM 域外的用户,格式为DOMAIN\user_name
或user_name@domain
-
--groups
删除 IdM 用户组
例如,要从名为 group_name 的组中删除 user1、user2 和 group1:
$ ipa group-remove-member group_name --users=user1 --users=user2 --groups=group1
-
11.11. 使用 IdM CLI 从 IdM 用户组中删除作为成员管理者的用户或组
本节描述了如何使用 IdM CLI 从 IdM 用户组中删除作为成员管理者的用户或组。成员管理者可以从 IdM 用户组中删除用户或组,但不能更改组的属性。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
- 您必须具有要删除的现有成员管理者用户或组的名称,以及它们要管理的组的名称。
步骤
使用
ipa group-remove-member-manager
命令,删除作为 IdM 用户组的成员管理者的用户。例如,要删除作为
group_a
的成员管理者的用户test
:$ ipa group-remove-member-manager group_a --users=test Group name: group_a GID: 1133400009 Membership managed by groups: group_admins --------------------------- Number of members removed 1 ---------------------------
用户
test
不再管理group_a
的成员。使用
ipa group-remove-member-manager
命令,删除作为 IdM 用户组的成员管理者的组。例如,要删除作为
group_a
的成员管理者的组group_admins
:$ ipa group-remove-member-manager group_a --groups=group_admins Group name: group_a GID: 1133400009 --------------------------- Number of members removed 1 ---------------------------
组
group_admins
不再管理group_a
的成员。
从用户组中删除成员管理者后,可能需要稍等片刻才能将更新传播到身份管理环境中的所有客户端。
验证步骤
使用
ipa group-show
命令来验证用户和组是否已作为成员管理者被删除。$ ipa group-show group_a Group name: group_a GID: 1133400009
其他资源
-
如需了解更多详细信息,请参阅
ipa group-remove-member-manager --help
。
第 12 章 在 IdM Web UI 中管理用户组
本章介绍了使用 IdM Web UI 的用户组管理。
用户组是一组具有常见特权、密码策略和其他特征的用户。
Identity Management (IdM) 中的用户组可以包括:
- IdM 用户
- 其他 IdM 用户组
- 外部用户,即 IdM 之外的用户
12.1. IdM 中的不同组类型
IdM 支持以下类型的组:
- POSIX 组(默认)
POSIX 组支持其成员的 Linux POSIX 属性。请注意,与 Active Directory 交互的组无法使用 POSIX 属性。
POSIX 属性将用户识别为单独的实体。与用户相关的 POSIX 属性示例包括
uidNumber
(一个用户号 (UID))和gidNumber
(一个组号 (GID))。- 非 POSIX 组
非 POSIX 组不支持 POSIX 属性。例如,这些组没有定义 GID。
这种组的所有成员必须属于 IdM 域。
- 外部组
使用外部组添加存在于 IdM 域外部的身份存储中的组成员,例如:
- 本地系统
- Active Directory 域
- 目录服务
外部组不支持 POSIX 属性。例如,这些组没有定义 GID。
表 12.1. 默认创建的用户组
组名称 | 默认组成员 |
---|---|
| 所有 IdM 用户 |
|
具有管理特权的用户,包括默认的 |
| 这是一个旧的组,不再具有任何特殊权限 |
| 具有管理 Active Directory 信任权限的用户 |
将用户添加到用户组时,该用户将获得与组关联的特权和策略。例如,若要向用户授予管理特权,可将该用户添加到 admins
组。
不要删除 admins
组。由于 admins
是 IdM 要求的预定义组,因此此操作会导致某些命令出现问题。
另外,当在 IdM 中创建新用户时,IdM 默认会创建用户私有组。有关私有组的更多信息,请参阅在没有私有组的情况下添加用户。
12.2. 直接和间接组成员
IdM 中的用户组属性适用于直接和间接成员:当组 B 是组 A 的成员时,组 B 中的所有用户都被视为组 A 的间接成员。
例如,在下图中:
- 用户 1 和用户 2 是组 A 的直接成员。
- 用户 3、用户 4 和用户 5 是组 A 的间接成员。
图 12.1. 直接和间接组成员身份

如果您为用户组 A 设置密码策略,该策略也适用于用户组 B 中的所有用户。
12.3. 使用 IdM Web UI 添加用户组
本节描述了如何使用 IdM Web UI 添加用户组。
先决条件
- 已登陆到 IdM Web UI。
步骤
- 点击 Identity → Groups,然后选择左侧栏中的 User Groups。
- 单击 Add 开始添加组。
填写有关组的信息。有关用户组类型的更多信息,请参阅 IdM 中不同的组类型。
您可以为组指定自定义的 GID。如果您这样做,请小心以避免 ID 冲突。如果没有指定自定义的 GID,IdM 会自动从可用的 ID 范围内分配一个 GID。
- 单击 Add 确认。
12.4. 使用 IdM Web UI 删除用户组
本节描述了如何使用 IdM Web UI 删除用户组。请注意,删除组不会从 IdM 中删除组成员。
先决条件
- 已登陆到 IdM Web UI。
步骤
- 点击 Identity → Groups ,并选择 User Groups。
- 选择要删除的组。
- 单击 Delete。
- 单击 Delete 确认。
12.5. 使用 IdM Web UI 将成员添加到用户组中
您可以将用户和用户组添加为用户组的成员。如需更多信息,请参阅 IdM 中不同的组类型 和 直接和间接组成员 。
先决条件
- 已登陆到 IdM Web UI。
步骤
- 单击 Identity → Groups ,并选择左侧栏中的 User Groups。
- 单击组的名称。
选择您要添加的组成员的类型: User、User Groups 或 External。
- 点击 Add。
- 选中您要添加的一个或多个成员旁边的复选框。
单击向右箭头,将选定的成员移到组中。
- 单击 Add 确认。
12.6. 使用 Web UI 将用户或组作为成员管理者添加到 IdM 用户组中
本节描述了如何使用 Web UI 将用户或组作为成员管理者添加到 IdM 用户组中。成员管理者可以将用户或组添加到 IdM 用户组中,但不能更改组的属性。
先决条件
- 已登陆到 IdM Web UI。
- 您必须具有要添加为成员管理器的用户名以及您要管理的组的名称。
步骤
- 单击 Identity → Groups ,并选择左侧栏中的 User Groups。
- 单击组的名称。
选择您要添加的组成员管理者的类型: User 或 User Groups。
- 点击 Add。
- 选中您要添加的一个或多个成员旁边的复选框。
单击向右箭头,将选定的成员移到组中。
- 单击 Add 确认。
将成员管理者添加到用户组后,可能需要过些时间,才能将更新传播到身份管理环境中的所有客户端。
验证步骤
验证新添加的用户或用户组是否已添加到用户或用户组的成员管理者列表中:
其他资源
-
如需更多信息,请参阅
ipa group-add-member-manager --help
。
12.7. 使用 IdM Web UI 查看组成员
本节描述了如何使用 IdM Web UI 查看组的成员。您可以查看直接和间接组成员。如需更多信息,请参阅 直接和间接组成员。
先决条件
- 已登陆到 IdM Web UI。
步骤
- 选择 Identity → Groups。
- 在左侧栏中选择 User Groups 。
- 单击您要查看的组的名称。
在 Direct Membership 和 Indirect Membership 之间切换。
12.8. 使用 IdM Web UI 从用户组中删除成员
本节描述了如何使用 IdM Web UI 从用户组中删除成员。
先决条件
- 已登陆到 IdM Web UI。
步骤
- 单击 Identity → Groups ,并选择左侧栏中的 User Groups。
- 单击组的名称。
选择要删除的组成员的类型: User、User Groups 或 External。
- 选中您要删除的成员旁边的复选框。
- 单击 Delete。
- 单击 Delete 确认。
12.9. 使用 Web UI 从 IdM 用户组中删除作为成员管理者的用户或组
本节描述了如何使用 Web UI 将作为成员管理者的用户或组从 IdM 用户组中删除。成员管理者可以从 IdM 用户组中删除用户或组,但不能更改组的属性。
先决条件
- 已登陆到 IdM Web UI。
- 您必须具有要删除的现有成员管理者用户或组的名称,以及它们要管理的组的名称。
步骤
- 单击 Identity → Groups ,并选择左侧栏中的 User Groups。
- 单击组的名称。
选择您要删除的成员管理者的类型: Users 或 User Groups。
- 选中您要删除的成员管理者旁边的复选框。
- 单击 Delete。
- 单击 Delete 确认。
从用户组中删除成员管理者后,可能需要稍等片刻才能将更新传播到身份管理环境中的所有客户端。
验证步骤
验证用户或用户组是否已从用户或用户组的成员管理者列表中删除:
其他资源
-
如需了解更多详细信息,请参阅
ipa group-add-member-manager --help
。
第 13 章 使用 Ansible playbook 管理用户组
本节介绍使用 Ansible playbook 进行用户组管理。
用户组是一组具有常见特权、密码策略和其他特征的用户。
Identity Management (IdM) 中的用户组可以包括:
- IdM 用户
- 其他 IdM 用户组
- 外部用户,即 IdM 之外的用户
本节包括以下主题:
13.1. IdM 中的不同组类型
IdM 支持以下类型的组:
- POSIX 组(默认)
POSIX 组支持其成员的 Linux POSIX 属性。请注意,与 Active Directory 交互的组无法使用 POSIX 属性。
POSIX 属性将用户识别为单独的实体。与用户相关的 POSIX 属性示例包括
uidNumber
(一个用户号 (UID))和gidNumber
(一个组号 (GID))。- 非 POSIX 组
非 POSIX 组不支持 POSIX 属性。例如,这些组没有定义 GID。
这种组的所有成员必须属于 IdM 域。
- 外部组
使用外部组添加存在于 IdM 域外部的身份存储中的组成员,例如:
- 本地系统
- Active Directory 域
- 目录服务
外部组不支持 POSIX 属性。例如,这些组没有定义 GID。
表 13.1. 默认创建的用户组
组名称 | 默认组成员 |
---|---|
| 所有 IdM 用户 |
|
具有管理特权的用户,包括默认的 |
| 这是一个旧的组,不再具有任何特殊权限 |
| 具有管理 Active Directory 信任权限的用户 |
将用户添加到用户组时,该用户将获得与组关联的特权和策略。例如,若要向用户授予管理特权,可将该用户添加到 admins
组。
不要删除 admins
组。由于 admins
是 IdM 要求的预定义组,因此此操作会导致某些命令出现问题。
另外,当在 IdM 中创建新用户时,IdM 默认会创建用户私有组。有关私有组的更多信息,请参阅在没有私有组的情况下添加用户。
13.2. 直接和间接组成员
IdM 中的用户组属性适用于直接和间接成员:当组 B 是组 A 的成员时,组 B 中的所有用户都被视为组 A 的间接成员。
例如,在下图中:
- 用户 1 和用户 2 是组 A 的直接成员。
- 用户 3、用户 4 和用户 5 是组 A 的间接成员。
图 13.1. 直接和间接组成员身份

如果您为用户组 A 设置密码策略,该策略也适用于用户组 B 中的所有用户。
13.3. 使用 Ansible playbook 确保存在 IdM 组和组成员
以下流程描述了使用 Ansible playbook 确保存在 IdM 组和组成员(用户和用户组)。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
- IdM 中已存在您想要引用的用户。有关确保存在使用 Ansible 的用户的详细信息,请参阅使用 Ansible playbook 管理用户帐户。
步骤
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
使用必要的用户和组信息创建一个 Ansible playbook 文件:
--- - name: Playbook to handle groups hosts: ipaserver become: true tasks: - name: Create group ops with gid 1234 ipagroup: ipaadmin_password: MySecret123 name: ops gidnumber: 1234 - name: Create group sysops ipagroup: ipaadmin_password: MySecret123 name: sysops user: - idm_user - name: Create group appops ipagroup: ipaadmin_password: MySecret123 name: appops - name: Add group members sysops and appops to group ops ipagroup: ipaadmin_password: MySecret123 name: ops group: - sysops - appops
运行 playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-group-members.yml
验证步骤
您可以使用 ipa group-show
命令验证 ops 组是否包含 sysops 和 appops 作为直接成员,idm_user 作为间接成员:
以管理员身份登录到
ipaserver
:$ ssh admin@server.idm.example.com Password: [admin@server /]$
显示关于 ops 的信息:
ipaserver]$ ipa group-show ops Group name: ops GID: 1234 Member groups: sysops, appops Indirect Member users: idm_user
IdM 中已存在 appops 和 sysops 组,后者包括 idm_user 用户。
其他资源
-
请参阅
/usr/share/doc/ansible-freeipa/README-group.md
Markdown 文件。
13.4. 使用 Ansible playbook 确保 IdM 用户组中存在成员管理器
以下流程描述了使用 Ansible playbook 确保存在 IdM 成员管理器(用户和用户组)。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
- 您必须具有要添加为成员管理器的用户名以及您要管理的组的名称。
步骤
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
使用必要的用户和组成员管理信息创建一个 Ansible playbook 文件:
--- - name: Playbook to handle membership management hosts: ipaserver become: true tasks: - name: Ensure user test is present for group_a ipagroup: ipaadmin_password: MySecret123 name: group_a membermanager_user: test - name: Ensure group_admins is present for group_a ipagroup: ipaadmin_password: MySecret123 name: group_a membermanager_group: group_admins
运行 playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-member-managers-user-groups.yml
验证步骤
您可以使用 ipa group-show
命令验证 group_a 组是否包含 test 作为成员管理者,以及 group_admins 为 group_a 的成员管理者:
以管理员身份登录到
ipaserver
:$ ssh admin@server.idm.example.com Password: [admin@server /]$
显示 managergroup1 的信息:
ipaserver]$ ipa group-show group_a Group name: group_a GID: 1133400009 Membership managed by groups: group_admins Membership managed by users: test
其他资源
-
请参阅
ipa host-add-member-manager --help
。 -
请参阅
ipa
man page。
13.5. 使用 Ansible playbook 确保 IdM 用户组中没有成员管理者
以下流程描述了在使用 Ansible playbook 时确保 IdM 成员管理者(用户和用户组)不存在。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
- 您必须具有要删除的现有成员管理者用户或组的名称,以及它们要管理的组的名称。
步骤
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
使用必要的用户和组成员管理信息创建一个 Ansible playbook 文件:
--- - name: Playbook to handle membership management hosts: ipaserver become: true tasks: - name: Ensure member manager user and group members are absent for group_a ipagroup: ipaadmin_password: MySecret123 name: group_a membermanager_user: test membermanager_group: group_admins action: member state: absent
运行 playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-member-managers-are-absent.yml
验证步骤
您可以使用 ipa group-show
命令验证 group_a 组不包含 test 作为成员管理者,以及 group_admins 为 group_a 的成员管理者:
以管理员身份登录到
ipaserver
:$ ssh admin@server.idm.example.com Password: [admin@server /]$
显示 group_a 的信息:
ipaserver]$ ipa group-show group_a Group name: group_a GID: 1133400009
其他资源
-
请参阅
ipa host-remove-member-manager --help
。 -
请参阅
ipa
man page。
第 14 章 使用 IdM CLI 自动化组成员资格
通过自动化组成员资格,您可以根据其属性自动将用户和主机分配到组。例如,您可以:
- 根据员工的经理、位置或任何其他属性,将员工的用户条目划分为组。
- 根据主机的类、位置或任何其他属性来划分主机。
- 将所有用户或全部主机添加到单个全局组。
本章涵盖了以下主题:
14.1. 自动化组成员资格的好处
对用户使用自动成员资格,允许您:
减少手动管理组成员资格的开销
您不再需要手动将每个用户和主机分配到组中。
提高用户和主机管理的一致性
用户和主机根据严格定义的和自动评估的标准被分配到组。
简化基于组的设置的管理
为组定义各种设置,然后应用到各个组成员,如
sudo
规则、自动挂载或访问控制。将用户和主机添加到组中会自动使管理这些设置变得更加简单。
14.2. 自动成员规则
在配置自动化组成员资格时,管理员定义自动成员规则。自动成员规则应用到特定的用户或主机目标组。它不能一次应用到多个组。
创建规则后,管理员会为其添加条件。它们指定将哪些用户或主机包含在目标组中,或从目标组中排除:
包含的条件
当用户或主机条目满足包含的条件时,它将包含在目标组中。
排他条件
当用户或主机条目满足排他条件时,它不会包含在目标组中。
条件被指定为 Perl 兼容的正则表达式(PCRE)格式的正则表达式。有关 PCRE 的详情,请查看 pcresyntax(3)
手册页。
IdM 在包含条件之前评估排他条件。在发生冲突时,排他条件优先于包含条件。
自动成员规则适用于将来创建的每个条目。这些条目将自动添加到指定的目标组中。如果一个条目满足多个自动成员规则中指定的条件,它将被添加到所有对应的组中。
现有条目 不会受到 新规则的影响。如果要更改现有条目,请参阅使用 IdM CLI 将自动成员规则应用到现有条目。
14.3. 使用 IdM CLI 添加自动成员规则
本节描述了使用 IdM CLI 添加自动成员规则。有关自动成员规则的详情,请参考 自动成员规则。
添加自动成员规则后,您可以在 向自动成员规则中添加条件 中所述的流程为其添加条件 。
现有条目 不会受到 新规则的影响。如果要更改现有条目,请参阅使用 IdM CLI 将自动成员规则应用到现有条目。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
- 新规则的目标组必须在 IdM 中存在。
步骤
-
输入
ipa automember-add
命令,来添加自动成员规则。 在提示时,指定:
- 自动成员规则。这是目标组名称。
- 分组类型。这将指定规则以用户组还是主机组为目标。要以用户组为目标,请输入 group。要以主机组为目标,请输入 hostgroup。
例如,要为名为 user_group 的用户组添加自动成员规则:
$ ipa automember-add Automember Rule: user_group Grouping Type: group -------------------------------- Added automember rule "user_group" -------------------------------- Automember Rule: user_group
验证步骤
- 您可以使用 使用 IdM CLI 查看现有的自动成员规则,来显示 IdM 中现有的自动成员资格规则和条件。
14.4. 使用 IdM CLI 将条件添加到自动成员规则中
本节描述了如何使用 IdM CLI 将条件添加到自动成员规则中。有关自动成员规则的详情,请参考 自动成员规则。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
- 目标规则必须在 IdM 中存在。详情请参阅 使用 IdM CLI 添加自动成员规则。
步骤
-
使用
ipa automember-add-condition
命令定义一个或多个包含或排他条件。 在提示时,指定:
- 自动成员规则。这是目标规则名称。详情请查看 自动成员规则。
- 属性键。这将指定过滤器将应用到的条目属性。例如,用户的 uid :
- 分组类型。这将指定规则以用户组还是主机组为目标。要以用户组为目标,请输入 group。要以主机组为目标,请输入 hostgroup。
- 包含正则表达式 和 排他正则表达式。它们将一个或多个条件指定为正则表达式。如果您只想指定一个条件,请在提示输入其它条件时按 Enter 键。
例如,以下条件针对用户登录属性(uid)中带有任何值(.*)的所有用户。
$ ipa automember-add-condition Automember Rule: user_group Attribute Key: uid Grouping Type: group [Inclusive Regex]: .* [Exclusive Regex]: ---------------------------------- Added condition(s) to "user_group" ---------------------------------- Automember Rule: user_group Inclusive Regex: uid=.* ---------------------------- Number of conditions added 1 ----------------------------
再举一个例子,您可以使用自动成员资格规则以从活动目录(AD)中同步的所有 Windows 用户为目标。要达到此目的,请创建一个条件,该条件以其objectClass 属性中带有 ntUser 的用户为目标,该属性由所有 AD 用户共享:
$ ipa automember-add-condition Automember Rule: ad_users Attribute Key: objectclass Grouping Type: group [Inclusive Regex]: ntUser [Exclusive Regex]: ------------------------------------- Added condition(s) to "ad_users" ------------------------------------- Automember Rule: ad_users Inclusive Regex: objectclass=ntUser ---------------------------- Number of conditions added 1 ----------------------------
验证步骤
- 您可以使用 使用 IdM CLI 查看现有的自动成员规则,来显示 IdM 中现有的自动成员资格规则和条件。
14.5. 使用 IdM CLI 查看现有的自动成员规则
本节描述了如何使用 IdM CLI 来查看现有的自动成员规则。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
步骤
-
输入
ipa automember-find
命令。 在提示时,指定 Grouping type :
- 要以用户组为目标,请输入 group。
要以主机组为目标,请输入 hostgroup。
例如:
$ ipa automember-find Grouping Type: group --------------- 1 rules matched --------------- Automember Rule: user_group Inclusive Regex: uid=.* ---------------------------- Number of entries returned 1 ----------------------------
14.6. 使用 IdM CLI 删除自动成员规则
本节描述了如何使用 IdM CLI 来删除自动成员规则。
删除自动成员规则也会删除与规则相关的所有条件。要只从规则中删除特定条件,请参阅 使用 IdM CLI 从自动成员规则中删除条件。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
步骤
-
输入
ipa automember-del
命令。 在提示时,指定:
- 自动成员规则。这是您要删除的规则。
- 分组规则。这将指定您要删除的规则是针对用户组的还是主机组的。输入 group 或 hostgroup 。
14.7. 使用 IdM CLI 从自动成员规则中删除条件
本节描述了如何从自动成员规则中删除特定条件。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
步骤
-
输入
ipa automember-remove-condition
命令。 在提示时,指定:
- 自动成员规则。这是您要从中删除条件的规则的名称。
- 属性键。这是目标条目属性。例如,用户的 uid :
- 分组类型。这将指定您要删除的条件是针对用户组的还是主机组的。输入 group 或 hostgroup 。
包含正则表达式 和 排他正则表达式。它们指定您要删除的条件。如果您只想指定一个条件,请在提示输入其它条件时按 Enter 键。
例如:
$ ipa automember-remove-condition Automember Rule: user_group Attribute Key: uid Grouping Type: group [Inclusive Regex]: .* [Exclusive Regex]: ----------------------------------- Removed condition(s) from "user_group" ----------------------------------- Automember Rule: user_group ------------------------------ Number of conditions removed 1 ------------------------------
14.8. 使用 IdM CLI 将自动成员规则应用到现有条目
自动成员规则在规则添加后,自动应用到所创建的用户和主机条目。它们不会追溯到在规则添加之前存在的条目。
要将自动成员规则应用到之前添加的条目,您必须手动重建自动成员资格。重建自动成员资格会重新评估所有现有的自动成员规则,并将其应用到所有用户或主机条目或特定的条目。
重建自动成员资格 不会 从组中删除用户或主机条目,即使条目不再与组的包含条件匹配。要手动删除它们,请参阅 使用 IdM CLI 从用户组中删除成员 或 使用 CLI 删除 IdM 主机组成员。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
步骤
要重建自动成员资格,请输入
ipa automember-rebuild
命令。使用以下选项指定要定为目标的条目:要为所有用户重建自动成员资格,请使用
--type=group
选项:$ ipa automember-rebuild --type=group -------------------------------------------------------- Automember rebuild task finished. Processed (9) entries. --------------------------------------------------------
-
要为所有主机重建自动成员资格,请使用
--type=hostgroup
选项。 要为指定的一个用户或多个用户重建自动成员资格,请使用
--users=target_user
选项:$ ipa automember-rebuild --users=target_user1 --users=target_user2 -------------------------------------------------------- Automember rebuild task finished. Processed (2) entries. --------------------------------------------------------
-
要为指定一个主机或多个主机重建自动成员资格,请使用
--hosts=client.idm.example.com
选项。
14.9. 使用 IdM CLI 配置默认的自动成员组
当您配置默认的自动成员组时,与任何自动成员规则不匹配的新用户或主机条目将自动添加到此默认组中。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
- 您要设置为默认的目标组在 IdM 中已存在。
步骤
-
输入
ipa automember-default-group-set
命令,来配置默认的自动成员组。 在提示时,指定:
- Default (fallback) Group,指定目标组名称。
Grouping Type,指定目标是用户组还是主机组。要以用户组为目标,请输入 group。要以主机组为目标,请输入 hostgroup。
例如:
$ ipa automember-default-group-set Default (fallback) Group: default_user_group Grouping Type: group --------------------------------------------------- Set default (fallback) group for automember "default_user_group" --------------------------------------------------- Default (fallback) Group: cn=default_user_group,cn=groups,cn=accounts,dc=example,dc=com
注意要删除当前的默认自动成员组,请输入
ipa automember-default-group-remove
命令。
验证步骤
要验证组是否已正确设置,请输入
ipa automember-default-group-show
命令。命令显示当前的默认的自动成员组。例如:$ ipa automember-default-group-show Grouping Type: group Default (fallback) Group: cn=default_user_group,cn=groups,cn=accounts,dc=example,dc=com
第 15 章 使用 IdM Web UI 自动化组成员资格
使用自动化组成员资格,使您可以根据其属性自动将用户和主机分配给组。例如,您可以:
- 根据员工的经理、位置或任何其他属性,将员工的用户条目划分为组。
- 根据主机的类、位置或任何其他属性来划分主机。
- 将所有用户或全部主机添加到单个全局组。
本章涵盖了以下主题:
15.1. 自动化组成员资格的好处
对用户使用自动成员资格,允许您:
减少手动管理组成员资格的开销
您不再需要手动将每个用户和主机分配到组中。
提高用户和主机管理的一致性
用户和主机根据严格定义的和自动评估的标准被分配到组。
简化基于组的设置的管理
为组定义各种设置,然后应用到各个组成员,如
sudo
规则、自动挂载或访问控制。将用户和主机添加到组中会自动使管理这些设置变得更加简单。
15.2. 自动成员规则
在配置自动化组成员资格时,管理员定义自动成员规则。自动成员规则应用到特定的用户或主机目标组。它不能一次应用到多个组。
创建规则后,管理员会为其添加条件。它们指定将哪些用户或主机包含在目标组中,或从目标组中排除:
包含的条件
当用户或主机条目满足包含的条件时,它将包含在目标组中。
排他条件
当用户或主机条目满足排他条件时,它不会包含在目标组中。
条件被指定为 Perl 兼容的正则表达式(PCRE)格式的正则表达式。有关 PCRE 的详情,请查看 pcresyntax(3)
手册页。
IdM 在包含条件之前评估排他条件。在发生冲突时,排他条件优先于包含条件。
自动成员规则适用于将来创建的每个条目。这些条目将自动添加到指定的目标组中。如果一个条目满足多个自动成员规则中指定的条件,它将被添加到所有对应的组中。
现有条目 不会受到 新规则的影响。如果要更改现有条目,请参阅 使用 IdM Web UI 将自动成员规则应用到现有条目。
15.3. 使用 IdM Web UI 添加自动成员规则
本节描述了使用 IdM Web UI 添加自动成员规则。有关自动成员规则的信息,请参考 自动成员规则。
现有条目 不会受到 新规则的影响。如果要更改现有条目,请参阅 使用 IdM Web UI 将自动成员规则应用到现有条目。
先决条件
- 已登陆到 IdM Web UI。
-
您必须是
admins
组的成员。 - 新规则的目标组在 IdM 中存在。
步骤
- 点击 Identity → Automember,然后选择 User group rules 或 Host group rules。
- 点击 Add。
在 Automember rule 字段中,选择规则要应用的组。这是目标组名称。
- 单击 Add 确认。
- 可选: 您可以使用在 使用 IdM Web UI 向自动成员规则中添加条件 中所述的步骤,向新规则添加条件。
15.4. 使用 IdM Web UI 向自动成员规则中添加条件
本节描述了如何使用 IdM Web UI 向自动成员规则中添加条件。有关自动成员规则的信息,请参考 自动成员规则。
先决条件
- 已登陆到 IdM Web UI。
-
您必须是
admins
组的成员。 - 目标规则在 IdM 中存在。
步骤
- 点击 Identity → Automember,然后选择 User group rules 或 Host group rules。
- 点击您要向其添加条件的规则。
在 Inclusive 或 Exclusive 部分中,点击 Add。
- 在 Attribute 字段中,选择需要的属性,如 uid。
- 在 Expression 字段中,定义正则表达式。
点击 Add。
例如,以下条件以用户 ID(uid)属性中带有任何值(.*)的所有用户为目标。
15.5. 使用 IdM Web UI 查看现有的自动成员规则和条件
本节描述了如何使用 IdM Web UI 查看现有的自动成员规则和条件。
先决条件
- 已登陆到 IdM Web UI。
-
您必须是
admins
组的成员。
步骤
- 点击 Identity → Automember,然后选择 User group rules 或 Host group rules 来查看对应的自动成员规则。
可选:点击规则,来查看 Inclusive 或 Exclusive 部分中规则的条件。
15.6. 使用 IdM Web UI 删除自动成员规则
本节描述了如何使用 IdM Web UI 删除自动成员规则。
删除自动成员规则也会删除与规则相关的所有条件。要只从规则中删除特定条件,请参阅 使用 IdM Web UI 从自动成员规则中删除条件。
先决条件
- 已登陆到 IdM Web UI。
-
您必须是
admins
组的成员。
步骤
- 点击 Identity → Automember,然后选择 User group rules 或 Host group rules 来查看对应的自动成员规则。
- 选中您要删除的规则旁边的复选框。
单击 Delete。
- 单击 Delete 确认。
15.7. 使用 IdM Web UI 从自动成员规则中删除条件
本节描述了如何使用 IdM Web UI 从自动成员规则中删除特定条件。
先决条件
- 已登陆到 IdM Web UI。
-
您必须是
admins
组的成员。
步骤
- 点击 Identity → Automember,然后选择 User group rules 或 Host group rules 来查看对应的自动成员规则。
- 点击规则,来查看 Inclusive 或 Exclusive 部分中规则的条件。
- 选中您要删除的条件旁边的复选框。
单击 Delete。
- 单击 Delete 确认。
15.8. 使用 IdM Web UI 将自动成员规则应用到现有条目
自动成员规则在规则添加后,自动应用到所创建的用户和主机条目。它们不会追溯到在规则添加之前存在的条目。
要将自动成员规则应用到之前添加的条目,您必须手动重建自动成员资格。重建自动成员资格会重新评估所有现有的自动成员规则,并将其应用到所有用户或主机条目或特定的条目。
重建自动成员资格 不会 从组中删除用户或主机条目,即使条目不再与组的包含条件匹配。要手动删除它们,请参阅 使用 IdM Web UI 从用户组中删除成员 或 在 IdM Web UI 中删除主机组成员。
15.8.1. 为所有用户或主机重建自动成员资格
本节描述了如何为所有用户或主机条目重建自动成员资格。
先决条件
- 已登陆到 IdM Web UI。
-
您必须是
admins
组的成员。
步骤
- 选择 Identity → Users 或 Hosts。
单击 Actions → Rebuild auto membership。
15.8.2. 只为单个用户或主机重建自动成员资格
本节描述了如何为特定用户或主机条目重建自动成员资格。
先决条件
- 已登陆到 IdM Web UI。
-
您必须是
admins
组的成员。
步骤
- 选择 Identity → Users 或 Hosts。
- 单击所需的用户或主机名。
单击 Actions → Rebuild auto membership。
15.9. 使用 IdM Web UI 配置默认的用户组
当您配置默认用户组时,不与任何自动成员规则匹配的新用户条目将自动添加到此默认组中。
先决条件
- 已登陆到 IdM Web UI。
-
您必须是
admins
组的成员。 - 您要设置为默认的目标用户组在 IdM 中存在。
步骤
- 点击 Identity → Automember,然后选择 User group rules。
在 Default user group 字段中,选择您要设置为默认用户组的组。
15.10. 使用 IdM Web UI 配置默认的主机组
配置默认主机组时,不与任何自动成员规则匹配的新主机条目将自动添加到此默认组中。
先决条件
- 已登陆到 IdM Web UI。
-
您必须是
admins
组的成员。 - 您要设置为默认的目标主机组在 IdM 中存在。
步骤
- 点击 Identity → Automember,然后选择 Host group rules。
在 Default host group 字段中,选择您要设置为默认主机组的组。
第 16 章 使用 Ansible 在 IdM 中自动化组成员资格
通过自动化组成员资格,您可以根据其属性自动分配用户、主机用户组和主机组。例如,您可以:
-
根据员工的经理、地点、职位或任何其他属性将员工的用户条目分成不同的组。您可以通过在命令行中输入
ipa user-add --help
来列出所有属性。 -
根据它们的类、位置或任何其他属性,将主机分成不同的组。您可以通过在命令行中输入
ipa host-add --help
来列出所有属性。 - 将所有用户或全部主机添加到单个全局组。
您可以使用 Red Hat Ansible Engine 来自动管理身份管理(IdM)中的自动化组成员资格。
本节涵盖了以下主题:
16.1. 准备 Ansible 控制节点来管理 IdM
作为管理身份管理 (IdM) 的系统管理员,在使用 Red Hat Ansible Engine 时,最好执行以下操作:
- 在您的主目录中,创建专用于 Ansible playbook 的子目录,如 ~/MyPlaybooks。
-
将示例 Ansible playbook 从
/usr/share/doc/ansible-freeipa/*
和/usr/share/doc/rhel-system-roles/*
目录以及它们的子目录复制到 ~/MyPlaybooks 目录中并进行调整。 - 将清单文件包含在 ~/MyPlaybooks 目录中。
按照这种做法,您可以在一个地方找到所有 playbook,您可以在不调用 root 特权的情况下运行 playbook。
您只需要在受管节点上具有 root
权限来执行 ipaserver
、ipareplica
、ipaclient
和 ipabackup
ansible-freeipa
角色。这些角色需要具有目录和 dnf
软件包管理器的特权访问权限。
本节论述了如何创建 ~/MyPlaybooks 目录并进行配置,以便您可以使用它来存储和运行 Ansible playbook。
先决条件
- 您已在受管节点上安装了 IdM 服务器 server.idm.example.com 和 replica.idm.example.com。
- 您已配置了 DNS 和网络,以便您可以直接从控制节点登录到受管节点 server.idm.example.com 和 replica.idm.example.com。
-
您需要知道 IdM
admin
密码。
步骤
在主目录中为您的 Ansible 配置和 playbook 创建目录:
$ mkdir ~/MyPlaybooks/
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks
使用以下内容创建 ~/MyPlaybooks/ansible.cfg 文件:
[defaults] inventory = /home/your_username/MyPlaybooks/inventory [privilege_escalation] become=True
使用以下内容创建 ~/MyPlaybooks/inventory 文件:
[eu] server.idm.example.com [us] replica.idm.example.com [ipaserver:children] eu us
此配置定义了两个主机组,即 eu 和 us,用于这些位置中的主机。此外,此配置定义了 ipaserver 主机组,它包含来自 eu 和 us 组的所有主机。
[可选] 创建 SSH 公钥和私钥。要在测试环境中简化访问,请不要在私钥中设置密码:
$ ssh-keygen
将 SSH 公钥复制到每个受管节点上的 IdM
admin
帐户:$ ssh-copy-id admin@server.idm.example.com $ ssh-copy-id admin@replica.idm.example.com
输入这些命令时,您必须输入 IdM
admin
密码。
16.2. 使用 Ansible 确保 IdM 用户组的自动成员规则存在
以下流程描述了如何使用 Ansible playbook 确保身份管理(IdM)组的 自动成员
规则存在。在示例中,确保 testing_group 用户组的 自动成员
规则存在。
先决条件
-
您需要知道 IdM
admin
密码。 - IdM 中存在 testing_group 用户组。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 在 ~/MyPlaybooks/ 目录中,您使用配置这些选项的 IdM 服务器的完全限定域名(FQDN)创建了一个 Ansible 清单文件。
步骤
进入您的 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
复制位于
/usr/share/doc/ansible-freeipa/playbooks/automember/
目录中的automember-group-present.yml
Ansible playbook 文件:$ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-group-present.yml automember-group-present-copy.yml
-
打开
automember-group-present-copy.yml
文件进行编辑。 通过在
ipaautomember
任务部分中设置以下变量来调整该文件:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 -
将
name
变量设为 testing_group。 -
将
automember_type
变量设为 group。 -
确保
state
变量设置为present
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Automember group present example hosts: ipaserver become: true tasks: - name: Ensure group automember rule admins is present ipaautomember: ipaadmin_password: Secret123 name: testing_group automember_type: group state: present
-
将
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory automember-group-present-copy.yml
其它资源
- 查看 自动化组成员资格的好处 和 自动成员规则 。
- 请参阅 使用 Ansible 来确保 IdM 用户组 自动成员规则中存在条件。
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-automember.md
文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/automember
目录。
16.3. 使用 Ansible 确保指定的条件在 IdM 用户组自动成员规则中存在
以下流程描述了如何使用 Ansible playbook 来确保指定的条件在身份管理(IdM)组的 自动成员
规则中存在。在示例中,确保 testing_group 组的 自动成员
规则中存在与 UID 相关的条件。通过指定 .* 条件,您可以确保所有将来的 IdM 用户都自动成为 testing_group 的成员。
先决条件
-
您需要知道 IdM
admin
密码。 - testing_group 用户组和自动成员用户组规则在 IdM 中存在。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 在 ~/MyPlaybooks/ 目录中,您使用配置这些选项的 IdM 服务器的完全限定域名(FQDN)创建了一个 Ansible 清单文件。
步骤
进入您的 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
复制位于
/usr/share/doc/ansible-freeipa/playbooks/automember/
目录中的automember-hostgroup-rule-present.yml
Ansible playbook 文件,并将它命名为 automember-usergroup-rule-present.yml :$ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-hostgroup-rule-present.yml automember-usergroup-rule-present.yml
-
打开
automember-usergroup-rule-present.yml
文件进行编辑。 通过修改以下参数来调整文件:
- 重命名 playbook 以便对应于您的用例,例如:自动成员用户组规则成员存在。
- 重命名任务以便对应于您的用例,例如:确保用户组的自动成员条件存在。
在
ipaautomember
任务部分中设置以下变量:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 -
将
name
变量设为 testing_group。 -
将
automember_type
变量设为group
。 -
确保
state
变量设置为present
。 -
确保
action
变量设为member
。 -
将
inclusive
key
变量设为UID
。 -
将
inclusive
expression
变量设为 .*
-
将
这是当前示例修改的 Ansible playbook 文件:
--- - name: Automember user group rule member present hosts: ipaserver become: true tasks: - name: Ensure an automember condition for a user group is present ipaautomember: ipaadmin_password: Secret123 name: testing_group automember_type: group state: present action: member inclusive: - key: UID expression: .*
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory automember-usergroup-rule-present.yml
验证步骤
以 IdM 管理员身份登录。
$ kinit admin
例如,添加用户:
$ ipa user-add user101 --first user --last 101 ----------------------- Added user "user101" ----------------------- User login: user101 First name: user Last name: 101 ... Member of groups: ipausers, testing_group ...
其它资源
- 请参阅 使用 IdM CLI 将自动成员规则应用到现有条目。
- 查看 自动化组成员资格的好处 和 自动成员规则 。
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-automember.md
文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/automember
目录。
16.4. 使用 Ansible 确保条件在 IdM 用户组自动成员规则中不存在
以下流程描述了如何使用 Ansible playbook 确保条件在身份管理(IdM)组的 自动成员
规则中不存在。在示例中,条件在 自动成员
规则中不存在确保了应包含指定 首字母
为 dp 的用户。将自动成员规则应用到 testing_group 组。通过应用条件,您可以确保将来首字母为 dp 的用户不会成为 testing_group 的成员。
先决条件
-
您需要知道 IdM
admin
密码。 - testing_group 用户组和自动成员用户组规则在 IdM 中存在。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 在 ~/MyPlaybooks/ 目录中,您使用配置这些选项的 IdM 服务器的完全限定域名(FQDN)创建了一个 Ansible 清单文件。
步骤
进入您的 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
复制位于
/usr/share/doc/ansible-freeipa/playbooks/automember/
目录中的automember-hostgroup-rule-absent.yml
Ansible playbook 文件,并将其命名为 automember-usergroup-rule-absent.yml :$ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-hostgroup-rule-absent.yml automember-usergroup-rule-absent.yml
-
打开
automember-usergroup-rule-absent.yml
文件进行编辑。 通过修改以下参数来调整文件:
- 重命名 playbook 以对应于您的用例,例如:自动成员用户组规则成员不存在。
- 重命名任务以对应于您的用例,例如:确保用户组的自动成员条件不存在。
在
ipaautomember
任务部分中设置以下变量:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 -
将
name
变量设为 testing_group。 -
将
automember_type
变量设为 group。 -
确保
state
变量设置为absent
。 -
确保
action
变量设为member
。 -
将
inclusive
key
变量设为initials
。 -
将
inclusive
expression
变量设为 dp。
-
将
这是当前示例修改的 Ansible playbook 文件:
--- - name: Automember user group rule member absent hosts: ipaserver become: true tasks: - name: Ensure an automember condition for a user group is absent ipaautomember: ipaadmin_password: Secret123 name: testing_group automember_type: group state: absent action: member inclusive: - key: initials expression: dp
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory automember-usergroup-rule-absent.yml
验证步骤
以 IdM 管理员身份登录。
$ kinit admin
查看自动成员组:
$ ipa automember-show --type=group testing_group Automember Rule: testing_group
输出中没有 Inclusive Regex: initials=dp
条目确认 testing_group 自动成员规则不包含指定的条件。
其它资源
- 请参阅 使用 IdM CLI 将自动成员规则应用到现有条目。
- 查看 自动化组成员资格的好处 和 自动成员规则 。
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-automember.md
文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/automember
目录。
16.5. 使用 Ansible 确保 IdM 用户组的自动成员规则不存在
以下流程描述了如何使用 Ansible playbook 确保身份管理(IdM)组的 自动成员
规则不存在。在示例中,确保 testing_group 组的 automember
规则不存在。
删除自动成员规则也会删除与规则相关的所有条件。要从规则中只删除特定的条件,请参阅 使用 Ansible 确保条件在 IdM 用户组自动成员规则中不存在。
先决条件
-
您需要知道 IdM
admin
密码。 您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 在 ~/MyPlaybooks/ 目录中,您使用配置这些选项的 IdM 服务器的完全限定域名(FQDN)创建了一个 Ansible 清单文件。
步骤
进入您的 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
复制位于
/usr/share/doc/ansible-freeipa/playbooks/automember/
目录中的automember-group-absent.yml
Ansible playbook 文件:$ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-group-absent.yml automember-group-absent-copy.yml
-
打开
automember-group-absent-copy.yml
文件进行编辑。 通过在
ipaautomember
任务部分中设置以下变量来调整该文件:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 -
将
name
变量设为 testing_group。 -
将
automember_type
变量设为 group。 -
确保
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Automember group absent example hosts: ipaserver become: true tasks: - name: Ensure group automember rule admins is absent ipaautomember: ipaadmin_password: Secret123 name: testing_group automember_type: group state: absent
-
将
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory automember-group-absent.yml
其它资源
- 查看 自动化组成员资格的好处 和 自动成员规则 。
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-automember.md
文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/automember
目录。
16.6. 使用 Ansible 确保 IdM 主机组自动成员规则中存在条件
本节描述了如何使用 Ansible 确保 IdM 主机组自动成员规则中的条件存在。示例描述了如何确保 FQDN
为 .*.idm.example.com 的主机是 primary_dns_domain_hosts 主机组的成员,以及 FQDN
为 .*.example.org 的主机不是 primary_dns_domain_hosts 主机组的成员。
先决条件
-
您需要知道 IdM
admin
密码。 - IdM 中存在 primary_dns_domain_hosts 主机组和自动成员主机组规则。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 在 ~/MyPlaybooks/ 目录中,您使用配置这些选项的 IdM 服务器的完全限定域名(FQDN)创建了一个 Ansible 清单文件。
步骤
进入您的 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
复制位于
/usr/share/doc/ansible-freeipa/playbooks/automember/
目录中的automember-hostgroup-rule-present.yml
Ansible playbook 文件:$ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-hostgroup-rule-present.yml automember-hostgroup-rule-present-copy.yml
-
打开
automember-hostgroup-rule-present-copy.yml
文件进行编辑。 通过在
ipaautomember
任务部分中设置以下变量来调整该文件:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 -
将
name
变量设为 primary_dns_domain_hosts。 -
将
automember_type
变量设为 hostgroup。 -
确保
state
变量设置为present
。 -
确保
action
变量设为member
。 -
确保
inclusive
key
变量设为fqdn
。 -
将对应的
inclusive
expression
变量设为 .*.idm.example.com。 -
将
exclusive
key
变量设为fqdn
。 -
将对应的
exclusive
expression
变量设为 .*.example.org。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Automember user group rule member present hosts: ipaserver become: true tasks: - name: Ensure an automember condition for a user group is present ipaautomember: ipaadmin_password: Secret123 name: primary_dns_domain_hosts automember_type: hostgroup state: present action: member inclusive: - key: fqdn expression: .*.idm.example.com exclusive: - key: fqdn expression: .*.example.org
-
将
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory automember-hostgroup-rule-present-copy.yml
其它资源
- 请参阅 使用 IdM CLI 将自动成员规则应用到现有条目。
- 查看 自动化组成员资格的好处 和 自动成员规则 。
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-automember.md
文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/automember
目录。
16.7. 其它资源
第 17 章 将权限委派给用户组,来使用 IdM CLI 管理用户
委派是 IdM 中的访问控制方法之一,以及自助服务规则和基于角色的访问控制 (RBAC)。您可以使用委派(delegation)为一组用户分配权限,以管理另一组用户的条目。
本节涵盖了以下主题:
17.1. 委派规则
您可以通过创建委派规则,将权限委派给用户组来管理用户。
委派规则允许特定用户组对另一用户组中用户的特定属性执行写入(编辑)操作。这种形式的访问控制规则仅限于编辑您在委派规则中指定的属性子集的值;它不授予添加或删除整个条目或控制未指定属性的权限。
委派规则向 IdM 中的现有用户组授予权限。例如,您可以使用委派功能,允许 managers
用户组管理 employees
用户组中的选定用户属性。
17.2. 使用 IdM CLI 创建委派规则
本节描述了如何使用 IdM CLI 创建委托规则。
先决条件
-
您已作为
admins
组的成员登录。
步骤
输入
ipa delegation-add
命令。指定以下选项:-
--Group:
被授予用户组中用户条目权限 的组。 -
--membergroup
:其条目可以被委派组的成员编辑 的组。 -
--permissions
:用户是否有权查看给定属性(读),并添加或更改给定属性(写)。如果没有指定权限,则仅添加 写 权限。 -
--attrs
:允许成员组中的用户查看或编辑的属性。
例如:
-
$ ipa delegation-add "basic manager attributes" --permissions=read --permissions=write --attrs=businesscategory --attrs=departmentnumber --attrs=employeetype --attrs=employeenumber --group=managers --membergroup=employees
-------------------------------------------
Added delegation "basic manager attributes"
-------------------------------------------
Delegation name: basic manager attributes
Permissions: read, write
Attributes: businesscategory, departmentnumber, employeetype, employeenumber
Member user group: employees
User group: managers
17.3. 使用 IdM CLI 查看现有的委派规则
本节描述了如何使用 IdM CLI 查看现有的委派规则。
先决条件
-
您已作为
admins
组的成员登录。
步骤
-
输入
ipa delegation-find
命令:
$ ipa delegation-find
--------------------
1 delegation matched
--------------------
Delegation name: basic manager attributes
Permissions: read, write
Attributes: businesscategory, departmentnumber, employeenumber, employeetype
Member user group: employees
User group: managers
----------------------------
Number of entries returned 1
----------------------------
17.4. 使用 IdM CLI 修改委派规则
本节描述了如何使用 IdM CLI 修改现有的委派规则。
--attrs
选项覆盖先前支持的属性列表,因此始终包括属性的完整列表以及任何新属性。这也适用于 --permissions
选项。
先决条件
-
您已作为
admins
组的成员登录。
步骤
输入
ipa delegation-mod
命令及所需的更改。例如,要将displayname
属性添加到basic manager attributes
示例规则中:$ ipa delegation-mod "basic manager attributes" --attrs=businesscategory --attrs=departmentnumber --attrs=employeetype --attrs=employeenumber --attrs=displayname ---------------------------------------------- Modified delegation "basic manager attributes" ---------------------------------------------- Delegation name: basic manager attributes Permissions: read, write Attributes: businesscategory, departmentnumber, employeetype, employeenumber, displayname Member user group: employees User group: managers
17.5. 使用 IdM CLI 删除委派规则
本节描述了如何使用 IdM CLI 删除现有的委派规则。
先决条件
-
您已作为
admins
组的成员登录。
步骤
-
输入
ipa delegation-del
命令。 提示时,输入您要删除的委派规则的名称:
$ ipa delegation-del Delegation name: basic manager attributes --------------------------------------------- Deleted delegation "basic manager attributes" ---------------------------------------------
第 18 章 将权限委派给用户组,来使用 IdM Web UI 管理用户
委派是 IdM 中的访问控制方法之一,以及自助服务规则和基于角色的访问控制 (RBAC)。您可以使用委派(delegation)为一组用户分配权限,以管理另一组用户的条目。
本节涵盖了以下主题:
18.1. 委派规则
您可以通过创建委派规则,将权限委派给用户组来管理用户。
委派规则允许特定用户组对另一用户组中用户的特定属性执行写入(编辑)操作。这种形式的访问控制规则仅限于编辑您在委派规则中指定的属性子集的值;它不授予添加或删除整个条目或控制未指定属性的权限。
委派规则向 IdM 中的现有用户组授予权限。例如,您可以使用委派功能,允许 managers
用户组管理 employees
用户组中的选定用户属性。
18.2. 使用 IdM WebUI 创建委派规则
本节描述了如何使用 IdM Web UI 创建委派规则。
先决条件
-
您已作为
admins
组的成员登录到 IdM Web UI。
步骤
- 在 IPA Server 菜单中点击 Role-Based Access Control → Delegations。
点击 Add。
在 Add delegation 窗口中执行以下操作:
- 命名新的委派规则。
- 通过选择复选框来设置权限,以指示用户是否有权查看给定的属性(读),并添加或更改给定的属性(写)。
- 在"用户组"下拉菜单中,选择 被授予权限 来查看或编辑成员组中的用户条目的组。
- 在 Member user group 下拉菜单中,选择其条目可以被委派组的成员编辑 的组。
在属性框中,按您要为其授予权限的属性选择复选框。
- 单击 Add 按钮,以保存新的委派规则。
18.3. 使用 IdM WebUI 查看现有的委派规则
本节描述了如何使用 IdM Web UI 查看现有的委派规则。
先决条件
-
您已作为
admins
组的成员登录到 IdM Web UI。
步骤
在 IPA Server 菜单中点击 Role-Based Access Control → Delegations。
18.4. 使用 IdM WebUI 修改委派规则
本节描述了如何使用 IdM Web UI 修改现有的委托规则。
先决条件
-
您已作为
admins
组的成员登录到 IdM Web UI。
步骤
在 IPA Server 菜单中点击 Role-Based Access Control → Delegations。
- 点击您要修改的规则。
进行所需的更改:
- 更改规则的名称。
- 通过选择复选框来更改授予的权限,这指示用户是否有权查看给定的属性(读),并添加或更改给定的属性(写)。
- 在"用户组"下拉菜单中,选择 被授予权限 来查看或编辑成员组中的用户条目的组。
- 在 Member user group 下拉菜单中,选择其条目可以被委派组的成员编辑 的组。
在属性框中,按您要为其授予权限的属性选择复选框。要删除对属性的权限,可取消相关的复选框。
- 单击 Save 按钮来保存更改。
18.5. 使用 IdM WebUI 删除委派规则
本节描述了如何使用 IdM Web UI 删除现有的委托规则。
先决条件
-
您已作为
admins
组的成员登录到 IdM Web UI。
步骤
- 在 IPA Server 菜单中点击 Role-Based Access Control → Delegations。
- 选中您要删除的规则旁边的复选框。
单击 Delete。
- 单击 Delete 确认。
第 19 章 委派权限到用户组,以使用 Ansible playbook 管理用户
委派是 IdM 中的访问控制方法之一,以及自助服务规则和基于角色的访问控制 (RBAC)。您可以使用委派(delegation)为一组用户分配权限,以管理另一组用户的条目。
本节涵盖了以下主题:
19.1. 委派规则
您可以通过创建委派规则,将权限委派给用户组来管理用户。
委派规则允许特定用户组对另一用户组中用户的特定属性执行写入(编辑)操作。这种形式的访问控制规则仅限于编辑您在委派规则中指定的属性子集的值;它不授予添加或删除整个条目或控制未指定属性的权限。
委派规则向 IdM 中的现有用户组授予权限。例如,您可以使用委派功能,允许 managers
用户组管理 employees
用户组中的选定用户属性。
19.2. 为 IdM 创建 Ansible 清单文件
在使用 Ansible 时,最好在主目录中创建一个专用于 Ansible playbook 的子目录,您可复制 /usr/share/doc/ansible-freeipa/*
和 /usr/share/doc/rhel-system-roles/*
子目录并进行相应的调整。这种做法有以下优点:
- 您可以在一个位置找到所有 playbook。
-
您可以运行 playbook,而无需调用
root
特权。
步骤
在主目录中为您的 Ansible 配置和 playbook 创建目录:
$ mkdir ~/MyPlaybooks/
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks
使用以下内容创建 ~/MyPlaybooks/ansible.cfg 文件:
[defaults] inventory = /home/<username>/MyPlaybooks/inventory [privilege_escalation] become=True
使用以下内容创建 ~/MyPlaybooks/inventory 文件:
[eu] server.idm.example.com [us] replica.idm.example.com [ipaserver:children] eu us
此配置定义了两个主机组,即 eu 和 us,用于这些位置中的主机。此外,此配置定义了 ipaserver 主机组,它包含来自 eu 和 us 组的所有主机。
19.3. 使用 Ansible 确保存在委派规则
以下流程描述了如何使用 Ansible playbook 为新的 IdM 委派规则定义特权并确保其存在。在这个示例中,新的 basic manager attributes 委派规则授予 managers
组为 employees
组成员读取和写入以下属性的权限:
-
businesscategory
-
departmentnumber
-
employeenumber
-
employeetype
先决条件
- 您知道 IdM 管理员密码。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
- 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。
步骤
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
制作位于
/usr/share/doc/ansible-freeipa/playbooks/delegation/
目录中的delegation-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-present.yml delegation-present-copy.yml
-
打开
delegation-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipadelegation
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为新委派规则的名称。 -
将
permission
变量设置为以逗号分隔的权限列表,以授予:read
和write
。 -
将
attribute
变量设置为委派的用户组可以管理的属性列表:businesscategory
、departmentnumber
、employeenumber
和employeetype
。 -
将
group
变量设置为被授予查看或修改属性访问权限的组名称。 -
将
membergroup
变量设置为组的名称,其属性可以查看或修改。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage a delegation rule hosts: ipaserver become: true tasks: - name: Ensure delegation "basic manager attributes" is present ipadelegation: ipaadmin_password: Secret123 name: "basic manager attributes" permission: read, write attribute: - businesscategory - departmentnumber - employeenumber - employeetype group: managers membergroup: employees
-
将
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/MyPlaybooks/inventory delegation-present-copy.yml
其他资源
- 请参阅 委派规则。
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-delegation.md
文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/ipadelegation
目录中的 playbook 示例。
19.4. 使用 Ansible 确保没有委派规则
以下流程描述了如何使用 Ansible playbook 来确保您的 IdM 配置中没有指定的委托规则。以下示例描述了如何确保 IdM 中没有存在自定义 basic manager attributes 委派规则。
先决条件
- 您知道 IdM 管理员密码。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
- 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。
步骤
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks>/
制作位于
/usr/share/doc/ansible-freeipa/playbooks/delegation/
目录中的delegation-absent.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-present.yml delegation-absent-copy.yml
-
打开
delegation-absent-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipadelegation
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为委派规则的名称。 -
将
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Delegation absent hosts: ipaserver become: true tasks: - name: Ensure delegation "basic manager attributes" is absent ipadelegation: ipaadmin_password: Secret123 name: "basic manager attributes" state: absent
-
将
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/MyPlaybooks/inventory delegation-absent-copy.yml
其他资源
- 请参阅 委派规则。
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-delegation.md
文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/ipadelegation
目录中的 playbook 示例。
19.5. 使用 Ansible 确保委派规则具有特定属性
以下流程描述了如何使用 Ansible playbook 确保委派规则具有特定的设置。您可以使用此 playbook 修改您之前创建的委派角色。在示例中,您可以确保 basic manager attributes 委派规则仅具有 departmentnumber
成员属性。
先决条件
- 您知道 IdM 管理员密码。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
- 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。
- IdM 中存在 basic manager attributes委派规则。
步骤
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
制作位于
/usr/share/doc/ansible-freeipa/playbooks/delegation/
目录中的delegation-member-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-member-present.yml delegation-member-present-copy.yml
-
打开
delegation-member-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipadelegation
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为要修改的委派规则的名称。 -
将
attribute
变量设置为departmentnumber
。 -
将
action
变量设置为member
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Delegation member present hosts: ipaserver become: true tasks: - name: Ensure delegation "basic manager attributes" member attribute departmentnumber is present ipadelegation: ipaadmin_password: Secret123 name: "basic manager attributes" attribute: - departmentnumber action: member
-
将
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/MyPlaybooks/inventory delegation-member-present-copy.yml
其他资源
- 请参阅 委派规则。
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-delegation.md
文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/ipadelegation
目录中的 playbook 示例。
19.6. 使用 Ansible 确保委派规则没有特定属性
以下流程描述了如何使用 Ansible playbook 来确保委派规则没有特定的设置。您可以使用此 playbook 确保委派角色不授予不需要的访问权限。在该示例中,您可以确保 basic manager attributes 委派规则没有 employeenumber
和 employeetype
成员属性。
先决条件
- 您知道 IdM 管理员密码。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
- 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。
- IdM 中存在 basic manager attributes委派规则。
步骤
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
制作位于
/usr/share/doc/ansible-freeipa/playbooks/delegation/
目录中的delegation-member-absent.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-member-absent.yml delegation-member-absent-copy.yml
-
打开
delegation-member-absent-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipadelegation
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为要修改的委派规则的名称。 -
将
attribute
变量设置为employeenumber
和employeetype
。 -
将
action
变量设置为member
。 -
将
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Delegation member absent hosts: ipaserver become: true tasks: - name: Ensure delegation "basic manager attributes" member attributes employeenumber and employeetype are absent ipadelegation: ipaadmin_password: Secret123 name: "basic manager attributes" attribute: - employeenumber - employeetype action: member state: absent
-
将
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/MyPlaybooks/inventory delegation-member-absent-copy.yml
其他资源
- 请参阅 委派规则。
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-delegation.md
文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/ipadelegation
目录中的 playbook 示例。
第 20 章 使用 CLI 在 IdM 中管理基于角色的访问控制
本章介绍了身份管理(IdM)中的基于角色的访问控制,并描述了命令行界面(CLI)中的以下操作:
20.1. IdM 中的基于角色的访问控制
与自助服务和委派访问控制相比,IdM 中的基于角色的访问控制(RBAC)向用户授予了完全不同的权限。
基于角色的访问控制由三个部分组成:
- Permissions(权限) 授予执行特定任务的权利,如添加或删除用户、修改组、启用读取访问等。
- Privileges(特权) 结合了权限,例如添加新用户所需的所有权限。
- Roles(角色) 向用户、用户组、主机或主机组授予一组特权。
20.1.1. IdM 中的权限
权限是基于角色的访问控制的最低级别单元,它们定义这些操作所应用到的 LDAP 条目。与构建块类似,可以根据需要将权限分配给多个特权。
一个或多个权利定义了允许的操作 :
-
write
-
读取
-
搜索
-
compare
-
添加
-
删除
-
all
这些操作适用于三个基本目标:
-
subtree
:域名 (DN);此 DN 下的子树 -
target filter
:LDAP 过滤器 -
target
:可以带有通配符的 DN 指定条目
此外,以下方便选项可设置对应的属性:
-
type
:对象类型(用户、组等);设置subtree
和target filter
-
memberof
:组成员;设置target filter
-
targetgroup
:授予修改特定组的权限(如授予管理组成员资格的权限);设置target
使用 IdM 权限,您可以控制哪些用户有权访问哪些对象,甚至控制这些对象的属性。IdM 允许您允许或阻止单个属性,或更改特定 IdM 功能(如用户、组或 sudo)的所有可见性,适用于所有匿名用户、所有经过身份验证的用户,或者只更改一组特定的特权用户。
例如,如果管理员只想将用户或组的访问权限限制到这些用户或组需要访问的特定部分,并且使其他部分完全隐藏于他们,此方法的灵活性对管理员很有用。
权限不能包含其他权限。
20.1.2. 默认管理的权限
管理的权限是 IdM 默认附带的权限。它们的行为与用户创建的其他权限类似,但有以下区别:
- 您无法删除它们或修改其名称、位置和目标属性。
它们有三组属性:
- Default 属性,用户无法修改它们,因为它们由 IdM 管理
- Included 属性,它们是用户添加的额外属性
- Excluded 属性,这些属性由用户删除
管理的权限适用于 default 和 included 属性集中显示的所有属性,但不应用到排除集中的所有属性。
虽然您无法删除受管权限,但将其绑定类型设置为权限并从所有特权中删除托管权限会有效地禁用该权限。
所有受管权限的名称都以 System:
开头,例如 System: Add Sudo rule
或 System: Modify Services
。IdM 的早期版本将不同的方案用于默认权限。例如,用户无法删除它们,而只能将它们分配到特权。这些默认权限大部分已转换为受管权限,但以下权限仍使用以前的方案:
- 添加自动成员重新构建成员身份任务
- 添加配置子条目
- 添加复制协议
- 证书删除冻结
- 从 CA 获取证书状态
- 读取 DNA 范围
- 修改 DNA 范围
- 读取 PassSync Manager 配置
- 修改 PassSync Manager 配置
- 阅读复制协议
- 修改复制协议
- 删除复制协议
- 读取 LDBM 数据库配置
- 请求证书
- 请求证书忽略 CA ACL
- 从不同主机请求证书
- 从 CA 检索证书
- 吊销证书
- 写入 IPA 配置
如果您试图通过命令行修改受管权限,系统不允许更改您无法修改的属性,命令会失败。如果您试图从 Web UI 修改受管权限,则无法修改的属性将被禁用。
20.1.3. IdM 中的特权
特权是一组适用于角色的权限。
虽然权限提供了执行单个操作的权限,但某些 IdM 任务需要多个权限才能成功。因此,特权组合了执行特定任务所需的不同权限。
例如,为新 IdM 用户设置帐户需要以下权限:
- 创建新用户条目
- 重置用户密码
- 将新用户添加到默认 IPA 用户组
将这三个低级别任务合并到一个更高级别的任务中,例如名为 Add User,可使系统管理员更加轻松地管理角色。IdM 已包含几个默认权限。除了用户和用户组外,还将特权分配到主机和主机组,以及网络服务。这种方法允许精细控制一组主机上使用特定网络服务的操作。
特权可能不包含其他特权。
20.1.4. IdM 中的角色
角色是用户为角色指定的特权列表。
实际上,权限授予执行给定低级别任务(创建用户条目、向组添加条目等)的权限,权限组合了更高级别任务(如在给定组中创建新用户)所需的一个或多个这些权限。角色根据需要收集权限:例如,用户管理员角色能够添加、修改和删除用户。
角色用于对允许的操作进行分类。它们不用作实施特权升级或防止特权升级的工具。
角色不能包含其他角色。
20.1.5. Identity Management 中的预定义角色
Red Hat Identity Management 提供以下预定义角色范围:
表 20.1. Identity Management 中的预定义角色
角色 | 特权 | Description |
---|---|---|
Enrollment Administrator | 主机注册 | 负责客户端或主机、注册 |
helpdesk | Modify Users and Reset passwords, Modify Group membership | 负责执行简单的用户管理任务 |
IT Security Specialist | Netgroups Administrators, HBAC Administrator, Sudo Administrator | 负责管理安全策略,如基于主机的访问控制、sudo 规则 |
IT Specialist | Host Administrators, Host Group Administrators, Service Administrators, Automount Administrators | 负责管理主机 |
Security Architect | Delegation Administrator, Replication Administrators, Write IPA Configuration, Password Policy Administrator | 负责管理身份管理环境、创建信任、创建复制协议 |
User Administrator | User Administrators, Group Administrators, Stage User Administrators | 负责创建用户和组 |
20.2. 在 CLI 中管理 IdM 权限
本节描述了如何使用命令行界面(CLI)管理身份管理(IdM)权限。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 一个活跃的 Kerberos 票据。详情请参阅 使用 kinit 手动登录到 IdM。
步骤
使用
ipa permission-add
命令创建新的权限条目。
例如,添加名为 dns admin 的权限:$ ipa permission-add "dns admin"
使用以下选项指定权限的属性:
--bindtype
指定绑定规则类型。此选项接受all
、anonymous
和permission
参数。permission
bindtype 表示只有通过角色授予了此权限的用户才能执行它。
例如:$ ipa permission-add "dns admin" --bindtype=all
如果没有指定
--bindtype
,则permission
是默认值。注意不能对特权添加带有非默认绑定规则类型的权限。您也不能对非默认绑定规则类型设置特权中已存在的权限。
--right
列出了权限授予的权力,它替换了已弃用的--permissions
选项。可用的值有add
、delete
、read
、search
、compare
、write
、all
。您可以使用多个
--right
选项或使用大括号内以逗号分隔的列表来设置多个属性。例如:$ ipa permission-add "dns admin" --right=read --right=write
$ ipa permission-add "dns admin" --right={read,write}
注意add
和delete
是入门级操作(例如删除用户、添加组等),而read
、search
、compare
和write
则是属性级的:您可以写userCertificate
,但不能读userPassword
。--attrs
提供被授予权限的属性列表。
您可以使用多个--attrs
选项或通过在大括号内以逗号分隔的列表列出选项,来设置多个属性。例如:$ ipa permission-add "dns admin" --attrs=description --attrs=automountKey
$ ipa permission-add "dns admin" --attrs={description,automountKey}
使用
--attrs
提供的属性必须存在,并且是给定对象类型的允许属性,否则命令会失败,并显示模式语法错误。--type
定义对其应用权限的条目对象类型,如用户、主机或服务。每种类型都有其自己的一组允许的属性。
例如:$ ipa permission-add "manage service" --right=all --type=service --attrs=krbprincipalkey --attrs=krbprincipalname --attrs=managedby
--subtree
提供子树条目;然后,过滤器以这个子树条目下的每个条目为目标。提供现有的子树条目;--subtree
不接受通配符或不存在的域名(DN)。在目录中包括 DN。
因为 IdM 使用简化的扁平目录树结构,所以--subtree
可用于将某些类型的条目作为目标,如自动挂载位置,它们是其他配置的容器或父条目。例如:$ ipa permission-add "manage automount locations" --subtree="ldap://ldap.example.com:389/cn=automount,dc=example,dc=com" --right=write --attrs=automountmapname --attrs=automountkey --attrs=automountInformation
注意--type
和--subtree
选项是互斥的:您可以将--type
包含的过滤器视为--subtree
的简化,目的是使管理员的工作更为简单。--filter
使用 LDAP 过滤器来识别权限应用到哪个条目。
IdM 自动检查给定过滤器的有效性。过滤器可以是任何有效的 LDAP 过滤器,例如:$ ipa permission-add "manage Windows groups" --filter="(!(objectclass=posixgroup))" --right=write --attrs=description
检查组是否存在后,
--memberof
对给定组的成员设置目标过滤器。例如,要让拥有此权限的用户修改 engineers 组成员的登录 shell:$ ipa permission-add ManageShell --right="write" --type=user --attr=loginshell --memberof=engineers
在检查组存在后,
--targetgroup
对指定的用户组设置目标。例如,要让那些在 engineers 组中的人拥有写成员属性的权限(这样他们可以添加或删除成员):$ ipa permission-add ManageMembers --right="write" --subtree=cn=groups,cn=accounts,dc=example,dc=test --attr=member --targetgroup=engineers
另外,您还可以指定目标域名(DN):
-
--target
指定要对其应用权限的 DN。可接受通配符. -
--targetto
指定条目可移动到的 DN 子树。 -
--targetfrom
指定可从中移出条目的 DN 子树。
-
20.3. 现有权限的命令选项
根据需要,使用以下变体修改现有权限:
-
要编辑现有权限,请使用
ipa permission-mod
命令。您可以使用与添加权限相同的命令选项。 -
要查找现有权限,请使用
ipa permission-find
命令。您可以使用与添加权限相同的命令选项。 要查看特定的权限,请使用
ipa permissions-show
命令。--raw
参数显示生成的原始 389-ds ACI。例如:$ ipa permission-show <permission> --raw
-
ipa permissions-del
命令完全删除权限。
其他资源
-
请参阅
ipa
man page。 -
请参阅
ipa help
命令。
20.4. 在 CLI 中管理 IdM 特权
本节描述了如何使用命令行界面(CLI)管理身份管理(IdM)特权。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 一个活跃的 Kerberos 票据。详情请参阅 使用 kinit 手动登录到 IdM。
- 现有权限。有关权限的详情,请参阅 在 CLI 中管理 IdM 权限。
步骤
使用
ipa privilege-add
命令添加权限条目,
例如,添加名为 managing filesystems 的特权并带有描述:$ ipa privilege-add "managing filesystems" --desc="for filesystems"
使用
privilege-add-permission
命令为特权组分配所需的权限,
例如,将名为 managing automount 和 managing ftp services 的权限添加到 managing filesystems 特权 :$ ipa privilege-add-permission "managing filesystems" --permissions="managing automount" --permissions="managing ftp services"
20.5. 现有权限的命令选项
根据需要,使用以下变体修改现有特权:
-
若要修改现有特权,可使用
ipa privilege-mod
命令。 -
要查找现有特权,请使用
ipa privilege-find
命令。 -
若要查看特定的特权,可使用
ipa privilege-show
命令。 -
ipa privilege-remove-permission
命令从特权中删除一个或多个权限。 -
ipa privilege-del
命令完全删除特权。
其他资源
-
请参阅
ipa
man page。 -
请参阅
ipa help
命令。
20.6. 在 CLI 中管理 IdM 角色
本节描述了如何使用命令行界面(CLI)管理身份管理(IdM)角色。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 一个活跃的 Kerberos 票据。详情请参阅 使用 kinit 手动登录到 IdM。
- 现有特权。有关特权的详情,请参阅 在 CLI 中管理 IdM 特权。
步骤
使用
ipa role-add
命令添加新角色条目:$ ipa role-add --desc="User Administrator" useradmin ------------------------ Added role "useradmin" ------------------------ Role name: useradmin Description: User Administrator
使用
ipa role-add-privilege
命令将所需的特权添加到角色中:$ ipa role-add-privilege --privileges="user administrators" useradmin Role name: useradmin Description: User Administrator Privileges: user administrators ---------------------------- Number of privileges added 1 ----------------------------
使用
ipa role-add-member
命令将所需的成员添加到角色中。允许的成员类型有:users、groups、hosts hostgroups。
例如,将名为 useradmins 的组添加到之前创建的 useradmin 角色中:$ ipa role-add-member --groups=useradmins useradmin Role name: useradmin Description: User Administrator Member groups: useradmins Privileges: user administrators ------------------------- Number of members added 1 -------------------------
20.7. 现有角色的命令选项
根据需要,使用以下变体修改现有角色:
-
若要修改现有角色,请使用
ipa role-mod
命令。 -
要查找现有角色,请使用
ipa role-find
命令。 -
要查看特定的角色,请使用
ipa role-show
命令。 -
若要从角色中删除成员,请使用
ipa role-remove-member
命令。 -
ipa role-remove-privilege
命令从角色中删除一个或多个特权。 -
ipa role-del
命令将完全删除角色。
其他资源
-
请参阅
ipa
手册页 -
请参阅
ipa help
命令。
第 21 章 使用 IdM Web UI 管理基于角色的访问控制
本章介绍了身份管理(IdM)中的基于角色的访问控制,并描述了 Web 界面(Web UI)中的以下操作:
21.1. IdM 中的基于角色的访问控制
与自助服务和委派访问控制相比,IdM 中的基于角色的访问控制(RBAC)向用户授予了完全不同的权限。
基于角色的访问控制由三个部分组成:
- Permissions(权限) 授予执行特定任务的权利,如添加或删除用户、修改组、启用读取访问等。
- Privileges(特权) 结合了权限,例如添加新用户所需的所有权限。
- Roles(角色) 向用户、用户组、主机或主机组授予一组特权。
21.1.1. IdM 中的权限
权限是基于角色的访问控制的最低级别单元,它们定义这些操作所应用到的 LDAP 条目。与构建块类似,可以根据需要将权限分配给多个特权。
一个或多个权利定义了允许的操作 :
-
write
-
读取
-
搜索
-
compare
-
添加
-
删除
-
all
这些操作适用于三个基本目标:
-
subtree
:域名 (DN);此 DN 下的子树 -
target filter
:LDAP 过滤器 -
target
:可以带有通配符的 DN 指定条目
此外,以下方便选项可设置对应的属性:
-
type
:对象类型(用户、组等);设置subtree
和target filter
-
memberof
:组成员;设置target filter
-
targetgroup
:授予修改特定组的权限(如授予管理组成员资格的权限);设置target
使用 IdM 权限,您可以控制哪些用户有权访问哪些对象,甚至控制这些对象的属性。IdM 允许您允许或阻止单个属性,或更改特定 IdM 功能(如用户、组或 sudo)的所有可见性,适用于所有匿名用户、所有经过身份验证的用户,或者只更改一组特定的特权用户。
例如,如果管理员只想将用户或组的访问权限限制到这些用户或组需要访问的特定部分,并且使其他部分完全隐藏于他们,此方法的灵活性对管理员很有用。
权限不能包含其他权限。
21.1.2. 默认管理的权限
管理的权限是 IdM 默认附带的权限。它们的行为与用户创建的其他权限类似,但有以下区别:
- 您无法删除它们或修改其名称、位置和目标属性。
它们有三组属性:
- Default 属性,用户无法修改它们,因为它们由 IdM 管理
- Included 属性,它们是用户添加的额外属性
- Excluded 属性,这些属性由用户删除
管理的权限适用于 default 和 included 属性集中显示的所有属性,但不应用到排除集中的所有属性。
虽然您无法删除受管权限,但将其绑定类型设置为权限并从所有特权中删除托管权限会有效地禁用该权限。
所有受管权限的名称都以 System:
开头,例如 System: Add Sudo rule
或 System: Modify Services
。IdM 的早期版本将不同的方案用于默认权限。例如,用户无法删除它们,而只能将它们分配到特权。这些默认权限大部分已转换为受管权限,但以下权限仍使用以前的方案:
- 添加自动成员重新构建成员身份任务
- 添加配置子条目
- 添加复制协议
- 证书删除冻结
- 从 CA 获取证书状态
- 读取 DNA 范围
- 修改 DNA 范围
- 读取 PassSync Manager 配置
- 修改 PassSync Manager 配置
- 阅读复制协议
- 修改复制协议
- 删除复制协议
- 读取 LDBM 数据库配置
- 请求证书
- 请求证书忽略 CA ACL
- 从不同主机请求证书
- 从 CA 检索证书
- 吊销证书
- 写入 IPA 配置
如果您试图通过命令行修改受管权限,系统不允许更改您无法修改的属性,命令会失败。如果您试图从 Web UI 修改受管权限,则无法修改的属性将被禁用。
21.1.3. IdM 中的特权
特权是一组适用于角色的权限。
虽然权限提供了执行单个操作的权限,但某些 IdM 任务需要多个权限才能成功。因此,特权组合了执行特定任务所需的不同权限。
例如,为新 IdM 用户设置帐户需要以下权限:
- 创建新用户条目
- 重置用户密码
- 将新用户添加到默认 IPA 用户组
将这三个低级别任务合并到一个更高级别的任务中,例如名为 Add User,可使系统管理员更加轻松地管理角色。IdM 已包含几个默认权限。除了用户和用户组外,还将特权分配到主机和主机组,以及网络服务。这种方法允许精细控制一组主机上使用特定网络服务的操作。
特权可能不包含其他特权。
21.1.4. IdM 中的角色
角色是用户为角色指定的特权列表。
实际上,权限授予执行给定低级别任务(创建用户条目、向组添加条目等)的权限,权限组合了更高级别任务(如在给定组中创建新用户)所需的一个或多个这些权限。角色根据需要收集权限:例如,用户管理员角色能够添加、修改和删除用户。
角色用于对允许的操作进行分类。它们不用作实施特权升级或防止特权升级的工具。
角色不能包含其他角色。
21.1.5. Identity Management 中的预定义角色
Red Hat Identity Management 提供以下预定义角色范围:
表 21.1. Identity Management 中的预定义角色
角色 | 特权 | Description |
---|---|---|
Enrollment Administrator | 主机注册 | 负责客户端或主机、注册 |
helpdesk | Modify Users and Reset passwords, Modify Group membership | 负责执行简单的用户管理任务 |
IT Security Specialist | Netgroups Administrators, HBAC Administrator, Sudo Administrator | 负责管理安全策略,如基于主机的访问控制、sudo 规则 |
IT Specialist | Host Administrators, Host Group Administrators, Service Administrators, Automount Administrators | 负责管理主机 |
Security Architect | Delegation Administrator, Replication Administrators, Write IPA Configuration, Password Policy Administrator | 负责管理身份管理环境、创建信任、创建复制协议 |
User Administrator | User Administrators, Group Administrators, Stage User Administrators | 负责创建用户和组 |
21.2. 在 IdM Web UI 中管理权限
本节描述了如何使用 Web 界面(IdM Web UI)在身份管理(IdM)中管理权限。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 您已登录到 IdM Web UI。详情请参阅 在 Web 浏览器中访问 IdM Web UI。
步骤
要添加新权限,请打开 IPA Server 选项卡中的 Role-Based Access Control 子菜单,并选择 Permissions :
此时会打开权限列表:点击权限列表顶部的 Add 按钮:
此时会打开 Add Permission 表单。指定新权限的名称,并相应地定义其属性:
选择合适的绑定规则类型:
- permission 是默认的权限类型,通过特权和角色授予访问权限
- all 指定权限适用于所有经过身份验证的用户
anonymous 指定权限适用于所有用户,包括未经身份验证的用户
注意不能对特权添加带有非默认绑定规则类型的权限。您也不能对非默认绑定规则类型设置特权中已存在的权限。
- 选择在 Granted rights 中使用此权限授予的权利。
定义方法来标别权限的目标条目:
- Type 指定条目类型,如 user、host 或 service。如果您为 Type 设置选择了一个值,则可通过该 ACI 访问该条目类型的所有可能属性的列表将出现在 Effective Attributes 下。定义 Type 会将 Subtree 和 Target DN 设置为其中一个预定义的值。
-
Subtree (必需的)指定一个子树条目;然后这个子树条目下的每个条目都成为目标。提供现有的子树条目,因为 Subtree 不接受通配符或不存在的域名(DN)。例如:
cn=automount,dc=example,dc=com
-
额外目标过滤器 使用 LDAP 过滤器来识别权限将应用到哪个条目。过滤器可以是任何有效的 LDAP 过滤器,例如:
(!(objectclass=posixgroup))
,IdM 会自动检查给定过滤器的有效性。如果您输入无效的过滤器,IdM 会在您尝试保存权限时给您发出警告。 -
目标 DN 指定域名(DN),并接受通配符。例如:
uid=*,cn=users,cn=accounts,dc=com
- 组成员 对给定组的成员设置目标过滤器。指定过滤器设置并点击 Add 后,IdM 会验证过滤器。如果所有权限设置都正确,IdM 将执行搜索。如果某些权限设置不正确,IdM 将显示一条消息,通知您哪个设置不正确。
向权限添加属性:
- 如果设置了 Type,请从可用的 ACI 属性列表中选择 Effective attributes。
如果您没有使用 Type,通过将属性写入Effective attributes 字段来手动添加属性。一次添加一个属性;若要添加多个属性,可单击 Add 来添加另一个输入字段。
重要如果您没有为权限设置任何属性,则权限默认包含所有属性。
使用表单底部的 Add 按钮完成添加权限:
- 单击 Add 按钮来保存权限,并回到权限列表。
- 或者,您可以保存权限,并通过单击 Add and Add another 按钮继续在同一表单中添加其他权限。
- Add and Edit 按钮使您可以保存并继续编辑新创建的权限。
- 可选。您还可以通过单击权限列表中的名称来显示Permission settings 页面来编辑现有权限的属性。
可选。如果您需要删除现有权限,请在列表中选中其名称旁边的复选框后单击 Delete按钮,来显示 Remove permissions 对话框。
注意对默认受管权限的操作是受限制的:您无法修改的属性在 IdM Web UI 中是禁用的,您无法完全删除受管的权限。
但是,您可以通过从所有特权中删除受管权限,可以有效禁用设置了绑定类型权限的受管权限。
例如,要让 engineer 组中的用户拥有写成员属性的权限(因此他们可以添加或删除成员):
21.3. 在 IdM Web UI 中管理特权
本节描述了如何使用 Web 界面(IdM Web UI)在 IdM 中管理特权。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 您已登录到 IdM Web UI。详情请参阅 在 Web 浏览器中访问 IdM Web UI。
- 现有权限。有关权限的详情,请参阅 在 IdM Web UI 中管理权限。
步骤
要添加新的特权,请在 IPA Server 选项卡中打开 Role-Based Access Control 子菜单,然后选择 Privileges :
此时会打开权限列表。点击特权列表顶部的 Add 按钮:
此时会打开 Add Privilege 表单。输入特权的名称和描述:
- 单击 Add and Edit 按钮,来保存新特权,并继续到特权配置页面来添加权限。
- 单击特权列表中的特权名称,来编辑特权属性。此时会打开特权配置页面。
Permissions 选项卡显示选定的特权中包含的权限列表。点击列表顶部的 Add 按钮向特权添加权限:
勾选每个要添加权限的名称旁边的复选框,并使用 > 按钮将权限移到 Prospective 列中:
- 单击 Add 按钮进行确认。
- 可选。如果您需要删除权限,请在相关权限旁勾选复选框后单击 Delete 按钮:Remove privileges from permissions 对话框将打开。
- 可选。如果您需要删除现有的特权,请在勾选列表中其名称旁边的复选框后单击 Delete 按钮:Remove privileges 对话框将打开。
21.4. 在 IdM Web UI 中管理角色
本节描述了如何使用 Web 界面(IdM Web UI)在身份管理(IdM)中管理角色。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 您已登录到 IdM Web UI。详情请参阅 在 Web 浏览器中访问 IdM Web UI。
- 现有特权。有关特权的详情,请参阅 在 IdM Web UI 中管理特权。
步骤
要添加新角色,请在 IPA Server 选项卡中打开 Role-Based Access Control 子菜单,并选择 Roles :
角色列表会打开。单击基于角色的访问控制指令列表顶部的 Add 按钮。
此时会打开 Add Role 表单。输入角色名称和描述:
- 单击 Add and Edit 按钮,来保存新角色,再前往角色配置页面来添加特权和用户。
- 单击角色列表中的角色名称,来编辑角色的属性。角色配置页面将打开。
单击相关列表顶部的 Add 按钮,使用 Users 、Users Groups、Hosts、Host Groups 或 Services 选项卡来添加成员。
在打开的窗口中,选择左侧的成员,并使用 > 按钮将它们移到 Prospective 列中。
在 Privileges 选项卡的顶部,单击 Add。
选择左侧的特权,并使用 > 按钮将它们移到 Prospective 列中。
- 单击 Add 按钮保存。
- 可选。如果您需要从角色中删除特权或成员,请在勾选您要删除的实体名称旁边的复选框后单击 Delete 按钮。此时会打开一个对话框。
- 可选。如果您需要删除现有角色,请在勾选列表中其名称旁边的复选框后单击 Delete 按钮,来显示 Remove roles 对话框。
第 22 章 准备您的环境以使用 Ansible playbook 管理 IdM
作为管理身份管理 (IdM) 的系统管理员,在使用 Red Hat Ansible Engine 时,最好执行以下操作:
- 在您的主目录中,创建专用于 Ansible playbook 的子目录,如 ~/MyPlaybooks。
-
将示例 Ansible playbook 从
/usr/share/doc/ansible-freeipa/*
和/usr/share/doc/rhel-system-roles/*
目录以及它们的子目录复制到 ~/MyPlaybooks 目录中并进行调整。 - 将清单文件包含在 ~/MyPlaybooks 目录中。
通过这个方法,您可以在一个位置找到所有 playbook,并可以在不使用 root 特权的前提下运行 playbook。
您只需要在受管节点上具有 root
权限来执行 ipaserver
、ipareplica
、ipaclient
和 ipabackup
ansible-freeipa
角色。这些角色需要具有目录和 dnf
软件包管理器的特权访问权限。
本节论述了如何创建 ~/MyPlaybooks 目录并进行配置,以便您可以使用它来存储和运行 Ansible playbook。
先决条件
- 您已在受管节点上安装了 IdM 服务器 server.idm.example.com 和 replica.idm.example.com。
- 您已配置了 DNS 和网络,以便您可以直接从控制节点登录到受管节点 server.idm.example.com 和 replica.idm.example.com。
-
您需要知道 IdM
admin
密码。
步骤
在主目录中为您的 Ansible 配置和 playbook 创建目录:
$ mkdir ~/MyPlaybooks/
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks
使用以下内容创建 ~/MyPlaybooks/ansible.cfg 文件:
[defaults] inventory = /home/your_username/MyPlaybooks/inventory [privilege_escalation] become=True
使用以下内容创建 ~/MyPlaybooks/inventory 文件:
[eu] server.idm.example.com [us] replica.idm.example.com [ipaserver:children] eu us
此配置定义了两个主机组,即 eu 和 us,用于这些位置中的主机。此外,此配置定义了 ipaserver 主机组,它包含来自 eu 和 us 组的所有主机。
[可选] 创建 SSH 公钥和私钥。要在测试环境中简化访问,请不要在私钥中设置密码:
$ ssh-keygen
将 SSH 公钥复制到每个受管节点上的 IdM
admin
帐户:$ ssh-copy-id admin@server.idm.example.com $ ssh-copy-id admin@replica.idm.example.com
这些命令要求您输入 IdM
admin
密码。
其他资源
- 请参阅 使用 Ansible playbook 安装身份管理服务器。
- 请参阅 如何构建清单。
第 23 章 在 IdM 中使用 Ansible playbook 管理基于角色的访问控制
基于角色的访问控制 (RBAC) 是一种基于角色和特权定义的策略中立访问控制机制。在 Identity Management (IdM) 中的 RBAC 组件是角色、权限和权限:
- Permissions(权限) 授予执行特定任务的权利,如添加或删除用户、修改组、启用读取访问等。
- Privileges(特权) 结合了权限,例如添加新用户所需的所有权限。
- Roles(角色) 向用户、用户组、主机或主机组授予一组特权。
尤其是在大型公司,使用 RBAC 可以帮助创建具有各个职责领域的管理员分层系统。
本章介绍了使用 Ansible playbook 管理 RBAC 时执行的以下操作:
23.1. IdM 中的权限
权限是基于角色的访问控制的最低级别单元,它们定义这些操作所应用到的 LDAP 条目。与构建块类似,可以根据需要将权限分配给多个特权。
一个或多个权利定义了允许的操作 :
-
write
-
读取
-
搜索
-
compare
-
添加
-
删除
-
all
这些操作适用于三个基本目标:
-
subtree
:域名 (DN);此 DN 下的子树 -
target filter
:LDAP 过滤器 -
target
:可以带有通配符的 DN 指定条目
此外,以下方便选项可设置对应的属性:
-
type
:对象类型(用户、组等);设置subtree
和target filter
-
memberof
:组成员;设置target filter
-
targetgroup
:授予修改特定组的权限(如授予管理组成员资格的权限);设置target
使用 IdM 权限,您可以控制哪些用户有权访问哪些对象,甚至控制这些对象的属性。IdM 允许您允许或阻止单个属性,或更改特定 IdM 功能(如用户、组或 sudo)的所有可见性,适用于所有匿名用户、所有经过身份验证的用户,或者只更改一组特定的特权用户。
例如,如果管理员只想将用户或组的访问权限限制到这些用户或组需要访问的特定部分,并且使其他部分完全隐藏于他们,此方法的灵活性对管理员很有用。
权限不能包含其他权限。
23.2. 默认管理的权限
管理的权限是 IdM 默认附带的权限。它们的行为与用户创建的其他权限类似,但有以下区别:
- 您无法删除它们或修改其名称、位置和目标属性。
它们有三组属性:
- Default 属性,用户无法修改它们,因为它们由 IdM 管理
- Included 属性,它们是用户添加的额外属性
- Excluded 属性,这些属性由用户删除
管理的权限适用于 default 和 included 属性集中显示的所有属性,但不应用到排除集中的所有属性。
虽然您无法删除受管权限,但将其绑定类型设置为权限并从所有特权中删除托管权限会有效地禁用该权限。
所有受管权限的名称都以 System:
开头,例如 System: Add Sudo rule
或 System: Modify Services
。IdM 的早期版本将不同的方案用于默认权限。例如,用户无法删除它们,而只能将它们分配到特权。这些默认权限大部分已转换为受管权限,但以下权限仍使用以前的方案:
- 添加自动成员重新构建成员身份任务
- 添加配置子条目
- 添加复制协议
- 证书删除冻结
- 从 CA 获取证书状态
- 读取 DNA 范围
- 修改 DNA 范围
- 读取 PassSync Manager 配置
- 修改 PassSync Manager 配置
- 阅读复制协议
- 修改复制协议
- 删除复制协议
- 读取 LDBM 数据库配置
- 请求证书
- 请求证书忽略 CA ACL
- 从不同主机请求证书
- 从 CA 检索证书
- 吊销证书
- 写入 IPA 配置
如果您试图通过命令行修改受管权限,系统不允许更改您无法修改的属性,命令会失败。如果您试图从 Web UI 修改受管权限,则无法修改的属性将被禁用。
23.3. IdM 中的特权
特权是一组适用于角色的权限。
虽然权限提供了执行单个操作的权限,但某些 IdM 任务需要多个权限才能成功。因此,特权组合了执行特定任务所需的不同权限。
例如,为新 IdM 用户设置帐户需要以下权限:
- 创建新用户条目
- 重置用户密码
- 将新用户添加到默认 IPA 用户组
将这三个低级别任务合并到一个更高级别的任务中,例如名为 Add User,可使系统管理员更加轻松地管理角色。IdM 已包含几个默认权限。除了用户和用户组外,还将特权分配到主机和主机组,以及网络服务。这种方法允许精细控制一组主机上使用特定网络服务的操作。
特权可能不包含其他特权。
23.4. IdM 中的角色
角色是用户为角色指定的特权列表。
实际上,权限授予执行给定低级别任务(创建用户条目、向组添加条目等)的权限,权限组合了更高级别任务(如在给定组中创建新用户)所需的一个或多个这些权限。角色根据需要收集权限:例如,用户管理员角色能够添加、修改和删除用户。
角色用于对允许的操作进行分类。它们不用作实施特权升级或防止特权升级的工具。
角色不能包含其他角色。
23.5. Identity Management 中的预定义角色
Red Hat Identity Management 提供以下预定义角色范围:
表 23.1. Identity Management 中的预定义角色
角色 | 特权 | Description |
---|---|---|
Enrollment Administrator | 主机注册 | 负责客户端或主机、注册 |
helpdesk | Modify Users and Reset passwords, Modify Group membership | 负责执行简单的用户管理任务 |
IT Security Specialist | Netgroups Administrators, HBAC Administrator, Sudo Administrator | 负责管理安全策略,如基于主机的访问控制、sudo 规则 |
IT Specialist | Host Administrators, Host Group Administrators, Service Administrators, Automount Administrators | 负责管理主机 |
Security Architect | Delegation Administrator, Replication Administrators, Write IPA Configuration, Password Policy Administrator | 负责管理身份管理环境、创建信任、创建复制协议 |
User Administrator | User Administrators, Group Administrators, Stage User Administrators | 负责创建用户和组 |
23.6. 使用 Ansible 确保存在带有特权的 IdM RBAC 角色
要对身份管理 (IdM) 中的资源 (IdM) 中的资源进行更加精细的控制,请创建自定义角色。
以下流程描述了如何使用 Ansible playbook 为新的 IdM 自定义角色定义特权并确保其存在。在这个示例中,新的 user_and_host_administrator 角色默认包含 IdM 中的以下权限的唯一组合:
-
Group Administrators
-
User Administrators
-
Stage User Administrators
-
Group Administrators
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其具有要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。
步骤
进入 ~/<MyPlaybooks>/ 目录:
$ cd ~/<MyPlaybooks>/
创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/
目录的role-member-user-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-user-present.yml role-member-user-present-copy.yml
-
打开
role-member-user-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
iparole
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为新角色的名称。 -
将
privilege
列表设置为您要包含在新角色中的 IdM 权限的名称。 -
(可选)将
user
变量设置为您要授予新角色的用户名称。 -
(可选)将
group
变量设置为要授予新角色的组的名称。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage IPA role with members. hosts: ipaserver become: yes gather_facts: no tasks: - iparole: ipaadmin_password: Secret123 name: user_and_host_administrator user: idm_user01 group: idm_group01 privilege: - Group Administrators - User Administrators - Stage User Administrators - Group Administrators
-
将
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-member-user-present-copy.yml
其他资源
- 请参阅 使用 Ansible Vault 加密内容。
- 请参阅 IdM 中的角色。
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-role
文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/iparole
目录中的 playbook 示例。
23.7. 使用 Ansible 确保缺少 IdM RBAC 角色
作为管理身份管理 (IdM) 中基于角色的访问控制 (RBAC) 的系统管理员,您可能希望确保没有过时的角色,以便任何管理员不会意外将它分配给任何用户。
以下流程描述了如何使用 Ansible playbook 来确保缺少角色。以下示例描述了如何确保 IdM 中不存在自定义 user_and_host_administrator 角色。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其具有要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。
步骤
进入 ~/<MyPlaybooks>/ 目录:
$ cd ~/<MyPlaybooks>/
创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/
目录的role-is-absent.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-is-absent.yml role-is-absent-copy.yml
-
打开
role-is-absent-copy.yml
Ansible playbook 文件以进行编辑。 通过在
iparole
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为角色的名称。 -
确保
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage IPA role with members. hosts: ipaserver become: yes gather_facts: no tasks: - iparole: ipaadmin_password: Secret123 name: user_and_host_administrator state: absent
-
将
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-is-absent-copy.yml
其他资源
- 请参阅 使用 Ansible Vault 加密内容。
- 请参阅 IdM 中的角色。
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-role
Markdown 文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/iparole
目录中的 playbook 示例。
23.8. 使用 Ansible 确保为一组用户分配 IdM RBAC 角色
作为管理身份管理 (IdM) 中基于角色的访问控制 (RBAC) 的系统管理员,您可能希望为一组特定的用户(如初级管理员)分配角色。
以下示例描述了如何使用 Ansible playbook 来确保为 junior_sysadmins 分配内置 IdM RBAC helpdesk 角色。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其具有要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。
步骤
进入 ~/<MyPlaybooks>/ 目录:
$ cd ~/<MyPlaybooks>/
创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/
目录的role-member-group-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-group-present.yml role-member-group-present-copy.yml
-
打开
role-member-group-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
iparole
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为您要分配的角色的名称。 -
将
group
变量设置为组的名称。 -
将
action
变量设置为member
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage IPA role with members. hosts: ipaserver become: yes gather_facts: no tasks: - iparole: ipaadmin_password: Secret123 name: helpdesk group: junior_sysadmins action: member
-
将
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-member-group-present-copy.yml
其他资源
- 请参阅 使用 Ansible Vault 加密内容。
- 请参阅 IdM 中的角色。
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-role
Markdown 文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/iparole
目录中的 playbook 示例。
23.9. 使用 Ansible 确保没有将特定用户分配给 IdM RBAC 角色
作为系统管理员,在身份管理 (IdM) 中管理基于角色的访问控制 (RBAC),您可能需要确保在特定用户已移至公司内的不同位置后,不会为其分配 RBAC 角色。
以下流程描述了如何使用 Ansible playbook 来确保没有将名为 user_01 和 user_02 的用户分配到 helpdesk 角色。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其具有要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。
步骤
进入 ~/<MyPlaybooks>/ 目录:
$ cd ~/<MyPlaybooks>/
创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/
目录的role-member-user-absent.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-user-absent.yml role-member-user-absent-copy.yml
-
打开
role-member-user-absent-copy.yml
Ansible playbook 文件以进行编辑。 通过在
iparole
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为您要分配的角色的名称。 -
将
user
列表设置为用户的名称。 -
将
action
变量设置为member
。 -
将
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage IPA role with members. hosts: ipaserver become: yes gather_facts: no tasks: - iparole: ipaadmin_password: Secret123 name: helpdesk user - user_01 - user_02 action: member state: absent
-
将
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-member-user-absent-copy.yml
其他资源
- 请参阅 使用 Ansible Vault 加密内容。
- 请参阅 IdM 中的角色。
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-role
Markdown 文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/iparole
目录中的 playbook 示例。
23.10. 使用 Ansible 确保服务是 IdM RBAC 角色的成员
作为管理身份管理 (IdM) 中基于角色的访问控制 (RBAC) 的系统管理员,您可能希望确保注册 IdM 的特定服务是特定角色的成员。以下示例描述了如何确保自定义 web_administrator 角色可以管理 client01.idm.example.com 服务器上运行的 HTTP
服务。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其具有要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。
- web_administrator 角色存在于 IdM 中。
- IdM 中存在 HTTP/client01.idm.example.com@IDM.EXAMPLE.COM 服务。
步骤
进入 ~/<MyPlaybooks>/ 目录:
$ cd ~/<MyPlaybooks>/
创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/
目录的role-member-service-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-service-present-absent.yml role-member-service-present-copy.yml
-
打开
role-member-service-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
iparole
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为您要分配的角色的名称。 -
将
service
列表设置为服务的名称。 -
将
action
变量设置为member
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage IPA role with members. hosts: ipaserver become: yes gather_facts: no tasks: - iparole: ipaadmin_password: Secret123 name: web_administrator service: - HTTP/client01.idm.example.com action: member
-
将
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-member-service-present-copy.yml
其他资源
- 请参阅 使用 Ansible Vault 加密内容。
- 请参阅 IdM 中的角色。
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-role
Markdown 文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/iparole
目录中的 playbook 示例。
23.11. 使用 Ansible 确保主机是 IdM RBAC 角色的成员
作为在身份管理 (IdM) 中管理基于角色的访问控制的系统管理员,您可能希望确保特定的主机或主机组与特定角色关联。以下示例描述了如何确保自定义 web_administrator 角色可以管理运行 HTTP
服务的 client01.idm.example.com IdM 主机。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其具有要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。
- web_administrator 角色存在于 IdM 中。
- client01.idm.example.com 主机存在于 IdM 中。
步骤
进入 ~/<MyPlaybooks>/ 目录:
$ cd ~/<MyPlaybooks>/
创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/
目录的role-member-host-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-host-present.yml role-member-host-present-copy.yml
-
打开
role-member-host-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
iparole
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为您要分配的角色的名称。 -
将
host
列表设置为主机的名称。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage IPA role with members. hosts: ipaserver become: yes gather_facts: no tasks: - iparole: ipaadmin_password: Secret123 name: web_administrator host: - client01.idm.example.com action: member
-
将
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-member-host-present-copy.yml
其他资源
- 请参阅 使用 Ansible Vault 加密内容。
- 请参阅 IdM 中的角色。
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-role
Markdown 文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/iparole
目录中的 playbook 示例。
23.12. 使用 Ansible 确保主机组是 IdM RBAC 角色的成员
作为在身份管理 (IdM) 中管理基于角色的访问控制的系统管理员,您可能希望确保特定的主机或主机组与特定角色关联。以下示例描述了如何确保自定义 web_administrator 角色可以管理运行 HTTP
服务的 IdM 主机组的 web_servers 组。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其具有要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。
- web_administrator 角色存在于 IdM 中。
- web_servers 主机组存在于 IdM 中。
步骤
进入 ~/<MyPlaybooks>/ 目录:
$ cd ~/<MyPlaybooks>/
创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/
目录的role-member-hostgroup-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-hostgroup-present.yml role-member-hostgroup-present-copy.yml
-
打开
role-member-hostgroup-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
iparole
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为您要分配的角色的名称。 -
将
hostgroup
列表设置为 hostgroup 的名称。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage IPA role with members. hosts: ipaserver become: yes gather_facts: no tasks: - iparole: ipaadmin_password: Secret123 name: web_administrator hostgroup: - web_servers action: member
-
将
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-member-hostgroup-present-copy.yml
其他资源
- 请参阅 使用 Ansible Vault 加密内容。
- 请参阅 IdM 中的角色。
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-role
Markdown 文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/iparole
目录中的 playbook 示例。
第 24 章 使用 Ansible playbook 管理 RBAC 特权
基于角色的访问控制 (RBAC) 是一种基于角色、特权和权限定义的策略中立访问控制机制。尤其是在大型公司,使用 RBAC 可以帮助创建具有各个职责领域的管理员分层系统。
本章介绍了以下操作,以使用 Ansible playbook 管理身份管理 (IdM) 中的 RBAC 特权:
先决条件
- 您已了解 RBAC 的概念和原则。
24.1. 使用 Ansible 确保存在自定义 IdM RBAC 特权
要在 Identity Management (IdM) 基于角色的访问控制 (RBAC) 中有一个完全设计的自定义权限,您需要逐步进行:
- 创建没有附加权限的特权。
- 将您选择的权限添加到特权。
以下流程描述了如何使用 Ansible playbook 创建空特权,以便稍后您可以向它添加权限。这个示例描述了如何创建名为 full_host_administration 的特权,它旨在组合与主机管理相关的所有 IdM 权限。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其具有要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。
步骤
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
生成位于
/usr/share/doc/ansible-freeipa/playbooks/privilege/
目录中的privilege-present.yml
文件副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-present.yml privilege-present-copy.yml
-
打开
privilege-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipaprivilege
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为新特权 full_host_administration 的名称。 -
(可选)利用
description
变量描述特权。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Privilege present example hosts: ipaserver become: true tasks: - name: Ensure privilege full_host_administration is present ipaprivilege: ipaadmin_password: Secret123 name: full_host_administration description: This privilege combines all IdM permissions related to host administration
-
将
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory privilege-present-copy.yml
24.2. 使用 Ansible 确保自定义 IdM RBAC 特权中存在成员权限
要在 Identity Management (IdM) 基于角色的访问控制 (RBAC) 中有一个完全设计的自定义权限,您需要逐步进行:
- 创建没有附加权限的特权。
- 将您选择的权限添加到特权。
以下流程描述了如何使用 Ansible playbook 向上一步中创建的特权添加权限。这个示例描述了如何将与主机管理相关的所有 IdM 权限添加到名为 full_host_administration 的特权中。默认情况下,权限在 Host Enrollment
、Host Administrators
和 Host Group Administrator
特权之间分发。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其具有要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。
- full_host_administration 特权存在。有关如何使用 Ansible 创建特权的详情,请参阅使用 Ansible 确保存在自定义 IdM RBAC 特权。
步骤
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
生成位于
/usr/share/doc/ansible-freeipa/playbooks/privilege/
目录中的privilege-member-present.yml
文件副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-member-present.yml privilege-member-present-copy.yml
-
打开
privilege-member-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipaprivilege
任务部分设置以下变量来调整文件:-
调整任务的
name
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为特权的名称。 -
将
permission
列表设置为您要包含在权限中的权限名称。 -
确保
action
变量设置为member
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Privilege member present example hosts: ipaserver become: true tasks: - name: Ensure that permissions are present for the "full_host_administration" privilege ipaprivilege: ipaadmin_password: Secret123 name: full_host_administration permission: - "System: Add krbPrincipalName to a Host" - "System: Enroll a Host" - "System: Manage Host Certificates" - "System: Manage Host Enrollment Password" - "System: Manage Host Keytab" - "System: Manage Host Principals" - "Retrieve Certificates from the CA" - "Revoke Certificate" - "System: Add Hosts" - "System: Add krbPrincipalName to a Host" - "System: Enroll a Host" - "System: Manage Host Certificates" - "System: Manage Host Enrollment Password" - "System: Manage Host Keytab" - "System: Manage Host Keytab Permissions" - "System: Manage Host Principals" - "System: Manage Host SSH Public Keys" - "System: Manage Service Keytab" - "System: Manage Service Keytab Permissions" - "System: Modify Hosts" - "System: Remove Hosts" - "System: Add Hostgroups" - "System: Modify Hostgroup Membership" - "System: Modify Hostgroups" - "System: Remove Hostgroups"
-
调整任务的
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory privilege-member-present-copy.yml
24.3. 使用 Ansible 确保 IdM RBAC 特权不包括权限
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制。
以下流程描述了如何使用 Ansible playbook 从特权中删除权限。示例描述了如何从默认 Certificate Administrators
特权中删除 Request Certificates ignoring CA ACLs
权限,例如,管理员认为它存在安全风险。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其具有要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。
步骤
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
生成位于
/usr/share/doc/ansible-freeipa/playbooks/privilege/
目录中的privilege-member-present.yml
文件副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-member-absent.yml privilege-member-absent-copy.yml
-
打开
privilege-member-absent-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipaprivilege
任务部分设置以下变量来调整文件:-
调整任务的
name
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为特权的名称。 -
将
permission
列表设置为您要从特权中删除的权限名称。 -
确保
action
变量设置为member
。 -
确保
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Privilege absent example hosts: ipaserver become: true tasks: - name: Ensure that the "Request Certificate ignoring CA ACLs" permission is absent from the "Certificate Administrators" privilege ipaprivilege: ipaadmin_password: Secret123 name: Certificate Administrators permission: - "Request Certificate ignoring CA ACLs" action: member state: absent
-
调整任务的
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory privilege-member-absent-copy.yml
24.4. 使用 Ansible 重命名自定义 IdM RBAC 特权
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制。
以下流程描述了如何重命名权限,例如,您已从其中删除了一些权限。因此,特权的名称不再准确。在示例中,管理员将 full_host_administration 特权重命名为 limited_host_administration。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其具有要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。
- full_host_administration 特权存在。如需有关如何添加特权的更多信息,请参阅使用 Ansible 确保存在自定义 IdM RBAC 特权。
步骤
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
生成位于
/usr/share/doc/ansible-freeipa/playbooks/privilege/
目录中的privilege-present.yml
文件副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-present.yml rename-privilege.yml
-
打开
rename-privilege.yml
Ansible playbook 文件以进行编辑。 通过在
ipaprivilege
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为特权的当前名称。 -
添加
rename
变量,并将它设置为特权的新名称。 -
添加
state
变量,并将它设置为重命名
。
-
将
重新命名 playbook 本身,例如:
--- - name: Rename a privilege hosts: ipaserver become: true
在 playbook 中重命名任务,例如:
[...] tasks: - name: Ensure the full_host_administration privilege is renamed to limited_host_administration ipaprivilege: [...]
这是当前示例修改的 Ansible playbook 文件:
--- - name: Rename a privilege hosts: ipaserver become: true tasks: - name: Ensure the full_host_administration privilege is renamed to limited_host_administration ipaprivilege: ipaadmin_password: Secret123 name: full_host_administration rename: limited_host_administration state: renamed
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory rename-privilege.yml
24.5. 使用 Ansible 确保缺少 IdM RBAC 特权
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制。以下流程描述了如何使用 Ansible playbook 来确保缺少 RBAC 特权。这个示例描述了如何确保缺少 CA administrator
特权。因此,admin
成为在 IdM 中管理证书颁发机构的唯一用户。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其具有要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。
步骤
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
生成位于
/usr/share/doc/ansible-freeipa/playbooks/privilege/
目录中的privilege-absent.yml
文件副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-absent.yml privilege-absent-copy.yml
-
打开
privilege-absent-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipaprivilege
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为您要删除的特权的名称。 -
确保
state
变量设置为absent
。
-
将
在 playbook 中重命名任务,例如:
[...] tasks: - name: Ensure privilege "CA administrator" is absent ipaprivilege: [...]
这是当前示例修改的 Ansible playbook 文件:
--- - name: Privilege absent example hosts: ipaserver become: true tasks: - name: Ensure privilege "CA administrator" is absent ipaprivilege: ipaadmin_password: Secret123 name: CA administrator state: absent
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory privilege-absent-copy.yml
24.6. 其他资源
第 25 章 使用 Ansible playbook 在 IdM 中管理 RBAC 权限
基于角色的访问控制 (RBAC) 是一种基于角色、特权和权限定义的策略中立访问控制机制。尤其是在大型公司,使用 RBAC 可以帮助创建具有各个职责领域的管理员分层系统。
本章介绍了使用 Ansible playbook 管理身份管理 (IdM) 中 RBAC 权限时执行的以下操作:
先决条件
- 您已了解 RBAC 的概念和原则。
25.1. 使用 Ansible 确保存在 RBAC 权限
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制 (RBAC)。
以下流程描述了如何使用 Ansible playbook 确保 IdM 中存在权限,以便它可以添加到特权中。这个示例描述了如何确保以下目标状态:
-
MyPermission
权限存在。 -
MyPermission
权限只能应用到主机。 授予了包含权限的用户可以对条目执行以下所有可能的操作:
- 写
- 读
- 搜索
- 比较
- 添加
- 删除
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 示例假定您已 创建并配置了 ~/MyPlaybooks/ 目录,来作为存储示例 playbook 副本的中心位置。
步骤
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
制作位于
/usr/share/doc/ansible-freeipa/playbooks/permission/
目录中的permission-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-present.yml permission-present-copy.yml
-
打开
permission-present-copy.yml
Ansible playbook 文件进行编辑。 通过在
ipapermission
任务部分中设置以下变量来调整文件:-
调整任务的
name
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为权限的名称。 -
将
object_type
变量设置为host
。 -
将
right
变量设置为all
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Permission present example hosts: ipaserver become: true tasks: - name: Ensure that the "MyPermission" permission is present ipapermission: ipaadmin_password: Secret123 name: MyPermission object_type: host right: all
-
调整任务的
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory permission-present-copy.yml
25.2. 使用 Ansible 确保存在带有属性的 RBAC 权限
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制 (RBAC)。
以下流程描述了如何使用 Ansible playbook 确保 IdM 中存在权限,以便它可以添加到特权中。这个示例描述了如何确保以下目标状态:
- MyPermission 权限存在。
- MyPermission 权限只能用于添加主机。
获得了包含权限的用户可以在主机条目上执行以下所有可能的操作:
- 写
- 读
- 搜索
- 比较
- 添加
- 删除
-
被授予特权的用户创建的主机条目包含 MyPermission 权限,可以具有
description
值。
创建或修改权限时可以指定的属性类型不受 IdM LDAP 模式的限制。但是,当 object_type
是 host
时指定 attrs: car_licence
,会导致在使用权限并为一个主机添加特定的 car 许可证时出现 ipa: ERROR: attribute "car-license" not allowed
错误。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 示例假定您已 创建并配置了 ~/MyPlaybooks/ 目录,来作为存储示例 playbook 副本的中心位置。
步骤
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
制作位于
/usr/share/doc/ansible-freeipa/playbooks/permission/
目录中的permission-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-present.yml permission-present-with-attribute.yml
-
打开
permission-present-with-attribute.yml
Ansible playbook 文件进行编辑。 通过在
ipapermission
任务部分中设置以下变量来调整文件:-
调整任务的
name
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为权限的名称。 -
将
object_type
变量设置为host
。 -
将
right
变量设置为all
。 -
将
attrs
变量设置为description
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Permission present example hosts: ipaserver become: true tasks: - name: Ensure that the "MyPermission" permission is present with an attribute ipapermission: ipaadmin_password: Secret123 name: MyPermission object_type: host right: all attrs: description
-
调整任务的
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory permission-present-with-attribute.yml
其他资源
- 请参阅 RHEL 7 中的 Linux 域身份、身份验证和策略指南 中的 用户和组模式。
25.3. 使用 Ansible 确保缺少 RBAC 权限
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制 (RBAC)。
以下流程描述了如何使用 Ansible playbook 确保 IdM 中缺少权限,因此无法将其添加到特权中。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 示例假定您已 创建并配置了 ~/MyPlaybooks/ 目录,来作为存储示例 playbook 副本的中心位置。
步骤
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
制作位于
/usr/share/doc/ansible-freeipa/playbooks/permission/
目录中的permission-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-absent.yml permission-absent-copy.yml
-
打开
permission-absent-copy.yml
Ansible playbook 文件进行编辑。 通过在
ipapermission
任务部分中设置以下变量来调整文件:-
调整任务的
name
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为权限的名称。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Permission absent example hosts: ipaserver become: true tasks: - name: Ensure that the "MyPermission" permission is absent ipapermission: ipaadmin_password: Secret123 name: MyPermission state: absent
-
调整任务的
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory permission-absent-copy.yml
25.4. 使用 Ansible 确保属性是 IdM RBAC 权限的成员
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制 (RBAC)。
以下流程描述了如何使用 Ansible playbook 确保属性是 IdM 中 RBAC 权限的成员。因此,拥有权限的用户可以创建具有属性的条目。
示例描述了如何确保特权包含 MyPermission 权限的用户创建的主机条目可以具有 gecos
和 description
值。
创建或修改权限时可以指定的属性类型不受 IdM LDAP 模式的限制。但是,当 object_type
是 host
时指定 attrs: car_licence
,会导致在使用权限并为一个主机添加特定的 car 许可证时出现 ipa: ERROR: attribute "car-license" not allowed
错误。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 示例假定您已 创建并配置了 ~/MyPlaybooks/ 目录,来作为存储示例 playbook 副本的中心位置。
- MyPermission 权限存在。
步骤
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
制作位于
/usr/share/doc/ansible-freeipa/playbooks/permission/
目录中的permission-member-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-member-present.yml permission-member-present-copy.yml
-
打开
permission-member-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipapermission
任务部分中设置以下变量来调整文件:-
调整任务的
name
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为权限的名称。 -
将
attrs
列表设置为description
和gecos
变量。 -
确保
action
变量设置为member
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Permission member present example hosts: ipaserver become: true tasks: - name: Ensure that the "gecos" and "description" attributes are present in "MyPermission" ipapermission: ipaadmin_password: Secret123 name: MyPermission attrs: - description - gecos action: member
-
调整任务的
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory permission-member-present-copy.yml
25.5. 使用 Ansible 确保属性不是 IdM RBAC 权限的成员
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制 (RBAC)。
以下流程描述了如何使用 Ansible playbook 确保属性不是 IdM 中 RBAC 权限的成员。因此,当拥有权限的用户在 IdM LDAP 中创建条目时,该条目不能具有与属性关联的值。
这个示例描述了如何确保以下目标状态:
- MyPermission 权限存在。
-
具有特权的用户创建的主机条目包含 MyPermission 权限,不能具有
description
属性。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 示例假定您已 创建并配置了 ~/MyPlaybooks/ 目录,来作为存储示例 playbook 副本的中心位置。
- MyPermission 权限存在。
步骤
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
制作位于
/usr/share/doc/ansible-freeipa/playbooks/permission/
目录中的permission-member-absent.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-member-absent.yml permission-member-absent-copy.yml
-
打开
permission-member-absent-copy.yml
Ansible playbook 文件进行编辑。 通过在
ipapermission
任务部分中设置以下变量来调整文件:-
调整任务的
name
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为权限的名称。 -
将
attrs
变量设置为description
。 -
将
action
变量设置为member
。 -
确保
state
变量设置为absent
这是当前示例修改的 Ansible playbook 文件:
--- - name: Permission absent example hosts: ipaserver become: true tasks: - name: Ensure that an attribute is not a member of "MyPermission" ipapermission: ipaadmin_password: Secret123 name: MyPermission attrs: description action: member state: absent
-
调整任务的
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory permission-member-absent-copy.yml
25.6. 使用 Ansible 重命名 IdM RBAC 权限
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制。
以下流程描述了如何使用 Ansible playbook 重新命名权限。这个示例描述了如何将 MyPermission 重命名为 MyNewPermission。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 示例假定您已 创建并配置了 ~/MyPlaybooks/ 目录,来作为存储示例 playbook 副本的中心位置。
- MyPermission 存在于 IdM 中。
- IdM 中不存在 MyNewPermission。
步骤
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
制作位于
/usr/share/doc/ansible-freeipa/playbooks/permission/
目录中的permission-renamed.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-renamed.yml permission-renamed-copy.yml
-
打开
permission-renamed-copy.yml
Ansible playbook 文件进行编辑。 通过在
ipapermission
任务部分中设置以下变量来调整文件:-
调整任务的
name
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为权限的名称。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Permission present example hosts: ipaserver become: true tasks: - name: Rename the "MyPermission" permission ipapermission: ipaadmin_password: Secret123 name: MyPermission rename: MyNewPermission state: renamed
-
调整任务的
- 保存这个文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory permission-renamed-copy.yml
25.7. 其他资源
第 26 章 使用 ID 视图来覆盖 IdM 客户端上的用户属性值
如果身份管理(IdM)用户希望覆盖存储在 IdM LDAP 服务器中的一些用户或组属性,例如登录名称、主目录、用于身份验证的证书或 SSH
密钥,那么您将作为 IdM 管理员可以使用 IdM ID 视图来为特定的 IdM 客户端重新定义这些值。例如,您可以为用户最常用于登录 IdM 的 IdM 客户端上为用户指定不同的主目录。
本章描述了如何重新定义与作为客户端注册到 IdM 的主机上的 IdM 用户关联的 POSIX 属性值。具体来说,本章描述了如何重新定义用户登录名称和主目录。
本章包括以下部分:
26.1. ID 视图
身份管理(IdM)中的 ID 视图是一个指定以下信息的 IdM 客户端视图:
- 集中定义的 POSIX 用户或组属性的新值
- 应用新值的客户端主机或主机。
ID 视图包含一个或多个覆盖。覆盖是集中定义的 POSIX 属性值的特定替换。
您只能为集中在 IdM 服务器上的 IdM 客户端定义 ID 视图。您无法为本地 IdM 客户端配置客户端覆盖。
例如,您可以使用 ID 视图来实现以下目标:
-
为不同的环境定义不同的属性值。例如,您可以允许 IdM 管理员或其他 IdM 用户在不同的 IdM 客户端上拥有不同的主目录:您可以将
/home/crypt/username
配置为此用户在一个 IdM 客户端上的主目录,将/dropbox/username
配置为此用户在另一个客户端上的主目录。在这种情况下使用 ID 视图非常方便,例如,更改客户端/etc/sssd/sssd.conf
文件中的fallback_homedir
、overwrite_homedir
或其他主目录变量将影响所有用户。有关示例过程,请参阅 添加 ID 视图来覆盖 IdM 客户端上的 IdM 用户主目录。 - 将之前生成的属性值替换为其他值,例如覆盖用户的 UID。当您要实现系统范围的更改时,此功能非常有用,否则在 LDAP 端很难实现,例如将 1009 设为 IdM 用户的 UID。用于生成 IdM 用户 UID 的 IdM ID 范围一开始不要低于 1000 甚至 10000。如果 IdM 用户在所有 IdM 客户端上模拟 UID 为1009 的本地用户是有原因的,那么您可以使用 ID 视图覆盖在 IdM 中创建用户时生成的 IdM 用户的 UID。
您只能将 ID 视图应用于 IdM 客户端,不能应用于 IdM 服务器。
26.2. ID 视图对 SSSD 性能的潜在负面影响
当您定义 ID 视图时,IdM 会将所需的覆盖值放在 IdM 服务器的系统安全服务守护进程(SSSD)缓存中。在 IdM 客户端上运行的 SSSD 然后从服务器缓存中检索覆盖值。
应用 ID 视图可能会对系统安全服务守护进程(SSSD)的性能造成负面影响,因为某些优化和 ID 视图无法同时运行。例如,ID 视图会防止 SSSD 优化在服务器上查找组的过程:
- 使用 ID 视图时,如果组名称已被覆盖,SSSD 必须检查返回的组成员名称列表中的每个成员。
- 如果没有 ID 视图,SSSD 只能从组对象的成员属性收集用户名。
当 SSSD 缓存为空或清除缓存后,这种负面影响变得非常明显,使得所有条目都无效。
26.3. ID 视图可以覆盖的属性
ID 视图由用户和组 ID 覆盖组成。覆盖定义新的 POSIX 属性值。
用户和组 ID 覆盖可以为以下 POSIX 属性定义新值:
- 用户属性
-
登录名(
uid
) -
GECOS 条目(
gecos
) -
UID 号(
uidNumber
) -
GID 号(
gidNumber
) -
登录 shell(
loginShell
) -
主目录(
homeDirectory
) -
SSH 公钥(
ipaSshPubkey
) -
证书(
userCertificate
)
-
登录名(
- 组属性
-
组名(
cn
) -
组 GID 号(
gidNumber
)
-
组名(
26.4. 获取 ID 视图命令的帮助信息
您可以获得 IdM 命令行界面(CLI)上涉及身份管理(IdM)ID 视图的命令的帮助。
先决条件
- 您已获得了 IdM 用户的 Kerberos 票据。
步骤
要显示用于管理 ID 视图和覆盖的所有命令:
$ ipa help idviews ID Views Manage ID Views IPA allows to override certain properties of users and groups[...] [...] Topic commands: idoverridegroup-add Add a new Group ID override idoverridegroup-del Delete a Group ID override [...]
要显示特定命令的详细帮助信息,请在命令中添加
--help
选项:$ ipa idview-add --help Usage: ipa [global-options] idview-add NAME [options] Add a new ID View. Options: -h, --help show this help message and exit --desc=STR Description [...]
26.5. 使用 ID 视图来覆盖特定主机上 IdM 用户的登录名称
本节描述了作为身份管理(IdM)系统管理员如何为特定的 IdM 客户端创建 ID 视图,以覆盖与特定的 IdM 用户关联的 POSIX 属性值。该流程使用 ID 视图示例,它可让名为 idm_user 的 IdM 用户使用 user_1234 登录名称登录到名为 host1 的 IdM 客户端。
先决条件
- 以 IdM 管理员身份登录。
步骤
创建新的 ID 视图。例如,创建名为
example_for_host1
的 ID 视图:$ ipa idview-add example_for_host1 --------------------------- Added ID View "example_for_host1" --------------------------- ID View Name: example_for_host1
将用户覆盖添加到 example_for_host1 ID 视图。覆盖用户登录:
-
输入
ipa idoverrideuser-add
命令 - 添加 ID 视图的名称
- 添加用户名,也称为锚
添加
--login
选项:$ ipa idoverrideuser-add example_for_host1 idm_user --login=user_1234 ----------------------------- Added User ID override "idm_user" ----------------------------- Anchor to override: idm_user User login: user_1234
要获得可用选项列表,请运行 ipa idoverrideuser-add --help。
注意ipa idoverrideuser-add --certificate
命令替换指定 ID 视图中帐户的所有现有证书。要附加额外的证书,请使用ipa idoverrideuser-add-cert
命令:$ ipa idoverrideuser-add-cert example_for_host1 user --certificate="MIIEATCC..."
-
输入
-
可选:使用
ipa idoverrideuser-mod
命令,您可以为现有用户覆盖指定新的属性值。 将
example_for_host1
应用到host1.idm.example.com
主机:$ ipa idview-apply example_for_host1 --hosts=host1.idm.example.com ----------------------------- Applied ID View "example_for_host1" ----------------------------- hosts: host1.idm.example.com --------------------------------------------- Number of hosts the ID View was applied to: 1 ---------------------------------------------
注意ipa idview-apply
命令也接受--hostgroups
选项。选项将 ID 视图应用到属于指定主机组的主机,但不会将 ID 视图与主机组本身相关联。相反,--hostgroups
选项会展开指定主机组的成员,并将--hosts
选项分别应用到其中的每一个成员。这意味着,如果以后将主机添加到主机组中,则 ID 视图不会应用到新主机。
要将新配置立即应用到 host1.idm.example.com 系统:
以 root 身份通过 SSH 连接到系统:
$ ssh root@host1 Password:
清除 SSSD 缓存:
root@host1 ~]# sss_cache -E
- 重启 SSSD 守护进程:
root@host1 ~]# systemctl restart sssd
验证步骤
如果您有 user_1234 的凭证,您可以使用它们登录到 host1 上的 IdM:
使用 user_1234 作为登录名称,通过 SSH 连接到 host1 :
[root@r8server ~]# ssh user_1234@host1.idm.example.com Password: Last login: Sun Jun 21 22:34:25 2020 from 192.168.122.229 [user_1234@host1 ~]$
显示工作目录:
[user_1234@host1 ~]$ pwd /home/idm_user/
或者,如果您在 host1 上有 root 凭证,您可以使用它们来检查 idm_user 和 user_1234 的
id
命令的输出:[root@host1 ~]# id idm_user uid=779800003(user_1234) gid=779800003(idm_user) groups=779800003(idm_user) [root@host1 ~]# user_1234 uid=779800003(user_1234) gid=779800003(idm_user) groups=779800003(idm_user)
26.6. 修改 IdM ID 视图
身份管理(IdM)中的 ID 视图覆盖与特定 IdM 用户关联的 POSIX 属性值。本节描述了如何修改现有的 ID 视图。具体来说,它描述了如何修改 ID 视图以使名为 idm_user 的用户使用 /home/user_1234/
目录作为用户主目录,而不是使用 host1.idm.example.com IdM 客户端上的 /home/idm_user/
。
先决条件
- 具有对 host1.idm.example.com 的 root 访问权限。
- 您已以具有所需特权的用户身份登录,如 admin。
- 您为 idm_user 配置了一个 ID 视图,它适用于 host1 IdM 客户端。
步骤
以 root 用户身份,创建您希望 idm_user 在 host1.idm.example.com 上作为用户主目录使用的目录:
[root@host1 /]# mkdir /home/user_1234/
更改目录的所有权:
[root@host1 /]# chown idm_user:idm_user /home/user_1234/
显示 ID 视图,包括当前要应用 ID 视图的主机。显示名为
example_for_host1
的 ID 视图:$ ipa idview-show example_for_host1 --all dn: cn=example_for_host1,cn=views,cn=accounts,dc=idm,dc=example,dc=com ID View Name: example_for_host1 User object override: idm_user Hosts the view applies to: host1.idm.example.com objectclass: ipaIDView, top, nsContainer
输出显示 ID 视图当前应用于 host1.idm.example.com。
修改 example_for_host1 ID 视图的用户覆盖。覆盖用户主目录:
-
输入
ipa idoverrideuser-add
命令 - 添加 ID 视图的名称
- 添加用户名,也称为锚
添加
--homedir
选项:$ ipa idoverrideuser-mod example_for_host1 idm_user --homedir=/home/user_1234 ----------------------------- Modified a User ID override "idm_user" ----------------------------- Anchor to override: idm_user User login: user_1234 Home directory: /home/user_1234/
要获得可用选项的列表,请运行
ipa idoverrideuser-mod --help
。-
输入
要将新配置立即应用到 host1.idm.example.com 系统:
以 root 身份通过 SSH 连接到系统:
$ ssh root@host1 Password:
清除 SSSD 缓存:
root@host1 ~]# sss_cache -E
- 重启 SSSD 守护进程:
root@host1 ~]# systemctl restart sssd
验证步骤
以 idm_user用户身份,通过
SSH
连接到 host1:[root@r8server ~]# ssh idm_user@host1.idm.example.com Password: Last login: Sun Jun 21 22:34:25 2020 from 192.168.122.229 [user_1234@host1 ~]$
打印工作目录:
[user_1234@host1 ~]$ pwd /home/user_1234/
26.7. 添加 ID 视图来覆盖 IdM 客户端上的 IdM 用户主目录
身份管理(IdM)中的 ID 视图覆盖与特定 IdM 用户关联的 POSIX 属性值。本节描述了如何在名为 host1 的 IdM 客户端上创建应用于 idm_user 的 ID 视图,以便用户能够使用 /home/user_1234/
目录,而不是 /home/idm_user/
来作为用户主目录,。
先决条件
- 具有对 host1.idm.example.com 的 root 访问权限。
- 您已以具有所需特权的用户身份登录,如 admin。
步骤
以 root 用户身份,创建您希望 idm_user 在 host1.idm.example.com 上作为用户主目录使用的目录:
[root@host1 /]# mkdir /home/user_1234/
更改目录的所有权:
[root@host1 /]# chown idm_user:idm_user /home/user_1234/
创建 ID 视图。例如,创建名为 example_for_host1 的 ID 视图:
$ ipa idview-add example_for_host1 --------------------------- Added ID View "example_for_host1" --------------------------- ID View Name: example_for_host1
将用户覆盖添加到 example_for_host1 ID 视图。覆盖用户主目录:
-
输入
ipa idoverrideuser-add
命令 - 添加 ID 视图的名称
- 添加用户名,也称为锚
-
添加
--homedir
选项:
$ ipa idoverrideuser-add example_for_host1 idm_user --homedir=/home/user_1234 ----------------------------- Added User ID override "idm_user" ----------------------------- Anchor to override: idm_user Home directory: /home/user_1234/
-
输入
将
example_for_host1
应用到host1.idm.example.com
主机:$ ipa idview-apply example_for_host1 --hosts=host1.idm.example.com ----------------------------- Applied ID View "example_for_host1" ----------------------------- hosts: host1.idm.example.com --------------------------------------------- Number of hosts the ID View was applied to: 1 ---------------------------------------------
注意ipa idview-apply
命令也接受--hostgroups
选项。选项将 ID 视图应用到属于指定主机组的主机,但不会将 ID 视图与主机组本身相关联。相反,--hostgroups
选项会展开指定主机组的成员,并将--hosts
选项分别应用到其中的每一个成员。这意味着,如果以后将主机添加到主机组中,则 ID 视图不会应用到新主机。
要将新配置立即应用到 host1.idm.example.com 系统:
以 root 身份通过 SSH 连接到系统:
$ ssh root@host1 Password:
清除 SSSD 缓存:
root@host1 ~]# sss_cache -E
- 重启 SSSD 守护进程:
root@host1 ~]# systemctl restart sssd
验证步骤
以 idm_user用户身份,通过
SSH
连接到 host1:[root@r8server ~]# ssh idm_user@host1.idm.example.com Password: Activate the web console with: systemctl enable --now cockpit.socket Last login: Sun Jun 21 22:34:25 2020 from 192.168.122.229 [idm_user@host1 /]$
打印工作目录:
[idm_user@host1 /]$ pwd /home/user_1234/
26.8. 将 ID 视图应用到 IdM 主机组
ipa idview-apply
命令接受 --hostgroups
选项。不过,选项充当一次性操作,它将 ID 视图应用到当前属于指定主机组的主机,但不动态地将 ID 视图与主机组本身关联。--hostgroups
选项将展开指定主机组的成员,并将 --hosts
选项分别应用到其中的每一个成员。
如果稍后向主机组添加新主机,您必须使用 ipa idview-apply
命令及 --hosts
选项,手动将 ID 视图应用到新主机。
类似地,如果您从主机组中删除主机,则移除后 ID 视图仍会分配给该主机。要从删除的主机中取消 ID 视图应用,您必须运行 ipa idview-unapply id_view_name --hosts=name_of_the_removed_host
命令。
本节描述了如何实现以下目标:
- 如何创建主机组并向其添加主机。
- 如何将 ID 视图应用到主机组。
- 如何向主机组添加新主机,并将 ID 视图应用到新主机。
先决条件
- 确保 IdM 中存在您要应用到主机组的 ID 视图。例如,要创建一个 ID 视图来覆盖 AD 用户的 GID,请参阅 在带有 ID 视图的 IdM 客户端中为 AD 用户覆盖 Default Trust View 属性
流程
创建主机组并为其添加主机:
创建主机组.例如,创建名为 baltimore 的主机组:
[root@server ~]# ipa hostgroup-add --desc="Baltimore hosts" baltimore --------------------------- Added hostgroup "baltimore" --------------------------- Host-group: baltimore Description: Baltimore hosts
将主机添加到主机组。例如,将 host102 和 host103 添加到 baltimore 主机组:
[root@server ~]# ipa hostgroup-add-member --hosts={host102,host103} baltimore Host-group: baltimore Description: Baltimore hosts Member hosts: host102.idm.example.com, host103.idm.example.com ------------------------- Number of members added 2 -------------------------
将 ID 视图应用到主机组中的主机。例如,要将 example_for_host1 ID 视图应用到 baltimore 主机组:
[root@server ~]# ipa idview-apply --hostgroups=baltimore ID View Name: example_for_host1 ----------------------------------------- Applied ID View "example_for_host1" ----------------------------------------- hosts: host102.idm.example.com, host103.idm.example.com --------------------------------------------- Number of hosts the ID View was applied to: 2 ---------------------------------------------
将新主机添加到主机组,并将 ID 视图应用到新主机:
将新主机添加到主机组。例如,要将 somehost.idm.example.com 主机添加到 baltimore 主机组:
[root@server ~]# ipa hostgroup-add-member --hosts=somehost.idm.example.com baltimore Host-group: baltimore Description: Baltimore hosts Member hosts: host102.idm.example.com, host103.idm.example.com,somehost.idm.example.com ------------------------- Number of members added 1 -------------------------
(可选)显示 ID 视图信息。例如,要显示 example_for_host1 ID 视图的详情:
[root@server ~]# ipa idview-show example_for_host1 --all dn: cn=example_for_host1,cn=views,cn=accounts,dc=idm,dc=example,dc=com ID View Name: example_for_host1 [...] Hosts the view applies to: host102.idm.example.com, host103.idm.example.com objectclass: ipaIDView, top, nsContainer
输出显示 ID 视图没有应用到 somehost.idm.example.com(在 baltimore 主机组中新添加的主机)。
将 ID 视图应用到新主机。例如,要将 example_for_host1 ID 视图应用到 somehost.idm.example.com :
[root@server ~]# ipa idview-apply --host=somehost.idm.example.com ID View Name: example_for_host1 ----------------------------------------- Applied ID View "example_for_host1" ----------------------------------------- hosts: somehost.idm.example.com --------------------------------------------- Number of hosts the ID View was applied to: 1 ---------------------------------------------
验证步骤
再次显示 ID 视图信息:
[root@server ~]# ipa idview-show example_for_host1 --all dn: cn=example_for_host1,cn=views,cn=accounts,dc=idm,dc=example,dc=com ID View Name: example_for_host1 [...] Hosts the view applies to: host102.idm.example.com, host103.idm.example.com, somehost.idm.example.com objectclass: ipaIDView, top, nsContainer
输出显示 ID 视图现在已应用到 somehost.idm.example.com(在 baltimore 主机组中新添加的主机)。
26.9. 将 NIS 域迁移到身份管理
您可以使用 ID 视图为现有主机设置主机特定 UID 和 GID,以防止在将 NIS 域迁移到 IdM 时更改文件和目录的权限。
先决条件
-
使用
kinit admin
命令,以 admin 身份验证自己。
步骤
在 IdM 域中添加用户和组。
-
使用
ipa user-add
命令创建用户。如需更多信息,请参阅: 将用户添加到 IdM。 -
使用
ipa group-add
命令创建组。如需更多信息,请参阅: 将组添加到 IdM。
-
使用
覆盖在用户创建过程中生成的 ID:
-
使用
ipa idview-add
命令创建一个新的 ID 视图。如需更多信息,请参阅: 获取 ID 视图命令 的帮助。 -
使用
ipa idoverrideuser-add
和idoverridegroup-add
将用户和组的 ID 覆盖添加到 ID 视图。
-
使用
-
使用
ipa idview-apply
命令将 ID 视图分配给特定主机。 - 停用 NIS 域。
验证
要检查所有用户和组是否已正确添加到 ID 视图中,请使用
ipa idview-show
命令。$ ipa idview-show example-view ID View Name: example-view User object overrides: example-user1 Group object overrides: example-group
第 27 章 为 Active Directory 用户使用 ID 视图
您可以使用 ID 视图为 IdM-AD Trust 环境中的 Active Directory(AD)用户的 POSIX 属性指定新值。
默认情况下,IdM 会将 Default Trust View 应用到所有 AD 用户。您可以在单个 IdM 客户端中配置额外的 ID 视图,以进一步调整特定于用户的 POSIX 属性。
27.1. Default Trust View 如何工作
Default Trust View 是默认 ID 视图,总是应用于基于信任的设置中的 AD 用户和组。当您使用 ipa-adtrust-install
命令建立信任时,会自动创建它,且无法删除。
Default Trust View 仅接受 AD 用户和组覆盖,不适用于 IdM 用户和组。
使用 Default Trust View,您可以为 AD 用户和组定义自定义 POSIX 属性,从而覆盖 AD 中定义的值。
表 27.1. 应用 Default Trust View
AD 中的值 | 默认信任视图 | 结果 | |
---|---|---|---|
登录 | ad_user | ad_user | ad_user |
UID | 111 | 222 | 222 |
GID | 111 | (无值) | 111 |
您还可以配置额外的 ID 视图来覆盖 IdM 客户端上的 Default Trust View。IdM 从 Default Trust View 顶部的特定于主机 ID 视图应用值:
- 如果在主机特定 ID 视图中定义属性,IdM 会应用来自此 ID 视图的值。
- 如果在主机特定 ID 视图中未定义属性,IdM 会应用来自 Default Trust View 的值。
表 27.2. 在 Default Trust View 顶部应用特定于主机的 ID 视图
AD 中的值 | 默认信任视图 | 主机特定 ID 视图 | 结果 | |
---|---|---|---|---|
登录 | ad_user | ad_user | (无值) | ad_user |
UID | 111 | 222 | 333 | 333 |
GID | 111 | (无值) | 333 | 333 |
您只能应用特定于主机的 ID 视图来覆盖 IdM 客户端中的 Default Trust View。IdM 服务器和副本始终从 Default Trust View 应用值。
27.2. 通过修改 Default Trust View 为 AD 用户定义全局属性
如果要覆盖整个 IdM 部署的 Active Directory(AD)用户的 POSIX 属性,请在 Default Trust View 中修改该用户的条目。这个过程将 AD 用户 ad_user@ad.example.com
的 GID 设置为 732000006。
先决条件
- 您使用 Trust Controller 或 Trust Agent 的 IdM 服务器。
- 已作为 IdM 管理者进行身份验证。
流程
作为 IdM 管理员,在 Default Trust View 中为 AD 用户创建 ID 覆盖,将 GID 号更改为 732000006:
# ipa idoverrideuser-add 'Default Trust View' ad_user@ad.example.com --gidnumber=732000006
从所有 IdM 服务器和客户端中的 SSSD 缓存清除
ad_user@ad.example.com
用户的条目。这会删除过时的数据,并允许应用新的覆盖值。# sssctl cache-expire -u ad_user@ad.example.com
验证
检索
ad_user@ad.example.com
用户的信息以验证 GID 是否反映了更新的值。# id ad_user@ad.example.com uid=702801456(ad_user@ad.example.com) gid=732000006(ad_admins) groups=732000006(ad_admins),702800513(domain users@ad.example.com)
27.3. 使用 ID 视图覆盖 IdM 客户端上 AD 用户的 Default Trust View 属性
您可能希望从 Default Trust View 中为 Active Directory(AD)用户覆盖某些 POSIX 属性。例如,您可能需要在一个特定 IdM 客户端上赋予 AD 用户不同的 GID。您可以使用 ID 视图覆盖 AD 用户的 Default Trust View 的值,并将其应用到单个主机。此流程解释了如何将 host1.idm.example.com
IdM 客户端中的 ad_user@ad.example.com
AD 用户设置为 732001337。
先决条件
-
有到
host1.idm.example.com
IdM 客户端的 root 访问权限。 -
您以具有所需权限的用户登录,如
admin
用户。
流程
创建 ID 视图。例如,创建名为 example_for_host1 的 ID 视图:
$ ipa idview-add example_for_host1 --------------------------- Added ID View "example_for_host1" --------------------------- ID View Name: example_for_host1
将用户覆盖添加到 example_for_host1 ID 视图。覆盖用户的 GID:
-
输入
ipa idoverrideuser-add
命令 - 添加 ID 视图的名称
- 添加用户名,也称为锚
-
添加
--gidnumber=
选项:
$ ipa idoverrideuser-add example_for_host1 ad_user@ad.example.com --gidnumber=732001337 ----------------------------- Added User ID override "ad_user@ad.example.com" ----------------------------- Anchor to override: ad_user@ad.example.com GID: 732001337
-
输入
将
example_for_host1
应用到host1.idm.example.com
IdM 客户端:$ ipa idview-apply example_for_host1 --hosts=host1.idm.example.com ----------------------------- Applied ID View "example_for_host1" ----------------------------- hosts: host1.idm.example.com --------------------------------------------- Number of hosts the ID View was applied to: 1 ---------------------------------------------
注意ipa idview-apply
命令也接受--hostgroups
选项。选项将 ID 视图应用到属于指定主机组的主机,但不会将 ID 视图与主机组本身相关联。相反,--hostgroups
选项会展开指定主机组的成员,并将--hosts
选项分别应用到其中的每一个成员。这意味着,如果以后将主机添加到主机组中,则 ID 视图不会应用到新主机。
从
host1.idm.example.com
IdM 客户端的 SSSD 缓存清除ad_user@ad.example.com
用户的条目。这会删除过时的数据,并允许应用新的覆盖值。[root@host1 ~]# sssctl cache-expire -u ad_user@ad.example.com
验证步骤
以 ad_user@ad.example.com 身份通过
SSH
连接到 host1 :[root@r8server ~]# ssh ad_user@ad.example.com@host1.idm.example.com
检索
ad_user@ad.example.com
用户的信息以验证 GID 是否反映了更新的值。[ad_user@ad.example.com@host1 ~]$ id ad_user@ad.example.com uid=702801456(ad_user@ad.example.com) gid=732001337(admins2) groups=732001337(admins2),702800513(domain users@ad.example.com)
27.4. 将 ID 视图应用到 IdM 主机组
ipa idview-apply
命令接受 --hostgroups
选项。不过,选项充当一次性操作,它将 ID 视图应用到当前属于指定主机组的主机,但不动态地将 ID 视图与主机组本身关联。--hostgroups
选项将展开指定主机组的成员,并将 --hosts
选项分别应用到其中的每一个成员。
如果稍后向主机组添加新主机,您必须使用 ipa idview-apply
命令及 --hosts
选项,手动将 ID 视图应用到新主机。
类似地,如果您从主机组中删除主机,则移除后 ID 视图仍会分配给该主机。要从删除的主机中取消 ID 视图应用,您必须运行 ipa idview-unapply id_view_name --hosts=name_of_the_removed_host
命令。
本节描述了如何实现以下目标:
- 如何创建主机组并向其添加主机。
- 如何将 ID 视图应用到主机组。
- 如何向主机组添加新主机,并将 ID 视图应用到新主机。
先决条件
- 确保 IdM 中存在您要应用到主机组的 ID 视图。例如,要创建一个 ID 视图来覆盖 AD 用户的 GID,请参阅 在带有 ID 视图的 IdM 客户端中为 AD 用户覆盖 Default Trust View 属性
流程
创建主机组并为其添加主机:
创建主机组.例如,创建名为 baltimore 的主机组:
[root@server ~]# ipa hostgroup-add --desc="Baltimore hosts" baltimore --------------------------- Added hostgroup "baltimore" --------------------------- Host-group: baltimore Description: Baltimore hosts
将主机添加到主机组。例如,将 host102 和 host103 添加到 baltimore 主机组:
[root@server ~]# ipa hostgroup-add-member --hosts={host102,host103} baltimore Host-group: baltimore Description: Baltimore hosts Member hosts: host102.idm.example.com, host103.idm.example.com ------------------------- Number of members added 2 -------------------------
将 ID 视图应用到主机组中的主机。例如,要将 example_for_host1 ID 视图应用到 baltimore 主机组:
[root@server ~]# ipa idview-apply --hostgroups=baltimore ID View Name: example_for_host1 ----------------------------------------- Applied ID View "example_for_host1" ----------------------------------------- hosts: host102.idm.example.com, host103.idm.example.com --------------------------------------------- Number of hosts the ID View was applied to: 2 ---------------------------------------------
将新主机添加到主机组,并将 ID 视图应用到新主机:
将新主机添加到主机组。例如,要将 somehost.idm.example.com 主机添加到 baltimore 主机组:
[root@server ~]# ipa hostgroup-add-member --hosts=somehost.idm.example.com baltimore Host-group: baltimore Description: Baltimore hosts Member hosts: host102.idm.example.com, host103.idm.example.com,somehost.idm.example.com ------------------------- Number of members added 1 -------------------------
(可选)显示 ID 视图信息。例如,要显示 example_for_host1 ID 视图的详情:
[root@server ~]# ipa idview-show example_for_host1 --all dn: cn=example_for_host1,cn=views,cn=accounts,dc=idm,dc=example,dc=com ID View Name: example_for_host1 [...] Hosts the view applies to: host102.idm.example.com, host103.idm.example.com objectclass: ipaIDView, top, nsContainer
输出显示 ID 视图没有应用到 somehost.idm.example.com(在 baltimore 主机组中新添加的主机)。
将 ID 视图应用到新主机。例如,要将 example_for_host1 ID 视图应用到 somehost.idm.example.com :
[root@server ~]# ipa idview-apply --host=somehost.idm.example.com ID View Name: example_for_host1 ----------------------------------------- Applied ID View "example_for_host1" ----------------------------------------- hosts: somehost.idm.example.com --------------------------------------------- Number of hosts the ID View was applied to: 1 ---------------------------------------------
验证步骤
再次显示 ID 视图信息:
[root@server ~]# ipa idview-show example_for_host1 --all dn: cn=example_for_host1,cn=views,cn=accounts,dc=idm,dc=example,dc=com ID View Name: example_for_host1 [...] Hosts the view applies to: host102.idm.example.com, host103.idm.example.com, somehost.idm.example.com objectclass: ipaIDView, top, nsContainer
输出显示 ID 视图现在已应用到 somehost.idm.example.com(在 baltimore 主机组中新添加的主机)。
第 28 章 手动调整 ID 范围
IdM 服务器生成唯一用户 ID(UID)和组 ID(GID)号。通过为副本创建和分配不同的 ID 范围,还确保它们永远不会生成相同的 ID 号。默认情况下,此过程是自动的。但是,您可以在 IdM 服务器安装过程中手动调整 IdM ID 范围,或者手动定义副本的 DNA ID 范围。
28.1. ID 范围
ID 号被划分为 ID 范围。为各个服务器和副本保持单独的数字范围可避免为某个条目发布的 ID 号已在其他服务器或副本上的另一个条目使用的几率。
请注意,有两种不同的 ID 范围:
- IdM ID 范围,是在安装第一个服务器时分配的。此范围在创建后不可修改。但是,除了新的 IdM ID 范围外,您还可以创建新的 IdM ID 范围。如需更多信息,请参阅 自动 ID 范围分配 和 添加一个新的 IdM ID 范围。
分布式数字分配(DNA)ID 范围,可由用户修改。它们必须适合现有的 IdM ID 范围。如需更多信息,请参阅手动分配 DNA ID 范围。
也可以给副本分配 下一个 DNA ID 范围。当副本当前范围内的 ID 不足时,副本会使用其下一个范围。当一个副本被删除时,下一个范围不会被 自动分配,因此您必须手动分配它们。
作为域的后端 389 目录服务器实例的一部分,范围是通过 DNA 插件在服务器和副本之间更新和共享的。
DNA 范围定义由两个属性设置:
- 服务器的下一个可用数字: DNA 范围的低端
- 范围大小:ID 在 DNA 范围内的数量
初始底部范围是在插件实例配置期间设置的。之后,插件会更新底部值。通过将可用号划分成范围,服务器可以持续分配号,而不会相互重叠。
28.2. 自动 ID 范围分配
IdM ID 范围
默认情况下,IdM ID 范围会在 IdM 服务器安装过程中自动分配。ipa-server-install
命令会从总共 10,000 个可能的范围中随机选择并分配 200,000 个 ID。当您决定以后合并两个独立的 IdM 域时,以这种方法选择一个随机范围可显著降低冲突 ID 的可能性。
此 IdM ID 范围在创建后不能修改。您只能手动使用 分配 DNA ID 范围中介绍的命令手动调整分布式 Numeric Assignment(DNA)ID 范围。与 IdM ID 范围匹配的 DNA 范围是在安装过程中自动创建的。
DNA ID 范围
如果您安装了一个 IdM 服务器,它会控制整个 DNA ID 范围。当您安装了新副本,并且副本请求它自己的 DNA ID 范围时,服务器的初始 ID 范围将被拆分,并分布在服务器和副本之间:副本接收初始服务器上可用的剩余 DNA ID 范围的一半。服务器和副本随后将原始 ID 范围的各自部分用于新用户或组条目。另外,如果副本即将耗尽其分配的 ID 范围,且剩余的ID 少于 100 个,则副本会联系其他可用的服务器来请求新的 DNA ID 范围。
安装副本时,它不会 立即收到一个 ID 范围。副本在首次使用 DNA 插件时收到一个 ID 范围,例如首次添加用户时。
如果初始服务器在副本向其请求 DNA ID 范围之前停止工作,则副本无法与服务器联系来请求 ID 范围。尝试在副本上添加新用户会失败。在这种情况下,您可以找出分配给禁用的服务器的 ID 范围,并 手动为副本分配一个 ID 范围。
28.3. 在服务器安装过程中手动分配 IdM ID 范围
您可以覆盖默认行为,并手动设置 IdM ID 范围,而不是随机分配。
不要设置 UID 值为 1000 或更低的 ID 范围;这些值是保留给系统使用的。另外,不要设置包含 0 值的 ID 范围;SSSD 服务不处理 ID 为 0 的值。
步骤
您可以在服务器安装过程中使用
ipa-server-install
及以下两个选项来手动定义 IdM ID 范围:-
--idstart
给出 UID 和 GID 号的起始值。 -
--idmax
给出 UID 和 GID 号的最大值;默认情况下,值为--idstart
起始值加上 199,999。
-
验证步骤
要检查 ID 范围是否已正确分配,您可以使用
ipa idrange-find
命令显示已分配的 IdM ID 范围:# ipa idrange-find --------------- 1 range matched --------------- Range name: IDM.EXAMPLE.COM_id_range First Posix ID of the range: 882200000 Number of IDs in the range: 200000 Range type: local domain range ---------------------------- Number of entries returned 1 ----------------------------
28.4. 添加新的 IdM ID 范围
在某些情况下,除了原始的 ID 范围,您可能想要创建新的 IdM ID 范围;例如,当副本的 ID 用完,且原始的 IdM ID 范围耗尽时。
添加新 IdM ID 范围不会自动创建新的 DNA ID 范围。您必须根据需要手动将新的 DNA ID 范围分配给副本。有关如何操作的更多信息,请参阅手动分配 DNA ID 范围。
步骤
要创建新的 IdM ID 范围,请使用
ipa idrange-add
命令。您必须指定新范围名称、范围的第一个 ID 号和范围大小:# ipa idrange-add IDM.EXAMPLE.COM_new_range --base-id=1000000 --range-size=200000 ------------------------------------------ Added ID range "IDM.EXAMPLE.COM_new_range" ------------------------------------------ Range name: IDM.EXAMPLE.COM_new_range First Posix ID of the range: 1000000 Number of IDs in the range: 200000 Range type: local domain range
可选:立即更新 ID 范围:
清除系统安全服务守护进程(SSSD)缓存:
# sss_cache -E
重启 SSSD 守护进程:
# systemctl restart sssd
注意如果您没有清除 SSSD 缓存并重启服务,SSSD 仅在更新域列表和其他存储在 IdM 服务器中的配置数据时检测到新的 ID 范围。
验证步骤
您可以使用
ipa idrange-find
命令检查新范围是否设置正确:# ipa idrange-find ---------------- 2 ranges matched ---------------- Range name: IDM.EXAMPLE.COM_id_range First Posix ID of the range: 882200000 Number of IDs in the range: 200000 Range type: local domain range Range name: IDM.EXAMPLE.COM_new_range First Posix ID of the range: 1000000 Number of IDs in the range: 200000 Range type: local domain range ---------------------------- Number of entries returned 2 ----------------------------
28.5. IdM ID 范围内安全和相对标识符的角色
Identity Management(IdM)ID 范围由多个参数定义:
- 范围名称
- 范围的第一个 POSIX ID
- 范围大小: 范围内的 ID 数量
- 对应 RID 范围的第一个 相对标识符 (RID)
- 二级 RID 范围的第一个 RID
您可以使用 ipa idrange-show
命令查看这些值:
$ ipa idrange-show IDM.EXAMPLE.COM_id_range
Range name: IDM.EXAMPLE.COM_id_range
First Posix ID of the range: 196600000
Number of IDs in the range: 200000
First RID of the corresponding RID range: 1000
First RID of the secondary RID range: 1000000
Range type: local domain range
安全识别符
IdM 服务器在内部使用本地域的 ID 范围中的数据,为 IdM 用户和组分配唯一的安全标识符(SID)。SID 存储在用户和组对象中。用户的 SID 由以下内容组成:
- 域 SID
- 用户的 相对标识符 (RID),它是附加到域 SID 的四位 32 位值
例如,如果域 SID 是 S-1-5-21-123-456-789,且来自此域的 RID 为 1008,则该用户的 SID 为 S-1-5-21-123-456-789-1008。
相对标识符
RID 本身以以下方式计算:
将用户的 POSIX UID 范围内的第一个 POSIX ID 减去,并将对应 RID 范围的第一个 RID 添加到结果中。例如,如果 idmuser 的 UID 为 196600008,则第一个 POSIX ID 是 196600000,第一个 RID 为 1000,则 idmuser 的 RID 为 1008。
该算法计算用户的 RID 会检查给定的 POSIX ID 是否位于计算对应的 RID 前分配的 ID 范围内。例如,如果第一个 ID 是 196600000,其范围大小为 200000,则 1600000 的 POSIX ID 不在 ID 范围之外,且算法不会为其计算 RID。
二级相对标识符
在 IdM 中,POSIX UID 可以与 POSIX GID 相同。这意味着,如果 idmuser 已被 UID 196600008 存在,您仍然可以创建一个新的 idmgroup 组,其 GID 为 196600008。
但是,SID 只能定义一个对象、用户或组群。已经为 idmuser 创建的 SID 是 S-1-5-21-123-456-789-1008,它无法与 idmgroup 共享。必须为 idmgroup 生成替代 SID。
IdM 使用 二级相对标识符,或辅助 RID 来避免冲突 SID。这个二级 RID 由以下内容组成:
- secondary RID 基本
- 范围大小;默认情况下,与基本范围大小相同
在上例中,二级 RID 基本被设置为 1000000。要计算新创建的 idmgroup 的 RID:从用户的 POSIX UID 中减去范围内的第一个 POSIX ID,并将 secondary RID 范围内的第一个 RID 添加到结果。因此,Mid group 被分配为 1000008 的 RID。因此,idmgroup 的 SID 是 S-1-5-21-123-456-789-1000008。
只有之前使用手动设置 POSIX ID 创建一个组对象时,IdM 才使用二级 RID 来计算 SID。否则,自动分配可防止分配相同的 ID 两次。
28.6. 删除对 AD 的信任后删除 ID 范围
如果您已删除了 IdM 和活动目录(AD)环境之间的信任,则您可能想要删除与其关联的 ID 范围。
分配给与可信域相关联的 ID 范围的 ID ,可能仍然用于注册到 IdM 的系统上的文件和目录的所有权。
如果您删除了与已删除的 AD 信任对应的 ID 范围,则您将无法解析 AD 用户所拥有的任何文件和目录的所有权。
先决条件
- 您已删除了对 AD 环境的信任。
步骤
显示所有当前正在使用的 ID 范围:
[root@server ~]# ipa idrange-find
-
识别与您删除的信任相关联的 ID 范围的名称。ID 范围名称的第一部分是信任的名称,如
AD.EXAMPLE.COM_id_range
。 删除范围:
[root@server ~]# ipa idrange-del AD.EXAMPLE.COM_id_range
重启 SSSD 服务,来删除对您已删除的 ID 范围的引用。
[root@server ~]# systemctl restart sssd
其他资源
- 请参阅 使用命令行删除信任。
- 请参阅 使用 IdM Web UI 删除信任。
28.7. 显示当前分配的 DNA ID 范围
您可以显示服务器上当前活跃的分布式数字分配(DNA)ID 范围,以及它的下一个 DNA 范围(如果已经分配了一个)。
步骤
要显示拓扑中为服务器配置了哪些 DNA ID 范围,请使用以下命令:
ipa-replica-manage dnarange-show
显示当前在所有服务器上设置的 DNA ID 范围;或者,如果您指定了一个服务器,则仅显示指定服务器上的 DNA ID 范围,例如:# ipa-replica-manage dnarange-show serverA.example.com: 1001-1500 serverB.example.com: 1501-2000 serverC.example.com: No range set # ipa-replica-manage dnarange-show serverA.example.com serverA.example.com: 1001-1500
ipa-replica-manage dnanextrange-show
显示当前在所有服务器上设置的下一个 DNA ID 范围;或者,如果您指定了一个服务器,则仅显示指定服务器上的下一个 DNA ID 范围,例如:# ipa-replica-manage dnanextrange-show serverA.example.com: 2001-2500 serverB.example.com: No on-deck range set serverC.example.com: No on-deck range set # ipa-replica-manage dnanextrange-show serverA.example.com serverA.example.com: 2001-2500
28.8. 手动 ID 范围分配
在某些情况下,需要手动分配分布式 Numeric Assignment(DNA)ID 范围,例如:
副本的 ID 不足,并且 IdM ID 范围已耗尽
副本已耗尽为其分配的 DNA ID 范围,并且请求额外 ID 失败,因为 IdM 范围内没有更多可用的 ID。
要解决这种情况,请扩展分配给副本的 DNA ID 范围。您可以通过两种方式执行此操作:
- 缩短分配给不同副本的 DNA ID 范围,然后将新的可用值分配给已耗尽的副本。
创建新的 IdM ID 范围,然后在这个创建的 IdM 范围内为副本设置一个新的 DNA ID 范围。
有关如何创建新的 IdM ID 范围的详情,请参考 添加新的 IdM ID 范围。
副本停止工作
当副本停止运行且必须被删除时,副本的 DNA ID 范围不会被自动检索,这意味着之前分配给副本的 DNA ID 范围不可用。您要恢复 DNA ID 范围,并使其可用于其他副本。
为此,请在手动 将该范围值分配给不同的服务器前了解 ID 范围值是什么。此外,为了避免重复的 UID 或 GID,请确保恢复范围内的 ID 值之前没有分配给用户或组;您可以通过检查现有用户和组的 UID 和 GID 来完成此操作。
您可以使用手动分配 DNA ID 范围中的命令手动将 DNA ID 范围分配给 副本。
如果您分配了新的 DNA ID 范围,则服务器或副本上已存在条目的 UID 保持不变。这不会造成问题,因为即使您更改了当前的 DNA ID 范围,IdM 也会保留过去分配的范围的记录。
28.9. 手动分配 DNA ID 范围
在某些情况下,您可能需要手动将分布式 Numeric Assignment(DNA)ID 范围分配给现有副本,例如,将 DNA ID 范围重新分配给一个无法正常工作的副本。如需更多信息,请参阅 手动 ID 范围分配。
在手动调整 DNA ID 范围时,请确保新调整的范围包含在 IdM ID 范围内;您可以使用 ipa idrange-find
命令对此进行检查。否则,命令会失败。
注意不要创建重叠的 ID 范围。如果您分配给服务器或副本的任何 ID 范围重叠了,可能会导致两个不同的服务器给不同的条目分配了相同的 ID 值。
先决条件
- 可选。如果您要从不工作的副本恢复 DNA ID 范围,首先使用 显示当前分配的 DNA ID 范围 中描述的命令来查找 ID 范围。
步骤
要为指定服务器定义当前的 DNA ID 范围,请使用
ipa-replica-managerangearange-set
:# ipa-replica-manage dnarange-set serverA.example.com 1250-1499
要为指定的服务器定义下一个 DNA ID 范围,请使用
ipa-replica-manage DNanextrange-set
:# ipa-replica-manage dnanextrange-set serverB.example.com 1500-5000
验证步骤
- 您可以使用 显示当前分配的 DNA ID 范围 中描述的命令来检查新的 DNA 范围是否设置正确。
第 29 章 手动管理子 ID 范围
在容器化环境中,有时 IdM 用户需要手动分配 subID 范围。以下说明可帮助您管理 subID 范围。
29.1. 使用 IdM CLI 生成 subID 范围
您可以生成 subID 范围,并手动将其分配给用户。假设 ipa
服务器上存在用户名 jsmith。
先决条件
- IdM 用户存在。
- 获取有效的 Kerberos ticket。请参阅 Web UI 中的登录到 IdM: 使用 Kerberos ticket 来了解更多详细信息。
-
root
权限。
流程
检查现有的 subID 范围:
#
IPA subid-find
如果 subID 范围不存在,请输入以下命令生成并分配给用户:
#
ipa subid-generate --owner=jsmith
Added subordinate id "359dfcef-6b76-4911-bd37-bb5b66b8c418" Unique ID: 359dfcef-6b76-4911-bd37-bb5b66b8c418 Description: auto-assigned subid Owner: jsmith SubUID range start: 2147483648 SubUID range size: 65536 SubGID range start: 2147483648 SubGID range size: 65536或者,为所有用户生成并分配新的 subID 范围:
#
/usr/libexec/ipa/ipa-subids --all-users
Found 2 user(s) without subordinate ids Processing user 'user4' (1/2) Processing user 'user5' (2/2) Updated 2 user(s) The ipa-subids command was successful
请注意,要默认将 subID 范围分配给新的 IdM 用户,请启用以下选项:
# ipa config-mod --user-default-subid=True
验证
要验证用户是否分配了 subID 范围,请输入以下命令:
#
ipa subid-find --owner=jsmith
1 subordinate id matched Unique ID: 359dfcef-6b76-4911-bd37-bb5b66b8c418 Owner: jsmith SubUID range start: 2147483648 SubUID range size: 65536 SubGID range start: 2147483648 SubGID range size: 65536 Number of entries returned 1
29.2. 使用 IdM WebUI 接口生成 subID 范围
您可以生成 subID 范围,并将其分配给 IdM Web UI 界面中的用户。
先决条件
- 已存在 IdM 用户。
- 获取有效的 Kerberos ticket。请参阅 Web UI 中的登录到 IdM: 使用 Kerberos ticket 来了解更多详细信息。
-
root
权限。
流程
-
在 IdM WebUI 界面中,展开
Subordinate ID
选项卡,然后选择Subordinate ID
选项。 -
当显示
下级 ID
接口时,单击界面右上角的 Add 按钮。此时会出现窗口 "Add subid "。 - 在 "Add subid" 的窗口中,选择一个所有者,这是您要为其分配子 ID 范围的用户。
- 点击 Add 按钮。
验证
-
在 subordinate
ID 标签页下检查表
。应该会显示新记录,所有者是您为其分配 subID 范围的用户。
29.3. 使用 IdM CLI 管理现有的 subID 范围
如果需要,您可以搜索 subID 范围并显示有关特定 ID 的信息。假设 ipa
服务器上存在用户名 jsmith。
先决条件
- 已存在 IdM 用户。
步骤
要在知道唯一 ID 哈希时显示 subID 范围详情,请输入以下命令:
#
ipa subid-show 359dfcef-6b76-4911-bd37-bb5b66b8c418
Unique ID: 359dfcef-6b76-4911-bd37-bb5b66b8c418 Owner: jsmith SubUID range start: 2147483648 SubUID range size: 65536 SubGID range start: 2147483648 SubGID range size: 65536要在从该范围内具有 subID 范围时找到 subID 范围的详情,您可以使用以下命令:
#
ipa subid-match --subuid=2147483648
1 subordinate id matched Unique ID: 359dfcef-6b76-4911-bd37-bb5b66b8c418 Owner: uid=jsmith SubUID range start: 2147483648 SubUID range size: 65536 SubGID range start: 2147483648 SubGID range size: 65536 Number of entries returned 1
29.4. 使用 getsubid 命令列出 subID 范围
要列出 subID 范围,例如 IdM 环境中的 user1
,请遵循下面的说明。
先决条件
-
IdM 中存在
user1
。 -
已安装
shadow-utils-subid
软件包。
流程
包含
subid: ss
记录到/etc/nsswitch.conf
文件中。请注意,您只能为
subid
字段提供一个值。将subid
字段设置为sss
值可指示 utils 使用 IdM 设置中的 subID 范围。文件
值或 no 值会将 utils 设置为使用/etc/subuid
和/etc/subgid
文件中的 subID 范围。列出用户的 subID 范围:
#
getsubids user1
0: user1 2147483648 65536
第 30 章 在 IdM CLI 中管理主机
本章介绍了身份管理(IdM)中的 主机 和 主机条目,以及在 IdM CLI 中管理主机和主机条目时执行的以下操作:
本章还包含这些操作的前提条件、上下文和结果的 概述表。
30.1. IdM 中的主机
Identity Management (IdM) 管理这些身份:
- 用户
- 服务
- 主机
一个主机表示了一个计算机。作为 IdM 身份,主机在 IdM LDAP 中有一个条目,即 IdM 服务器的 389 Directory Server 实例。
IdM LDAP 中的主机条目用于在域中的其他主机甚至服务之间建立关系。这些关系是为域中的主机委派授权和控制的一部分。任何主机都可以在基于主机的访问控制
(HBAC) 规则中使用。
IdM 域在计算机之间建立一个通用性,具有通用身份信息、通用策略和共享服务。属于域的任何计算机充当域的客户端,这意味着它使用域所提供的服务。IdM 域为机器提供三个主要服务:
- DNS
- Kerberos
- 证书管理
IdM 中的主机与在其中运行的服务紧密相连:
- 服务条目与主机关联。
- 主机同时存储主机和服务 Kerberos 主体。
30.2. 主机注册
本节论述了将主机注册为 IdM 客户端以及注册期间和之后发生的情况。部分比较 IdM 主机和 IdM 用户的注册。部分还概述了可供主机使用的其他身份验证类型。
注册主机包括:
-
在 IdM LDAP 中创建主机条目:可以在 IdM CLI 中使用
ipa host-add
命令,或者等同的 IdM Web UI 操作。 - 在主机上配置 IdM 服务,如系统安全服务守护进程(SSSD)、Kerberos 和 certmonger,并将主机加入 IdM 域。
这两个操作可以单独或一起执行。
如果单独执行,它们允许在具有不同特权级别的两个用户之间划分这两个任务。这对批量部署非常有用。
ipa-client-install
命令可以一起执行两个操作。如果该条目尚不存在,该命令会在 IdM LDAP 中创建主机条目,并为主机配置 Kerberos 和 SSSD 服务。命令将主机引入 IdM 域,并允许它识别它将连接的 IdM 服务器。如果主机属于 IdM 管理的 DNS 区域,ipa-client-install
也为主机添加 DNS 记录。命令必须在客户端上运行。
30.3. 主机注册所需的用户权限
主机注册操作需要进行身份验证,以防止非特权用户将不需要的计算机添加到 IdM 域。所需的权限取决于几个因素,例如:
-
创建主机条目与运行
ipa-client-install
是分开的 - 使用一次性密码 (OTP) 进行注册
在 IdM LDAP 中手动创建主机条目的用户权限
使用 ipa host-add
CLI 命令或 IdM Web UI 在 IdM LDAP 中创建主机条目所需的用户权限是 Host Administrators
。Host Administrators
特权可通过 IT Specialist
角色获得。
将客户端加入 IdM 域的用户特权
在执行 ipa-client-install
命令期间,主机被配置为 IdM 客户端。执行 ipa-client-install
命令所需的凭证级别取决于您发现的以下注册场景:
-
IdM LDAP 中的主机条目不存在。在这种情况下,您需要完整的管理员凭据或
Host Administrators
角色。完整的管理员是admins
组的成员。Host Administrators
角色提供添加主机和注册主机的特权。有关此场景的详情,请参阅 使用用户凭证安装客户端:交互式安装。 -
IdM LDAP 中的主机条目存在。在这种情况下,您需要有限的管理员凭证才能成功执行
ipa-client-install
。本例中的有限管理员具有Enrollment Administrator
角色,该角色提供Host Enrollment
。详情请参阅 使用用户凭证安装客户端:交互式安装。