管理 IdM 用户、组、主机和访问控制规则

Red Hat Enterprise Linux 9

配置用户和主机,在组中管理它们,并使用基于主机和基于角色的访问控制规则控制访问

Red Hat Customer Content Services

摘要

红帽身份管理(IdM)的主要功能是管理用户、组、主机和访问控制规则,如基于主机的访问控制(HBAC)和基于角色的访问控制(RBAC)。您可以使用命令行、IdM Web UI 和 Ansible Playbook 配置它们。
管理任务包括配置 Kerberos 策略和安全性、自动化组成员资格和委派权限。

使开源包含更多

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息

对红帽文档提供反馈

我们感谢您对我们文档的反馈。让我们了解如何改进它。

通过 Jira 提交反馈(需要帐户)

  1. 登录到 Jira 网站。
  2. 点顶部导航栏中的 Create
  3. Summary 字段中输入描述性标题。
  4. Description 字段中输入您的改进建议。包括到文档相关部分的链接。
  5. 点对话框底部的 Create

第 1 章 IdM 命令行工具简介

了解有关使用身份管理(IdM)命令行工具的基础知识。

先决条件

  • 已安装并可访问 IdM 服务器。

    详情请参阅 安装身份管理

  • 要使用 IPA 命令行界面,请通过有效的 Kerberos 票据向 IdM 进行身份验证。

1.1. 什么是 IPA 命令行界面

IPA 命令行界面(CLI)是身份管理 (IdM) 管理的基本命令行界面。

它支持很多用于管理 IdM 的子命令,如 ipa user-add 命令来添加新用户。

IPA CLI 允许您:

  • 在网络中添加、管理或删除用户、组、主机和其他对象。
  • 管理证书。
  • 搜索条目。
  • 显示和列出对象。
  • 设置访问权限。
  • 获取正确命令语法的帮助。

1.2. IPA 帮助是什么

IPA 帮助是 IdM 服务器的内置文档系统。

IPA 命令行界面 (CLI) 从加载的 IdM 插件模块生成可用的帮助主题。要使用 IPA 帮助工具,您必须:

  • IdM 服务器已安装并运行。
  • 使用有效的 Kerberos 票据进行了身份验证。

执行不带选项的 ipa help 命令可显示有关基本帮助用法和最常见的命令示例的信息。

您可以将以下选项用于不同的 ipa help 用例:

$ ipa help [TOPIC | COMMAND | topics | commands]
  • [] - 方括号表示所有参数都是可选的,您可以只写 ipa help,命令就可执行。
  • | - 管道符表示 。因此,您可以使用基本 ipa help 命令指定 TOPICCOMMANDtopics、或 commands

    • topics-- 运行命令 ipa help topics 来显示 IPA 帮助涵盖的主题列表,如 usercertserver 等。
    • TOPIC -- 大写 TOPIC 是一个变量。因此,您可以指定一个特定的主题,例如 ipa help user
    • commands -- 使用 ipa help commands 以显示 IPA 帮助命令涵盖的命令列表,如 user-addca-enableserver-show 等。
    • COMMAND -- 大写 COMMAND 是一个变量。因此,您可以指定特定的命令,例如 ipa help user-add

1.3. 使用 IPA 帮助主题

以下流程描述了如何在命令行界面中使用 IPA 帮助。

流程

  1. 打开一个终端,再连接到 IdM 服务器。
  2. 输入 ipa help topics 来显示帮助所涵盖的主题列表。

    $ ipa help topics
  3. 选择其中一个主题并按照以下模式创建一个命令: ipa help [topic_name]。添加在上一步中列出的主题之一,而不是 topic_name 字符串。

    在这个示例中,我们使用以下主题:user

    $ ipa help user
  4. 如果 IPA help 的输出太长,且您无法看到整个文本,请使用以下语法:

    $ ipa help user | less

    然后您可以向下滚动,并阅读全部帮助。

IPA CLI 显示 user 主题的帮助页。阅读完概述后,您可以看到许多使用主题命令的模式示例。

1.4. 使用 IPA help 命令

以下流程描述了如何在命令行界面中创建 IPA 帮助命令。

流程

  1. 打开一个终端,再连接到 IdM 服务器。
  2. 输入 ipa help commands 来显示 help 所涵盖的命令列表。

    $ ipa help commands
  3. 选择一个命令并根据以下模式创建 help 命令:ipa help <COMMAND>。添加在上一步中列出的其中一个命令,而不是 <COMMAND> 字符串。

    $ ipa help user-add

其他资源

  • ipa 手册页。

1.5. IPA 命令的结构

IPA CLI 区分以下命令类型:

  • 内置命令 - IdM 服务器中提供了所有内置命令。
  • 插件提供的命令

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 服务器。

流程

  1. 打开一个终端,再连接到 IdM 服务器。
  2. 输入命令来添加新用户:

    $ ipa user-add

    该命令将运行一个脚本,用于提示您提供创建用户帐户所需的基本数据。

  3. First name: 字段中,输入新用户的名字,然后按 Enter 键。
  4. Last name: 字段中,输入新用户的姓氏,然后按 Enter 键。
  5. User login [suggested user name]: 中输入用户名,或者按 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 语法不同,因为您需要定义要对其执行更改的现有用户帐户,例如,添加密码。

先决条件

  • 您需要具有管理员特权才能修改用户帐户。

流程

  1. 打开一个终端,再连接到 IdM 服务器。
  2. 输入 ipa user-mod 命令,指定要修改的用户,以及任何选项,如 --password 来添加密码:

    $ ipa user-mod euser --password

    命令将运行脚本,您可以在其中添加新密码。

  3. 输入新密码并按 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} ...

上面的示例显示了命令 permission-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 进行身份验证。保留用户保留他们作为活跃用户的大多数帐户属性,但它们不属于任何用户组。

A flow chart displaying 4 items: Active users - Stage users - Preserved users - Deleted users. Arrows communicate the relationships between each kind of user: Active users can be "preserved" as Preserved users. Preserved users can be "restored" as Active users. Preserved users can be "staged" as Stage users and Stage users can be "activated" into Active users. All users can be deleted to become "Deleted users".

您可以从 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 。

先决条件

步骤

  1. 打开终端并连接到 IdM 服务器。
  2. 添加用户登录、用户名、姓氏以及可选,您也可以添加其电子邮件地址。

    $ 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 总是需要在登录时以小写形式输入用户名。此外,不能添加仅在字母大小写上不同的用户名,比如 userUser

    用户名的默认最大长度为 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 命令。

先决条件

步骤

  1. 打开终端并连接到 IdM 服务器。
  2. 使用以下命令激活用户帐户:

    $ ipa stageuser-activate user_login
    -------------------------
    Stage user user_login activated
    -------------------------
    ...

您可以通过列出所有 IdM 用户帐户来验证新用户帐户是否已成功创建:

$ ipa user-find

此命令列出所有用户帐户及详细信息。

2.4. 使用命令行保留用户

如果要删除用户帐户,您可以保留该帐户,保留这个选项以便以后恢复。要保留用户帐户,请使用 ipa user-delipa stageuser-del 命令的 --preserve 选项。

先决条件

步骤

  1. 打开终端并连接到 IdM 服务器。
  2. 使用以下命令保留用户帐户:

    $ 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,命令会继续删除用户,直到它遇到错误,然后它会停止并退出。

先决条件

步骤

  1. 打开终端并连接到 IdM 服务器。
  2. 使用以下命令删除用户帐户:

    $ ipa user-del user_login
    --------------------
    Deleted user "user_login"
    --------------------

用户帐户从 IdM 永久删除。

2.6. 使用命令行恢复用户

您可以将 preserved 用户恢复成:

  • Active 用户:ipa user-undel
  • Stage 用户:ipa user-stage

恢复用户帐户不会恢复帐户之前的所有属性。例如,用户的密码不会被恢复,必须再次设置。

先决条件

步骤

  1. 打开终端并连接到 IdM 服务器。
  2. 使用以下命令激活用户帐户:

    $ 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 进行身份验证。保留用户保留他们作为活跃用户的大多数帐户属性,但它们不属于任何用户组。

A flow chart displaying 4 items: Active users - Stage users - Preserved users - Deleted users. Arrows communicate the relationships between each kind of user: Active users can be "preserved" as Preserved users. Preserved users can be "restored" as Active users. Preserved users can be "staged" as Stage users and Stage users can be "activated" into Active users. All users can be deleted to become "Deleted users".

您可以从 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 或用户管理员角色的管理员特权。

步骤

  1. 登录到 IdM Web UI。
  2. 进到 Users → Stage Users 选项卡。

    另外,您可以在 Users → Active users 中添加用户帐户,但是您无法将用户组添加到帐户中。

  3. 单击 + Add 图标。
  4. Add stage user 对话框中,输入新用户的 First nameLast name
  5. [可选] 在 User login 字段中,添加一个登录名称。

    如果您将其留空,IdM 服务器将以以下形式创建登录名称:名字的第一个字母和姓氏。整个登录名最多可有 32 个字符。

  6. [可选] 在 GID 下拉菜单中,选择应包含该用户的组。
  7. [可选] 在 PasswordVerify password 字段中,输入您的密码并确认,确保它们都匹配。
  8. 点击 Add 按钮。

    Screenshot of the "Add stage user" pop-up window with the "New Password" the "Verify Password" fields filled in. The "Add" button is at the bottom left.

此时,您可以在 Stage Users 表中看到用户帐户。

Screenshot of the IdM Web UI showing user entries in the Stage Users table. This is selected from the Identity tab - the Users sub-tab - and the Stage users category listed on the left.

注意

如果点击用户名,您可以编辑高级设置,如添加电话号码、地址或职业。

3.3. 在 IdM Web UI 中 stage 用户

在用户可以登录到 IdM 之前,必须按照以下流程激活一个 stage 用户帐户,然后才能将用户添加到 IdM 组中。

先决条件

  • 管理 IdM Web UI 或用户管理员角色的管理员特权。
  • IdM 中至少有一个 stage 用户帐户。

步骤

  1. 登录到 IdM Web UI。
  2. 进到 Users → Stage users 选项卡。
  3. 单击您要激活的用户帐户的复选框。
  4. 单击 Activate 按钮。

    Screenshot of the IdM Web UI showing user entries in the "Stage Users" table. This is selected from the Identity tab - the Users sub-tab - and the Stage users category listed on the left.

  5. Confirmation 对话框中,单击 OK

如果激活成功,IdM Web UI 会显示绿色的确认信息,表示用户已激活,并且用户帐户已移到 Active 用户。帐户处于活动状态,用户才可以向 IdM 域和 IdM Web UI 进行身份验证。在第一次登录时,系统将提示用户更改密码。

Screenshot of the IdM Web UI showing the "staged.user" user entry in the "Active Users" table. Its status is "enabled."

注意

在此阶段,您可以向用户组添加活动的用户帐户。

3.4. 在 Web UI 中禁用用户帐户

您可以禁用活动的用户帐户。禁用用户帐户会停用该帐户,因此用户帐户无法进行身份验证,并使用 IdM 服务,如 Kerberos 或执行任何任务。

禁用的用户帐户仍然在 IdM 中存在,所有相关信息保持不变。与保留的用户帐户不同,禁用的用户帐户保持活动状态,并且可以是用户组的成员。

注意

禁用用户帐户后,任何现有的连接都会保持有效,直到用户的 Kerberos TGT 和其他票据过期为止。票据过期后,用户将无法续订。

先决条件

  • 管理 IdM Web UI 或用户管理员角色的管理员特权。

步骤

  1. 登录到 IdM Web UI。
  2. 进到 Users → Active users 选项卡。
  3. 点击您要禁用的用户帐户的复选框。
  4. 单击 Disable 按钮。

    Screenshot of the "Active Users" page with a table displaying attributes for several users such as User login - First name - Last name - Status - UID - Email address - Telephone Number - Job Title. The entry for the "euser" account has been highlighted and so have the "Enable" and "Disable" buttons at the top right.

  5. Confirmation 对话框中,单击 OK 按钮。

如果禁用过程成功,您可以在 Active users 表中的 Status 列中验证。

Screenshot of the same "Active Users" page with the table displaying attributes for several users. The "euser" account is now greyed-out and shows "Disabled" in its "Status" column.

3.5. 在 Web UI 中启用用户帐户

通过 IdM,您可以启用禁用的活动用户帐户。启用用户帐户可激活禁用的帐户。

先决条件

  • 管理 IdM Web UI 或用户管理员角色的管理员特权。

步骤

  1. 登录到 IdM Web UI。
  2. 进到 Users → Active users 选项卡。
  3. 单击您要启用的用户帐户的复选框。
  4. 单击 Enable 按钮。

    Screenshot of the "Active Users" page with a table displaying attributes for several users such as User login - First name - Last name - Status - UID - Email address - Telephone Number - Job Title. The entry for the "euser" account has been highlighted and so have the "Enable" and "Disable" buttons at the top right.

  5. Confirmation 对话框中,单击 OK 按钮。

如果更改成功,您可以在 Active users 表中的 Status 列中验证。

3.6. 在 IdM Web UI 中保留活动的用户

保留用户帐户可让您从 Active users 选项卡中删除帐户,而将这些帐户保留在 IdM 中。

如果员工离开了公司,可保留用户帐户。如果您要禁用用户帐户数周或数月(例如,产假),请禁用该帐户。详情请参阅 在 Web UI 中禁用用户帐户。保留的帐户不是活动的,用户无法使用它们访问内部网络,但该帐户及所有数据都保留在数据库中。

您可以将恢复的帐户移回到活动模式。

注意

处于保留状态的用户列表可以提供过去用户帐户的历史记录。

先决条件

  • 管理 IdM(身份管理)Web UI 或用户管理员角色的管理员特权。

步骤

  1. 登录到 IdM Web UI。
  2. 进到 Users → Active users 选项卡。
  3. 单击您要保留的用户帐户的复选框。
  4. 单击 Delete 按钮。

    A screenshot of the "Active Users" page displaying a table of users. The checkbox for the entry for the "preserved.user" account has been checked and the "Delete" button at the top is highlighted.

  5. Remove users 对话框中,将 Delete mode 单选按钮切换到 preserve
  6. 单击 Delete 按钮。

    A screenshot of a pop-up window titled "Remove users." The contents say "Are you sure you want to delete selected entries?" and specifies "preserved.user" below. There is a label "Delete mode" with two radial options: "delete" and "preserve" (which is selected). There are "Delete" and "Cancel" buttons at the bottom right corner of the window.

因此,用户帐户被移到 Preserved users

如果需要恢复保留的用户,请参阅 在 IdM Web UI 中恢复用户

3.7. 在 IdM Web UI 中恢复用户

IdM (身份管理)可让您将保留的用户帐户恢复到活动状态。您可以将保留的用户恢复成活跃用户或 stage 用户。

先决条件

  • 管理 IdM Web UI 或用户管理员角色的管理员特权。

步骤

  1. 登录到 IdM Web UI。
  2. 进到 Users → Preserved users 选项卡。
  3. 单击您要恢复的用户帐户的复选框。
  4. 单击 Restore 按钮。

    A screenshot of the "Preserved users" page displaying a table of users and their attributes. The checkbox next to one user entry is checked and the "Restore" button at the top right is highlighted.

  5. Confirmation 对话框中,单击 OK 按钮。

IdM Web UI 显示一条绿色确认信息,并将用户帐户移到 Active users 选项卡中。

3.8. 在 IdM Web UI 中删除用户

删除用户是一种不可逆的操作,导致用户帐户被从 IdM 数据库中永久删除,包括组成员资格和密码。任何对用户的外部配置,如系统帐户和主目录,都不会被删除,但无法通过 IdM 来访问。

您可以删除:

  • Active 用户 - IdM Web UI 为您提供了选项:

  • Stage 用户 - 您可以永久删除 stage 用户。
  • Preserved 用户 - 您可以永久删除 preserved 用户。

以下流程描述了删除活动用户。同样,您可以删除用户帐户,在:

  • Stage users 选项卡
  • Preserved users 选项卡

先决条件

  • 管理 IdM Web UI 或用户管理员角色的管理员特权。

步骤

  1. 登录到 IdM Web UI。
  2. 进到 Users → Active users 选项卡。

    或者,您可以在 Users → Stage usersUsers → Preserved users 删除用户账户。

  3. Delete 图标。
  4. Remove users 对话框中,将 Delete mode 单选按钮切换到 delete
  5. 单击 Delete 按钮。

用户帐户已从 IdM 永久删除。

第 4 章 使用 Ansible playbook 管理用户帐户

您可以使用 Ansible playbook 管理 IdM 中的用户。在介绍了用户生命周期后,本章将介绍如何将 Ansible playbook 用于以下操作:

4.1. 用户生命周期

身份管理(IdM)支持三个用户帐户状态:

  • Stage(预发布) 用户不允许进行身份验证。这是初始状态。活动用户所需的一些用户帐户属性无法在这里设置,例如组成员资格。
  • Active(活跃)用户被允许进行身份验证。所有必需的用户帐户属性都需要在这个阶段设置。
  • Preserved(保留)用户是以前活跃的用户,但现在被视为不活跃且无法通过 IdM 进行身份验证。保留用户保留他们作为活跃用户的大多数帐户属性,但它们不属于任何用户组。

A flow chart displaying 4 items: Active users - Stage users - Preserved users - Deleted users. Arrows communicate the relationships between each kind of user: Active users can be "preserved" as Preserved users. Preserved users can be "restored" as Active users. Preserved users can be "staged" as Stage users and Stage users can be "activated" into Active users. All users can be deleted to become "Deleted users".

您可以从 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 admin 密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。

步骤

  1. 创建一个清单文件,如 inventory.file,并在该文件中定义 ipaserver

    [ipaserver]
    server.idm.example.com
  2. 创建一个 Ansible playbook 文件,其中包含您要确保的 IdM 中存在的用户数据。要简化此步骤,您可以复制并修改 /usr/share/doc/ansible-freeipa/playbooks/user/add-user.yml 文件中的示例。例如,创建名为 idm_user 的用户并添加 Password123 作为用户密码:

    ---
    - name: Playbook to handle users
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Create user idm_user
        ipauser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          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 不会生成新的密码。

  3. 运行 playbook:

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-IdM-user.yml

验证步骤

  • 您可以使用 ipa user-show 命令验证 IdM 中是否存在新用户帐户:

    1. 以 admin 用户身份登录 ipaserver

      $ ssh admin@server.idm.example.com
      Password:
      [admin@server /]$
    2. 为 admin 请求一个 Kerberos ticket:

      $ kinit admin
      Password for admin@IDM.EXAMPLE.COM:
    3. 请求有关 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 admin 密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。

步骤

  1. 创建一个清单文件,如 inventory.file,并在该文件中定义 ipaserver

    [ipaserver]
    server.idm.example.com
  2. 创建一个 Ansible playbook 文件,其中包含您要在 IdM 中确保存在的用户的数据。要简化此步骤,您可以复制并修改 /usr/share/doc/ansible-freeipa/playbooks/user/ensure-users-present.yml 文件中的示例。例如,要创建用户 idm_user_1idm_user_2idm_user_3,并添加 Password123 作为密码 idm_user_1

    ---
    - name: Playbook to handle users
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Create user idm_users
        ipauser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          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 重新设置密码。

  3. 运行 playbook:

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-users.yml

验证步骤

  • 您可以使用 ipa user-show 命令验证用户帐户是否存在于 IdM 中:

    1. 以管理员身份登录到 ipaserver

      $ ssh administrator@server.idm.example.com
      Password:
      [admin@server /]$
    2. 显示有关 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 admin 密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。

步骤

  1. 创建一个清单文件,如 inventory.file,并在该文件中定义 ipaserver

    [ipaserver]
    server.idm.example.com
  2. 创建包含必要任务的 Ansible playbook 文件。使用您要确保存在的用户数据引用 JSON 文件。要简化此步骤,您可以复制并修改 /usr/share/doc/ansible-freeipa/ensure-users-present-ymlfile.yml 文件中的示例:

    ---
    - name: Ensure users' presence
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Include users.json
        include_vars:
          file: users.json
    
      - name: Users present
        ipauser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          users: "{{ users }}"
  3. 创建 users.json 文件,并将 IdM 用户添加到其中。要简化此步骤,您可以复制并修改 /usr/share/doc/ansible-freeipa/playbooks/user/users.json 文件中的示例。例如,要创建用户 idm_user_1idm_user_2idm_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"
       }
      ]
    }
  4. 运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-users-present-jsonfile.yml

验证步骤

  • 您可以使用 ipa user-show 命令验证 IdM 中是否存在用户帐户:

    1. 以管理员身份登录到 ipaserver

      $ ssh administrator@server.idm.example.com
      Password:
      [admin@server /]$
    2. 显示有关 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 admin 密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。

步骤

  1. 创建一个清单文件,如 inventory.file,并在该文件中定义 ipaserver

    [ipaserver]
    server.idm.example.com
  2. 创建 Ansible playbook 文件,使其包含没有 IdM 的用户。要简化此步骤,您可以复制并修改 /usr/share/doc/ansible-freeipa/playbooks/user/ensure-users-present.yml 文件中的示例。例如,要删除用户 idm_user_1idm_user_2idm_user_3

    ---
    - name: Playbook to handle users
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Delete users idm_user_1, idm_user_2, idm_user_3
        ipauser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          users:
          - name: idm_user_1
          - name: idm_user_2
          - name: idm_user_3
          state: absent
  3. 运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/delete-users.yml

验证步骤

您可以使用 ipa user-show 命令验证 IdM 中是否不存在用户帐户:

  1. 以管理员身份登录到 ipaserver

    $ ssh administrator@server.idm.example.com
    Password:
    [admin@server /]$
  2. 请求有关 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 中管理用户密码

5.1. 谁可以更改 IdM 用户密码以及如何去做

没有权限更改其他用户密码的普通用户只能更改他们自己的个人密码。新密码必须满足适用于用户所属的组的 IdM 密码策略。有关配置密码策略的详情,请参考 定义 IdM 密码策略

具有密码更改权限的管理员和用户可为新用户设置初始密码,并为现有用户重置密码。这些密码:

注意

LDAP 目录管理器(DM)用户可以使用 LDAP 工具更改用户密码。新密码可覆盖任何 IdM 密码策略。DM 设置的密码不会在第一次登录后过期。

5.2. 在 IdM Web UI 中更改用户密码

作为身份管理(IdM)用户,您可以在 IdM Web UI 中更改用户密码。

先决条件

  • 已登陆到 IdM Web UI。

流程

  1. 在右上角,点击 User name → Change password

    图 5.1. 重置密码

    用户更改自己的密码
  2. 输入当前的密码以及新密码。

5.3. 在 IdM Web UI 中重置另一个用户的密码

作为身份管理(IdM)的管理员用户,您可以在 IdM Web UI 中更改其他用户的密码。

先决条件

  • 您以管理员用户身份登录到 IdM Web UI。

流程

  1. 选择 IdentityUsers
  2. 单击要编辑的用户的名称。
  3. 单击 ActionsReset password

    图 5.2. 重置密码

    pwd reset1
  4. 输入新密码,然后单击 Reset Password

    图 5.3. 确认新密码

    pwd reset2

5.4. 重置目录管理器用户密码

如果您丢失了身份管理(IdM)目录管理器密码,您可以重置它。

先决条件

  • 您有 IdM 服务器的 root 访问权限。

流程

  1. 使用 pwdhash 命令生成新的密码哈希。例如:

    # pwdhash -D /etc/dirsrv/slapd-IDM-EXAMPLE-COM password
    {PBKDF2_SHA256}AAAgABU0bKhyjY53NcxY33ueoPjOUWtl4iyYN5uW...

    通过指定目录服务器配置的路径,您可以自动使用 nsslapd-rootpwstoragescheme 属性中设置的密码存储模式来加密新密码。

  2. 在拓扑中的每个 IdM 服务器上执行以下步骤:

    1. 停止服务器上安装的所有 IdM 服务:

      # ipactl stop
    2. 编辑 /etc/dirsrv/IDM-EXAMPLE-COM/dse.ldif 文件,并将 nsslapd-rootpw 属性设为 pwdhash 命令所生成的值:

      nsslapd-rootpw: {PBKDF2_SHA256}AAAgABU0bKhyjY53NcxY33ueoPjOUWtl4iyYN5uW...
    3. 启动服务器上安装的所有 IdM 服务:
    # ipactl start

5.5. 在 IdM CLI 中更改您的用户密码或重置另一个用户的密码

您可以使用身份管理(IdM)命令行界面(CLI)更改用户密码。如果您是管理用户,您可以使用 CLI 重置另一个用户的密码。

先决条件

  • 您已获得了 IdM 用户的票据授予票(TGT)。
  • 如果要重置另一个用户的密码,您必须获得 IdM 中管理用户的 TGT。

流程

  • 输入 ipa user-mod 命令,以及用户名和 --password 选项。命令将提示您输入新密码。

    $ ipa user-mod idm_user --password
    Password:
    Enter Password again to verify:
    --------------------
    Modified user "idm_user"
    --------------------
    ...
注意

您还可以使用 ipa passwd idm_user 命令,而不是 ipa user-mod

5.6. 在 IdM 中启用密码重置,而不会在下一次登录时提示用户更改密码

默认情况下,当管理员重置了另一个用户的密码后,密码会在第一次成功登录后过期。作为 IdM 目录管理者,您可以为单个的 IdM 管理员指定以下权限:

  • 它们可以执行密码更改操作,而无需用户在第一次登录时更改其密码。
  • 它们可以绕过密码策略,从而不会应用强度或历史记录强制。
警告

绕过密码策略可能会构成安全威胁。当您选择要授予这些额外特权的用户时要谨慎。

先决条件

  • 您知道目录管理者密码。

流程

  1. 在域中的每个身份管理(IdM)服务器上进行以下更改:

    1. 输入 ldapmodify 命令来修改 LDAP 条目。指定 IdM 服务器的名称和 389 端口,然后按回车:

      $ ldapmodify -x -D "cn=Directory Manager" -W -h server.idm.example.com -p 389
      Enter LDAP Password:
    2. 输入 Directory Manager 密码。
    3. 输入 ipa_pwd_extop 密码同步条目的可区别的名称,然后按回车

      dn: cn=ipa_pwd_extop,cn=plugins,cn=config
    4. 指定更改的 modify 类型,并按回车:

      changetype: modify
    5. 指定您希望 LDAP 执行哪种类型的修改,以及指定对哪个属性的修改。按回车:

      add: passSyncManagersDNs
    6. passSyncManagersDNs 属性中指定管理用户帐户。属性是多值的。例如,要授予 admin 用户目录管理者重置密码的权力:

      passSyncManagersDNs: \
      uid=admin,cn=users,cn=accounts,dc=example,dc=com
    7. 按回车两次以停止编辑条目。

整个过程如下所示:

$ ldapmodify -x -D "cn=Directory Manager" -W -h server.idm.example.com -p 389
Enter LDAP Password:
dn: cn=ipa_pwd_extop,cn=plugins,cn=config
changetype: modify
add: passSyncManagersDNs
passSyncManagersDNs: uid=admin,cn=users,cn=accounts,dc=example,dc=com

passSyncManagerDNs 下列出的 admin 用户现在具有额外的特权。

5.7. 检查 IdM 用户帐户是否已被锁住

作为身份管理(IdM)管理员,您可以检查 IdM 用户帐户是否已被锁住。为此,您必须将用户的最大允许失败的登录次数与用户实际失败的登录次数进行比较。

先决条件

  • 您已在 IdM 中获得了管理用户的票据授予票(TGT)。

流程

  1. 显示用户帐户的状态,来查看失败的登录次数:

    $ ipa user-status example_user
    -----------------------
    Account disabled: False
    -----------------------
      Server: idm.example.com
      Failed logins: 8
      Last successful authentication: N/A
      Last failed authentication: 20220229080317Z
      Time now: 2022-02-29T08:04:46Z
    ----------------------------
    Number of entries returned 1
    ----------------------------
  2. 显示特定用户允许的登录尝试次数:

    1. 以 IdM 管理员身份登录到 IdM Web UI。
    2. 打开 Identity → Users → Active users 选项卡。

    A screenshot of the IdM Web UI displaying the "Active Users" page which is a sub-page of the Users submenu from the Identity tab.

    1. 点击用户名以打开用户设置。
    2. Password policy 部分中,找到 Max failures 项。
  3. ipa user-status 命令的输出中显示的失败的登录数与 IdM Web UI 中显示的 Max failures 数进行比较。如果失败的登录次数等于最大允许登录尝试次数,则用户帐户被锁住。

5.8. 在 IdM 中密码失败后解锁用户帐户

如果用户尝试使用不正确的密码进行一定次数的登录,则身份管理(IdM)会锁住用户帐户,从而阻止用户登录。出于安全考虑,IdM 不会显示用户帐户已被锁住的任何警告信息。相反,CLI 提示可能会一直要求用户输入密码。

IdM 在过了指定的时间后会自动解锁用户帐户。另外,您可以按照以下流程手动解锁用户帐户。

先决条件

  • 您已获得 IdM 管理用户的票据授予票。

流程

  • 要解锁用户帐户,请使用 ipa user-unlock 命令。

    $ ipa user-unlock idm_user
    -----------------------
    Unlocked account "idm_user"
    -----------------------

    之后,用户可以再次登录。

5.9. 为 IdM 中的用户启用最后一次成功 Kerberos 验证的跟踪

出于性能方面的考虑,在 Red Hat Enterprise Linux 8 中运行的身份管理(IdM)不会存储用户最后一次成功的 Kerberos 验证的时间戳。因此,某些命令(如 ipa user-status )不会显示时间戳。

先决条件

  • 您已在 IdM 中获得了管理用户的票据授予票(TGT)。
  • 您在执行该流程的 IdM 服务器上有 root 访问权限。

流程

  1. 显示当前启用的密码插件功能:

    # ipa config-show | grep "Password plugin features"
      Password plugin features: AllowNThash, KDC:Disable Last Success

    输出显示 KDC:Disable Last Success 插件已启用。插件隐藏了最后一次成功的 Kerberos 身份验证,以防在 ipa user-status 输出中可见。

  2. 将每个功能的 --ipaconfigstring=feature 参数添加到当前启用的 ipa config-mod 命令中,KDC:Disable Last Success 除外:

    # ipa config-mod --ipaconfigstring='AllowNThash'

    这个命令只启用 AllowNThash 插件。要启用多个功能,请为每个功能单独指定 --ipaconfigstring=feature 参数。

  3. 重启 IdM:

    # ipactl restart

第 6 章 定义 IdM 密码策略

本章论述了 Identity Management (IdM) 密码策略,以及如何使用 Ansible playbook 在 IdM 中添加新的密码策略。

6.1. 什么是密码策略

密码策略是密码必须满足的一组规则。例如,password 策略可以定义最小密码长度和最大密码生命周期。受此策略影响的所有用户都必须设置足够长的密码,并经常更改密码以满足指定条件。这样,密码策略有助于降低某人发现和滥用用户密码的风险。

6.2. IdM 中的密码策略

密码是 Identity Management (IdM) 用户对 IdM Kerberos 域进行身份验证的最常用方式。密码策略定义了这些 IdM 用户密码必须满足的要求。

注意

IdM 密码策略在底层 LDAP 目录中设置,但 Kerberos 密钥分发中心 (KDC) 强制执行密码策略。

密码策略属性列出了您可以在 IdM 中定义密码策略的属性。

表 6.1. 密码策略属性

属性介绍示例

Max lifetime

密码在必须重置密码之前有效的最长时间(以天为单位)。默认值为 90 天。

请注意,如果属性设为 0,则密码永远不会过期。

max lifetime = 180

用户密码仅 180 天有效。之后,IdM 会提示用户更改它们。

Min lifetime

两个密码更改操作之间必须经过的最短时间(以小时为单位)。

Min Life = 1

用户更改密码后,他们必须至少等待 1 小时后再重新更改密码。

History size

保存的之前密码的数量。用户无法重复使用其密码历史记录中的密码,但可以重复利用未存储的旧密码。

History size = 0

在这种情况下,密码历史记录为空,用户可以重复使用他们之前的任何密码。

Character classes

用户必须在密码中使用的不同字符类别的数量。字符类为:

* 大写字符

* 小写字符

* 数字

* 特殊字符,如逗号(,)、句点(.)、星号(*)

* 其他 UTF-8 字符

当一个字符连续使用三次或更多次时,会将该字符类减一。例如:

* Secret1 有 3 个字符类:大写、小写、数字

* Secret111 具有 2 个字符类:大写、小写、数字以及重复使用 1 的 -1 惩罚

字符类 = 0

需要的默认类数为 0。要配置数字,请使用 --minclasses 选项运行 ipa pwpolicy-mod 命令。

另请参阅此表下的 重要 备注。

Min length

密码中的最少字符数.

如果设置了 任何其他密码策略选项,则密码的最小长度为 6 个字符。

Min length = 8

用户不能使用少于 8 个字符的密码。

Max failures

IdM 锁定用户帐户前允许的失败登录的最多次数。

Max failures = 6

当用户连续 7 次输入了错误的密码时,IdM 会锁定用户帐户。

Failure reset interval

在这个间隔后 IdM 重置当前失败登录尝试次数(以秒为单位)。

Failure reset interval = 60

如果用户在 Max failures 定义的登录尝试失败的次数超过 1 分钟,用户可以尝试再次登录,而不会造成用户帐户锁定的风险。

锁定持续时间

Max failures 中定义的登录尝试失败次数后,用户帐户锁定的时间(以秒为单位)。

Lockout duration = 600

锁定帐户的用户在 10 分钟内无法登录。

重要

如果您一组不同的硬件可能不能使用国际字符和符号,则字符类要求应为英语字母和常用符号。有关密码中字符类策略的更多信息,请参阅红帽知识库中的密码中哪些字符有效?

6.3. 使用 Ansible playbook 在 IdM 中存在密码策略

按照以下流程,使用 Ansible playbook 确保密码策略在身份管理(IdM)中存在。

在 IdM 中的默认 global_policy 密码策略中,密码中不同字符类的数量设置为 0。历史记录大小也设置为 0。

完成此步骤,以使用 Ansible playbook 为 IdM 组强制执行更强大的密码策略。

注意

您只能为 IdM 组定义密码策略。您无法为单个用户定义密码策略。

先决条件

  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。
  • 您知道 IdM 管理员密码。
  • 正在确保 IdM 中存在密码策略的组。

步骤

  1. 创建一个清单文件,如 inventory.file,并在 [ipaserver] 部分中定义 IdM 服务器的 FQDN

    [ipaserver]
    server.idm.example.com
  2. 创建 Ansible playbook 文件,以定义您要确保的密码策略。要简化此步骤,请复制并修改 /usr/share/doc/ansible-freeipa/playbooks/pwpolicy/pwpolicy_present.yml 文件中的示例:

    ---
    - name: Tests
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure presence of pwpolicy for group ops
        ipapwpolicy:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: ops
          minlife: 7
          maxlife: 49
          history: 5
          priority: 1
          lockouttime: 300
          minlength: 8
          minclasses: 4
          maxfail: 3
          failinterval: 5

    有关单个变量含义的详情,请参阅密码策略属性

  3. 运行 playbook:

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/new_pwpolicy_present.yml

您已成功使用 Ansible playbook 确保 IdM 中存在 ops 组的密码策略。

重要

ops 密码策略的优先级设置为 1,而 global_policy 密码策略没有设置优先级。因此,ops 策略会自动取代 ops 组的 global_policy,并立即强制执行。

当没有为用户设置任何组策略时,global_policy 充当备份策略,并且永远不会优先于组策略。

其他资源

  • 请参阅 /usr/share/doc/ansible-freeipa/ 目录中的 README-pwpolicy.md 文件。
  • 请参阅 密码策略优先级

6.4. IdM 中的附加密码策略选项

作为身份管理 (IdM) 管理员,您可以通过启用基于 libpwquality 功能集的额外密码策略选项来增强默认密码要求。额外的密码策略选项包括:

--maxrepeat
指定新密码中相同连续字符的最大可接受数。
--maxsequence
指定新密码中单例字符序列的最大长度。此类序列的示例为 12345fedcb。此类密码多数都不会通过简单检查。
--dictcheck
如果非零,则检查密码是否与字典中的词语匹配(如果可能修改)。目前,libpwquality 使用 cracklib 库执行字典检查。
--usercheck
如果非零,请检查密码是否以某种形式包含用户名,并可能进行修改。它不适用于少于 3 个字符的用户名。

您不能将额外的密码策略选项应用到现有密码。如果您应用了任何附加选项,IdM 会自动将 --minlength 选项(密码中的最少字符数)设置为 6 个字符。

注意

在使用 RHEL 7、RHEL 8 和 RHEL 9 服务器的混合环境中,您只能在在 RHEL 8.4 及更新版本上运行的服务器中强制实施额外的密码策略设置。如果用户登录到 IdM 客户端,IdM 客户端与在 RHEL 8.3 或更早版本中运行的 IdM 服务器进行通信,则系统管理员设置的新密码策略要求不会被应用。为确保一致性的行为,将所有服务器升级或更新到 RHEL 8.4 及更新的版本。

其他资源:

6.5. 将其他密码策略选项应用到 IdM 组

按照以下流程在身份管理(IdM)中应用额外的密码策略选项。这个示例描述了如何通过确保新密码不包含用户相应的用户名以及密码不包含两个以上相同的字符来增强 managers 组的密码策略。

先决条件

  • 您以 IdM 管理员身份登录。
  • managers 组存在于 IdM 中。
  • IdM 中存在 managers 密码策略。

步骤

  1. 将用户名检查应用到 managers 组中用户建议的所有新密码:

    $ ipa pwpolicy-mod --usercheck=True managers
    注意

    如果没有指定密码策略的名称,则会修改默认的 global_policy

  2. manager 密码策略中,将相同连续字符的最大数量设置为 2:

    $ ipa pwpolicy-mod --maxrepeat=2 managers

    现在不接受包含 2 个以上连续相同的字符的密码。例如,eR873mUi111YJQ 组合是不可接受的,因为它包含三个连续的 1

验证

  1. 添加名为 test_user 的测试用户:

    $ ipa user-add test_user
    First name: test
    Last name: user
    ----------------------------
    Added user "test_user"
    ----------------------------
  2. 将 test 用户添加到 managers 组:

    1. 在 IdM Web UI 中,点 IdentityGroupsUser Groups
    2. managers
    3. Add
    4. Add users to user group 'managers' 页面中,检查 test_user
    5. 点击 > 箭头将用户移到 Prospect ive 列中。
    6. Add
  3. 重置测试用户的密码:

    1. 进入 IdentityUsers
    2. 单击 test_user
    3. Actions 菜单中,单击 Reset Password
    4. 输入用户的临时密码。
  4. 在命令行中,尝试为 test_user 获取 Kerberos 票据授予票据 (TGT):

    $ kinit test_user
    1. 输入临时密码。
    2. 系统会通知您必须更改密码。输入包含用户名 test_user 的密码:

      Password expired. You must change it now.
      Enter new password:
      Enter it again:
      Password change rejected: Password not changed.
      Unspecified password quality failure while trying to change password.
      Please try again.
      注意

      Kerberos 没有精细的错误密码策略报告,在某些情况下,没有提供拒绝密码的明确原因。

    3. 系统通知您输入的密码被拒绝。输入包含连续三个或多个相同字符的密码:

      Password change rejected: Password not changed.
      Unspecified password quality failure while trying to change password.
      Please try again.
      
      Enter new password:
      Enter it again:
    4. 系统通知您输入的密码被拒绝。输入满足 managers 密码策略条件的密码:

      Password change rejected: Password not changed.
      Unspecified password quality failure while trying to change password.
      Please try again.
      
      Enter new password:
      Enter it again:
  5. 查看获取的 TGT:

    $ klist
    Ticket cache: KCM:0:33945
    Default principal: test_user@IDM.EXAMPLE.COM
    
    Valid starting       Expires              Service principal
    07/07/2021 12:44:44  07/08/2021 12:44:44  krbtgt@IDM.EXAMPLE.COM@IDM.EXAMPLE.COM

managers 密码策略现在可以为 managers 组中的用户正常工作。

6.6. 使用 Ansible playbook 将额外的密码策略选项应用到 IdM 组

您可以使用 Ansible playbook 应用额外的密码策略选项,来为特定的 IdM 组增强密码策略要求。为此,您可以使用 maxrepeatmaxsequencedictcheckusercheck 密码策略选项。这个示例描述了如何为 managers 组设置以下要求:

  • 用户的新密码不包含用户对应的用户名。
  • 密码不包含连续两个相同的字符。
  • 密码中的任何单调字符序列都不超过 3 个字符。这意味着系统不接受如 1234abcd )这样序列的密码。

先决条件

  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 您已在 ~/MyPlaybooks/ 目录中创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 您已将 ipaadmin_password 存储在 secret.yml Ansible vault 中。
  • 正在确保 IdM 中存在密码策略的组。

步骤

  1. 创建 Ansible playbook 文件 manager_pwpolicy_present.yml,其定义您要确保其存在的密码策略。要简化此步骤,请复制并修改以下示例:

    ---
    - name: Tests
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure presence of usercheck and maxrepeat pwpolicy for group managers
        ipapwpolicy:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: managers
          usercheck: True
          maxrepeat: 2
          maxsequence: 3
  2. 运行 playbook:

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/manager_pwpolicy_present.yml

验证

  1. 添加名为 test_user 的测试用户:

    $ ipa user-add test_user
    First name: test
    Last name: user
    ----------------------------
    Added user "test_user"
    ----------------------------
  2. 将 test 用户添加到 managers 组:

    1. 在 IdM Web UI 中,点 IdentityGroupsUser Groups
    2. managers
    3. Add
    4. Add users to user group 'managers' 页面中,检查 test_user
    5. 点击 > 箭头将用户移到 Prospect ive 列中。
    6. Add
  3. 重置测试用户的密码:

    1. 进入 IdentityUsers
    2. 单击 test_user
    3. Actions 菜单中,单击 Reset Password
    4. 输入用户的临时密码。
  4. 在命令行中,尝试为 test_user 获取 Kerberos 票据授予票据 (TGT):

    $ kinit test_user
    1. 输入临时密码。
    2. 系统会通知您必须更改密码。输入包含用户名 test_user 的密码:

      Password expired. You must change it now.
      Enter new password:
      Enter it again:
      Password change rejected: Password not changed.
      Unspecified password quality failure while trying to change password.
      Please try again.
      注意

      Kerberos 没有精细的错误密码策略报告,在某些情况下,没有提供拒绝密码的明确原因。

    3. 系统通知您输入的密码被拒绝。输入包含连续三个或多个相同字符的密码:

      Password change rejected: Password not changed.
      Unspecified password quality failure while trying to change password.
      Please try again.
      
      Enter new password:
      Enter it again:
    4. 系统通知您输入的密码被拒绝。输入包含超过 3 个字符的单调字符序列的密码。此类序列的示例包括 1234fedc

      Password change rejected: Password not changed.
      Unspecified password quality failure while trying to change password.
      Please try again.
      
      Enter new password:
      Enter it again:
    5. 系统通知您输入的密码被拒绝。输入满足 managers 密码策略条件的密码:

      Password change rejected: Password not changed.
      Unspecified password quality failure while trying to change password.
      Please try again.
      
      Enter new password:
      Enter it again:
  5. 验证是否您已获得 TGT,这只有在输入有效密码后才能获得:

    $ klist
    Ticket cache: KCM:0:33945
    Default principal: test_user@IDM.EXAMPLE.COM
    
    Valid starting       Expires              Service principal
    07/07/2021 12:44:44  07/08/2021 12:44:44  krbtgt@IDM.EXAMPLE.COM@IDM.EXAMPLE.COM

其他资源

第 7 章 管理过期密码通知

您可以使用 ipa-client-epn 软件包提供的过期密码通知(EPN)工具来构建一个身份管理(IdM)用户列表,这些用户的密码在配置的时间内即将过期。要安装、配置和使用 EPN 工具,请参阅相关章节。

7.1. 什么是过期的密码通知工具

过期密码通知(EPN)工具是一个独立的工具,可用于构建一个身份管理(IdM)用户列表,这些用户的密码在配置的时间内即将过期。

IdM 管理员可以使用 EPN 进行以下操作:

  • 以 JSON 格式显示受影响的用户的列表,该列表是在dry-run 模式下运行时创建的。
  • 计算在给定日期或日期范围内发送多少封电子邮件.
  • 向用户发送密码过期电子邮件通知.
  • ipa-epn.timer 配置为每天运行 EPN 工具,并向密码在定义的未来日期范围内即将过期的用户发送电子邮件。
  • 自定义要发送给用户的电子邮件通知。
注意

如果用户帐户被禁用,则不会发送电子邮件通知(如果密码即将过期)。

7.2. 安装过期的密码通知工具

按照以下流程安装过期密码通知(EPN)工具。

先决条件

  • 在身份管理(IdM)副本或配置为智能主机的本地 Postfix SMTP 服务器的 IdM 客户端上安装 EPN 工具。

步骤

  • 安装 EPN 工具:

    # dnf install ipa-client-epn

7.3. 运行 EPN 工具,向密码即将过期的用户发送电子邮件

按照以下流程运行过期密码通知(EPN)工具,来向密码即将过期的用户发送电子邮件。

注意

EPN 工具是无状态的。如果 EPN 工具未能向密码即将在给定日期过期的任何用户发送邮件,则 EPN 工具不会保存这些用户的列表。

先决条件

步骤

  1. 更新 epn.conf 配置文件,来为 EPN 工具设置选项,以通知用户密码即将过期。

    # vi /etc/ipa/epn.conf
  2. 根据需要更新 notify_ttls。默认是通知用户其密码将在 28、14、7、3 和 1 天后过期。

    notify_ttls = 28, 14, 7, 3, 1
  3. 配置 SMTP 服务器和端口:

    smtp_server = localhost
    smtp_port = 25
  4. 指定发送电子邮件过期通知的电子邮件地址。任何未成功发送的电子邮件都将返回到此地址。

    mail_from =admin-email@example.com
  5. 保存 /etc/ipa/epn.conf 文件。
  6. 以 dry-run 模式运行 EPN 工具,来生成一个用户列表,如果您不使用 --dry-run 选项来运行工具,则密码过期电子邮件通知将发送给这些用户。

    ipa-epn --dry-run
    [
        {
         "uid": "user5",
         "cn": "user 5",
         "krbpasswordexpiration": "2020-04-17 15:51:53",
         "mail": "['user5@ipa.test']"
        }
    ]
    [
        {
         "uid": "user6",
         "cn": "user 6",
         "krbpasswordexpiration": "2020-12-17 15:51:53",
         "mail": "['user5@ipa.test']"
         }
    ]
    The IPA-EPN command was successful
    注意

    如果返回的用户列表非常大,并且运行工具时没有 --dry-run 选项,这可能会导致您的电子邮件服务器出现问题。

  7. 不使用 --dry-run 选项运行 EPN 工具,来将到期电子邮件发送给当您在 dry-run 模式下运行 EPN 工具时返回的所有用户的列表:

    ipa-epn
    [
      {
         "uid": "user5",
         "cn": "user 5",
         "krbpasswordexpiration": "2020-10-01 15:51:53",
         "mail": "['user5@ipa.test']"
      }
    ]
    [
      {
        "uid": "user6",
        "cn": "user 6",
        "krbpasswordexpiration": "2020-12-17 15:51:53",
        "mail": "['user5@ipa.test']"
      }
    ]
    The IPA-EPN command was successful
  8. 您可以将 EPN 添加到任何监控系统,并使用 --from-nbdays--to-nbdays 选项调用它,以确定在特定时间范围内将有多少个用户的密码即将过期:

    # ipa-epn --from-nbdays 8 --to-nbdays 12
    注意

    如果您使用 --from-nbdays --to-nbdays 选项调用 EPN 工具,它将自动在 dry-run 模式下执行。

验证步骤

  • 运行 EPN 工具,并验证是否已发送电子邮件通知。

其他资源

  • 请参阅 ipa-epn 手册页。
  • 请参阅 epn.conf 手册页。

7.4. 启用 ipa-epn.timer ,向密码即将过期的所有用户发送电子邮件

按照以下流程,使用 ipa-epn.timer 运行过期密码通知(EPN)工具,来向密码即将过期的用户发送电子邮件。ipa-epn.timer 解析 epn.conf 文件,并向在该文件中配置的定义的未来日期范围内密码即将过期的用户发送电子邮件。

先决条件

步骤

  • 启动 ipa-epn.timer:

    systemctl start ipa-epn.timer

启动计时器后,默认情况下 EPN 工具会在每天早晨 1 点运行。

其他资源

  • 请参阅 ipa-epn 手册页。

7.5. 修改过期密码通知电子邮件模板

按照以下流程自定义过期密码通知(EPN)电子邮件消息模板。

先决条件

  • ipa-client-epn 软件包已安装。

步骤

  1. 打开 EPN 消息模板:

    # vi /etc/ipa/epn/expire_msg.template
  2. 根据需要更新模板文本。

    Hi {{ fullname }},
    
    Your password will expire on {{ expiration }}.
    
    Please change it as soon as possible.

    您可以在模板中使用以下变量:

    • 用户 ID:uid
    • 全名:fullname
    • 名字:first
    • 姓氏:last
    • 密码过期日期:过期
  3. 保存消息模板文件。

验证步骤

  • 运行 EPN 工具,并验证电子邮件通知包含更新的文本。

其他资源

  • 请参阅 ipa-epn 手册页。

第 8 章 为 IdM 客户端上的 IdM 用户授予 sudo 访问权限

了解有关授予 sudo 访问身份管理中用户的更多信息。

8.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 命令进行身份验证。

其他资源

8.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_useridm_user 用户未列在本地 /etc/passwd 文件中。

步骤

  1. 获取 Kerberos 票据作为 IdM admin

    [root@idmclient ~]# kinit admin
  2. sudo 命令的 IdM 数据库中添加 /usr/sbin/reboot 命令:

    [root@idmclient ~]# ipa sudocmd-add /usr/sbin/reboot
    -------------------------------------
    Added Sudo Command "/usr/sbin/reboot"
    -------------------------------------
      Sudo Command: /usr/sbin/reboot
  3. 创建名为 idm_user_rebootsudo 规则:

    [root@idmclient ~]# ipa sudorule-add idm_user_reboot
    ---------------------------------
    Added Sudo Rule "idm_user_reboot"
    ---------------------------------
      Rule name: idm_user_reboot
      Enabled: TRUE
  4. 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
    -------------------------
  5. idm_user_reboot 规则应用到 IdM idmclient 主机:

    [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
    -------------------------
  6. 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
    -------------------------
  7. (可选)定义 idm_user_reboot 规则的有效性:

    1. 要定义 sudo 规则开始有效的时间,请使用带有 --setattr sudonotbefore=DATE 选项的 ipa sudorule-mod sudo_rule_name 命令。DATE 值必须遵循 yyyymmddHHMMSSZ 格式,以秒为单位。例如,要将 idm_user_reboot 规则的有效性的开始时间设置为 2025 年 12 月 31 日 12:34:00,请输入:

      [root@idmclient ~]# ipa sudorule-mod idm_user_reboot --setattr sudonotbefore=20251231123400Z
    2. 要定义 sudo 规则不再有效的时间,请使用 --setattr sudonotafter=DATE 选项。例如:要将 idm_user_reboot 规则有效期结束的时间设置为 2026 年 12 月 31 日 12:34:00 12:34:00,请输入:

      [root@idmclient ~]# ipa sudorule-mod idm_user_reboot --setattr sudonotafter=20261231123400Z
注意

将更改从服务器传播到客户端可能需要几分钟时间。

验证步骤

  1. idm_user 帐户身份登录 idmclient 主机。
  2. 显示允许 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
  3. 使用 sudo 重新启动计算机。在提示时输入 idm_user 的密码:

    [idm_user@idmclient ~]$ sudo /usr/sbin/reboot
    [sudo] password for idm_user:

8.3. 使用 CLI 向 IdM 客户端上的 AD 用户授予 sudo 访问权限

身份管理 (IdM) 系统管理员可以使用 IdM 用户组来设置 IdM 用户的访问权限、基于主机的访问控制、sudo 规则和其他控制。IdM 用户组授予和限制 IdM 域资源的访问权限。

您可以将 Active Directory (AD) 用户和 AD 添加到 IdM 用户组。要做到这一点:

  1. 将 AD 用户或组添加到 non-POSIX 外部 IdM 组中。
  2. 将 non-POSIX 外部 IdM 组添加到 IdM POSIX 组。

然后,您可以通过管理 POSIX 组的权限来管理 AD 用户的特权。例如,您可以为特定命令授予特定 IdM 主机上的 IdM POSIX 用户组的 sudo 访问权限。

注意

也可以将 AD 用户组作为成员添加到 IdM 外部组中。这样,通过在单个 AD 域中保留用户和组管理,可以更轻松地为 Windows 用户定义策略。

重要

不要将 AD 用户的 ID 覆盖用于 IdM 中的 SUDO 规则。AD 用户的 ID 覆盖只代表 AD 用户的 POSIX 属性,而不是 AD 用户本身。

您可以作为组成员添加 ID 覆盖。但是,您只能使用此功能管理 IdM API 中的 IdM 资源。可以将 ID 覆盖添加为组群成员没有扩展到 POSIX 环境,因此您无法将其用于 sudo 或基于主机的访问控制 (HBAC) 规则中的成员资格。

按照以下流程创建 ad_users_reboot sudo 规则,来为 administrator@ad-domain.com AD 用户授予在 idmclient IdM 主机上运行 /usr/sbin/reboot 命令的权限,这通常为 root 用户保留。administrator@ad-domain.comad_users_external non-POSIX 组的成员,后者又是 ad_users POSIX 组的成员。

先决条件

  • 您已获得 IdM admin Kerberos 票据授予票 (TGT)。
  • IdM 域和 ad-domain.com AD 域之间存在跨林信任。
  • idmclient 主机上没有本地的 administrator 帐户 :administrator 用户没有列在本地 /etc/passwd 文件中。

流程

  1. 创建 ad_users 组,它包括带有 administrator@ad-domain 成员的 ad_users_external 组:

    1. 可选 :创建或选择 AD 域中的对应组,用来管理 IdM 域中的 AD 用户。您可以使用多个 AD 组,并将它们添加到 IdM 端的不同组中。
    2. 创建 ad_users_external 组,并通过添加 --external 选项来指示它包含 IdM 域外部的成员:

      [root@ipaserver ~]# ipa group-add --desc='AD users external map' ad_users_external --external
      -------------------------------
      Added group "ad_users_external"
      -------------------------------
        Group name: ad_users_external
        Description: AD users external map
      注意

      确保此处指定的外部组是带有 globaluniversal 组范围的 AD 安全组,如 Active Directory 安全组文档中所述。例如,Domain usersDomain admins AD 安全组不能使用,因为组的范围是 domain local

    3. 创建 ad_users 组:

      [root@ipaserver ~]# ipa group-add --desc='AD users' ad_users
      ----------------------
      Added group "ad_users"
      ----------------------
        Group name: ad_users
        Description: AD users
        GID: 129600004
    4. administrator@ad-domain.com AD 用户作为外部成员添加到 ad_users_external 中:

      [root@ipaserver ~]# ipa group-add-member ad_users_external --external "administrator@ad-domain.com"
       [member user]:
       [member group]:
        Group name: ad_users_external
        Description: AD users external map
        External member: S-1-5-21-3655990580-1375374850-1633065477-513
      -------------------------
      Number of members added 1
      -------------------------

      AD 用户必须通过完全限定名称来标识,如 DOMAIN\user_nameuser_name@DOMAIN。AD ID 然后会被映射到用户的 AD SID。这同样适用于添加 AD 组。

    5. ad_users_external 添加到 ad_users 作为成员:

      [root@ipaserver ~]# ipa group-add-member ad_users --groups ad_users_external
        Group name: ad_users
        Description: AD users
        GID: 129600004
        Member groups: ad_users_external
      -------------------------
      Number of members added 1
      -------------------------
  2. 授予 ad_users 成员在 idmclient 主机上运行 /usr/sbin/reboot 的权限 :

    1. sudo 命令的 IdM 数据库中添加 /usr/sbin/reboot 命令:

      [root@idmclient ~]# ipa sudocmd-add /usr/sbin/reboot
      -------------------------------------
      Added Sudo Command "/usr/sbin/reboot"
      -------------------------------------
        Sudo Command: /usr/sbin/reboot
    2. 创建名为 ad_users_rebootsudo 规则:

      [root@idmclient ~]# ipa sudorule-add ad_users_reboot
      ---------------------------------
      Added Sudo Rule "ad_users_reboot"
      ---------------------------------
        Rule name: ad_users_reboot
        Enabled: True
    3. ad_users_reboot 规则中添加 /usr/sbin/reboot 命令:

      [root@idmclient ~]# ipa sudorule-add-allow-command ad_users_reboot --sudocmds '/usr/sbin/reboot'
        Rule name: ad_users_reboot
        Enabled: True
        Sudo Allow Commands: /usr/sbin/reboot
      -------------------------
      Number of members added 1
      -------------------------
    4. ad_users_reboot 规则应用到 IdM idmclient 主机:

      [root@idmclient ~]# ipa sudorule-add-host ad_users_reboot --hosts idmclient.idm.example.com
      Rule name: ad_users_reboot
      Enabled: True
      Hosts: idmclient.idm.example.com
      Sudo Allow Commands: /usr/sbin/reboot
      -------------------------
      Number of members added 1
      -------------------------
    5. ad_users 组添加到 ad_users_reboot 规则中:

      [root@idmclient ~]# ipa sudorule-add-user ad_users_reboot --groups ad_users
      Rule name: ad_users_reboot
      Enabled: TRUE
      User Groups: ad_users
      Hosts: idmclient.idm.example.com
      Sudo Allow Commands: /usr/sbin/reboot
      -------------------------
      Number of members added 1
      -------------------------
注意

将更改从服务器传播到客户端可能需要几分钟时间。

验证步骤

  1. administrator@ad-domain.com 身份登录 idmclient 主机,这是 ad_users 组的间接成员:

    $ ssh administrator@ad-domain.com@ipaclient
    Password:
  2. 另外,还可显示 administrator@ad-domain.com 允许执行的 sudo 命令:

    [administrator@ad-domain.com@idmclient ~]$ sudo -l
    Matching Defaults entries for administrator@ad-domain.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 administrator@ad-domain.com may run the following commands on idmclient:
        (root) /usr/sbin/reboot
  3. 使用 sudo 重新启动计算机。提示时输入 administrator@ad-domain.com 密码:

    [administrator@ad-domain.com@idmclient ~]$ sudo /usr/sbin/reboot
    [sudo] password for administrator@ad-domain.com:

8.4. 使用 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_useridm_user 用户未列在本地 /etc/passwd 文件中。

步骤

  1. sudo 命令的 IdM 数据库中添加 /usr/sbin/reboot 命令:

    1. 导航到 PolicySudoSudo Commands
    2. 单击右上角的 Add,以打开 Add sudo 命令对话框。
    3. 输入您希望用户能够使用 sudo 执行的命令:/usr/sbin/reboot

      图 8.1. 添加 IdM sudo 命令

      标有"Add sudo 命令"的弹出窗口屏幕截图。有一个标记为"Sudo 命令"的必填字段,其内容为 "/usr/sbin/reboot"。"Description"字段为空。窗口的右下角有四个按钮:"Add" - "Add and Add Another" - "Add and Edit" - "Cancel"。
    4. Add
  2. 使用新的 sudo 命令条目创建一个 sudo 规则来允许 idm_user 重启 idmclient 机器:

    1. 导航到 PolicySudoSudo rules
    2. 单击右上角的 Add,以打开 Add sudo 规则对话框。
    3. 输入 sudo 规则的名称: idm_user_reboot
    4. Add and Edit
    5. 指定用户:

      1. Who 部分中,选中指定的用户和组单选按钮
      2. User category the rule applies to 子小节中,点 Add 打开 Add users into sudo rule "idm_user_reboot" 对话框。
      3. Available 栏的 Add users into sudo rule "idm_user_reboot" 对话框中,选择 idm_user,并把它移到 Prospective 栏。
      4. 点击 Add
    6. 指定主机:

      1. Access this host 部分中,选中指定的 Hosts and Groups 单选按钮。
      2. Host category this rule applies to 子小节中,点 Add 打开 Add hosts into sudo rule "idm_user_reboot" 对话框。
      3. Available 列中的 Add hosts to sudo rule "idm_user_reboot" 对话框中,选中 idmclient.idm.example.com 复选框,并将它移到 Prospective 列。
      4. 点击 Add
    7. 指定命令:

      1. Run Commands 一节的 Command category the rule applies to 子小节中,选择 Specified Commands and Groups 单选按钮。
      2. Sudo Allow Commands 子节中,单击 Add 以打开 Add allow sudo commands into sudo rule "idm_user_reboot"对话框。
      3. Available 列中的 Add allow sudo commands into sudo rule "idm_user_reboot" 对话框中,选中 /usr/sbin/reboot 复选框,并将它移到 Prospective 列。
      4. Add 返回到 idm_sudo_reboot 页。

      图 8.2. 添加 IdM sudo 规则

      添加的 sudo 规则概述的屏幕截图。存在一个 "Who" 部分,其中包含适用于该规则的用户表。存在一个 "Access this host" 部分,其中包含该规则应用到的主机表。有一个"运行命令"部分,其中包含与规则相关的命令表。
    8. 单击左上角的 Save

新规则默认为启用。

注意

将更改从服务器传播到客户端可能需要几分钟时间。

验证步骤

  1. idm_user 用户身份登录 idmclient
  2. 使用 sudo 重新启动计算机。在提示时输入 idm_user 的密码:

    $ sudo /usr/sbin/reboot
    [sudo] password for idm_user:

如果正确配置了 sudo 规则,机器将重启。

8.5. 在 CLI 上创建 sudo 规则,以作为 IdM 客户端上的服务帐户运行命令

在 IdM 中,您可以使用 RunAs alias 配置 sudo 规则,以便以另一个用户或组身份运行 sudo 命令。例如,您可能有一个托管数据库应用的 IdM 客户端,您需要以与该应用对应的本地服务帐户运行命令。

使用这个示例在命令行上创建一个名为 run_third-parent-app_reportsudo 规则,以允许 idm_user 帐户以 idmclient 主机上 thirdpartyapp 服务帐户的身份运行 /opt/third-party-app/bin/report 命令。

先决条件

  • 以 IdM 管理员身份登录。
  • 您已在 IdM 中创建 了 idm_user 的用户帐户,并通过为用户创建密码来解锁帐户。有关使用 CLI 添加新 IdM 用户的详情,请参阅使用命令行添加用户
  • idmclient 主机上没有本地的 idm_useridm_user 用户未列在本地 /etc/passwd 文件中。
  • 您已在 idmclient 主机上已安装了一个名为 third-party-app 的自定义应用程序。
  • 用于 third-party-appreport 命令安装在 /opt/third- party-app/bin/report 目录中。
  • 您已创建了一个名为 thirdrdapp 的本地服务帐户,来执行 third-party-app 应用程序的命令。

步骤

  1. 获取 Kerberos 票据作为 IdM admin

    [root@idmclient ~]# kinit admin
  2. /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
  3. 创建一个名为 run_third-party-app_reportsudo 规则:

    [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
  4. 使用 --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 外部,如本地服务帐户或活动目录用户。不要为组名称添加 % 前缀。

  5. /opt/third-party-app/bin/report 命令添加到 run_third-party-app_report 规则中:

    [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
    -------------------------
  6. run_third- party-app_report 规则应用到 IdM idmclient 主机:

    [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
    -------------------------
  7. 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
注意

将更改从服务器传播到客户端可能需要几分钟时间。

验证步骤

  1. idm_user 帐户身份登录 idmclient 主机。
  2. 测试新的 sudo 规则:

    1. 显示允许 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
    2. 作为 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.

8.6. 在 IdM WebUI 中创建一个 sudo 规则,该规则以 IdM 客户端上服务帐户的身份运行命令

在 IdM 中,您可以使用 RunAs alias 配置 sudo 规则,以便以另一个用户或组身份运行 sudo 命令。例如,您可能有一个托管数据库应用的 IdM 客户端,您需要以与该应用对应的本地服务帐户运行命令。

使用这个示例来在 IdM WebUI 中创建一个名为 run_third- party-app_reportsudo 规则,以允许 idm_user 帐户以 idmclient 主机上 thirdpartyapp 服务帐户的身份运行 /opt/third-party-app/bin/report 命令。

先决条件

  • 以 IdM 管理员身份登录。
  • 您已在 IdM 中创建 了 idm_user 的用户帐户,并通过为用户创建密码来解锁帐户。有关使用 CLI 添加新 IdM 用户的详情,请参阅使用命令行添加用户
  • idmclient 主机上没有本地的 idm_useridm_user 用户未列在本地 /etc/passwd 文件中。
  • 您已在 idmclient 主机上已安装了一个名为 third-party-app 的自定义应用程序。
  • 用于 third-party-appreport 命令安装在 /opt/third- party-app/bin/report 目录中。
  • 您已创建了一个名为 thirdrdapp 的本地服务帐户,来执行 third-party-app 应用程序的命令。

步骤

  1. /opt/third-party-app/bin/report 命令添加到 sudo 命令的 IdM 数据库中:

    1. 导航到 PolicySudoSudo Commands
    2. 单击右上角的 Add,以打开 Add sudo 命令对话框。
    3. 输入命令:/opt/third-party-app/bin/report

      标有"Add sudo 命令"的弹出窗口屏幕截图。有一个标为"Sudo command"的必填字段,其内容为"/opt/third-party-app/bin/report"。"Description"字段为空。窗口的右下角有四个按钮:"Add" - "Add and Add Another" - "Add and Edit" - "Cancel"。
    4. Add
  2. 使用新的 sudo 命令条目来创建新的 sudo 规则:

    1. 导航到 PolicySudoSudo rules
    2. 单击右上角的 Add,以打开 Add sudo 规则对话框。
    3. 输入 sudo 规则的名称:run_third-party-app_report

      标记为"Add sudo rule"的弹出窗口的截图。有一个标记为 "Rule name" 的必填字段,其内容为 "run_third-party-app_report"。窗口的右下角有四个按钮:"Add" - "Add and Add Another" - "Add and Edit" - "Cancel"。
    4. Add and Edit
    5. 指定用户:

      1. Who 部分中,选中指定的用户和组单选按钮
      2. User category the rule applies to 子部分中,单击 Add 来打开 将用户添加到 sudo 规则 "run_third-party-app_report" 对话框。
      3. Available 栏的 Add users into sudo rule "run_third-party-app_report" 对话框中,选择 idm_user,并把它移到 Prospective 栏。

        标有"Add users to sudo rule"的弹出窗口的截图。您可以从左侧的 Available 列表中选择用户,并将它们移到右侧的 Prospective 列中。窗口的右下角有两个按钮:"Add" - "Cancel"。
      4. Add
    6. 指定主机:

      1. Access this host 部分中,选中指定的 Hosts and Groups 单选按钮。
      2. Host category this rule applies to 子部分中,单击Add 来打开 将用户添加到 sudo 规则 "run_third-party-app_report" 对话框。
      3. Available 栏的 Add hosts to sudo rule "run_third- party-app_report" 对话框中,选中 idmclient.idm.example.com 复选框,并将它移到 Prospective 列。

        标有"Add hosts to sudo rule"的弹出窗口的截图。您可以从左侧的 Available 列表中选择主机,并将它们移到右侧的 Prospective 列中。窗口的右下角有两个按钮:"Add" - "Cancel"。
      4. Add
    7. 指定命令:

      1. Run Commands 一节的 Command category the rule applies to 子小节中,选择 Specified Commands and Groups 单选按钮。
      2. Sudo Allow Commands 子部分中,单击 Add 来打开 将允许 sudo 命令添加到 sudo 规则 "run_third-party-app_report" 对话框。
      3. Available 栏的 Add allow sudo commands into sudo rule "run_third-party-app_report" 对话框中,选中 /opt/third-party-app/bin/report 并将其移到 Prospective 栏。

        标有"Add allow sudo command in sudo rule"的弹出窗口的截图。您可以从左侧的 Available 列表中选择 sudo 命令,并将它们移到右侧的 Prospective 列中。窗口的右下角有两个按钮:"Add" - "Cancel"。
      4. 单击 Add 以返回到 run_third-party-app_report 页。
    8. 指定 RunAs 用户:

      1. As Whom 部分中,选中 Specified Users and Groups 单选按钮。
      2. RunAs Users 子部分中,单击 Add 以将 Add RunAs 用户打开 sudo 规则 "run_third-party-app_report" 对话框。
      3. Add RunAs users in sudo rule "run_third-party-app_report" 对话框中,在 External 框中输入 thirdpartyapp 服务帐户,并将它移到 Prospective 列中。

        对话框的截图,您可以在其中将"thirdpartyapp"服务帐户指定为外部用户。
      4. 单击 Add 以返回到 run_third-party-app_report 页。
    9. 单击左上角的 Save

新规则默认为启用。

图 8.3. sudo 规则的详细信息

添加的 sudo 规则概述的屏幕截图。"Who"部分有一个"idm_user"的条目。"Access this host"部分有"idmclient.idm.example.com"。"Run Commands"部分有"/opt/third-party-app/bin/report"命令。"As Whom"部分列出了"thirdpartyapp"帐户。
注意

将更改从服务器传播到客户端可能需要几分钟时间。

验证步骤

  1. idm_user 帐户身份登录 idmclient 主机。
  2. 测试新的 sudo 规则:

    1. 显示允许 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
    2. 作为 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.

8.7. 在 IdM 客户端上为 sudo 启用 GSSAPI 身份验证

以下流程描述了通过 pam_sss_gss.so PAM 模块在 IdM 客户端上为 sudosudo -i 命令启用通用安全服务应用程序接口(GSSAPI)身份验证。有了这个配置,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 文件。

步骤

  1. 打开 /etc/sssd/sssd.conf 配置文件:
  2. 将以下条目添加到 [domain/<domain_name>] 部分中。

    [domain/<domain_name>]
    pam_gssapi_services = sudo, sudo-i
  3. 保存并关闭 /etc/sssd/sssd.conf 文件。
  4. 重启 SSSD 服务以载入配置更改。

    [root@idmclient ~]# systemctl restart sssd
  5. 如果您正在运行 RHEL 9.2 或更高版本:

    1. [可选] 确定您是否选择了 sssd authselect 配置文件:

      # authselect current
      Profile ID: sssd

      输出显示选择了 sssd authselect 配置文件。

    2. 如果选择了 sssd authselect 配置文件,请启用 GSSAPI 身份验证:

      # authselect enable-feature with-gssapi
    3. 如果没有选择 sssd authselect 配置文件,请选择它并启用 GSSAPI 身份验证:

      # authselect select sssd with-gssapi
  6. 如果您正在运行 RHEL 9.1 或更早版本:

    1. 打开 /etc/pam.d/sudo PAM 配置文件。
    2. 添加下列条目,来作为 /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
    3. 保存并关闭 /etc/pam.d/sudo 文件。

验证步骤

  1. idm_user 帐户的身份登录主机。

    [root@idm-client ~]# ssh -l idm_user@idm.example.com localhost
    idm_user@idm.example.com's password:
  2. 验证您作为 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
  3. (可选) 如果您没有 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:
  4. 使用 sudo 而不指定密码来重新启动机器。

    [idm_user@idmclient ~]$ sudo /usr/sbin/reboot

8.8. 在 IdM 客户端上启用 GSSAPI 身份验证,并为 sudo 强制使用 Kerberos 身份验证指示符

以下流程描述了通过 pam_sss_gss.so PAM 模块在 IdM 客户端上为 sudosudo -i 命令启用通用安全服务应用程序接口(GSSAPI)身份验证。此外,只有使用智能卡登录的用户才能使用 Kerberos 票据对这些命令进行身份验证。

注意

您可以将此流程用作模板,来其他 PAM 感知服务配置 带有 SSSD 的 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 文件。

步骤

  1. 打开 /etc/sssd/sssd.conf 配置文件:
  2. 将以下条目添加到 [domain/<domain_name>] 部分中。

    [domain/<domain_name>]
    pam_gssapi_services = sudo, sudo-i
    pam_gssapi_indicators_map = sudo:pkinit, sudo-i:pkinit
  3. 保存并关闭 /etc/sssd/sssd.conf 文件。
  4. 重启 SSSD 服务以载入配置更改。

    [root@idmclient ~]# systemctl restart sssd
  5. 打开 /etc/pam.d/sudo PAM 配置文件。
  6. 添加下列条目,来作为 /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
  7. 保存并关闭 /etc/pam.d/sudo 文件。
  8. 打开 /etc/pam.d/sudo-i PAM 配置文件。
  9. 添加下列条目,来作为 /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
  10. 保存并关闭 /etc/pam.d/sudo-i 文件。

验证步骤

  1. idm_user 帐户身份登录到主机,并使用智能卡进行身份验证。

    [root@idmclient ~]# ssh -l idm_user@idm.example.com localhost
    PIN for smart_card
  2. 验证您是否有一个智能卡用户的票据授予票据。

    [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
  3. 显示允许 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
  4. 使用 sudo 而不指定密码来重新启动机器。

    [idm_user@idmclient ~]$ sudo /usr/sbin/reboot

8.9. 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 凭证匹配。如果为 falsepam_ss_gss.so PAM 模块将验证能够获取所需服务票据的每个用户。

示例

以下选项为 sudosudo-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
  • sudosudo -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
...

8.10. sudo 的 GSSAPI 身份验证故障排除

如果您无法使用 IdM 的 Kerberos 票据对 sudo 服务进行身份验证,请使用以下场景来对您的配置进行故障排除。

先决条件

步骤

  • 如果您看到以下错误,则 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 文件中的所有 pam_sss_gss.so 条目的末尾添加 debug 选项,如 /etc/pam.d/sudo/etc/pam.d/sudo-i

      [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

8.11. 使用 Ansible playbook 来确保 IdM 客户端上 IdM 用户的 sudo 访问权限

在身份管理(IdM)中,您可以确保对特定命令的sudo 访问权限被授予给特定 IdM 主机上的 IdM 用户帐户。

完成此流程以确保名为 idm_user_rebootsudo 规则存在。该规则授予 idm_useridmclient 机器上运行 /usr/sbin/reboot 命令的权限。

先决条件

  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。
  • 您已 确保 IdM 中存在 idm_user 用户帐户,并通过为用户创建密码解锁了帐户。有关使用命令行界面添加新 IdM 用户的详情,请参考链接:使用命令行添加用户
  • idmclient 中没有本地 idm_user 帐户。idm_user 用户未列在 idmclient 上的 /etc/passwd 文件中。

步骤

  1. 创建一个清单文件,如 inventory.file,并在其中定义 ipaservers

    [ipaservers]
    server.idm.example.com
  2. 添加一个或多个 sudo 命令:

    1. 创建一个 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
      
        vars_files:
        - /home/user_name/MyPlaybooks/secret.yml
        tasks:
        # Ensure sudo command is present
        - ipasudocmd:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: /usr/sbin/reboot
            state: present
    2. 运行 playbook:

      $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-reboot-sudocmd-is-present.yml
  3. 创建引用命令的 sudo 规则:

    1. 创建一个 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
      
        vars_files:
        - /home/user_name/MyPlaybooks/secret.yml
        tasks:
        # Ensure a sudorule is present granting idm_user the permission to run /usr/sbin/reboot on idmclient
        - ipasudorule:
            ipaadmin_password: "{{ ipaadmin_password }}"
            name: idm_user_reboot
            description: A test sudo rule.
            allow_sudocmd: /usr/sbin/reboot
            host: idmclient.idm.example.com
            user: idm_user
            state: present
    2. 运行 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 上正常工作。请注意,服务器上所做的更改可能需要几分钟才能在客户端上生效。

  1. idm_user 用户身份登录到 idmclient
  2. 使用 sudo 重新启动计算机。在提示时输入 idm_user 的密码:

    $ sudo /usr/sbin/reboot
    [sudo] password for idm_user:

如果正确配置了 sudo,则机器将重新启动。

其他资源

  • 请参阅 /usr/share/doc/ansible-freeipa/ 目录中的 README-sudocmd.md ,README-sudocmdgroup.mdREADME-sudorule.md 文件。

第 9 章 使用 ldapmodify 在外部管理 IdM 用户

作为 IdM 管理员,您可以使用 ipa 命令管理您的目录内容。另外,您可以使用 ldapmodify 命令来实现类似的目标。您可以以交互方式使用这个命令,并直接在命令行中提供所有数据。您也可以在使用 LDAP 数据交换格式 (LDIF) 的文件中为 ldapmodify 命令提供数据。

9.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

9.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

9.3. 以互动方式使用 ldapmodify 命令

您可以在交互模式中修改轻量级目录访问协议 (LDAP) 条目。

流程

  1. 在命令行中,在 ldapmodify 命令后输入 LDAP Data Interchange Format (LDIF) 语句。

    例 9.1. 更改 testuser 的电话号码

    # ldapmodify -Y GSSAPI -H ldap://server.example.com
    dn: uid=testuser,cn=users,cn=accounts,dc=example,dc=com
    changetype: modify
    replace: telephoneNumber
    telephonenumber: 88888888

    请注意,您需要使用 -Y 选项获取 Kerberos ticket。

  2. Ctlr+D 退出交互模式。
  3. 或者,在 ldapmodify 命令后提供 LDIF 文件:

    例 9.2. ldapmodify 命令从 LDIF 文件中读取修改数据

    # ldapmodify -Y GSSAPI -H ldap://server.example.com -f ~/example.ldif

其他资源

  • 有关如何使用 ldapmodify 命令的更多信息,请参阅 ldapmodify(1) 手册页。
  • 有关 LDIF 结构的更多信息,请参阅 ldif (5) 手册页。

9.4. 使用 ldapmodify 保留 IdM 用户

按照以下流程,使用 ldapmodify 来保留 IdM 用户;即,如何在员工离开公司后停用用户帐户。

先决条件

  • 您可以作为具有角色的 IdM 用户进行身份验证,来保留用户。

步骤

  1. 以具有角色的 IdM 用户身份登录,来保留用户:

    $ kinit admin
  2. 输入 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.
  3. 输入您要保留的用户的 dn

    dn: uid=user1,cn=users,cn=accounts,dc=idm,dc=example,dc=com
  4. 输入 modrdn 作为您要执行的更改的类型:

    changetype: modrdn
  5. 为用户指定 newrdn

    newrdn: uid=user1
  6. 表示您要保留用户:

    deleteoldrdn: 0
  7. 指定 新的高级 DN:

    newsuperior: cn=deleted users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com

    保存用户会将条目移到目录信息树(DIT)中的新位置。因此,您必须将新父条目的 DN 指定为新的高级 DN。

  8. 再次按 Enter 键确认输入结束:

    [Enter]
    
    modifying rdn of entry "uid=user1,cn=users,cn=accounts,dc=idm,dc=example,dc=com"
  9. 使用 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
    ----------------------------

第 10 章 使用 ldapsearch 命令搜索 IdM 条目

您可以使用 ipa find 命令通过 Identity Management 条目进行搜索。有关 ipa 命令的更多信息,请参阅 IPA 命令的结构 部分。

本节介绍了通过 Identity Management 条目使用 ldapsearch 命令行命令的替代搜索选项的基础知识。

10.1. 使用 ldapsearch 命令

ldapsearch 命令具有以下格式:

# ldapsearch [-x | -Y mechanism] [options] [search_filter] [list_of_attributes]
  • 要配置身份验证方法,请指定 -x 选项以使用简单绑定或 -Y 选项来设置简单验证和安全层 (SASL) 机制。请注意,如果您使用 -Y GSSAPI 选项,则需要获取 Kerberos ticket。
  • optionsldapsearch 命令的选项,它包括在下表中。
  • search_filter 是一个 LDAP 搜索过滤器。
  • list_of_attributes 是搜索结果返回的属性列表。

例如,要为用户名 user01 搜索基本 LDAP 树的所有条目:

# ldapsearch -x -H ldap://ldap.example.com -s sub "(uid=user01)"
  • x 选项告知 ldapsearch 命令通过简单绑定进行身份验证。请注意,如果您没有使用 -D 选项提供可辨识名称 (DN),则身份验证是匿名的。
  • -H 选项将您连接到 ldap://ldap.example.com
  • -s sub 选项告知 ldapsearch 命令从基本 DN 开始搜索所有名为 user01 的用户。"(uid=user01)" 是一个过滤器。

请注意,如果没有通过 -b 选项提供搜索的起点,则命令会在默认树中搜索。它在 etc/openldap/ldap.conf 文件的 BASE 参数中指定。

表 10.1. ldapsearch 命令选项

选项描述

-b

搜索的起点。如果您的搜索参数包含星号 (*) 或其他字符,命令行可以解释为代码,则必须以单引号或双引号括起该值。例如,-b cn=user,ou=Product Development,dc=example,dc=com

-D

要进行身份验证的可辨识名称 (DN)。

-H

连接到服务器的 LDAP URL。-H 选项替换了 -h-p 选项。

-l

等待搜索请求完成的时间限制(以秒为单位)。

-s scope

搜索的范围。对于范围,您可以选择以下之一:

  • base 仅搜索来自 -b 选项,或者由 LDAP_BASEDN 环境变量定义的条目。
  • one 仅搜索来自 -b 选项的条目的子条目。
  • sub 以 -b 选项作为开始点进行的子树搜索。

-W

对密码的请求。

-x

禁用默认 SASL 连接以允许简单的绑定。

-Y SASL_mechanism

为身份验证设置 SASL 机制。

-z number

搜索结果中的最大条目数。

请注意,您必须使用 ldapsearch 命令通过 -x-Y 选项指定一个验证机制。

其他资源

  • 有关如何使用 ldapsearch 的详情,请参考 ldapsearch (1) man page。

10.2. 使用 ldapsearch 过滤器

ldapsearch 过滤器允许您缩小搜索结果范围。

例如,您希望搜索结果包含将通用名称设置为 example 的所有条目:

"(cn=example)"

在本例中,等号(=) 是操作符,example 是值。

表 10.2. ldapsearch 过滤器操作符

搜索类型操作符描述

相等

=

返回与值完全匹配的条目。例如: cn=example

子字符串

=string* string

返回所有带有子字符串匹配的条目。例如,cn=exa*l。星号 (*) 表示零 (0) 或多个字符。

大于或等于

>=

返回所有带有大于或等于值的属性的条目。例如,uidNumber >= 5000

小于或等于

<=

返回所有其属性小于或等于值的条目。例如,uidNumber <= 5000

存在

=*

返回含有一个或多个属性的所有条目。例如:cn=*

大约

~=

返回与值属性类似的所有选项。例如,l~=san fransico 可以返回 l=san francisco

您可以使用 boolean 运算符将多个过滤器组合到 ldapsearch 命令中。

表 10.3. ldapsearch 过滤器布尔值操作符

搜索类型操作符描述

&

返回过滤器中的所有语句都为 true 的所有条目。例如,(&(filter)(filter)(filter)…​)

|

返回过滤器中至少有一个语句为 true 的所有条目。例如,(|(filter)(filter)(filter)…​)

!

返回过滤器中声明不为 true 的所有条目。例如,(!(filter)).

第 11 章 为用户的外部调配配置 IdM

作为系统管理员,您可以配置身份管理(IdM),来通过管理身份的外部解决方案支持用户的调配。

外部调配系统的管理员不必使用 ipa 工具,而是使用 ldapmodify 工具来访问 IdM LDAP。管理员可以 使用 ldapmodify 的 CLI使用 LDIF 文件添加单个 stage 用户。

假设您作为 IdM 管理员完全信任外部调配系统,来仅添加经过验证的用户。但是,您不想为外部调配系统的管理员分配 用户管理员 的 IdM 角色,以便他们能够直接添加新的活动用户。

您可以 配置一个脚本,来自动将外部调配系统创建的 stage 用户移到活动用户。

本章包含以下章节:

  1. 准备身份管理(IdM) 来使用外部调配系统向 IdM 添加 stage 用户。
  2. 创建一个脚本,来将外部调配系统添加的用户从stage 移到活动用户。
  3. 使用外部调配系统添加 IdM stage 用户。您可以通过两种方式进行此操作:

11.1. 为 stage 用户帐户的自动激活准备 IdM 帐户

此流程演示了如何配置供外部调配系统使用的两个 IdM 用户帐户。通过使用合适的密码策略将帐户添加到组中,您可以使外部调配系统来管理 IdM 中的用户调配。在以下部分中,外部系统用来添加 stage 用户的用户帐户命名为 provisionator。用来自动激活 stage 用户的用户帐户命名为 activator

先决条件

  • 您在其上执行该步骤的主机已注册到 IdM 中。

步骤

  1. 以 IdM 管理员身份登录:

    $ kinit admin
  2. 创建名为 provisionator 的用户,其具有用于添加 stage 用户的特权。

    1. 添加 provisionator 用户帐户:
    $ ipa user-add provisionator --first=provisioning --last=account --password
    1. 为 provisionator 用户授予所需的特权。

      1. 创建一个自定义角色 System Provisioning ,来管理添加 stage 用户:

        $ ipa role-add --desc "Responsible for provisioning stage users" "System Provisioning"
      2. Stage User Provisioning 特权添加到该角色。这个特权提供了添加 stage 用户的能力:

        $ ipa role-add-privilege "System Provisioning" --privileges="Stage User Provisioning"
      3. 将 provisionator 用户添加到角色中:

        $ ipa role-add-member --users=provisionator "System Provisioning"
      4. 验证 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
        [...]
  3. 创建用户 activator,其具有管理用户帐户的特权。

    1. 添加 activator 用户帐户:

      $ ipa user-add activator --first=activation --last=account --password
    2. 通过将用户添加到默认的 User Administrator 角色来授予 activator 用户所需的特权:

      $ ipa role-add-member --users=activator "User Administrator"
  4. 为应用程序帐户创建用户组:

    $ ipa group-add application-accounts
  5. 更新组的密码策略。以下策略可防止帐户的密码过期和锁住,但通过要求复杂的密码来弥补潜在的风险:

    $ ipa pwpolicy-add application-accounts --maxlife=10000 --minlife=0 --history=0 --minclasses=4 --minlength=8 --priority=1 --maxfail=0 --failinterval=1 --lockouttime=0
  6. (可选)验证密码策略是否在 IdM 中存在:

    $ ipa pwpolicy-show application-accounts
      Group: application-accounts
      Max lifetime (days): 10000
      Min lifetime (hours): 0
      History size: 0
    [...]
  7. 将调配和激活帐户添加到应用程序帐户的组中:

    $ ipa group-add-member application-accounts --users={provisionator,activator}
  8. 更改用户帐户的密码:

    $ kpasswd provisionator
    $ kpasswd activator

    更改密码是必需的,因为新的 IdM 用户密码会立即过期。

其他资源:

11.2. 配置 IdM stage用户帐户的自动激活

此流程演示了如何为激活 stage 用户创建脚本。系统在指定的时间间隔自动运行脚本。这样可确保新用户帐户被自动激活,并在创建后很快可用。

重要

该流程假定外部调配系统的所有者已经验证了用户,并且在脚本将它们添加到 IdM 之前,它们不需要在 IdM 端进行额外的验证。

这对于仅在一个 IdM 服务器上启用激活过程足够了。

先决条件

步骤

  1. 为激活帐户生成 keytab 文件:

    # ipa-getkeytab -s server.idm.example.com -p "activator" -k /etc/krb5.ipa-activation.keytab

    如果您要在多个 IdM 服务器上启用激活过程,请仅在一个服务器上生成 keytab 文件。然后,将 keytab 文件复制到其他服务器上。

  2. 创建一个包含以下内容的 /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
  3. 编辑 ipa-activate-all 脚本的权限和所有权来使其可执行:

    # chmod 755 /usr/local/sbin/ipa-activate-all
    # chown root:root /usr/local/sbin/ipa-activate-all
  4. 创建一个 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
  5. 创建一个 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
  6. 重新载入新配置:

    # systemctl daemon-reload
  7. 启用 ipa-activate-all.timer:

    # systemctl enable ipa-activate-all.timer
  8. 启动 ipa-activate-all.timer:

    # systemctl start ipa-activate-all.timer
  9. (可选)验证 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.

11.3. 添加 LDIF 文件中定义的 IdM stage 用户

按照以下流程访问 IdM LDAP 并使用 LDIF 文件添加 stage 用户。虽然下例中演示了添加一个单独的用户,但可以以批量模式在一个文件中添加多个用户。

先决条件

  • IdM 管理员已为其创建了 provisionator 帐户及密码。详情请参阅 为 stage 用户帐户的自动激活准备 IdM 帐户
  • 作为外部管理员,您知道 provisionator 帐户的密码。
  • 您可以从 LDAP 服务器通过 SSH 连接到 IdM 服务器。
  • 您可以提供 IdM stage 用户必须有的最小的属性集来允许正确处理用户生命周期,即:

    • 可区分的名称 (dn)
    • 通用名称 (cn)
    • 姓氏 (sn)
    • uid

步骤

  1. 在外部服务器上,创建一个包含有关新用户信息的 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
  2. 将 LDIF 文件从外部服务器传到 IdM 服务器:

    $ scp add-stageidmuser.ldif provisionator@server.idm.example.com:/provisionator/
    Password:
    add-stageidmuser.ldif                                                                                          100%  364   217.6KB/s   00:00
  3. 使用 SSH 协议,以 provisionator 身份连接到 IdM 服务器:

    $ ssh provisionator@server.idm.example.com
    Password:
    [provisionator@server ~]$
  4. 在 IdM 服务器上,获取 provisionator 帐户的 Kerberos 票据授予票(TGT):

    [provisionator@server ~]$ kinit provisionator
  5. 输入 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"

11.4. 使用 ldapmodify 直接从 CLI 添加 IdM stage 用户

按照以下流程访问身份管理(IdM) LDAP,并使用 ldapmodify 工具添加 stage 用户。

先决条件

  • IdM 管理员已为其创建了 provisionator 帐户和密码。详情请参阅 为 stage 用户帐户的自动激活准备 IdM 帐户
  • 作为外部管理员,您知道 provisionator 帐户的密码。
  • 您可以从 LDAP 服务器通过 SSH 连接到 IdM 服务器。
  • 您可以提供 IdM stage 用户必须有的最小的属性集来允许正确处理用户生命周期,即:

    • 可区分的名称 (dn)
    • 通用名称 (cn)
    • 姓氏 (sn)
    • uid

步骤

  1. 使用您的 IdM 身份和凭证,通过 SSH 协议连接到 IdM 服务器:

    $ ssh provisionator@server.idm.example.com
    Password:
    [provisionator@server ~]$
  2. 获取 provisionator 帐户的 TGT,这是具有添加新 stage 用户角色的 IdM 用户:

    $ kinit provisionator
  3. 输入 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.
  4. 输入您要添加的用户的 dn

    dn: uid=stageuser,cn=staged users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com
  5. 输入 add 作为您要执行的更改的类型:

    changetype: add
  6. 指定允许正确处理用户生命周期所需的 LDAP 对象类类别:

    objectClass: top
    objectClass: inetorgperson

    您可以指定其他对象类。

  7. 输入用户的 uid

    uid: stageuser
  8. 输入用户的 cn:

    cn: Babs Jensen
  9. 输入用户的姓氏:

    sn: Jensen
  10. 再次按 Enter 键确认输入结束:

    [Enter]
    
    adding new entry "uid=stageuser,cn=staged users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com"
  11. 使用 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
    1. 请注意,通过 saccountlock 属性,用户被显式禁用了。

11.5. 其他资源

第 12 章 为用户、主机和服务管理 Kerberos 主体别名

当您创建新用户、主机或服务时,会自动添加以下格式的 Kerberos 主体:

  • user_name@REALM
  • host/host_name@REALM
  • service_name/host_name@REALM

管理员可以让用户、主机或服务使用别名对 Kerberos 应用进行身份验证。这在以下情况下很有用:

  • 用户名已更改,用户希望使用之前的用户名和新用户名登录。
  • 即使 IdM Kerberos 域与电子邮件域不同,用户也需要使用电子邮件地址登录。

请注意,如果您重命名了用户,对象会保留别名和之前的规范主体名称。

12.1. 添加一个 Kerberos 主体别名

您可以在身份管理(IdM)环境中将别名名称与现有 Kerberos 主体关联。这增强了安全性,并简化了 IdM 域中的身份验证过程。

流程

  • 要将别名名称 useralias 添加到帐户 user 中,请输入:

    # ipa user-add-principal <user> <useralias>
    --------------------------------
    Added new aliases to user "user"
    --------------------------------
             User login: user
        Principal alias: user@IDM.EXAMPLE.COM, useralias@IDM.EXAMPLE.COM

    要为主机或服务添加一个别名,请分别使用 ipa host-add-principalipa service-add-principal 命令。

    如果您使用别名名称进行身份验证,请使用 kinit 命令的 -C 选项:

    # kinit -C <useralias>
    Password for <user>@IDM.EXAMPLE.COM:

12.2. 删除一个 Kerberos 主体别名

您可以在其身份管理(IdM)环境中删除与 Kerberos 主体关联的别名名称。

流程

  • 要从帐户 user 中删除别名 useralias,请输入:

    # ipa user-remove-principal <user> <useralias>
    --------------------------------
    Removed aliases from user "user"
    --------------------------------
      User login: user
      Principal alias: user@IDM.EXAMPLE.COM

    要从主机或服务中删除一个别名,请分别使用 ipa host-remove-principalipa service-remove-principal 命令。

    请注意,您无法删除规范主体名称:

    # ipa user-show <user>
      User login: user
      ...
      Principal name: user@IDM.EXAMPLE.COM
      ...
    
    # ipa user-remove-principal user user
    ipa: ERROR: invalid 'krbprincipalname': at least one value equal to the canonical principal name must be present

12.3. 添加一个 Kerberos 企业主体别名

您可以在身份管理(IdM)环境中将企业级别名名称与现有 Kerberos 企业主体关联。企业主体别名可以使用任何域后缀,但用户主体名称(UPN)后缀、NetBIOS 名称或可信活动目录林域的域名除外。

注意

在添加或删除企业级别名时,请使用两个反斜杠(\\)转义 @ 符号。否则,shell 将 @ 符号解释为 Kerberos 域名称的一部分,并导致以下错误:

ipa: ERROR: The realm for the principal does not match the realm for this IPA server

流程

  • 将企业主体别名 user@example.com 添加到 user 帐户中:

    # ipa user-add-principal <user> <user\\@example.com>
    --------------------------------
    Added new aliases to user "user"
    --------------------------------
             User login: user
        Principal alias: user@IDM.EXAMPLE.COM, user\@example.com@IDM.EXAMPLE.COM

    要向主机或服务添加一个企业别名,请分别使用 ipa host-add-principalipa service-add-principal 命令。

    如果您使用企业主体名称进行身份验证,请使用 kinit 命令的 -E 选项:

    # kinit -E <user@example.com>
    Password for user\@example.com@IDM.EXAMPLE.COM:

12.4. 删除 Kerberos 企业主体别名

您可以在其身份管理(IdM)环境中删除与 Kerberos 企业主体关联的企业别名名称。

注意

在添加或删除企业级别名时,请使用两个反斜杠(\\)转义 @ 符号。否则,shell 将 @ 符号解释为 Kerberos 域名称的一部分,并导致以下错误:

ipa: ERROR: The realm for the principal does not match the realm for this IPA server

流程

  • 要从帐户 user 中删除企业主体别名 user@example.com,请输入:

    # ipa user-remove-principal <user> <user\\@example.com>
    --------------------------------
    Removed aliases from user "user"
    --------------------------------
      User login: user
      Principal alias: user@IDM.EXAMPLE.COM

    要从主机或服务中删除一个别名,请分别使用 ipa host-remove-principalipa service-remove-principal 命令。

第 13 章 使用 PAC 信息增强 Kerberos 安全性

从 RHEL 8.5 开始,您默认可以使用带有 Privilege Attribute 证书(PAC)信息的身份管理(IdM)。另外,您可以在 RHEL 8.5 之前安装的 IdM 部署中启用安全标识符 (SID)。

13.1. IdM 中使用特权属性证书 (PAC)

为提高安全性,RHEL Identity Management (IdM) 现在在新部署中默认发出带有 Privilege Attribute 证书 (PAC) 信息的 Kerberos 票据。PAC 包含有关 Kerberos 主体的丰富信息,包括其安全标识符 (SID)、组成员资格和主目录信息。

默认情况下,Microsoft Active Directory (AD)使用的 SID 是从不重复使用的全局唯一标识符。SID 表达多个命名空间:每个域都有一个 SID,它是每个对象的 SID 中的前缀。

从 RHEL 8.5 开始,当安装 IdM 服务器或副本时,安装脚本默认为用户和组生成 SID。这允许 IdM 使用 PAC 数据。如果您在 RHEL 8.5 之前安装了 IdM,且您尚未配置 AD 域的信任,您可能没有为 IdM 对象生成 SID。有关为您的 IdM 对象生成 SID 的更多信息,请参阅 IdM 中启用安全标识符 (SID)

通过在 Kerberos 票据中评估 PAC 信息,您可以使用更详细的信息来控制资源访问。例如,一个域中的 Administrator 帐户的 SID 与任何其他域中的 Administrator 帐户不同。在对 AD 域的带有信任的 IdM 环境中,您可以根据全局唯一的 SID 设置访问控制,而不是在不同位置中重复的简单用户名或 UID,如每个 Linux root 帐户都有 UID 0。

13.2. 在 IdM 中启用安全标识符 (SID)

如果您在 RHEL 8.5 之前安装了 IdM,且您还没有配置 AD 域的信任,您可能没有为 IdM 对象生成安全标识符(SID)。这是因为之前,生成 SID 的唯一方法是运行 ipa-adtrust-install 命令将 Trust Controller 角色添加到 IdM 服务器。

从 RHEL 8.6 开始,IdM 中的 Kerberos 要求您的 IdM 对象具有 SID,这对基于 Privilege Access 证书 (PAC) 信息的安全性是必需的。

先决条件

  • 在 RHEL 8.5 之前已安装了 IdM。
  • 还没有运行 ipa-sidgen 任务,它是使用 Active Directory 域配置信任的一部分。
  • 您可以作为 IdM admin 帐户进行身份验证。

流程

  • 启用 SID 使用并触发 SIDgen 任务,以便为现有的用户和组生成 SID。此任务可能是资源密集型:

    [root@server ~]# ipa config-mod --enable-sid --add-sids

验证

  • 验证 IdM admin 用户帐户条目是否具有 ipantsecurityidentifier 属性,其具有以 -500 结尾的 SID,为域管理员保留 SID:

    [root@server ~]# ipa user-show admin --all | grep ipantsecurityidentifier
      ipantsecurityidentifier: S-1-5-21-2633809701-976279387-419745629-500

第 14 章 管理 Kerberos 票据策略

身份管理(IdM)中的 Kerberos 票据策略对 Kerberos 票据访问、持续时间和续订设置了限制。您可以为运行在 IdM 服务器上的密钥分发中心(KDC)配置 Kerberos 票据策略。

管理 Kerberos 票据策略时会执行以下概念和操作:

14.1. IdM KDC 的角色

身份管理的身份验证机制使用由密钥分发中心(KDC)建立的 Kerberos 基础设施。KDC 是可信赖的权威,其存储凭证信息,并确保来自 IdM 网络内实体的数据的真实性。

每个 IdM 用户、服务和主机都充当 Kerberos 客户端,由唯一的 Kerberos 主体 识别:

  • 对于用户:identifier@REALM,如 admin@EXAMPLE.COM
  • 对于服务:service/fully-qualified-hostname@REALM,如 http/server.example.com@EXAMPLE.COM
  • 对于主机: host/fully-qualified-hostname@REALM,如 host/client.example.com@EXAMPLE.COM

下图是 Kerberos 客户端、KDC 以及客户端希望与之通信的 Kerberos 应用之间通信的简化。

Kerberos KDC 通信流
  1. Kerberos 客户端通过作为 Kerberos 主体进行身份验证来向 KDC 识别自己。例如,IdM 用户执行 kinit username ,并提供其密码。
  2. KDC 会检查数据库中的主体,验证客户端,并评估 Kerberos 票据策略 来确定是否授予请求。
  3. KDC 根据适当的票据策略,签发一个具有生命周期和 验证指标 的客户端票据授予票(TGT)。
  4. 使用 TGT 时,客户端从 KDC 请求 服务票据,以便与目标主机上的 Kerberos 服务通信。
  5. KDC 检查客户端的 TGT 是否仍然有效,并根据票据策略评估服务票据请求。
  6. KDC 向客户端发出 服务票据
  7. 通过服务票据,客户端可以在目标主机上启动与服务的 加密通信。

14.2. IdM Kerberos 票据策略类型

IdM Kerberos 票据策略实现以下票据策略类型:

连接策略

要保护具有不同安全级别的 Kerberos 服务,您可以定义连接策略来强制执行规则,客户端基于这些规则来检索票据授予票(TGT)。

例如,您可以要求智能卡验证来连接到 client1.example.com,并且需要双因素身份验证来访问 client2.example.com 上的 testservice 应用。

要强制执行连接策略,请将 身份验证指标 与服务相关联。只有在服务票据请求中有所需的验证指标的客户端才能访问这些服务。如需更多信息,请参阅 Kerberos 身份验证指标

票据生命周期策略

每个 Kerberos 票据都有一个 生命周期 和一个潜在的 续订期限 :您可以在达到最长生命周期前续订票据,但不能在超过其最长续订期限之后续订票据。

默认的全局票据生命周期为一天(86400 秒),默认的全局最长续订期限为 1 周(604800 秒)。要调整这些全局值,请参阅 配置全局票据生命周期策略

您还可以自行定义您自己的票据生命周期策略:

14.3. Kerberos 认证指示符

Kerberos 密钥分发中心(KDC)根据客户端使用哪个预身份验证机制来证明其身份,来将 身份验证指标 附加到票据授予票(TGT):

otp
双因素身份验证(密码 + 一次性密码)
radius
RADIUS 身份验证(通常用于 802.1x 身份验证)
pkinit
PKINIT、智能卡或证书验证
hardened
强化的密码(SPAKE 或 FAST)[1]

然后 KDC 将来自 TGT 的身份验证指标附加到来自它的任何服务票据请求。KDC 强制执行基于验证指标的策略,如服务访问控制、最长票据生命周期和最长续订期限。

身份验证指标和 IdM 服务

如果您将服务或主机与身份验证指标相关联,则只有使用相应身份验证机制获取 TGT 的客户端才能访问它。KDC (不是应用程序或服务),检查服务票证请求中的身份验证指标,并根据 Kerberos 连接策略授予或拒绝请求。

例如,要要求双因素身份验证连接到虚拟专用网络(VPN),请将 otp 身份验证指标与该服务相关联。只有使用一次性密码从 KDC 获取初始 TGT 的用户才能登录到 VPN:

图 14.1. 需要 otp 验证指示符的 VPN 服务示例

auth 指示符

如果服务或主机没有给其分配的身份验证指标,它将接受任何机制验证的票据。



[1] 通过使用单方公钥认证的密钥交换(SPAKE)预认证和/或通过安全隧道(FAST)保护的验证,可保护强化的密码免于暴力密码字典攻击。

14.4. 为 IdM 服务强制执行身份验证指标

身份验证(IdM)支持的验证机制在身份验证强度方面存在差异。例如,使用一次性密码(OTP)与标准密码(OTP)的结合来获取初始 Kerberos 票据授予票(TGT)被视为比仅使用标准密码进行身份验证更加安全。

通过将身份验证指示符与特定的 IdM 服务相关联,作为 IdM 管理员,您可以配置服务,以便只有使用这些特定预身份验证机制的用户才能获得他们可以访问该服务的初始 Kerberos 票据授予票(TGT)。

这样,您可以配置不同的 IdM 服务以便:

  • 只有使用更强大的身份验证方法获取其初始 TGT(如一次性密码(OTP))的用户才能访问对安全性至关重要的服务,比如 VPN。
  • 使用更简单的身份验证方法获取其初始 TGT(如密码)的用户只能访问非关键服务,如本地登录。

图 14.2. 使用不同技术进行身份验证的示例

auth 指示符

这个流程描述了创建 IdM 服务,并将其配置为需要传入的服务票据请求中的特定 Kerberos 身份验证指标。

14.4.1. 创建 IdM 服务条目及其 Kerberos keytab

为运行在 IdM 主机上的服务添加 IdM 服务 条目会创建相应的 Kerberos 主体,并允许服务请求 SSL 证书、Kerberos keytab 或两者。

以下流程描述了创建 IdM 服务条目,并为加密与该服务的通信生成关联的 Kerberos keytab。

先决条件

  • 您的服务可以存储 Kerberos 主体、SSL 证书,或两者。

步骤

  1. 使用 ipa service-add 命令添加 IdM 服务,来创建与其关联的 Kerberos 主体。例如,要为运行在主机 client.example.com 上的 testservice 应用程序创建 IdM 服务条目:

    [root@client ~]# ipa service-add testservice/client.example.com
    -------------------------------------------------------------
    Modified service "testservice/client.example.com@EXAMPLE.COM"
    -------------------------------------------------------------
      Principal name: testservice/client.example.com@EXAMPLE.COM
      Principal alias: testservice/client.example.com@EXAMPLE.COM
      Managed by: client.example.com
  2. 为客户端上的服务生成并存储 Kerberos keytab。

    [root@client ~]# ipa-getkeytab -k /etc/testservice.keytab -p testservice/client.example.com
    Keytab successfully retrieved and stored in: /etc/testservice.keytab

验证步骤

  1. 使用 ipa service-show 命令显示 IdM 服务的信息。

    [root@server ~]# ipa service-show testservice/client.example.com
      Principal name: testservice/client.example.com@EXAMPLE.COM
      Principal alias: testservice/client.example.com@EXAMPLE.COM
      Keytab: True
      Managed by: client.example.com
  2. 使用 klist 命令显示服务的 Kerberos keytab 的内容。

    [root@server etc]# klist -ekt /etc/testservice.keytab
    Keytab name: FILE:/etc/testservice.keytab
    KVNO Timestamp           Principal
    ---- ------------------- ------------------------------------------------------
       2 04/01/2020 17:52:55 testservice/client.example.com@EXAMPLE.COM (aes256-cts-hmac-sha1-96)
       2 04/01/2020 17:52:55 testservice/client.example.com@EXAMPLE.COM (aes128-cts-hmac-sha1-96)
       2 04/01/2020 17:52:55 testservice/client.example.com@EXAMPLE.COM (camellia128-cts-cmac)
       2 04/01/2020 17:52:55 testservice/client.example.com@EXAMPLE.COM (camellia256-cts-cmac)

14.4.2. 使用 IdM CLI 将身份验证指示符与 IdM 服务相关联

作为身份管理(IdM)管理员,您可以配置主机或服务,来要求客户端应用程序提供的服务票据包含特定的验证指标。例如,您可以确保在获取 Kerberos 票据授予票据(TGT)时,只有使用有效的带有密码的 IdM 双因素身份验证令牌的用户才能访问该主机或服务。

按照以下流程将服务配置为需要来自传入服务票据请求的特定的 Kerberos 身份验证指标。

先决条件

警告

不要 将身份验证指标分配给内部 IdM 服务。以下 IdM 服务无法执行 PKINIT 和多因素身份验证方法所需的交互式身份验证步骤:

host/server.example.com@EXAMPLE.COM
HTTP/server.example.com@EXAMPLE.COM
ldap/server.example.com@EXAMPLE.COM
DNS/server.example.com@EXAMPLE.COM
cifs/server.example.com@EXAMPLE.COM

步骤

  • 使用 ipa service-mod 命令为服务指定一个或多个所需的身份验证指标,用 --auth-ind 参数标识。

    身份验证方法--auth-ind

    双因素身份验证

    otp

    RADIUS 身份验证

    radius

    PKINIT、智能卡或证书验证

    pkinit

    强化的密码(SPAKE 或 FAST)

    hardened

    例如,要求用户通过智能卡或 OTP 身份验证来检索主机 client.example.comtestservice 主体的服务票据:

    [root@server ~]# ipa service-mod testservice/client.example.com@EXAMPLE.COM --auth-ind otp --auth-ind pkinit
    -------------------------------------------------------------
    Modified service "testservice/client.example.com@EXAMPLE.COM"
    -------------------------------------------------------------
      Principal name: testservice/client.example.com@EXAMPLE.COM
      Principal alias: testservice/client.example.com@EXAMPLE.COM
      Authentication Indicators: otp, pkinit
      Managed by: client.example.com
注意

要从服务中删除所有验证指标,请提供一个空的指标列表:

[root@server ~]# ipa service-mod testservice/client.example.com@EXAMPLE.COM --auth-ind ''
------------------------------------------------------
Modified service "testservice/client.example.com@EXAMPLE.COM"
------------------------------------------------------
  Principal name: testservice/client.example.com@EXAMPLE.COM
  Principal alias: testservice/client.example.com@EXAMPLE.COM
  Managed by: client.example.com

验证步骤

  • 使用 ipa service-show 命令显示关于 IdM 服务的信息,包括其所需的身份验证指标。

    [root@server ~]# ipa service-show testservice/client.example.com
      Principal name: testservice/client.example.com@EXAMPLE.COM
      Principal alias: testservice/client.example.com@EXAMPLE.COM
      Authentication Indicators: otp, pkinit
      Keytab: True
      Managed by: client.example.com

14.4.3. 使用 IdM Web UI 将验证指标与 IdM 服务关联

作为身份管理(IdM)管理员,您可以配置主机或服务,以便客户端应用程序所提供的服务票据包含特定的身份验证指标。例如,您可以确保在获取 Kerberos 票据授予票据(TGT)时,只有使用带有密码的有效的 IdM 双因素身份验证令牌的用户才能访问该主机或服务。

按照以下流程,使用 IdM Web UI 配置主机或服务,以要求来自传入票据请求的特定的 Kerberos 身份验证指标。

先决条件

  • 您以管理用户的身份已登录到 IdM Web UI。

步骤

  1. 选择 IdentityHostsIdentityServices
  2. 单击所需的主机或服务的名称。
  3. Authentication indicators 下,选择所需的验证方法。

    • 例如,选择 OTP 来确保在获取 Kerberos TGT 时,只有使用带有密码的有效的 IdM 双因素身份验证令牌的用户才能访问主机或服务。
    • 如果您选择 OTPRADIUS,那么在获取 Kerberos TGT 时使用带有密码的有效的 IdM 双因素身份验证令牌的用户,以及 使用 RADIUS 服务器获取 Kerberos TGT 的用户,都将被允许访问。
  4. 点击页面顶部的 Save

14.4.4. 为 IdM 服务检索 Kerberos 服务票据

以下流程描述了为 IdM 服务检索 Kerberos 服务票据。您可以使用此流程来测试 Kerberos 票据策略,比如强制票据授予票据(TGT)中存在某些 Kerberos 验证指标。

先决条件

步骤

  • 使用带-S 选项的 kvno 命令来检索服务票据,并指定 IdM 服务的名称和管理它的主机的完全限定域名。

    [root@server ~]# kvno -S testservice client.example.com
    testservice/client.example.com@EXAMPLE.COM: kvno = 1
注意

如果您需要访问 IdM 服务以及当前的票据授予票据(TGT)没有所需的与之关联的 Kerberos 身份验证指标,请使用 kdestroy 命令清除当前的 Kerberos 凭证缓存,并检索新的 TGT:

[root@server ~]# kdestroy

例如,如果您最初通过使用密码的身份验证来获取了 TGT,并且您需要访问具有与之相关联的 pkinit身份验证指标的 IdM 服务,请销毁当前的凭证缓存,并使用智能卡重新进行身份验证。请参阅 Kerberos 身份验证指标

验证步骤

  • 使用 klist 命令来验证服务票据是否在默认的 Kerberos 凭据缓存中。

    [root@server etc]# klist_
    Ticket cache: KCM:1000
    Default principal: admin@EXAMPLE.COM
    
    Valid starting       Expires              Service principal
    04/01/2020 12:52:42  04/02/2020 12:52:39  krbtgt/EXAMPLE.COM@EXAMPLE.COM
    04/01/2020 12:54:07 04/02/2020 12:52:39 testservice/client.example.com@EXAMPLE.COM

14.4.5. 其他资源

14.5. 配置全局票据生命周期策略

全局票据策略适用于所有服务票据,也适用于没有定义任何按用户的票据策略的用户。

以下流程描述了使用 ipa krbtpolicy-mod 命令调整全局 Kerberos 票据策略的最大票据生命周期和最大票据续订期限。

使用 ipa krbtpolicy-mod 命令时,至少指定以下参数之一:

  • --maxlife 最长票据生命周期(以秒为单位)
  • --maxrenew 最长续订期限(以秒为单位)

步骤

  1. 修改全局票据策略:

    [root@server ~]# ipa krbtpolicy-mod --maxlife=$((8*60*60)) --maxrenew=$((24*60*60))
      Max life: 28800
      Max renew: 86400

    在本例中,最长生命周期设置为 8 小时(8 * 60 分钟 * 60 秒),最长续订期限设置为一天(24 * 60 分钟 * 60 秒)。

  2. 可选:将全局 Kerberos 票据策略重置为默认安装值:

    [root@server ~]# ipa krbtpolicy-reset
      Max life: 86400
      Max renew: 604800

验证步骤

  • 显示全局票据策略:

    [root@server ~]# ipa krbtpolicy-show
      Max life: 28800
      Max renew: 86640

14.6. 根据身份验证指标配置全局票据策略

按照以下流程为每个身份验证指标调整全局最长票据生命周期和最长可续订期限。这些设置适用于没有定义按用户的票据策略的用户。

使用 ipa krbtpolicy-mod 命令来指定 Kerberos 票据的全局最长生命周期或最大可用期限,具体取决于它们所附加的 身份验证指标

步骤

  • 例如,将全局双因素票据生命周期和续订期限值设置为一周,将全局智能卡票据生命周期和续订期限值设置为两周:

    [root@server ~]# ipa krbtpolicy-mod --otp-maxlife=604800 --otp-maxrenew=604800 --pkinit-maxlife=172800 --pkinit-maxrenew=172800

验证步骤

  • 显示全局票据策略:

    [root@server ~]# ipa krbtpolicy-show
      Max life: 86400
      OTP max life: 604800
      PKINIT max life: 172800
      Max renew: 604800
      OTP max renew: 604800
      PKINIT max renew: 172800

    请注意,OTP 和 PKINIT 值与全局默认的 Max lifeMax renew 值不同。

14.7. 为用户配置默认的票据策略

您可以定义一个仅适用于单个用户的 Kerberos 票据策略。这些按用户的设置会覆盖所有验证指标的全局票据策略。

使用 ipa krbtpolicy-mod username 命令,并至少指定以下参数之一:

  • --maxlife 最长票据生命周期(以秒为单位)
  • --maxrenew 最长续订期限(以秒为单位)

步骤

  1. 例如,将 IdM admin 用户的最长票据生命周期设置为两天,将最长续订期限设置为 2 周:

    [root@server ~]# ipa krbtpolicy-mod admin --maxlife=172800 --maxrenew=1209600
      Max life: 172800
      Max renew: 1209600
  2. 可选:为用户重置票据策略:

    [root@server ~]# ipa krbtpolicy-reset admin

验证步骤

  • 显示应用到用户的有效 Kerberos 票据策略:

    [root@server ~]# ipa krbtpolicy-show admin
      Max life: 172800
      Max renew: 1209600

14.8. 为用户配置单独的身份验证指标票据策略

作为管理员,您可以为每个身份验证指标不同的用户定义 Kerberos 票据策略。例如,您可以将策略配置为允许 IdM admin 用户续订两天的票据(如果是通过 OTP 身份验证获取的票据);或者续订一周的票据(是通过智能卡身份验证获取的票据)。

这些按身份验证的指标设置将覆盖 用户的 默认票据策略、全局的 默认票据策略,以及任何 全局的 身份验证指标票据策略。

使用 ipa krbtpolicy-mod username 命令,为用户的 Kerberos 票据设置自定义的最长生命周期和最长可续订期限值,具体取决于附加给它们的 身份验证指标

步骤

  1. 例如,要允许 IdM admin 用户续订两天的 Kerberos 票据(如果是使用一次性密码身份验证获取的),请设置 --otp-maxrenew 选项:

    [root@server ~]# ipa krbtpolicy-mod admin --otp-maxrenew=$((2*24*60*60))
      OTP max renew: 172800
  2. 可选:为用户重置票据策略:

    [root@server ~]# ipa krbtpolicy-reset username

验证步骤

  • 显示应用到用户的有效 Kerberos 票据策略:

    [root@server ~]# ipa krbtpolicy-show admin
      Max life: 28800
      Max renew: 86640

14.9. krbtpolicy-mod 命令的身份验证指标选项

使用以下参数为身份验证指标指定值:

表 14.1. krbtpolicy-mod 命令的身份验证指标选项

身份验证指标最长生命周期的参数最长续订期限的参数

otp

--otp-maxlife

--otp-maxrenew

radius

--radius-maxlife

--radius-maxrenew

pkinit

--pkinit-maxlife

--pkinit-maxrenew

hardened

--hardened-maxlife

--hardened-maxrenew

第 15 章 IdM 中的 Kerberos PKINIT 身份验证

Kerberos (PKINIT)中初始身份验证的公钥加密是 Kerberos 的预身份验证机制。身份管理(IdM)服务器包含一个用于 Kerberos PKINIT 身份验证的机制。

15.1. 默认 PKINIT 配置

IdM 服务器上的默认 PKINIT 配置取决于证书颁发机构(CA)配置。

表 15.1. IdM 中的默认 PKINIT 配置

CA 配置PKINIT 配置

没有 CA,没有提供外部 PKINIT 证书

本地 PKINIT:IdM 仅将 PKINIT 用于服务器上的内部目的。

没有 CA,向 IdM 提供外部 PKINIT 证书

IdM 使用外部 Kerberos 密钥分发中心(KDC)证书和 CA 证书来配置 PKINIT。

带有集成的 CA

IdM 使用 IdM CA 签名的证书配置 PKINIT。

15.2. 显示当前 PKINIT 配置

IdM 提供多个命令,您可用来查询域中的 PKINIT 配置。

流程

  • 要确定域中的 PKINIT 状态,请使用 ipa pkinit-status 命令:

    $ ipa pkinit-status
      Server name: server1.example.com
      PKINIT status: enabled
      [...output truncated...]
      Server name: server2.example.com
      PKINIT status: disabled
      [...output truncated...]

    命令将 PKINIT 配置状态显示为 enableddisabled

    • enabled: PKINIT 是使用集成 IdM CA 或外部 PKINIT 证书签名的证书配置的。
    • disabled :IdM 仅将 PKINIT 用于 IdM 服务器上的内部目的。
  • 要列出支持 IdM 客户端 PKINIT 的活跃的 Kerberos 密钥分发中心(KDC)的 IdM 服务器,请在任何服务器上使用 ipa config-show 命令:

    $ ipa config-show
      Maximum username length: 32
      Home directory base: /home
      Default shell: /bin/sh
      Default users group: ipausers
      [...output truncated...]
      IPA masters capable of PKINIT: server1.example.com
      [...output truncated...]

15.3. 在 IdM 中配置 PKINIT

如果您的 IdM 服务器在 PKINIT 被禁用的情况下运行,请使用这些步骤启用它。例如,如果您使用 ipa-server-installipa-replica-install 工具传递了 --no-pkinit 选项,则服务器会在禁用 PKINIT 的情况下运行。

先决条件

  • 确保安装了证书颁发机构(CA)的所有 IdM 服务器都在同一域级别上运行。

流程

  1. 检查服务器上是否启用了 PKINIT:

    # kinit admin
    
    Password for admin@IDM.EXAMPLE.COM:
    # ipa pkinit-status --server=server.idm.example.com
    1 server matched
    ----------------
    Server name: server.idm.example.com
    PKINIT status:enabled
    ----------------------------
    Number of entries returned 1
    ----------------------------

    如果 PKINIT 被禁用了,您将看到以下输出:

    # ipa pkinit-status --server server.idm.example.com
    -----------------
    0 servers matched
    -----------------
    ----------------------------
    Number of entries returned 0
    ----------------------------

    如果省略了 --server <server_fqdn> 参数,您可以使用命令来查找启用了 PKINIT 的所有服务器。

  2. 如果您使用没有 CA 的 IdM:

    1. 在 IdM 服务器上,安装签名了 Kerberos 密钥分发中心(KDC)证书的 CA 证书:

      # ipa-cacert-manage install -t CT,C,C ca.pem
    2. 要更新所有 IPA 主机,请在所有副本和客户端上重复 ipa-certupdate 命令:

      # ipa-certupdate
    3. 使用 ipa-cacert-manage list 命令检查是否已添加了 CA 证书。例如:

      # ipa-cacert-manage list
      CN=CA,O=Example Organization
      The ipa-cacert-manage command was successful
    4. 使用 ipa-server-certinstall 工具安装外部 KDC 证书。KDC 证书必须满足以下条件:

      • 它使用通用名称 CN=fully_qualified_domain_name,certificate_subject_base 颁发。
      • 它包括 Kerberos 主体 krbtgt/REALM_NAME@REALM_NAME
      • 它包含 KDC 身份验证的对象标识符(OID):1.3.6.1.5.2.3.5。

        # ipa-server-certinstall --kdc kdc.pem kdc.key
        
        # systemctl restart krb5kdc.service
    5. 查看 PKINIT 状态:

      # ipa pkinit-status
        Server name: server1.example.com
        PKINIT status: enabled
        [...output truncated...]
        Server name: server2.example.com
        PKINIT status: disabled
        [...output truncated...]
  3. 如果您使用带有 CA 证书的 IdM ,请启用 PKINIT,如下所示:

    # ipa-pkinit-manage enable
      Configuring Kerberos KDC (krb5kdc)
      [1/1]: installing X509 Certificate for PKINIT
      Done configuring Kerberos KDC (krb5kdc).
      The ipa-pkinit-manage command was successful

    如果您使用 IdM CA,该命令请求来自 CA 的 PKINIT KDC 证书。

其他资源

  • ipa-server-certinstall(1) 手册页

15.4. 其他资源

  • 有关 Kerberos PKINIT 的详情,请参阅 MIT Kerberos 文档中的 PKINIT 配置

第 16 章 维护 IdM Kerberos keytab 文件

了解更多有关 Kerberos keytab 文件是什么以及身份管理(IdM)如何使用它们,以允许服务使用 Kerberos 安全地进行身份验证。

您可以使用这些信息来了解您应该保护这些敏感文件的原因,并对 IdM 服务之间的通信问题进行故障排除。

如需更多信息,请参阅以下主题:

16.1. Identity Management 如何使用 Kerberos keytab 文件

Kerberos keytab 是包含 Kerberos 主体及其对应加密密钥的文件。主机、服务、用户和脚本可以使用 keytab 安全地对 Kerberos 密钥分发中心 (KDC) 进行身份验证,而无需人工交互。

IdM 服务器上的每个 IdM 服务都有存储在 Kerberos 数据库中的唯一 Kerberos 主体。例如,如果 IdM 服务器 east.idm.example.comwest.idm.example.com 提供 DNS 服务,IdM 会创建 2 个唯一 DNS Kerberos 主体来识别这些服务,它遵循命名规则 <service>/host.domain.com@REALM.COM

  • DNS/east.idm.example.com@IDM.EXAMPLE.COM
  • DNS/west.idm.example.com@IDM.EXAMPLE.COM

IdM 在服务器上为这些服务的每一个创建一个 keytab,以存储 Kerberos 密钥的本地副本,以及它们的密钥版本号(KVNO)。例如,默认的 keytab 文件 /etc/krb5.keytab 存储 host 主体,这表示计算机在 Kerberos 域中,用于登录身份验证。KDC 为它支持的不同加密算法生成加密密钥,如 aes256-cts-hmac-sha1-96aes128-cts-hmac-sha1-96

您可以使用 klist 命令显示 keytab 文件的内容:

[root@idmserver ~]# klist -ekt /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   2 02/24/2022 20:28:09 host/idmserver.idm.example.com@IDM.EXAMPLE.COM (aes256-cts-hmac-sha1-96)
   2 02/24/2022 20:28:09 host/idmserver.idm.example.com@IDM.EXAMPLE.COM (aes128-cts-hmac-sha1-96)
   2 02/24/2022 20:28:09 host/idmserver.idm.example.com@IDM.EXAMPLE.COM (camellia128-cts-cmac)
   2 02/24/2022 20:28:09 host/idmserver.idm.example.com@IDM.EXAMPLE.COM (camellia256-cts-cmac)

16.2. 验证 Kerberos keytab 文件是否与 IdM 数据库同步

当您更改 Kerberos 密码时,IdM 会自动生成一个新的对应的 Kerberos 密钥,并递增其密钥版本号 (KVNO)。如果没有使用新密钥和 KVNO 更新 Kerberos keytab,则任何依赖于该 keytab 来检索有效密钥的服务可能无法对 Kerberos 密钥分发中心 (KDC) 进行身份验证。

如果您的其中一个 IdM 服务无法与另一个服务通信,请使用以下步骤验证您的 Kerberos keytab 文件是否与 IdM 数据库中存储的密钥同步。如果它们没有同步,请使用更新的密钥和 KVNO 检索 Kerberos keytab。这个示例比较并检索 IdM 服务器的更新 DNS 主体。

先决条件

  • 您必须作为 IdM admin 帐户进行身份验证来检索 keytab 文件
  • 您必须以 root 帐户身份验证来修改其他用户拥有的 keytab 文件

流程

  1. 显示您要验证的 keytab 中的主体的 KVNO。在以下示例中,/etc/named.keytab 文件具有作为 KVNO 为 2 的 DNS/server1.idm.example.com@EXAMPLE.COM 主体的密钥。

    [root@server1 ~]# klist -ekt /etc/named.keytab
    Keytab name: FILE:/etc/named.keytab
    KVNO Timestamp           Principal
    ---- ------------------- ------------------------------------------------------
       2 11/26/2021 13:51:11 DNS/server1.idm.example.com@EXAMPLE.COM (aes256-cts-hmac-sha1-96)
       2 11/26/2021 13:51:11 DNS/server1.idm.example.com@EXAMPLE.COM (aes128-cts-hmac-sha1-96)
       2 11/26/2021 13:51:11 DNS/server1.idm.example.com@EXAMPLE.COM (camellia128-cts-cmac)
       2 11/26/2021 13:51:11 DNS/server1.idm.example.com@EXAMPLE.COM (camellia256-cts-cmac)
  2. 显示 IdM 数据库中存储的主体的 KVNO。在本例中,IdM 数据库中密钥的 KVNO 与 keytab 中的 KVNO 不匹配。

    [root@server1 ~]# kvno DNS/server1.idm.example.com@EXAMPLE.COM
    DNS/server1.idm.example.com@EXAMPLE.COM: kvno = 3
  3. 作为 IdM admin 帐户进行身份验证。

    [root@server1 ~]# kinit admin
    Password for admin@IDM.EXAMPLE.COM:
  4. 为主体检索更新的 Kerberos 密钥,并将其存储在其 keytab 中。以 root 用户身份执行此步骤,以便您可以修改 /etc/named.keytab 文件,它的所有者为 named 用户。

    [root@server1 ~]# ipa-getkeytab -s server1.idm.example.com -p DNS/server1.idm.example.com -k /etc/named.keytab

验证

  1. 在 keytab 中显示主体的更新 KVNO。

    [root@server1 ~]# klist -ekt /etc/named.keytab
    Keytab name: FILE:/etc/named.keytab
    KVNO Timestamp           Principal
    ---- ------------------- ------------------------------------------------------
       4 08/17/2022 14:42:11 DNS/server1.idm.example.com@EXAMPLE.COM (aes256-cts-hmac-sha1-96)
       4 08/17/2022 14:42:11 DNS/server1.idm.example.com@EXAMPLE.COM (aes128-cts-hmac-sha1-96)
       4 08/17/2022 14:42:11 DNS/server1.idm.example.com@EXAMPLE.COM (camellia128-cts-cmac)
       4 08/17/2022 14:42:11 DNS/server1.idm.example.com@EXAMPLE.COM (camellia256-cts-cmac)
  2. 显示 IdM 数据库中存储的主体的 KVNO,并确保它与 keytab 中的 KVNO 匹配。

    [root@server1 ~]# kvno DNS/server1.idm.example.com@EXAMPLE.COM
    DNS/server1.idm.example.com@EXAMPLE.COM: kvno = 4

16.3. IdM Kerberos keytab 文件内容列表

下表显示了 IdM Kerberos keytab 文件的位置、内容和目的。

表 16.1. 表

keytab 位置内容用途

/etc/krb5.keytab

host 主体

在登录时验证用户凭证,供 NFS 使用(如果没有 nfs 主体)

/etc/dirsrv/ds.keytab

ldap 主体

向 IdM 数据库验证用户,在 IdM 副本之间安全地复制数据库内容

/var/lib/ipa/gssproxy/http.keytab

HTTP 主体

对 Apache 服务器进行身份验证

/etc/named.keytab

DNS 主体

安全地更新 DNS 记录

/etc/ipa/dnssec/ipa-dnskeysyncd.keytab

ipa-dnskeysyncd 主体

使 OpenDNSSEC 与 LDAP 同步

/etc/pki/pki-tomcat/dogtag.keytab

dogtag 主体

与证书颁发机构 (CA) 通信。

/etc/samba/samba.keytab

cifshost 主体

与 Samba 服务通信

/var/lib/sss/keytabs/ad-domain.com.keytab

Active Directory (AD) 域控制器 (DC) 主体,格式为 HOSTNAME$@AD-DOMAIN.COM

通过 IdM-AD Trust 与 AD DC 通信

16.4. 查看 IdM 主密钥的加密类型

作为身份管理(IdM)管理员,您可以查看 IdM 主密钥的加密类型,这是 IdM Kerberos 分发中心(KDC)在静态存储所有其他主体时用于加密它们的密钥。了解加密类型可帮助您确定部署与 FIPS 标准的兼容性。

从 RHEL 8.7 开始,加密类型是 aes256-cts-hmac-sha384-192。这个加密类型与旨在遵守 FIPS 140-3 的默认的 RHEL 9 FIPS 加密策略兼容。

之前 RHEL 版本上使用的加密类型与遵循 FIPS 140-3 标准的 RHEL 9 系统不兼容。要使 FIPS 模式下的 RHEL 9 系统与 RHEL 8 FIPS 140-2 部署系统兼容,请在 RHEL 9 系统上启用 FIPS:AD-SUPPORT 加密策略。

注意

Microsoft 的活动目录实现尚不支持任何使用 SHA-2 HMAC 的 RFC8009 Kerberos 加密类型。如果您配置了 IdM-AD 信任,因此即使 IdM 主密钥的加密类型是 aes256-cts-hmac-sha384-192,也需要使用 FIPS:AD-SUPPORT 加密子策略。

先决条件

  • 您有访问 IdM 部署中任何 RHEL 8 副本的 root 权限。

流程

  • 在副本上,在命令行界面上查看加密类型:

    # kadmin.local getprinc K/M | grep -E '^Key:'
    Key: vno 1, aes256-cts-hmac-sha1-96

    输出中的 aes256-cts-hmac-sha1-96 键表示 IdM 部署已安装在运行 RHEL 8.6 或更早版本的服务器上。输出中存在 aes256-cts-hmac-sha384-192 键表示 IdM 部署已安装在运行 RHEL 8.7 或更高版本的服务器上。

第 17 章 在 IdM 环境中启用 passkey 身份验证

Fast IDentity Online 2 (FIDO2)标准基于公钥加密,并添加带有 PIN 或 biometrics 的免密码流的选项。IdM 环境中的 passkey 身份验证使用 libfido2 库支持的 FIDO2 兼容设备。

passkey 验证方法提供额外的安全层,通过包括需要 PIN 或指纹的免密码和多因素身份验证(MFA)来遵守法规标准。它使用特殊的硬件和软件(如 passkey 设备和 passkey 启用)在 Identity Management (IdM)环境中增强安全性,以便在数据保护扮演关键角色的环境中增强安全性。

如果您的系统连接到 IdM 环境的网络,则 passkey 验证方法会自动发出 Kerberos 票据(SSO),为 IdM 用户启用单点登录(SSO)。

您可以使用 passkey 通过图形界面向操作系统进行身份验证。如果您的系统允许您使用 passkey 和密码进行身份验证,则可以通过按键盘上的空格后跟 Enter 键来跳过 passkey 身份验证并 使用密码进行身份验证如果使用 GNOME 桌面管理器(GDM),您可以按 Enter 来绕过 passkey 身份验证。

请注意,当前 IdM 环境中的 passkey 身份验证不支持 FIDO2 attestation 机制,它允许识别特定的 passkey 设备。

以下流程提供了在 IdM 环境中管理和配置 passkey 身份验证的说明。

17.1. 先决条件

  • 您有一个 passkey 设备。
  • 安装 fido2-tools 软件包:

    # dnf install fido2-tools
  • 为 passkey 设备设置 PIN:

    1. 将 passkey 设备连接到 USB 端口。
    2. 列出连接的 passkey 设备:

      # fido2-token -L
    3. 按照命令提示,为您的 passkey 设备设置 PIN。

      # fido2-token -C passkey_device

17.2. 注册 passkey 设备

作为用户,您可以使用 passkey 设备配置身份验证。passkey 设备与任何 FIDO2 规格设备兼容,如 YubiKey 5 NFC。要配置此验证方法,请按照以下说明操作。

先决条件

  • 设置 passkey 设备的 PIN。
  • 为 IdM 用户启用 Passkey 身份验证:

    # ipa user-add user01 --first=user --last=01 --user-auth-type=passkey

    将现有 IdM 用户的 ipa user-mod 与相同的 --user-auth-type=passkey 参数一起使用。

  • 访问用户要进行身份验证的物理计算机。

流程

  1. 在 USB 端口中插入 passkey 设备。
  2. 为 IdM 用户注册 passkey:

    # ipa user-add-passkey user01 --register

    按照应用程序提示:

    1. 输入 passkey 设备的 PIN。
    2. 接触设备以验证您的身份。如果您使用 biometric 设备,请确保使用与注册该设备相同的 finger。

用户最好将多个 passkey 设备配置为允许从多个位置或设备进行身份验证的备份。要确保在身份验证过程中发布 Kerberos 票据,请不要为用户配置超过 12 个 passkey 设备。

验证

  1. 使用您配置为使用 passkey 身份验证的用户名登录到系统。系统会提示您插入 passkey 设备:

    Insert your passkey device, then press ENTER.
  2. 将 passkey 设备插入到 USB 端口中,并在提示时输入您的 PIN:

    Enter PIN:
    Creating home directory for user01@example.com.
  3. 确认已发布 Kerberos 票据:

    $ klist
    Default principal: user01@IPA.EXAMPLE.COM

请注意,要跳过 passkey 身份验证,请在提示符中输入任意字符,或者在启用了用户身份验证时输入空 PIN。系统会将您重定向到基于密码的身份验证。

17.3. 身份验证策略

使用身份验证策略配置可用的在线和本地身份验证方法。

使用在线连接进行身份验证
使用服务在服务器端提供的所有在线身份验证方法。对于 IdM、AD 或 Kerberos 服务,默认的验证方法是 Kerberos。
在没有在线连接的情况下进行身份验证
使用可供用户使用的身份验证方法。您可以使用 local_auth_policy 选项调整身份验证方法。

使用 /etc/sssd/sssd.conf 文件中的 local_auth_policy 选项配置可用的在线和离线身份验证方法。默认情况下,只有使用服务服务器端支持的方法来执行身份验证。您可以使用以下值调整策略:

  • match 值启用与离线和在线状态匹配的。例如,IdM 服务器支持在线 passkey 身份验证,并 匹配 为 passkey 方法启用离线和在线身份验证。
  • 唯一值仅提供 离线方法并忽略在线方法。
  • 启用和禁用 值明确定义了用于离线身份验证的方法。例如,enable:passkey 只启用 passkey 进行离线身份验证。

以下配置示例允许本地用户使用智能卡验证在本地进行身份验证:

[domain/shadowutils]
id_provider = proxy
proxy_lib_name = files
auth_provider = none
local_auth_policy = only

local_auth_policy 选项适用于 passkey 和智能卡身份验证方法。

17.4. 以 passkey 用户身份检索 IdM ticket-granting ticket

要以 passkey 用户身份检索 Kerberos 票据授予票据(TGT),请请求匿名 Kerberos 票据,并通过 Secure Tunneling (FAST)频道启用灵活的身份验证,以便在 Kerberos 客户端和 Kerberos 分发中心(KDC)之间提供安全连接。

先决条件

  • 您的 IdM 客户端和服务器使用 RHEL 9.1 或更高版本。
  • 您的 IdM 客户端和服务器使用 SSSD 2.7.0 或更高版本。
  • 您已注册了 passkey 设备并配置了身份验证策略。

流程

  1. 运行以下命令来初始化凭证缓存:

    [root@client ~]# kinit -n @IDM.EXAMPLE.COM -c FILE:armor.ccache

    请注意,这个命令会创建 armor.ccache 文件,每当您请求新的 Kerberos 票据时,您需要指向该文件。

  2. 运行以下命令来请求 Kerberos 票据:

    [root@client ~]# kinit -T FILE:armor.ccache <username>@IDM.EXAMPLE.COM
    Enter your PIN:

验证

  • 显示您的 Kerberos 票据信息:

    [root@client ~]# klist -C
    Ticket cache: KCM:0:58420
    Default principal: <username>@IDM.EXAMPLE.COM
    
    Valid starting     Expires            Service principal
    05/09/22 07:48:23  05/10/22 07:03:07  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
    config: fast_avail(krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM) = yes
    08/17/2022 20:22:45  08/18/2022 20:22:43  krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
    config: pa_type(krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM) = 153

    pa_type = 153 表示 passkey 身份验证。

第 18 章 在 IdM 中使用 KDC 代理

有些管理员可能会选择使默认的 Kerberos 端口在部署中无法访问。要允许用户、主机和服务获取 Kerberos 凭据,您可以使用 HTTPS 服务作为代理,其通过 HTTPS 端口 443 与 Kerberos 进行通信的。

在身份管理(IdM)中,Kerberos 密钥分发中心代理 (KKDCP)提供此功能。

在 IdM 服务器上,KKDCP 默认启用,并通过 https://server.idm.example.com/KdcProxy 提供。在 IdM 客户端上,您必须更改其 Kerberos 配置来访问 KKDCP。

18.1. 配置 IdM 客户端以使用 KKDCP

作为身份管理(IdM)系统管理员,您可以将 IdM 客户端配置为使用 IdM 服务器上的 Kerberos 密钥分发中心代理(KKDCP)。如果默认的 Kerberos 端口在 IdM 服务器上无法访问,并且 HTTPS 端口 443 是访问 Kerberos 服务的唯一方式,那么这很有用。

先决条件

  • 您有访问 IdM 客户端的 root 权限。

流程

  1. 打开 /etc/krb5.conf 文件进行编辑。
  2. [realms] 部分中,对 kdcadmin_serverkpasswd_server 选项输入 KKDCP 的 URL:

    [realms]
    EXAMPLE.COM = {
      kdc = https://kdc.example.com/KdcProxy
      admin_server = https://kdc.example.com/KdcProxy
      kpasswd_server = https://kdc.example.com/KdcProxy
      default_domain = example.com
    }

    要实现冗余,您可以多次添加参数 kdcadmin_serverkpasswd_server 来指示不同的 KKDCP 服务器。

  3. 重启 sssd 服务以使更改生效:

    ~]# systemctl restart sssd

18.2. 验证 IdM 服务器上是否启用了 KKDCP

在身份管理(IdM)服务器上,如果属性和值对 ipaConfigString=kdcProxyEnabled 在目录中存在,则每次 Apache Web 服务器启动时,Kerberos 密钥分发中心代理(KKDCP)会自动启用。在这种情况下,将创建符号链接 /etc/httpd/conf.d/ipa-kdc-proxy.conf

即使作为非特权用户,您也可以验证 IdM 服务器上是否启用了 KKDCP。

流程

  • 检查符号链接是否存在:
$ ls -l /etc/httpd/conf.d/ipa-kdc-proxy.conf
lrwxrwxrwx. 1 root root 36 Jun 21  2020 /etc/httpd/conf.d/ipa-kdc-proxy.conf -> /etc/ipa/kdcproxy/ipa-kdc-proxy.conf

输出确认启用了 KKDCP。

18.3. 在 IdM 服务器上禁用 KKDCP

作为身份管理(IdM)系统管理员,您可以在 IdM 服务器上禁用 Kerberos 密钥分发中心代理(KKDCP)。

先决条件

  • 您有访问 IdM 服务器的 root 权限。

流程

  1. 从目录中删除 ipaConfigString=kdcProxyEnabled 属性和值对:

    # ipa-ldap-updater /usr/share/ipa/kdcproxy-disable.uldif
    Update complete
    The ipa-ldap-updater command was successful
  2. 重启 httpd 服务:

    # systemctl restart httpd.service

KKDCP 现在在当前的 IdM 服务器上被禁用。

验证步骤

  • 验证符号链接不存在:

    $ ls -l /etc/httpd/conf.d/ipa-kdc-proxy.conf
    ls: cannot access '/etc/httpd/conf.d/ipa-kdc-proxy.conf': No such file or directory

18.4. 在 IdM 服务器上重新启用 KKDCP

在 IdM 服务器上,默认启用 Kerberos 密钥分发中心代理(KKDCP),并可通过 https://server.idm.example.com/KdcProxy 获取。

如果服务器上已禁用了 KKDCP,您可以重新启用它。

先决条件

  • 您有访问 IdM 服务器的 root 权限。

流程

  1. ipaConfigString=kdcProxyEnabled 属性和值对添加到目录中:

    # ipa-ldap-updater /usr/share/ipa/kdcproxy-enable.uldif
    Update complete
    The ipa-ldap-updater command was successful
  2. 重启 httpd 服务:

    # systemctl restart httpd.service

KKDCP 现在在当前的 IdM 服务器上被启用。

验证步骤

  • 验证符号链接是否存在:

    $ ls -l /etc/httpd/conf.d/ipa-kdc-proxy.conf
    lrwxrwxrwx. 1 root root 36 Jun 21  2020 /etc/httpd/conf.d/ipa-kdc-proxy.conf -> /etc/ipa/kdcproxy/ipa-kdc-proxy.conf

18.5. 配置 KKDCP 服务器 I

使用以下配置,您可以启用 TCP 作为 IdM KKDCP 和 活动目录(AD)域之间的传输协议,其中会使用多个 Kerberos 服务器。

先决条件

  • 您有 root 访问权限。

流程

  1. /etc/ipa/kdcproxy/kdcproxy.conf 文件的 [global] 部分中的 use_dns 参数设为 false

    [global]
    use_dns = false
  2. 将代理域信息放在 /etc/ipa/kdcproxy/kdcproxy.conf 文件中。例如,对于具有代理的 [AD.EXAMPLE.COM] 域,请按如下所示列出域配置参数:

    [AD.EXAMPLE.COM]
    kerberos = kerberos+tcp://1.2.3.4:88 kerberos+tcp://5.6.7.8:88
    kpasswd = kpasswd+tcp://1.2.3.4:464 kpasswd+tcp://5.6.7.8:464
    重要

    域配置参数必须列出由空格分隔的多个服务器,而不是像 /etc/krb5.confkdc.conf 那样,其中某些选项可以被多次指定。

  3. 重启身份管理(IdM)服务:

    # ipactl restart

其他资源

18.6. 配置 KKDCP 服务器 II

以下服务器配置依赖于 DNS 服务记录来查找要与之通信的活动目录(AD)服务器。

先决条件

  • 您有 root 访问权限。

流程

  1. /etc/ipa/kdcproxy/kdcproxy.conf 文件中的 [global] 部分,将 use_dns 参数设为 true

    [global]
    configs = mit
    use_dns = true

    configs 参数允许您加载其他配置模块。在这种情况下,配置是从 MIT libkrb5 库中读取的。

  2. 可选 :在您不想使用 DNS 服务记录的情况,请在 /etc/krb5.conf 文件的 [realms] 部分中添加明确的 AD 服务器。如果带有代理的域是 AD.EXAMPLE.COM,请添加:

    [realms]
    AD.EXAMPLE.COM = {
        kdc = ad-server.ad.example.com
        kpasswd_server = ad-server.ad.example.com
    }
  3. 重启身份管理(IdM)服务:

    # ipactl restart

其他资源

第 19 章 使用 CLI 管理 IdM 中的自助服务规则

了解身份管理(IdM)中的自助服务规则,以及如何在命令行界面(CLI)中创建和编辑自助服务访问规则。

19.1. IdM 中的自助服务访问控制

自助服务访问控制规则定义 Identity Management (IdM) 实体可以在其 IdM 目录服务器条目上执行的操作:例如,IdM 用户能够更新自己的密码。

这种控制方法允许经过身份验证的 IdM 实体编辑其 LDAP 条目中的特定属性,但不允许对整个条目的 adddelete 操作。

警告

使用自助服务访问控制规则时要小心:不当配置访问控制规则可能会意外地提升实体的特权。

19.2. 使用 CLI 创建自助服务规则

按照以下流程,使用命令行界面(CLI)在 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

19.3. 使用 CLI 编辑自助服务规则

按照以下流程,使用命令行界面(CLI)在 IdM 中编辑自助服务访问规则。

先决条件

流程

  1. 可选 :使用 ipa selfservice-find 命令显示现有的自助服务规则。
  2. 可选 :使用 ipa selfservice-show 命令显示您要修改的自助服务规则的详情。
  3. 使用 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

19.4. 使用 CLI 删除自助服务规则

按照以下流程,使用命令行界面(CLI)在 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 命令显示所有自助服务规则。您刚才删除的规则应该消失了。

第 20 章 使用 IdM Web UI 管理自助服务规则

了解身份管理(IdM)中的自助服务规则,以及如何在 Web 界面(IdM Web UI)中创建和编辑自助服务访问规则。

20.1. IdM 中的自助服务访问控制

自助服务访问控制规则定义 Identity Management (IdM) 实体可以在其 IdM 目录服务器条目上执行的操作:例如,IdM 用户能够更新自己的密码。

这种控制方法允许经过身份验证的 IdM 实体编辑其 LDAP 条目中的特定属性,但不允许对整个条目的 adddelete 操作。

警告

使用自助服务访问控制规则时要小心:不当配置访问控制规则可能会意外地提升实体的特权。

20.2. 使用 IdM Web UI 创建自助服务规则

按照以下流程,使用 Web 界面(IdM Web UI)在 IdM 中创建自助服务访问规则。

先决条件

步骤

  1. IPA Server 选项卡中,打开 Role-Based Access Control 子菜单,然后选择 Self Service Permissions
  2. 点自助服务访问规则列表右上角的 Add

    Adding a self-service rule

  3. 此时将打开 Add Self Service Permission 窗口。在 Self-service name 字段中输入新自助服务规则的名称。允许空格:

    Form for adding a self-service rule

  4. 选中您希望用户能够编辑的属性旁边的复选框。
  5. 可选 :如果您要提供访问权限的属性没有列出,您可以为它添加一个列表:

    1. 点击 Add 按钮。
    2. 在以下 Add Custom Attribute 窗口的 Attribute 文本字段中输入属性名称。
    3. 单击 OK 按钮来添加该属性
    4. 验证是否已选中新属性
  6. 单击表单底部的 Add 按钮,来保存新的自助服务规则。
    或者,您可以通过单击 Add and Edit 按钮来保存并继续编辑自助服务规则,或者通过单击 Add and Add another 按钮来保存并添加其他规则。

20.3. 使用 IdM Web UI 编辑自助服务规则

按照以下流程,使用 Web 界面(IdM Web UI)在 IdM 中编辑自助服务访问规则。

先决条件

步骤

  1. IPA Server 选项卡中,打开 Role-Based Access Control 子菜单,然后选择 Self Service Permissions
  2. 单击您要修改的自助服务规则的名称。

    Editing an existing self-service rule

  3. 编辑页面只允许您编辑您要添加或删除自助服务规则的属性列表。选择或取消选择合适的复选框。
  4. 单击 Save 按钮,将更改保存到自助服务规则。

20.4. 使用 IdM Web UI 删除自助服务规则

按照以下流程,使用 Web 界面(IdM Web UI)删除 IdM 中的自助服务访问规则。

先决条件

步骤

  1. IPA Server 选项卡中,打开 Role-Based Access Control 子菜单,然后选择 Self Service Permissions
  2. 选中您要删除的规则旁边的复选框,然后单击列表右侧的 Delete 按钮。

    Deleting a self-service rule

  3. 此时会打开一个对话框,单击 Delete 进行确认。

第 21 章 使用 Ansible playbook 管理 IdM 中的自助服务规则

本节介绍 Identity Management (IdM) 中的自助服务规则,并介绍如何使用 Ansible playbook 创建和编辑自助服务访问规则。自助服务访问控制规则允许 IdM 实体在其 IdM 目录服务器条目上执行指定操作。

21.1. IdM 中的自助服务访问控制

自助服务访问控制规则定义 Identity Management (IdM) 实体可以在其 IdM 目录服务器条目上执行的操作:例如,IdM 用户能够更新自己的密码。

这种控制方法允许经过身份验证的 IdM 实体编辑其 LDAP 条目中的特定属性,但不允许对整个条目的 adddelete 操作。

警告

使用自助服务访问控制规则时要小心:不当配置访问控制规则可能会意外地提升实体的特权。

21.2. 使用 Ansible 确保存在自助服务规则

以下流程描述了如何使用 Ansible playbook 定义自助服务规则并确保它们在身份管理 (IdM) 服务器上存在。在本例中,新的 Users can manage their own name details 规则会授予用户更改其 givennamedisplaynametitleinitials 属性的权限。例如,这允许他们更改其显示名称或缩写(如果想更改)。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。

步骤

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 复制位于 /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
  3. 打开 selfservice-present-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 ipaselfservice 任务部分设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为新自助服务规则的名称。
    • 权限 变量设置为以逗号分隔的权限列表,以授予:readwrite
    • attribute 变量设置为用户可以自己管理的属性列表:givennamedisplaynametitleinitials

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Self-service present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure self-service rule "Users can manage their own name details" is present
        ipaselfservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "Users can manage their own name details"
          permission: read, write
          attribute:
          - givenname
          - displayname
          - title
          - initials
  5. 保存这个文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-present-copy.yml

其他资源

  • 请参阅 IdM 中的自助服务访问控制
  • 请参阅 /usr/share/doc/ansible-freeipa/ 目录中的 README-selfservice.md 文件。
  • 请参阅 /usr/share/doc/ansible-freeipa/playbooks/selfservice 目录。

21.3. 使用 Ansible 确保缺少自助服务规则

以下流程描述了如何使用 Ansible playbook 来确保 IdM 配置中没有指定的自助服务规则。以下示例描述了如何确保 Users can manage their own name details 自助服务规则在 IdM 中不存在。这将确保用户无法更改自己的显示名称或缩写。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。

步骤

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 创建位于 /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
  3. 打开 selfservice-absent-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 ipaselfservice 任务部分设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为自助服务规则的名称。
    • state 变量设置为 absent

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Self-service absent
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure self-service rule "Users can manage their own name details" is absent
        ipaselfservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "Users can manage their own name details"
          state: absent
  5. 保存这个文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-absent-copy.yml

其他资源

  • 请参阅 IdM 中的自助服务访问控制
  • 请参阅 /usr/share/doc/ansible-freeipa/ 目录中的 README-selfservice.md 文件。
  • 请参阅 /usr/share/doc/ansible-freeipa/playbooks/selfservice 目录中的 playbook 示例。

21.4. 使用 Ansible 确保自助服务规则具有特定属性

以下流程描述了如何使用 Ansible playbook 确保现有自助服务规则具有特定的设置。在示例中,您可以确认 Users can manage their own name details 自助服务规则也具有 surname 成员属性。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。
  • Users can manage their own name details 自助服务规则存在于 IdM 中。

步骤

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 创建位于 /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
  3. 打开 selfservice-member-present-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 ipaselfservice 任务部分设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为要修改的自助服务规则的名称。
    • attribute 变量设置为 surname
    • action 变量设置为 member

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Self-service member present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure selfservice "Users can manage their own name details" member attribute surname is present
        ipaselfservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "Users can manage their own name details"
          attribute:
          - surname
          action: member
  5. 保存这个文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -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 示例。

21.5. 使用 Ansible 确保自助服务规则没有特定属性

以下流程描述了如何使用 Ansible playbook 来确保自助服务规则没有特定的设置。您可以使用此 playbook 确保自助服务规则没有授予不需要的访问权限。在示例中,您可以确定 Users can manage their own name details 自助服务规则没有包括 givennamesurname成员属性。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。
  • Users can manage their own name details 自助服务规则存在于 IdM 中。

步骤

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 创建位于 /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
  3. 打开 selfservice-member-absent-copy.yml Ansible playbook 文件进行编辑。
  4. 通过在 ipaselfservice 任务部分设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为您要修改的自助服务规则的名称。
    • attribute 变量设置为 givenname 和 top name
    • action 变量设置为 member
    • state 变量设置为 absent

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Self-service member absent
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure selfservice "Users can manage their own name details" member attributes givenname and surname are absent
        ipaselfservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "Users can manage their own name details"
          attribute:
          - givenname
          - surname
          action: member
          state: absent
  5. 保存这个文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -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 示例。

第 22 章 在 IdM CLI 中管理用户组

本章介绍了使用 IdM CLI 的用户组管理。

用户组是一组具有常见特权、密码策略和其他特征的用户。

Identity Management (IdM) 中的用户组可以包括:

  • IdM 用户
  • 其他 IdM 用户组
  • 外部用户,即 IdM 之外的用户

22.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。

表 22.1. 默认创建的用户组

组名称默认组成员

ipausers

所有 IdM 用户

admins

具有管理特权的用户,包括默认的 admin 用户

editors

这是一个旧的组,不再具有任何特殊权限

trust admins

具有管理 Active Directory 信任权限的用户

将用户添加到用户组时,该用户将获得与组关联的特权和策略。例如,若要向用户授予管理特权,可将该用户添加到 admins 组。

警告

不要删除 admins 组。由于 admins 是 IdM 要求的预定义组,因此此操作会导致某些命令出现问题。

另外,当在 IdM 中创建新用户时,IdM 默认会创建用户私有组。有关私有组的更多信息,请参阅在没有私有组的情况下添加用户

22.2. 直接和间接组成员

IdM 中的用户组属性适用于直接和间接成员:当组 B 是组 A 的成员时,组 B 中的所有用户都被视为组 A 的间接成员。

例如,在下图中:

  • 用户 1 和用户 2 是组 A 的直接成员
  • 用户 3、用户 4 和用户 5 是组 A 的间接成员

图 22.1. 直接和间接组成员身份

包含组 A(2 个用户)和 Group B(3 个用户)的图表。组 B 嵌套在组 A 内,因此组 A 包含总计 5 个用户。

如果您为用户组 A 设置密码策略,该策略也适用于用户组 B 中的所有用户。

22.3. 使用 IdM CLI 添加用户组

按照以下流程,使用 IdM CLI 添加用户组。

先决条件

步骤

  • 使用 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。

22.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 中的不同组类型

22.5. 使用 IdM CLI 删除用户组

按照以下流程,使用 IdM CLI 删除用户组。请注意,删除组不会从 IdM 中删除组成员。

先决条件

步骤

  • 使用 ipa group-del group_name 命令删除用户组。例如,要删除 group_a:

    $ ipa group-del group_a
    --------------------------
    Deleted group "group_a"
    --------------------------

22.6. 使用 IdM CLI 将成员添加到用户组中

您可以将用户和用户组添加为用户组的成员。如需更多信息,请参阅 IdM 中不同的组类型 直接和间接组成员 。按照以下流程,使用 IdM CLI 将成员添加到用户组中。

先决条件

步骤

  • 使用 ipa group-add-member 命令向用户组添加成员。

    使用这些选项指定成员类型:

    • --users 添加 IdM 用户
    • --external 添加一个存在于 IdM 域外的用户,格式为 DOMAIN\user_nameuser_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)首先检查其缓存,并且仅对丢失或过期的记录执行服务器查找。

22.7. 添加没有用户私有组的用户

默认情况下,每当在 IdM 中创建新用户时,IdM 都会创建用户私有组(UPG)。UPG 是特定的组类型:

  • UPG 与新创建的用户具有相同的名称。
  • 用户是 UPG 的唯一成员。UPG 不能包含任何其他成员。
  • 私有组的 GID 与用户的 UID 相匹配。

不过,可以添加用户而不创建 UPG 。

22.7.1. 没有用户私有组的用户

如果 NIS 组或其他系统组已使用将要分配给用户私有组的 GID,则有必要避免创建 UPG。

您可以通过两种方式执行此操作:

在这两种情况下,在添加新用户时,IdM 都需要指定 GID,否则操作将失败。这是因为对于新用户,IdM 需要 GID,但默认用户组 ipausers 是一个非 POSIX 组,因此没有关联的 GID。您指定的 GID 不必对应于已经存在的组。

注意

指定 GID 不会创建新组。它仅为新用户设置 GID 属性,因为 IdM 需要属性。

22.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

22.7.3. 对所有用户全局禁用用户私有组

您可以在全局范围内禁用用户私有组(UPG)。这样可防止为所有新用户创建 UPG。现有用户不会受到这一更改的影响。

步骤

  1. 获取管理员权限:

    $ kinit admin
  2. IdM 使用目录服务器管理的条目插件来管理 UPG。列出插件的实例:

    $ ipa-managed-entries --list
  3. 要确保 IdM 不创建 UPG,请禁用负责管理用户私有组的插件实例:

    $ ipa-managed-entries -e "UPG Definition" disable
    Disabling Plugin
    注意

    要在稍后重新启用 UPG Definition 实例,请使用 ipa-managed-entries -e "UPG Definition" enable 命令。

  4. 重新启动目录服务器来加载新配置。

    $ sudo systemctl restart dirsrv.target

    要在禁用 UPG 后添加用户,您需要指定 GID。如需更多信息,请参阅在用户私有组群全局禁用时添加用户

验证步骤

  • 要检查 UPG 是否全局禁用,请再次使用 disable 命令:

    $ ipa-managed-entries -e "UPG Definition" disable
    Plugin already disabled

22.7.4. 当全局禁用用户私有组时添加用户

当全局禁用用户私有组(UPG)时,IdM 不会自动为新用户分配 GID。要成功添加用户,您必须手动分配 GID,或使用自动成员规则来分配 GID。有关为何需要此功能的详情,请查看 没有用户私有组的用户

先决条件

步骤

  • 要确保在禁用创建 UPG 时成功添加新用户,请选择以下之一:

    • 添加新用户时指定自定义的 GID。GID 不必对应于已经存在的用户组。

      例如,当从命令行添加用户时,请在 ipa user-add 命令中添加 --gid 选项。

    • 使用自动成员规则将用户添加到具有 GID 的现有组中。

22.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

22.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 对象存在。

22.10. 使用 IdM CLI 从用户组中删除成员

按照以下流程,使用 IdM CLI 从用户组中删除成员。

先决条件

步骤

  1. 可选。使用 ipa group-show 命令确认组是否包含您要删除的成员。
  2. 使用 ipa group-remove-member 命令从用户组中删除成员。

    使用这些选项来指定要删除的成员:

    • --users 删除 IdM 用户
    • --external 删除存在于 IdM 域外的用户,格式为 DOMAIN\user_nameuser_name@domain
    • --groups 删除 IdM 用户组

    例如,要从名为 group_name 的组中删除 user1user2group1

    $ ipa group-remove-member group_name --users=user1 --users=user2 --groups=group1

22.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

22.12. 为 IdM 中的本地和远程组启用组合并

组可以是集中管理的,由域,如身份管理(IdM)或 活动目录(AD))提供,或者它们本地系统上的 etc/group 文件中管理。在大多数情况下,用户依赖于集中管理的存储。然而,在某些情况下,软件仍依赖于已知组中的成员资格来管理访问控制。

如果要从域控制器和本地 etc/group 文件管理组,您可以启用组合并。您可以配置 nsswitch.conf 文件,来检查本地文件和远程服务。如果组在这两个地方同时出现,则成员用户列表被合并,并在单个响应中返回。

以下步骤描述了如何为用户 idmuser 启用组合并。

步骤

  1. [SUCCESS=merge] 添加到 /etc/nsswitch.conf 文件中:

    # Allow initgroups to default to the setting for group.
    initgroups: sss [SUCCESS=merge] files
  2. idmuser 添加到 IdM 中:

    # ipa user-add idmuser
    First name: idm
    Last name: user
    ---------------------
    Added user "idmuser"
    ---------------------
    User login: idmuser
    First name: idm
    Last name: user
    Full name: idm user
    Display name: idm user
    Initials: tu
    Home directory: /home/idmuser
    GECOS: idm user
    Login shell: /bin/sh
    Principal name: idmuser@IPA.TEST
    Principal alias: idmuser@IPA.TEST
    Email address: idmuser@ipa.test
    UID: 19000024
    GID: 19000024
    Password: False
    Member of groups: ipausers
    Kerberos keys available: False
  3. 验证本地 audio 组的 GID。

    $ getent group audio
    ---------------------
    audio:x:63
  4. 将组 audio 添加到 IdM 中:

    $ ipa group-add audio --gid 63
    -------------------
    Added group "audio"
    -------------------
    Group name: audio
    GID: 63
    注意

    您在将 audio 组添加到 IdM 中时定义的 GID 必须与本地 audio 组的 GID 相同。

  5. idmuser 用户添加到 IdM audio 组中:

    $ ipa group-add-member audio --users=idmuser
    Group name: audio
    GID: 63
    Member users: idmuser
    -------------------------
    Number of members added 1
    -------------------------

验证

  1. idmuser 身份登录。
  2. 验证 idmuser 在其会话中是否有本地组:

    $ id idmuser
    uid=1867800003(idmuser) gid=1867800003(idmuser) groups=1867800003(idmuser),63(audio),10(wheel)

22.13. 使用 Ansible 为用户提供 ID 覆盖对 IdM 客户端上本地声音卡的访问权限

您可以使用 ansible-freeipa 组和 idoverrideuser 模块在 IdM 客户端上使身份管理(IdM)或 Active Directory (AD)用户成员。这会授予 IdM 或 AD 用户对主机上声音卡的特权访问权限。该流程使用 Default Trust View ID 视图的示例,在第一个 playbook 任务中添加 aduser@addomain.com ID 覆盖。在下一个 playbook 任务中,在 IdM 中创建 音频 组,GID 为 63,它对应于 RHEL 主机上的本地 音频 组的 GID。同时 ,aduser@addomain.com ID 覆盖作为成员添加到 IdM 音频组中。

先决条件

  • 您有访问要在其上执行流程第一部分的 IdM 客户端的 root 访问权限。在示例中,这是 client.idm.example.com
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 您使用 RHEL 9.4 或更高版本。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • AD 林与 IdM 信任。在示例中,AD 域的名称是 addomain.com,以及 AD 用户的完全限定域名(FQDN),其存在于本地 音频 组中存在是 aduser@addomain.com
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。

步骤

  1. client.idm.example.com 上,将 [SUCCESS=merge] 添加到 /etc/nsswitch.conf 文件中:

    [...]
    # Allow initgroups to default to the setting for group.
    initgroups: sss [SUCCESS=merge] files
  2. 确定本地 音频 组的 GID:

    $ getent group audio
    ---------------------
    audio:x:63
  3. 在 Ansible 控制节点上,创建一个带有任务的 add-aduser-to-audio-group.yml playbook,将 aduser@addomain.com 用户覆盖添加到 Default Trust View 中:

    ---
    - name: Playbook to manage idoverrideuser
      hosts: ipaserver
      become: false
    
      tasks:
      - name: Add aduser@addomain.com user to the Default Trust View
        ipaidoverrideuser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          idview: "Default Trust View"
          anchor: aduser@addomain.com
  4. 在同一 playbook 中使用另一个 playbook 任务,将组 音频 添加到 IdM 中,GID 为 63。将 aduser idoverrideuser 添加到组中:

      - name: Add the audio group with the aduser member and GID of 63
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: audio
          idoverrideuser:
          - aduser@addomain.com
          gidnumber: 63
  5. 保存该文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory add-aduser-to-audio-group.yml

验证

  1. 以 AD 用户身份登录 IdM 客户端:

    $ ssh aduser@addomain.com@client.idm.example.com
  2. 验证 AD 用户的组成员资格:

    $ id aduser@addomain.com
    uid=702801456(aduser@addomain.com) gid=63(audio) groups=63(audio)

其他资源

第 23 章 在 IdM Web UI 中管理用户组

本章介绍了使用 IdM Web UI 的用户组管理。

用户组是一组具有常见特权、密码策略和其他特征的用户。

Identity Management (IdM) 中的用户组可以包括:

  • IdM 用户
  • 其他 IdM 用户组
  • 外部用户,即 IdM 之外的用户

23.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。

表 23.1. 默认创建的用户组

组名称默认组成员

ipausers

所有 IdM 用户

admins

具有管理特权的用户,包括默认的 admin 用户

editors

这是一个旧的组,不再具有任何特殊权限

trust admins

具有管理 Active Directory 信任权限的用户

将用户添加到用户组时,该用户将获得与组关联的特权和策略。例如,若要向用户授予管理特权,可将该用户添加到 admins 组。

警告

不要删除 admins 组。由于 admins 是 IdM 要求的预定义组,因此此操作会导致某些命令出现问题。

另外,当在 IdM 中创建新用户时,IdM 默认会创建用户私有组。有关私有组的更多信息,请参阅在没有私有组的情况下添加用户

23.2. 直接和间接组成员

IdM 中的用户组属性适用于直接和间接成员:当组 B 是组 A 的成员时,组 B 中的所有用户都被视为组 A 的间接成员。

例如,在下图中:

  • 用户 1 和用户 2 是组 A 的直接成员
  • 用户 3、用户 4 和用户 5 是组 A 的间接成员

图 23.1. 直接和间接组成员身份

包含组 A(2 个用户)和 Group B(3 个用户)的图表。组 B 嵌套在组 A 内,因此组 A 包含总计 5 个用户。

如果您为用户组 A 设置密码策略,该策略也适用于用户组 B 中的所有用户。

23.3. 使用 IdM Web UI 添加用户组

按照以下流程,使用 IdM Web UI 添加用户组。

先决条件

  • 已登陆到 IdM Web UI。

步骤

  1. 点击 Identity → Groups,然后选择左侧栏中的 User Groups
  2. 单击 Add 开始添加组。
  3. 填写有关组的信息。有关用户组类型的更多信息,请参阅 IdM 中不同的组类型

    您可以为组指定自定义的 GID。如果您这样做,请小心以避免 ID 冲突。如果没有指定自定义的 GID,IdM 会自动从可用的 ID 范围内分配一个 GID。

    "Add user group"弹出窗口的屏幕截图,包含以下字段:Group name(为必填字段) - Description - Group Type - GID."Add"按钮位于底部。
  4. 单击 Add 确认。

23.4. 使用 IdM Web UI 删除用户组

按照以下流程,使用 IdM Web UI 删除用户组。请注意,删除组不会从 IdM 中删除组成员。

先决条件

  • 已登陆到 IdM Web UI。

步骤

  1. 点击 Identity → Groups ,并选择 User Groups
  2. 选择要删除的组。
  3. 单击 Delete
  4. 单击 Delete 确认。

23.5. 使用 IdM Web UI 将成员添加到用户组中

您可以将用户和用户组添加为用户组的成员。如需更多信息,请参阅 IdM 中不同的组类型 直接和间接组成员

先决条件

  • 已登陆到 IdM Web UI。

步骤

  1. 单击 Identity → Groups ,并选择左侧栏中的 User Groups
  2. 单击组的名称。
  3. 选择您要添加的组成员的类型: User、User GroupsExternal

    "User Group"页面截图,突出显示了您可以添加的三种组成员的三个按钮:"Users" - "User Groups" - "External users"。
  4. Add
  5. 选中您要添加的一个或多个成员旁边的复选框。
  6. 单击向右箭头,将选定的成员移到组中。

    "Add users into user group group_a"弹出窗口的屏幕截图,左侧有一列"Available users"登录,可供检查。您可以单击右箭头,将用户添加到右侧的"Prospective"列表中。
  7. 单击 Add 确认。

23.6. 使用 Web UI 将用户或组作为成员管理者添加到 IdM 用户组中

按照以下流程,使用 Web UI 将用户或组作为成员管理者添加到 IdM 用户组。成员管理者可以将用户或组添加到 IdM 用户组中,但不能更改组的属性。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须具有要添加为成员管理器的用户名以及您要管理的组的名称。

步骤

  1. 单击 Identity → Groups ,并选择左侧栏中的 User Groups
  2. 单击组的名称。
  3. 选择您要添加的组成员管理者的类型:UsersUser Groups

    组添加成员管理者
  4. 点击 Add
  5. 选中您要添加的一个或多个成员旁边的复选框。
  6. 单击向右箭头,将选定的成员移到组中。

    组添加成员管理者用户
  7. 单击 Add 确认。
注意

将成员管理者添加到用户组后,可能需要过些时间,才能将更新传播到身份管理环境中的所有客户端。

验证步骤

  • 验证新添加的用户或用户组是否已添加到用户或用户组的成员管理者列表中:

    添加了组成员管理者

其他资源

  • 如需更多信息,请参阅 ipa group-add-member-manager --help

23.7. 使用 IdM Web UI 查看组成员

按照以下流程,使用 IdM Web UI 查看组成员。您可以查看直接和间接组成员。如需更多信息,请参阅 直接和间接组成员

先决条件

  • 已登陆到 IdM Web UI。

步骤

  1. 选择 Identity → Groups
  2. 在左侧栏中选择 User Groups
  3. 单击您要查看的组的名称。
  4. Direct MembershipIndirect Membership 之间切换。

    显示"Show Results"旁边的"Direct Membership"和"Indirect Membership"选项旁边的单选按钮的屏幕截图

23.8. 使用 IdM Web UI 从用户组中删除成员

按照以下流程,使用 IdM Web UI 从用户组中删除成员。

先决条件

  • 已登陆到 IdM Web UI。

步骤

  1. 单击 Identity → Groups ,并选择左侧栏中的 User Groups
  2. 单击组的名称。
  3. 选择要删除的组成员的类型: User、User GroupsExternal

    "User Group"页面截图,突出显示了您可以添加的三种组成员的三个按钮:"Users" - "User Groups" - "External users"。
  4. 选中您要删除的成员旁边的复选框。
  5. 单击 Delete
  6. 单击 Delete 确认。

23.9. 使用 Web UI 从 IdM 用户组中删除作为成员管理者的用户或组

按照以下流程,使用 Web UI 从 IdM 用户组中删除作为成员管理者的用户或组。成员管理者可以从 IdM 用户组中删除用户或组,但不能更改组的属性。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须具有要删除的现有成员管理者用户或组的名称,以及它们要管理的组的名称。

步骤

  1. 单击 Identity → Groups ,并选择左侧栏中的 User Groups
  2. 单击组的名称。
  3. 选择您要删除的成员管理者的类型: UsersUser Groups

    组添加成员管理者
  4. 选中您要删除的成员管理者旁边的复选框。
  5. 单击 Delete
  6. 单击 Delete 确认。
注意

从用户组中删除成员管理者后,可能需要稍等片刻才能将更新传播到身份管理环境中的所有客户端。

验证步骤

  • 验证用户或用户组是否已从用户或用户组的成员管理者列表中删除:

    删除了组成员管理者

其他资源

  • 如需了解更多详细信息,请参阅 ipa group-add-member-manager --help

第 24 章 使用 Ansible playbook 管理用户组

本节介绍使用 Ansible playbook 进行用户组管理。

用户组是一组具有常见特权、密码策略和其他特征的用户。

Identity Management (IdM) 中的用户组可以包括:

  • IdM 用户
  • 其他 IdM 用户组
  • 外部用户,即 IdM 之外的用户

本节包括以下主题:

24.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。

表 24.1. 默认创建的用户组

组名称默认组成员

ipausers

所有 IdM 用户

admins

具有管理特权的用户,包括默认的 admin 用户

editors

这是一个旧的组,不再具有任何特殊权限

trust admins

具有管理 Active Directory 信任权限的用户

将用户添加到用户组时,该用户将获得与组关联的特权和策略。例如,若要向用户授予管理特权,可将该用户添加到 admins 组。

警告

不要删除 admins 组。由于 admins 是 IdM 要求的预定义组,因此此操作会导致某些命令出现问题。

另外,当在 IdM 中创建新用户时,IdM 默认会创建用户私有组。有关私有组的更多信息,请参阅在没有私有组的情况下添加用户

24.2. 直接和间接组成员

IdM 中的用户组属性适用于直接和间接成员:当组 B 是组 A 的成员时,组 B 中的所有用户都被视为组 A 的间接成员。

例如,在下图中:

  • 用户 1 和用户 2 是组 A 的直接成员
  • 用户 3、用户 4 和用户 5 是组 A 的间接成员

图 24.1. 直接和间接组成员身份

包含组 A(2 个用户)和 Group B(3 个用户)的图表。组 B 嵌套在组 A 内,因此组 A 包含总计 5 个用户。

如果您为用户组 A 设置密码策略,该策略也适用于用户组 B 中的所有用户。

24.3. 使用 Ansible playbook 确保存在 IdM 组和组成员

以下流程描述了使用 Ansible playbook 确保存在 IdM 组和组成员(用户和用户组)。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。
  • IdM 中已存在您想要引用的用户。有关确保存在使用 Ansible 的用户的详细信息,请参阅使用 Ansible playbook 管理用户帐户

步骤

  1. 创建一个清单文件,如 inventory.file,并在该文件中定义 ipaserver

    [ipaserver]
    server.idm.example.com
  2. 使用必要的用户和组信息创建一个 Ansible playbook 文件:

    ---
    - name: Playbook to handle groups
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Create group ops with gid 1234
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: ops
          gidnumber: 1234
    
      - name: Create group sysops
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: sysops
          user:
          - idm_user
    
      - name: Create group appops
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: appops
    
      - name: Add group members sysops and appops to group ops
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: ops
          group:
          - sysops
          - appops
  3. 运行 playbook:

    $ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-group-members.yml

验证步骤

您可以使用 ipa group-show 命令验证 ops 组是否包含 sysopsappops 作为直接成员,idm_user 作为间接成员:

  1. 以管理员身份登录到 ipaserver

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. 显示关于 ops 的信息:

    ipaserver]$ ipa group-show ops
      Group name: ops
      GID: 1234
      Member groups: sysops, appops
      Indirect Member users: idm_user

    IdM 中已存在 appopssysops 组,后者包括 idm_user 用户。

其他资源

  • 请参阅 /usr/share/doc/ansible-freeipa/README-group.md Markdown 文件。

24.4. 使用 Ansible 在单个任务中添加多个 IdM 组

您可以使用 ansible-freeipa ipagroup 模块,使用单个 Ansible 任务添加、修改和删除多个身份管理(IdM)用户组。为此,请使用 ipagroup 模块的 groups 选项。

使用 groups 选项,您还可以指定仅应用到特定组的多个组变量。根据 name 变量定义此组,这是 groups 选项的唯一强制变量。

完成此流程,以确保在单个任务中在 IdM 中存在 sysopsappops 组。将 sysops 组定义为非posix 组,并将 appops 组定义为外部组。

先决条件

  • 在控制节点上:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已安装 ansible-freeipa 软件包。
    • 您已在 ~/MyPlaybooks/ 目录中创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 您在使用 RHEL 9.3 及更新版本。
    • 您已将 ipaadmin_password 存储在 secret.yml Ansible vault 中。

流程

  1. 使用以下内容创建 Ansible playbook 文件 add-nonposix-and-external-groups.yml

    ---
    - name: Playbook to add nonposix and external groups
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: Add nonposix group sysops and external group appops
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          groups:
          - name: sysops
            nonposix: true
          - name: appops
            external: true
  2. 运行 playbook:

    $ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/add-nonposix-and-external-groups.yml

24.5. 使用 Ansible 启用 AD 用户管理 IdM

按照以下流程,使用 Ansible playbook 确保用户 ID 覆盖在身份管理(IdM)组中存在。用户 ID 覆盖是您在使用 AD 建立信任视图中创建的 Active Directory (AD) 用户覆盖。因此,运行 playbook (如 AD 用户)能够完全管理 IdM,而无需两个不同的帐户和密码。

先决条件

  • 您需要知道 IdM admin 密码。
  • 已使用 AD 安装信任
  • IdM 中已存在 AD 用户的用户 ID 覆盖。如果没有,使用 ipa idoverrideuser-add 'default trust view' ad_user@ad.example.com 命令创建它。
  • 您要添加用户 ID 覆盖的组已在 IdM 中存在
  • 您可以使用 IdM 或更高版本的 4.8.7 版本。要查看您在服务器上安装的 IdM 版本,请输入 ipa --version
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。

流程

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 使用以下内容创建 add-useridoverride-to-group.yml playbook:

    ---
    - name: Playbook to ensure presence of users in a group
      hosts: ipaserver
    
    
      - name: Ensure the ad_user@ad.example.com user ID override is a member of the admins group:
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: admins
          idoverrideuser:
          - ad_user@ad.example.com

    在示例中:

    • Secret123 是 IdM admin 密码。
    • admins 是您要添加 ad_user@ad.example.com ID 覆盖的 IdM POSIX 组的名称。此组中的成员具有全部的管理员特权。
    • ad_user@ad.example.com 是 AD 管理员的用户 ID 覆盖。用户存储在已建立信任的 AD 域中。
  3. 保存该文件。
  4. 运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory add-useridoverride-to-group.yml

其他资源

24.6. 使用 Ansible playbook 确保 IdM 用户组中存在成员管理器

以下流程描述了使用 Ansible playbook 确保存在 IdM 成员管理器(用户和用户组)。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。
  • 您必须具有要添加为成员管理器的用户名以及您要管理的组的名称。

步骤

  1. 创建一个清单文件,如 inventory.file,并在该文件中定义 ipaserver

    [ipaserver]
    server.idm.example.com
  2. 使用必要的用户和组成员管理信息创建一个 Ansible playbook 文件:

    ---
    - name: Playbook to handle membership management
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure user test is present for group_a
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: group_a
          membermanager_user: test
    
      - name: Ensure group_admins is present for group_a
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: group_a
          membermanager_group: group_admins
  3. 运行 playbook:

    $ ansible-playbook --vault-password-file=password_file -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_adminsgroup_a 的成员管理者:

  1. 以管理员身份登录到 ipaserver

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. 显示 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。

24.7. 使用 Ansible playbook 确保 IdM 用户组中没有成员管理者

以下流程描述了在使用 Ansible playbook 时确保 IdM 成员管理者(用户和用户组)不存在。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。
  • 您必须具有要删除的现有成员管理者用户或组的名称,以及它们要管理的组的名称。

步骤

  1. 创建一个清单文件,如 inventory.file,并在该文件中定义 ipaserver

    [ipaserver]
    server.idm.example.com
  2. 使用必要的用户和组成员管理信息创建一个 Ansible playbook 文件:

    ---
    - name: Playbook to handle membership management
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure member manager user and group members are absent for group_a
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: group_a
          membermanager_user: test
          membermanager_group: group_admins
          action: member
          state: absent
  3. 运行 playbook:

    $ ansible-playbook --vault-password-file=password_file -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_adminsgroup_a 的成员管理者:

  1. 以管理员身份登录到 ipaserver

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. 显示 group_a 的信息:

    ipaserver]$ ipa group-show group_a
      Group name: group_a
      GID: 1133400009

其他资源

  • 请参阅 ipa host-remove-member-manager --help
  • 请参阅 ipa man page。

第 25 章 使用 IdM CLI 自动化组成员资格

通过自动化组成员资格,您可以根据其属性自动将用户和主机分配到组。例如,您可以:

  • 根据员工的经理、位置或任何其他属性,将员工的用户条目划分为组。
  • 根据主机的类、位置或任何其他属性来划分主机。
  • 将所有用户或全部主机添加到单个全局组。

本章涵盖了以下主题:

25.1. 自动化组成员资格的好处

对用户使用自动成员资格,允许您:

  • 减少手动管理组成员资格的开销

    您不再需要手动将每个用户和主机分配到组中。

  • 提高用户和主机管理的一致性

    用户和主机根据严格定义的和自动评估的标准被分配到组。

  • 简化基于组的设置的管理

    为组定义各种设置,然后应用到各个组成员,如 sudo 规则、自动挂载或访问控制。将用户和主机添加到组中会自动使管理这些设置变得更加简单。

25.2. 自动成员规则

在配置自动化组成员资格时,管理员定义自动成员规则。自动成员规则应用到特定的用户或主机目标组。它不能一次应用到多个组。

创建规则后,管理员会为其添加条件。它们指定将哪些用户或主机包含在目标组中,或从目标组中排除:

  • 包含的条件

    当用户或主机条目满足包含的条件时,它将包含在目标组中。

  • 排他条件

    当用户或主机条目满足排他条件时,它不会包含在目标组中。

条件被指定为 Perl 兼容的正则表达式(PCRE)格式的正则表达式。有关 PCRE 的更多信息,请参阅 pcresyntax (3) 手册页。

注意

IdM 在包含条件之前评估排他条件。在发生冲突时,排他条件优先于包含条件。

自动成员规则适用于将来创建的每个条目。这些条目将自动添加到指定的目标组中。如果一个条目满足多个自动成员规则中指定的条件,它将被添加到所有对应的组中。

现有条目 不会受到 新规则的影响。如果要更改现有条目,请参阅使用 IdM CLI 将自动成员规则应用到现有条目

25.3. 使用 IdM CLI 添加自动成员规则

按照以下流程,使用 IdM CLI 添加自动成员规则。有关自动成员规则的详情,请参考 自动成员规则

添加自动成员规则后,您可以在 向自动成员规则中添加条件 中所述的流程为其添加条件 。

注意

现有条目 不会受到 新规则的影响。如果要更改现有条目,请参阅使用 IdM CLI 将自动成员规则应用到现有条目

先决条件

步骤

  1. 输入 ipa automember-add 命令,来添加自动成员规则。
  2. 在提示时,指定:

    • 自动成员规则。这是目标组名称。
    • 分组类型。这将指定规则以用户组还是主机组为目标。要以用户组为目标,请输入 group。要以主机组为目标,请输入 hostgroup

    例如,要为名为 user_group 的用户组添加自动成员规则:

    $ ipa automember-add
    Automember Rule: user_group
    Grouping Type: group
    --------------------------------
    Added automember rule "user_group"
    --------------------------------
        Automember Rule: user_group

验证步骤

25.4. 使用 IdM CLI 将条件添加到自动成员规则中

配置自动成员规则后,您可以使用 IdM CLI 向该自动成员规则添加条件。有关自动成员规则的详情,请参考 自动成员规则

先决条件

步骤

  1. 使用 ipa automember-add-condition 命令定义一个或多个包含或排他条件。
  2. 在提示时,指定:

    • 自动成员规则。这是目标规则名称。详情请查看 自动成员规则
    • 属性键。这将指定过滤器将应用到的条目属性。例如,用户的 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
    ----------------------------

验证步骤

25.5. 使用 IdM CLI 查看现有的自动成员规则

按照以下流程,使用 IdM CLI 查看现有的自动成员规则。

先决条件

步骤

  1. 输入 ipa automember-find 命令。
  2. 在提示时,指定 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
    ----------------------------

25.6. 使用 IdM CLI 删除自动成员规则

按照以下流程,使用 IdM CLI 删除自动成员规则。

删除自动成员规则也会删除与规则相关的所有条件。要只从规则中删除特定条件,请参阅 使用 IdM CLI 从自动成员规则中删除条件

先决条件

步骤

  1. 输入 ipa automember-del 命令。
  2. 在提示时,指定:

    • 自动成员规则。这是您要删除的规则。
    • 分组规则。这将指定您要删除的规则是针对用户组的还是主机组的。输入 grouphostgroup

25.7. 使用 IdM CLI 从自动成员规则中删除条件

按照以下流程从自动成员规则中删除特定条件。

先决条件

步骤

  1. 输入 ipa automember-remove-condition 命令。
  2. 在提示时,指定:

    • 自动成员规则。这是您要从中删除条件的规则的名称。
    • 属性键。这是目标条目属性。例如,用户的 uid
    • 分组类型。这将指定您要删除的条件是针对用户组的还是主机组的。输入 grouphostgroup
    • 包含正则表达式排他正则表达式。它们指定您要删除的条件。如果您只想指定一个条件,请在提示输入其它条件时按 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
    ------------------------------

25.8. 使用 IdM CLI 将自动成员规则应用到现有条目

自动成员规则在规则添加后,自动应用到所创建的用户和主机条目。它们不会追溯到在规则添加之前存在的条目。

要将自动成员规则应用到之前添加的条目,您必须手动重建自动成员资格。重建自动成员资格会重新评估所有现有的自动成员规则,并将其应用到所有用户或主机条目或特定的条目。

注意

重建自动成员资格 不会 从组中删除用户或主机条目,即使条目不再与组的包含条件匹配。要手动删除它们,请参阅 使用 IdM CLI 从用户组中删除成员使用 CLI 删除 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 选项。

25.9. 使用 IdM CLI 配置默认的自动成员组

当您配置默认的自动成员组时,与任何自动成员规则不匹配的新用户或主机条目将自动添加到此默认组中。

先决条件

步骤

  1. 输入 ipa automember-default-group-set 命令,来配置默认的自动成员组。
  2. 在提示时,指定:

    • 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

第 26 章 使用 IdM Web UI 自动化组成员资格

使用自动化组成员资格,使您可以根据其属性自动将用户和主机分配给组。例如,您可以:

  • 根据员工的经理、位置或任何其他属性,将员工的用户条目划分为组。
  • 根据主机的类、位置或任何其他属性来划分主机。
  • 将所有用户或全部主机添加到单个全局组。

本章涵盖了以下主题:

26.1. 自动化组成员资格的好处

对用户使用自动成员资格,允许您:

  • 减少手动管理组成员资格的开销

    您不再需要手动将每个用户和主机分配到组中。

  • 提高用户和主机管理的一致性

    用户和主机根据严格定义的和自动评估的标准被分配到组。

  • 简化基于组的设置的管理

    为组定义各种设置,然后应用到各个组成员,如 sudo 规则、自动挂载或访问控制。将用户和主机添加到组中会自动使管理这些设置变得更加简单。

26.2. 自动成员规则

在配置自动化组成员资格时,管理员定义自动成员规则。自动成员规则应用到特定的用户或主机目标组。它不能一次应用到多个组。

创建规则后,管理员会为其添加条件。它们指定将哪些用户或主机包含在目标组中,或从目标组中排除:

  • 包含的条件

    当用户或主机条目满足包含的条件时,它将包含在目标组中。

  • 排他条件

    当用户或主机条目满足排他条件时,它不会包含在目标组中。

条件被指定为 Perl 兼容的正则表达式(PCRE)格式的正则表达式。有关 PCRE 的更多信息,请参阅 pcresyntax (3) 手册页。

注意

IdM 在包含条件之前评估排他条件。在发生冲突时,排他条件优先于包含条件。

自动成员规则适用于将来创建的每个条目。这些条目将自动添加到指定的目标组中。如果一个条目满足多个自动成员规则中指定的条件,它将被添加到所有对应的组中。

现有条目 不会受到 新规则的影响。如果要更改现有条目,请参阅 使用 IdM Web UI 将自动成员规则应用到现有条目

26.3. 使用 IdM Web UI 添加自动成员规则

按照以下流程,使用 IdM Web UI 添加自动成员规则。有关自动成员规则的信息,请参考 自动成员规则

注意

现有条目 不会受到 新规则的影响。如果要更改现有条目,请参阅 使用 IdM Web UI 将自动成员规则应用到现有条目

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。
  • 新规则的目标组在 IdM 中存在。

步骤

  1. 点击 Identity → Automember,然后选择 User group rulesHost group rules
  2. 点击 Add
  3. Automember rule 字段中,选择规则要应用的组。这是目标组名称。

    "Add Rule"窗口的截图显示自动成员规则的下拉字段,您可以在其中对之前定义的规则进行选择。
  4. 单击 Add 确认。
  5. 可选: 您可以使用在 使用 IdM Web UI 向自动成员规则中添加条件 中所述的步骤,向新规则添加条件。

26.4. 使用 IdM Web UI 向自动成员规则中添加条件

配置自动成员规则后,您可以使用 IdM Web UI 向该自动成员规则添加条件。有关自动成员规则的信息,请参考 自动成员规则

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。
  • 目标规则在 IdM 中存在。

步骤

  1. 点击 Identity → Automember,然后选择 User group rulesHost group rules
  2. 点击您要向其添加条件的规则。
  3. InclusiveExclusive 部分中,点击 Add。

    User group 规则页面的屏幕截图,其中显示了 user_group 规则的属性。"Inclusive"部分有一个带有"Attribute"列的表,以及带有 Attribute "uid" 条目的"Expression"列,其表达式为 ".*"。底部是 Exclusive 部分,它也有一个带有 Attribute 列和 Expression 列的表,但它没有条目。
  4. Attribute 字段中,选择需要的属性,如 uid
  5. Expression 字段中,定义正则表达式。
  6. 点击 Add

    例如,以下条件以用户 ID(uid)属性中带有任何值(.*)的所有用户为目标。

    "Add Condition into automember"弹出窗口的截图显示了 Attribute(选择了uid)以及相应的"Expression"的字段(必需的,已输入 .*)的下拉菜单。"Add"按钮位于窗口的底部。

26.5. 使用 IdM Web UI 查看现有的自动成员规则和条件

按照以下流程,使用 IdM Web UI 查看现有的自动成员规则和条件。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。

步骤

  1. 点击 Identity → Automember,然后选择 User group rulesHost group rules 来查看对应的自动成员规则。
  2. 可选:点击规则,来查看 InclusiveExclusive 部分中规则的条件。

    用户组规则"user_group"的详细信息的屏幕截图。有一个"General"部分,其中显示了自动成员规则的名称和"描述"。底部有一个"Inclusive"部分,其中有一个表,显示标有"Attribute"和"Expression"列的条目。此表有一个条目,其中 uid 作为 Attribute,.* 作为 Expression。在底部有一个"Exclusive"部分,其中有一个表,其与"Inclusive"表结构相匹配,但没有条目。

26.6. 使用 IdM Web UI 删除自动成员规则

按照以下流程,使用 IdM Web UI 删除自动成员规则。

删除自动成员规则也会删除与规则相关的所有条件。要只从规则中删除特定条件,请参阅 使用 IdM Web UI 从自动成员规则中删除条件

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。

步骤

  1. 点击 Identity → Automember,然后选择 User group rulesHost group rules 来查看对应的自动成员规则。
  2. 选中您要删除的规则旁边的复选框。
  3. 单击 Delete

    "User group rules"页面截图,其中显示了一个自动成员规则表。"user_group"条目的复选框已选中,"Delete"按钮已高亮显示。
  4. 单击 Delete 确认。

26.7. 使用 IdM Web UI 从自动成员规则中删除条件

按照以下流程,使用 IdM Web UI 从自动成员规则中删除特定条件。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。

步骤

  1. 点击 Identity → Automember,然后选择 User group rulesHost group rules 来查看对应的自动成员规则。
  2. 点击规则,来查看 InclusiveExclusive 部分中规则的条件。
  3. 选中您要删除的条件旁边的复选框。
  4. 单击 Delete

    显示"user_group"信息的"User group rule"页面的截图。"Inclusive"部分中条目的复选框已选中,而且与"Inclusive"部分相关的"Delete"按钮已高亮显示。
  5. 单击 Delete 确认。

26.8. 使用 IdM Web UI 将自动成员规则应用到现有条目

自动成员规则在规则添加后,自动应用到所创建的用户和主机条目。它们不会追溯到在规则添加之前存在的条目。

要将自动成员规则应用到之前添加的条目,您必须手动重建自动成员资格。重建自动成员资格会重新评估所有现有的自动成员规则,并将其应用到所有用户或主机条目或特定的条目。

注意

重建自动成员资格 不会 从组中删除用户或主机条目,即使条目不再与组的包含条件匹配。要手动删除它们,请参阅 使用 IdM Web UI 从用户组中删除成员在 IdM Web UI 中删除主机组成员

26.8.1. 为所有用户或主机重建自动成员资格

按照以下流程,为所有用户或主机条目重建自动成员资格。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。

步骤

  1. 选择 IdentityUsersHosts
  2. 单击 ActionsRebuild auto membership

    高亮显示"Rebuild auto membership"是"Actions"下拉菜单中的一个选项的屏幕截图。

26.8.2. 只为单个用户或主机重建自动成员资格

按照以下流程,为特定用户或主机条目重建自动成员资格。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。

步骤

  1. 选择 IdentityUsersHosts
  2. 单击所需的用户或主机名。
  3. 单击 ActionsRebuild auto membership

    在"Actions"下拉菜单内容中高亮显示许多其他选项中的"Rebuild auto membership"选项的屏幕截图。

26.9. 使用 IdM Web UI 配置默认的用户组

当您配置默认用户组时,不与任何自动成员规则匹配的新用户条目将自动添加到此默认组中。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。
  • 您要设置为默认的目标用户组在 IdM 中存在。

步骤

  1. 点击 Identity → Automember,然后选择 User group rules
  2. Default user group 字段中,选择您要设置为默认用户组的组。

    设置默认用户组

26.10. 使用 IdM Web UI 配置默认的主机组

配置默认主机组时,不与任何自动成员规则匹配的新主机条目将自动添加到此默认组中。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。
  • 您要设置为默认的目标主机组在 IdM 中存在。

步骤

  1. 点击 Identity → Automember,然后选择 Host group rules
  2. Default host group 字段中,选择您要设置为默认主机组的组。

    设置默认主机组

第 27 章 使用 Ansible 在 IdM 中自动化组成员资格

通过自动化组成员资格,您可以根据其属性自动分配用户、主机用户组和主机组。例如,您可以:

  • 根据员工的经理、地点、职位或任何其他属性将员工的用户条目分成不同的组。您可以通过在命令行中输入 ipa user-add --help 来列出所有属性。
  • 根据它们的类、位置或任何其他属性,将主机分成不同的组。您可以通过在命令行中输入 ipa host-add --help 来列出所有属性。
  • 将所有用户或全部主机添加到单个全局组。

您可以使用 Red Hat Ansible Engine 来自动管理身份管理(IdM)中的自动化组成员资格。

本节涵盖了以下主题:

27.1. 准备 Ansible 控制节点来管理 IdM

作为管理身份管理 (IdM) 的系统管理员,在使用 Red Hat Ansible Engine 时,最好执行以下操作:

  • 在您的主目录中,创建专用于 Ansible playbook 的子目录,如 ~/MyPlaybooks
  • /usr/share/doc/ansible-freeipa/*/usr/share/doc/rhel-system-roles/* 目录和子目录中的示例 Ansible playbook 复制到 ~/MyPlaybooks 目录中。
  • 将清单文件包含在 ~/MyPlaybooks 目录中。

按照这种做法,您可以在一个地方找到所有 playbook,您可以在不调用 root 特权的情况下运行 playbook。

注意

您只需要受管主机上的 root 权限来执行 ipaserveripareplicaipaclientipabackupipasmartcard_serveripasmartcard_client ansible-freeipa 角色。这些角色需要具有目录和 dnf 软件包管理器的特权访问权限。

按照以下流程创建 ~/MyPlaybooks 目录并进行配置,以便您可以使用它来存储和运行 Ansible playbook。

先决条件

  • 您已在受管节点上安装了 IdM 服务器 server.idm.example.comreplica.idm.example.com
  • 您已配置了 DNS 和网络,以便您可以直接从控制节点登录到受管节点 server.idm.example.comreplica.idm.example.com
  • 您需要知道 IdM admin 密码。

步骤

  1. 在主目录中为您的 Ansible 配置和 playbook 创建目录:

    $ mkdir ~/MyPlaybooks/
  2. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks
  3. 使用以下内容创建 ~/MyPlaybooks/ansible.cfg 文件:

    [defaults]
    inventory = /home/your_username/MyPlaybooks/inventory
    
    [privilege_escalation]
    become=True
  4. 使用以下内容创建 ~/MyPlaybooks/inventory 文件:

    [ipaserver]
    server.idm.example.com
    
    [ipareplicas]
    replica1.idm.example.com
    replica2.idm.example.com
    
    [ipacluster:children]
    ipaserver
    ipareplicas
    
    [ipacluster:vars]
    ipaadmin_password=SomeADMINpassword
    
    [ipaclients]
    ipaclient1.example.com
    ipaclient2.example.com
    
    [ipaclients:vars]
    ipaadmin_password=SomeADMINpassword

    此配置定义了两个主机组,即 euus,用于这些位置中的主机。此外,此配置定义了 ipaserver 主机组,它包含来自 euus 组的所有主机。

  5. [可选] 创建 SSH 公钥和私钥。要在测试环境中简化访问,请不要在私钥中设置密码:

    $ ssh-keygen
  6. 将 SSH 公钥复制到每个受管节点上的 IdM admin 帐户:

    $ ssh-copy-id admin@server.idm.example.com
    $ ssh-copy-id admin@replica.idm.example.com

    输入这些命令时,您必须输入 IdM admin 密码。

27.2. 使用 Ansible 确保 IdM 用户组的自动成员规则存在

以下流程描述了如何使用 Ansible playbook 确保身份管理(IdM)组的 自动成员 规则存在。在示例中,确保 testing_group 用户组的 自动成员 规则存在。

先决条件

  • 您需要知道 IdM admin 密码。
  • IdM 中存在 testing_group 用户组。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。

步骤

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 复制位于 /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
  3. 打开 automember-group-present-copy.yml 文件进行编辑。
  4. 通过在 ipaautomember 任务部分中设置以下变量来调整该文件:

    • ipaadmin_password 变量设置为 IdM admin 的密码。
    • name 变量设为 testing_group
    • automember_type 变量设为 group
    • 确保 state 变量设置为 present

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Automember group present example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure group automember rule admins is present
        ipaautomember:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: testing_group
          automember_type: group
          state: present
  5. 保存这个文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory automember-group-present-copy.yml

其他资源

27.3. 使用 Ansible 确保指定的条件在 IdM 用户组自动成员规则中存在

以下流程描述了如何使用 Ansible playbook 来确保指定的条件在身份管理(IdM)组的 自动成员 规则中存在。在示例中,确保 testing_group 组的 自动成员 规则中存在与 UID 相关的条件。通过指定 .* 条件,您可以确保所有将来的 IdM 用户都自动成为 testing_group 的成员。

先决条件

  • 您需要知道 IdM admin 密码。
  • testing_group 用户组和自动成员用户组规则在 IdM 中存在。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。

步骤

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 复制位于 /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
  3. 打开 automember-usergroup-rule-present.yml 文件进行编辑。
  4. 通过修改以下参数来调整文件:

    • 重命名 playbook 以便对应于您的用例,例如:自动成员用户组规则成员存在
    • 重命名任务以便对应于您的用例,例如:确保用户组的自动成员条件存在
    • ipaautomember 任务部分中设置以下变量:

      • ipaadmin_password 变量设置为 IdM admin 的密码。
      • 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
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure an automember condition for a user group is present
        ipaautomember:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: testing_group
          automember_type: group
          state: present
          action: member
          inclusive:
            - key: UID
              expression: .*
  5. 保存这个文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory automember-usergroup-rule-present.yml

验证步骤

  1. 以 IdM 管理员身份登录。

    $ kinit admin
  2. 例如,添加用户:

    $ 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
      ...

其他资源

27.4. 使用 Ansible 确保条件在 IdM 用户组自动成员规则中不存在

以下流程描述了如何使用 Ansible playbook 确保条件在身份管理(IdM)组的 自动成员 规则中不存在。在示例中,条件在 自动成员 规则中不存在确保了应包含指定 首字母dp 的用户。将自动成员规则应用到 testing_group 组。通过应用条件,您可以确保将来首字母为 dp 的用户不会成为 testing_group 的成员。

先决条件

  • 您需要知道 IdM admin 密码。
  • testing_group 用户组和自动成员用户组规则在 IdM 中存在。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。

步骤

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 复制位于 /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
  3. 打开 automember-usergroup-rule-absent.yml 文件进行编辑。
  4. 通过修改以下参数来调整文件:

    • 重命名 playbook 以对应于您的用例,例如:自动成员用户组规则成员不存在
    • 重命名任务以对应于您的用例,例如:确保用户组的自动成员条件不存在
    • ipaautomember 任务部分中设置以下变量:

      • ipaadmin_password 变量设置为 IdM admin 的密码。
      • 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
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure an automember condition for a user group is absent
        ipaautomember:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: testing_group
          automember_type: group
          state: absent
          action: member
          inclusive:
            - key: initials
              expression: dp
  5. 保存这个文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory automember-usergroup-rule-absent.yml

验证步骤

  1. 以 IdM 管理员身份登录。

    $ kinit admin
  2. 查看自动成员组:

    $ ipa automember-show --type=group testing_group
     Automember Rule: testing_group

输出中没有 Inclusive Regex: initials=dp 条目确认 testing_group 自动成员规则不包含指定的条件。

其他资源

27.5. 使用 Ansible 确保 IdM 用户组的自动成员规则不存在

以下流程描述了如何使用 Ansible playbook 确保身份管理(IdM)组的 自动成员 规则不存在。在示例中,确保 testing_group 组的 automember 规则不存在。

注意

删除自动成员规则也会删除与规则相关的所有条件。要从规则中只删除特定的条件,请参阅 使用 Ansible 确保条件在 IdM 用户组自动成员规则中不存在

先决条件

  • 您需要知道 IdM admin 密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。

步骤

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 复制位于 /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
  3. 打开 automember-group-absent-copy.yml 文件进行编辑。
  4. 通过在 ipaautomember 任务部分中设置以下变量来调整该文件:

    • ipaadmin_password 变量设置为 IdM admin 的密码。
    • name 变量设为 testing_group
    • automember_type 变量设为 group
    • 确保 state 变量设置为 absent

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Automember group absent example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure group automember rule admins is absent
        ipaautomember:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: testing_group
          automember_type: group
          state: absent
  5. 保存这个文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory automember-group-absent.yml

其他资源

27.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.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。

步骤

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 复制位于 /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
  3. 打开 automember-hostgroup-rule-present-copy.yml 文件进行编辑。
  4. 通过在 ipaautomember 任务部分中设置以下变量来调整该文件:

    • ipaadmin_password 变量设置为 IdM admin 的密码。
    • 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
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure an automember condition for a user group is present
        ipaautomember:
          ipaadmin_password: "{{ ipaadmin_password }}"
          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
  5. 保存这个文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory automember-hostgroup-rule-present-copy.yml

其他资源

27.7. 其他资源

第 28 章 将权限委派给用户组,来使用 IdM CLI 管理用户

委派是 IdM 中的访问控制方法之一,以及自助服务规则和基于角色的访问控制 (RBAC)。您可以使用委派(delegation)为一组用户分配权限,以管理另一组用户的条目。

本节涵盖了以下主题:

28.1. 委派规则

您可以通过创建委派规则,将权限委派给用户组来管理用户。

委派规则允许特定用户组对另一用户组中用户的特定属性执行写入(编辑)操作。这种形式的访问控制规则仅限于编辑您在委派规则中指定的属性子集的值;它不授予添加或删除整个条目或控制未指定属性的权限。

委派规则向 IdM 中的现有用户组授予权限。例如,您可以使用委派功能,允许 managers 用户组管理 employees 用户组中的选定用户属性。

28.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

28.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
----------------------------

28.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

28.5. 使用 IdM CLI 删除委派规则

按照以下流程,使用 IdM CLI 删除现有的委派规则。

先决条件

  • 您已作为 admins 组的成员登录。

步骤

  • 输入 ipa delegation-del 命令。
  • 提示时,输入您要删除的委派规则的名称:

    $ ipa delegation-del
    Delegation name: basic manager attributes
    ---------------------------------------------
    Deleted delegation "basic manager attributes"
    ---------------------------------------------

第 29 章 将权限委派给用户组,来使用 IdM Web UI 管理用户

委派是 IdM 中的访问控制方法之一,以及自助服务规则和基于角色的访问控制 (RBAC)。您可以使用委派(delegation)为一组用户分配权限,以管理另一组用户的条目。

本节涵盖了以下主题:

29.1. 委派规则

您可以通过创建委派规则,将权限委派给用户组来管理用户。

委派规则允许特定用户组对另一用户组中用户的特定属性执行写入(编辑)操作。这种形式的访问控制规则仅限于编辑您在委派规则中指定的属性子集的值;它不授予添加或删除整个条目或控制未指定属性的权限。

委派规则向 IdM 中的现有用户组授予权限。例如,您可以使用委派功能,允许 managers 用户组管理 employees 用户组中的选定用户属性。

29.2. 使用 IdM WebUI 创建委派规则

按照以下流程,使用 IdM WebUI 创建委派规则。

先决条件

  • 您已作为 admins 组的成员登录到 IdM Web UI。

步骤

  1. IPA Server 菜单中点击 Role-Based Access ControlDelegations
  2. 点击 Add

    显示"IPA Server"选项卡中"Role-Based Access Control"下拉子菜单内容的 IdM Web UI 的屏幕截图。"Role-Based Access Control"下拉菜单中有五个选项:Roles - Privileges - Permissions - Self Service Permissions - Delegations。
  3. Add delegation 窗口中执行以下操作:

    1. 命名新的委派规则。
    2. 通过选择复选框来设置权限,以指示用户是否有权查看给定的属性(),并添加或更改给定的属性()。
    3. 在"用户组"下拉菜单中,选择 被授予权限 来查看或编辑成员组中的用户条目的组。
    4. Member user group 下拉菜单中,选择其条目可以被委派组的成员编辑 的组。
    5. 在属性框中,按您要为其授予权限的属性选择复选框。

      "Add delegation"弹出窗口的屏幕截图,您可以在其中输入委派的详细信息。条目选项包括委派名称的文本字段,以及"读"和"写"权限的复选框。用户组还有一个下拉菜单,即成员用户组的下拉菜单,以及许多属性复选框(例如 departmentnumber - employeenumber - businesscategory - employeetype)。
    6. 单击 Add 按钮,以保存新的委派规则。

29.3. 使用 IdM WebUI 查看现有的委派规则

按照以下流程,使用 IdM WebUI 查看现有的委派规则。

先决条件

  • 您已作为 admins 组的成员登录到 IdM Web UI。

步骤

  • IPA Server 菜单中点击 Role-Based Access ControlDelegations

    IdM Web UI 的屏幕截图,显示了"IPA Server"选项卡的"Role-Based Access Control"子菜单中的"Delegations"页面。有一个表显示了按其"Delegation name"组织的委派。

29.4. 使用 IdM WebUI 修改委派规则

按照以下流程,使用 IdM Web UI 修改现有的委派规则。

先决条件

  • 您已作为 admins 组的成员登录到 IdM Web UI。

步骤

  1. IPA Server 菜单中点击 Role-Based Access ControlDelegations

    IdM Web UI 的截图,显示了 IPA Server 选项卡中Role-Based Access Control 子页面。委派页面显示一个表,其中包含一个用于"basic manager attributes"委派名称的条目。
  2. 点击您要修改的规则。
  3. 进行所需的更改:

    • 更改规则的名称。
    • 通过选择复选框来更改授予的权限,这指示用户是否有权查看给定的属性(),并添加或更改给定的属性()。
    • 在"用户组"下拉菜单中,选择 被授予权限 来查看或编辑成员组中的用户条目的组。
    • Member user group 下拉菜单中,选择其条目可以被委派组的成员编辑 的组。
    • 在属性框中,按您要为其授予权限的属性选择复选框。要删除对属性的权限,可取消相关的复选框。

      委派页面显示"basic manager attributes"委派的详细信息,如委派名称 - 权限(必需的,如"读"和"写") - 用户组(必需的,如"managers") - 成员用户组(必需的,如"employees")和属性(必需的,如 employeetype - businesscategory - departmentnumber - displayname - employeenumber - homedirectory)。左上角的"save"按钮高亮显示。
    • 单击 Save 按钮来保存更改。

29.5. 使用 IdM WebUI 删除委派规则

按照以下流程,使用 IdM Web UI 删除现有的委派规则。

先决条件

  • 您已作为 admins 组的成员登录到 IdM Web UI。

步骤

  1. IPA Server 菜单中点击 Role-Based Access ControlDelegations
  2. 选中您要删除的规则旁边的复选框。
  3. 单击 Delete

    "IPA Server"选项卡的"Role-Based Access Control"子菜单的屏幕截图。"Delegations"页面显示带有委派名称的表,并且"basic manager attributes"条目的复选框已选中。"Delete"按钮已高亮显示。
  4. 单击 Delete 确认。

第 30 章 委派权限到用户组,以使用 Ansible playbook 管理用户

委派是 IdM 中的访问控制方法之一,以及自助服务规则和基于角色的访问控制 (RBAC)。您可以使用委派(delegation)为一组用户分配权限,以管理另一组用户的条目。

本节涵盖了以下主题:

30.1. 委派规则

您可以通过创建委派规则,将权限委派给用户组来管理用户。

委派规则允许特定用户组对另一用户组中用户的特定属性执行写入(编辑)操作。这种形式的访问控制规则仅限于编辑您在委派规则中指定的属性子集的值;它不授予添加或删除整个条目或控制未指定属性的权限。

委派规则向 IdM 中的现有用户组授予权限。例如,您可以使用委派功能,允许 managers 用户组管理 employees 用户组中的选定用户属性。

30.2. 为 IdM 创建 Ansible 清单文件

在使用 Ansible 时,最好在主目录中创建一个专用于 Ansible playbook 的子目录,您可复制 /usr/share/doc/ansible-freeipa/*/usr/share/doc/rhel-system-roles/* 子目录并进行相应的调整。这种做法有以下优点:

  • 您可以在一个位置找到所有 playbook。
  • 您可以运行 playbook,而无需调用 root 特权。

步骤

  1. 在主目录中为您的 Ansible 配置和 playbook 创建目录:

    $ mkdir ~/MyPlaybooks/
  2. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks
  3. 使用以下内容创建 ~/MyPlaybooks/ansible.cfg 文件:

    [defaults]
    inventory = /home/<username>/MyPlaybooks/inventory
    
    [privilege_escalation]
    become=True
  4. 使用以下内容创建 ~/MyPlaybooks/inventory 文件:

    [eu]
    server.idm.example.com
    
    [us]
    replica.idm.example.com
    
    [ipaserver:children]
    eu
    us

    此配置定义了两个主机组,即 euus,用于这些位置中的主机。此外,此配置定义了 ipaserver 主机组,它包含来自 euus 组的所有主机。

30.3. 使用 Ansible 确保存在委派规则

以下流程描述了如何使用 Ansible playbook 为新的 IdM 委派规则定义特权并确保其存在。在这个示例中,新的 basic manager attributes 委派规则授予 managers 组为 employees 组成员读取和写入以下属性的权限:

  • businesscategory
  • departmentnumber
  • employeenumber
  • employeetype

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。

步骤

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 制作位于 /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
  3. 打开 delegation-present-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 ipadelegation 任务部分设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为新委派规则的名称。
    • permission 变量设置为以逗号分隔的权限列表,以授予:readwrite
    • attribute 变量设置为委派的用户组可以管理的属性列表:businesscategorydepartmentnumberemployeenumberemployeetype
    • group 变量设置为被授予查看或修改属性访问权限的组名称。
    • membergroup 变量设置为组的名称,其属性可以查看或修改。

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Playbook to manage a delegation rule
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure delegation "basic manager attributes" is present
        ipadelegation:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "basic manager attributes"
          permission: read, write
          attribute:
          - businesscategory
          - departmentnumber
          - employeenumber
          - employeetype
          group: managers
          membergroup: employees
  5. 保存这个文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-present-copy.yml

其他资源

  • 请参阅 委派规则
  • 请参阅 /usr/share/doc/ansible-freeipa/ 目录中的 README-delegation.md 文件。
  • 请参阅 /usr/share/doc/ansible-freeipa/playbooks/ipadelegation 目录中的 playbook 示例。

30.4. 使用 Ansible 确保没有委派规则

以下流程描述了如何使用 Ansible playbook 来确保您的 IdM 配置中没有指定的委托规则。以下示例描述了如何确保 IdM 中没有存在自定义 basic manager attributes 委派规则。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。

步骤

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks>/
  2. 制作位于 /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
  3. 打开 delegation-absent-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 ipadelegation 任务部分设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为委派规则的名称。
    • state 变量设置为 absent

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Delegation absent
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure delegation "basic manager attributes" is absent
        ipadelegation:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "basic manager attributes"
          state: absent
  5. 保存这个文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-absent-copy.yml

其他资源

  • 请参阅 委派规则
  • 请参阅 /usr/share/doc/ansible-freeipa/ 目录中的 README-delegation.md 文件。
  • 请参阅 /usr/share/doc/ansible-freeipa/playbooks/ipadelegation 目录中的 playbook 示例。

30.5. 使用 Ansible 确保委派规则具有特定属性

以下流程描述了如何使用 Ansible playbook 确保委派规则具有特定的设置。您可以使用此 playbook 修改您之前创建的委派角色。在示例中,您可以确保 basic manager attributes 委派规则仅具有 departmentnumber 成员属性。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。
  • IdM 中存在 basic manager attributes委派规则。

步骤

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 制作位于 /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
  3. 打开 delegation-member-present-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 ipadelegation 任务部分设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为要修改的委派规则的名称。
    • attribute 变量设置为 departmentnumber
    • action 变量设置为 member

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Delegation member present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure delegation "basic manager attributes" member attribute departmentnumber is present
        ipadelegation:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "basic manager attributes"
          attribute:
          - departmentnumber
          action: member
  5. 保存这个文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -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 示例。

30.6. 使用 Ansible 确保委派规则没有特定属性

以下流程描述了如何使用 Ansible playbook 来确保委派规则没有特定的设置。您可以使用此 playbook 确保委派角色不授予不需要的访问权限。在该示例中,您可以确保 basic manager attributes 委派规则没有 employeenumberemployeetype 成员属性。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible vault 存储了 ipaadmin_password
  • 目标节点,也就是在其上执行 ansible-freeipa 模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。
  • IdM 中存在 basic manager attributes委派规则。

步骤

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 制作位于 /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
  3. 打开 delegation-member-absent-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 ipadelegation 任务部分设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为要修改的委派规则的名称。
    • attribute 变量设置为 employeenumberemployeetype
    • action 变量设置为 member
    • state 变量设置为 absent

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Delegation member absent
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure delegation "basic manager attributes" member attributes employeenumber and employeetype are absent
        ipadelegation:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "basic manager attributes"
          attribute:
          - employeenumber
          - employeetype
          action: member
          state: absent
  5. 保存这个文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -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 示例。