Red Hat Training

A Red Hat training course is available for RHEL 8

配置和管理身份管理

Red Hat Enterprise Linux 8

在 Red Hat Enterprise Linux 8 中配置、管理和维护身份管理

摘要

本文档集合提供了如何在 Red Hat Enterprise Linux 8 中有效地配置、管理和维护身份管理的说明。

使开源包含更多

红帽承诺替换我们的代码、文档和网页属性中存在问题的语言。我们从这四个术语开始: master、slave、blacklist 和 whitelist。这些更改将在即将发行的几个发行本中逐渐实施。如需了解更多详细信息,请参阅 CTO Chris Wright 信息

在身份管理中,计划中的术语变化包括:

  • 使用 block list 替换 blacklist
  • 使用 allow list 替换 whitelist
  • 使用 secondary 替换 slave
  • master 会根据上下文被替换为其他更适当的术语:

    • 使用 IdM server 替换 IdM master
    • 使用 CA renewal server 替换 CA renewal master
    • 使用 CRL publisher server 替换 CRL master
    • 使用 multi-supplier 替换 multi-master

对红帽文档提供反馈

我们感谢您对文档提供反馈信息。请让我们了解如何改进文档。要做到这一点:

  • 关于特定内容的简单评论:

    1. 请确定您使用 Multi-page HTML 格式查看文档。另外,确定 Feedback 按钮出现在文档页的右上方。
    2. 用鼠标指针高亮显示您想评论的文本部分。
    3. 点在高亮文本上弹出的 Add Feedback
    4. 按照显示的步骤操作。
  • 要提交更复杂的反馈,请创建一个 Bugzilla ticket:

    1. 进入 Bugzilla 网站。
    2. 在 Component 中选择 Documentation
    3. Description 中输入您要提供的信息。包括文档相关部分的链接。
    4. Submit Bug

第 1 章 从命令行登录身份管理

身份管理(IdM)使用 Kerberos 协议来支持单点登录。单点登录意味着用户仅输入一次正确的用户名和密码,然后访问 IdM 服务,而无需系统再次提示输入凭证。

重要

在 IdM 中,系统安全服务守护进程(SSSD)在用户成功登录到带有相应 Kerberos 主体名的 IdM 客户端机器上的桌面环境后,会自动获取用户授予票据(TGT)。这意味着登录后,用户不需要使用 kinit 工具来访问 IdM 资源。

如果您已清除 Kerberos 凭证缓存或者 Kerberos TGT 已过期,您需要手动请求 Kerberos ticket 以访问 IdM 资源。以下小节介绍了在 IdM 中使用 Kerberos 时的基本用户操作。

1.1. 使用 kinit 手动登录到 IdM

这个步骤描述了使用 kinit 工具手动向 Identity Management(IdM)环境进行身份验证。kinit 程序代表 IdM 用户获取并缓存 Kerberos 票据授予票据(TGT)。

注意

只有在初始 Kerberos TGT 销毁或者已过期时才使用这个步骤。作为 IdM 用户,当登录到本地机器时,您也会自动登录到 IdM。这意味着登录后,您不需要使用 kinit 工具来访问 IdM 资源。

流程

  1. 要登录到 IdM

    • 在当前登录到本地系统的用户的用户名下,使用 kinit 但不指定用户名。例如,如果您在本地系统中以 example_user 身份登录:

      [example_user@server ~]$ kinit
      Password for example_user@EXAMPLE.COM:
      [example_user@server ~]$

      如果本地用户的用户名与 IdM 中的任何用户条目不匹配,则身份验证尝试会失败:

      [example_user@server ~]$ kinit
      kinit: Client 'example_user@EXAMPLE.COM' not found in Kerberos database while getting initial credentials
    • 使用与您的本地用户名不匹配的 Kerberos 主体,将所需的用户名传递给 kinit 实用程序。例如,要以 admin 用户身份登录:

      [example_user@server ~]$ kinit admin
      Password for admin@EXAMPLE.COM:
      [example_user@server ~]$
  2. 要验证登录是否成功,可使用 klist 实用程序显示缓存的 TGT。在以下示例中,缓存包含 example_user 主体的 ticket,这意味着在这个特定的主机上,当前只允许 example_user 访问 IdM 服务:

    $ klist
    Ticket cache: KEYRING:persistent:0:0
    Default principal: example_user@EXAMPLE.COM
    
    Valid starting     	Expires            	Service principal
    11/10/2019 08:35:45  	11/10/2019 18:35:45  	krbtgt/EXAMPLE.COM@EXAMPLE.COM

1.2. 销毁用户的活动 Kerberos ticket

这部分论述了如何清除包含用户活跃 Kerberos ticket 的凭据缓存。

流程

  1. 销毁您的 Kerberos ticket:

    [example_user@server ~]$ kdestroy
  2. (可选)检查 Kerberos ticket 是否已销毁:

    [example_user@server ~]$ klist
    klist: Credentials cache keyring 'persistent:0:0' not found

1.3. 为 Kerberos 身份验证配置外部系统

本节论述了如何配置外部系统,以便身份管理(IdM)用户可以使用 Kerberos 凭证从外部系统登录 IdM。

当您的基础架构包含多个域或重叠域时,在外部系统中启用 Kerberos 身份验证特别有用。如果系统尚未通过 ipa-client-install 注册任何 IdM 域,它也很有用。

要从不属于 IdM 域成员的系统启用对 IdM 的 Kerberos 身份验证,请在外部系统中定义特定于 IdM 的 Kerberos 配置文件。

先决条件

  • krb5-workstation 软件包安装在外部系统上。

    要查找是否安装了该软件包,请使用以下 CLI 命令:

    # yum list installed krb5-workstation
    Installed Packages
    krb5-workstation.x86_64    1.16.1-19.el8     @BaseOS

流程

  1. /etc/krb5.conf 文件从 IdM 服务器复制到外部系统。例如:

    # scp /etc/krb5.conf root@externalsystem.example.com:/etc/krb5_ipa.conf
    警告

    不要覆盖外部系统上的现有 krb5.conf 文件。

  2. 在外部系统中,将终端会话设置为使用复制的 IdM Kerberos 配置文件:

    $ export KRB5_CONFIG=/etc/krb5_ipa.conf

    KRB5_CONFIG 变量仅临时存在,直到您注销为止。要防止此丢失,请使用其他文件名导出 变量。

  3. 将 Kerberos 配置代码段从 /etc/krb5.conf.d/ 目录复制到外部系统。

外部系统中的用户现在可以使用 kinit 工具对 IdM 服务器进行身份验证。

其它资源

  • 有关 Kerberos 的详情,请查看 krb5.conf(5)kinit(1)、 klist(1)和 kdestroy(1) man page。

第 2 章 查看、启动和停止身份管理服务

身份管理(IdM)服务器是红帽企业 Linux 系统,充当域控制器(DC)。很多不同的服务在 IdM 服务器上运行,最重要的是目录服务器、证书颁发机构(CA)、DNS 和 Kerberos。

2.1. IdM 服务

2.1.1. IdM 服务器托管的服务列表

以下大多数服务并非严格要求安装到 IdM 服务器中。例如,您可以在 IdM 域外的外部服务器上安装诸如证书颁发机构(CA)或 DNS 服务器等服务。

Kerberos
krb5kdckadmin 服务

IdM 使用 Kerberos 协议来支持单点登录。使用 Kerberos 时,用户只需提供一次正确的用户名和密码,且无需系统再次提示输入凭证即可访问 IdM 服务。

Kerberos 分为两个部分:

  • krb5kdc 服务是 Kerberos 身份验证服务和密钥分发中心(KDC)守护进程。
  • kadmin 服务是 Kerberos 数据库管理工具。

有关如何在 IdM 中使用 Kerberos 进行身份验证的详情,请参阅从命令行中的 身份管理,并在 Web UI 中记录到 IdM: 使用 Kerberos 票据

LDAP 目录服务器
dirsrv 服务

IdM LDAP 目录服务器实例存储所有 IdM 信息,如与 Kerberos 相关的信息、用户帐户、主机条目、服务、策略、DNS 等。LDAP 目录服务器实例基于与红帽目录服务器相同的技术。但是,它被调优到特定于 IdM 的任务。

证书颁发机构
pki-tomcatd 服务

集成认证机构(CA) 基于与红帽证书系统相同的技术PKI 是用于访问证书系统服务的命令行界面。

如果单独创建并提供所有必需的证书,您还可以在没有集成 CA 的情况下安装服务器。

如需更多信息,请参阅规划您的 CA 服务

域名系统(DNS)
named 服务

IdM 使用 DNS 进行动态服务发现。IdM 客户端安装实用程序可使用 DNS 的信息自动配置客户端机器。客户端在 IdM 域注册后,它使用 DNS 来查找域中的 IdM 服务器和服务。Red Hat Enterprise Linux 中的 DNS(域名系统)协议的 BIND (Berkeley Internet 名称域)实现包括 指定的 DNS 服务器。named-pkcs11 是采用对 PKCS#11 加密标准的原生支持构建的 BIND DNS 服务器版本。

如需更多信息,请参阅规划您的 DNS 服务和主机名

Apache HTTP 服务器
httpd 服务

Apache HTTP Web 服务器提供 IdM Web UI,还管理证书颁发机构和其他 IdM 服务之间的通信。

Samba/ Winbind
SMBwinbind 服务

Samba 在红帽企业 Linux 中实施服务器消息块(SMB)协议,也称为通用 Internet 文件系统(CIFS)协议。通过 smb 服务,SMB 协议可让您访问服务器上的资源,如文件共享和共享打印机。如果您为 Trust 配置了一个 Active Directory(AD)环境,'Winbind' 服务负责管理 IdM 服务器和 AD 服务器之间的通信。

一次性密码(OTP)验证
ipa-otpd 服务

一次性密码(OTP)是由身份验证令牌为一个会话生成的密码,作为双重身份验证的一部分。OTP 身份验证在 Red Hat Enterprise Linux 中通过 ipa-otpd 服务实现。

如需更多信息,请参阅使用一个时间密码登录到身份管理 Web UI

OpenDNSSEC
ipa-dnskeysyncd 服务

OpenDNSSEC 是一个 DNS 管理器,可自动跟踪 DNS 安全扩展(DNSSEC)密钥和区域的签名。ipa-dnskeysyncd 服务管理 IdM Directory 服务器和 OpenDNSSEC 之间的同步。

身份管理服务器:统一服务

2.1.2. IdM 客户端托管的服务列表

  • 系统安全服务守护进程sssd 服务

系统安全服务守护进程 (SSSD)是客户端应用程序,用于管理用户身份验证和缓存凭据。缓存可让本地系统在 IdM 服务器不可用或客户端离线时继续正常身份验证操作。

如需更多信息,请参阅了解 SSSD 及其优势

  • Certmongercertmonger 服务

certmonger 服务监控并更新客户端上的证书。它可以为系统上的服务请求新证书。

如需更多信息,请参阅使用 certmonger 为服务获取 IdM 证书

IdM 服务间的交互

2.2. 查看 IdM 服务的状态

要查看 IdM 服务器中配置的 IdM 服务的状态,请运行 ipactl status 命令:

[root@server ~]# ipactl status
Directory Service: RUNNING
krb5kdc Service: RUNNING
kadmin Service: RUNNING
named Service: RUNNING
httpd Service: RUNNING
pki-tomcatd Service: RUNNING
smb Service: RUNNING
winbind Service: RUNNING
ipa-otpd Service: RUNNING
ipa-dnskeysyncd Service: RUNNING
ipa: INFO: The ipactl command was successful

服务器中 ipactl status 命令的输出取决于您的 IdM 配置。例如,如果 IdM 部署不包含 DNS 服务器,则列表中不存在 named 服务。

注意

您不能使用 IdM Web UI 查看在特定 IdM 服务器中运行的所有 IdM 服务的状态。可以在 IdM Web UI 的 IdentityServices 选项卡中查看在不同服务器中运行的 Kerberized 服务。

您可以启动或停止整个服务器,或者仅启动单个服务。

要启动、停止或重启整个 IdM 服务器,请参阅:

要启动、停止或重启独立的 IdM 服务,请参阅:

要显示 IdM 软件的版本,请参阅:

2.3. 启动和停止整个身份管理服务器:ip actl 工具

使用 ipactl 实用程序停止、启动或重新启动整个 IdM 服务器,以及所有已安装的服务。使用 ipactl 实用程序确保所有服务都以适当的顺序停止、启动或重新启动。您不需要具有有效的 Kerberos ticket 即可运行 ipactl 命令。

ipactl 命令

启动整个 IdM 服务器:

# ipactl start

停止整个 IdM 服务器:

# ipactl stop

重启整个 IdM 服务器:

# ipactl restart

显示组成 IdM 的所有服务的状态:

# ipactl status
重要

您不能使用 IdM Web UI 执行 ipactl 命令。

2.4. 启动和停止单个身份管理服务:system ctl 工具

通常不建议手动更改 IdM 配置文件。然而,在某些情况下,管理员需要执行特定服务的手动配置。在这种情况下,使用 systemctl 实用程序停止、启动或重启单个 IdM 服务。

例如,自定义 Directory 服务器行为后使用 systemctl,而不修改其他 IdM 服务:

# systemctl restart dirsrv@REALM-NAME.service

另外,在最初使用 Active Directory 部署 IdM 信任时,请修改 /etc/sssd/sssd.conf 文件,并添加:

  • 用于调整远程服务器具有高延迟环境中的超时配置选项的特定参数
  • 用于调整 Active Directory 站点关联性的特定参数
  • 覆盖不是由全局 IdM 设置提供的特定配置选项

要应用您在 /etc/sssd/sssd.conf 文件中所做的更改:

# systemctl restart sssd.service

需要运行 systemctl restart sssd.service,因为系统安全服务后台程序(SSSD)不会自动重新读取或重新应用其配置。

请注意,对于影响 IdM 身份范围的更改,建议您完成完整的服务器重启。

重要

要重启多个 IdM 域服务,请始终使用 ipactl。由于 IdM 服务器安装的服务之间的依赖关系,启动和停止它们的顺序至关重要。ipactl 实用程序确保以适当顺序启动和停止服务。

有用的 systemctl 命令

启动特定的 IdM 服务:

# systemctl start name.service

停止特定的 IdM 服务:

# systemctl stop name.service

要重启特定的 IdM 服务:

# systemctl restart name.service

查看特定 IdM 服务的状态:

# systemctl status name.service
重要

您不能使用 IdM Web UI 来启动或停止在 IdM 服务器中运行的单个服务。您只能使用 Web UI 来修改 Kerberized 服务的设置,方法是导航到 IdentityServices 并选择服务。

2.5. 显示 IdM 软件版本的方法

您可以使用以下命令显示 IdM 版本号:

  • IdM WebUI
  • ipa 命令
  • RPM 命令

 

通过 WebUI 显示版本

在 IdM Web UI 中,可以通过从右上角的用户名菜单中选择 About 来显示软件版本。

检查 IdM 软件版本
使用 ipa 命令显示版本

在命令行中使用 ipa --version 命令。

[root@server ~]# ipa --version
VERSION: 4.8.0, API_VERSION: 2.233
使用 rpm 命令显示版本

如果 IdM 服务没有正常工作,您可以使用 rpm 工具确定当前安装的 ipa-server 软件包的版本号。

[root@server ~]# rpm -q ipa-server
ipa-server-4.8.0-11.module+el8.1.0+4247+9f3fd721.x86_64

第 3 章 IdM 命令行工具简介

以下小节介绍了使用身份管理(IdM)命令行实用程序的基础知识。

先决条件

3.1. 什么是 IPA 命令行界面

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

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

IPA CLI 允许您:

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

3.2. IPA 帮助是什么

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

IPA 命令行界面(CLI)从加载的 IdM 插件模块中生成可用的帮助主题。如果要成功运行 IPA 帮助,您需要:

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

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

对选项执行帮助时具有以下语法:

$ ipa help [TOPIC | COMMAND | topics | commands]
  • [] SAS- SASbrackets 表示所有参数都是可选的,您可以 只编写 ipa 帮助,并且将执行 命令。
  • | SAS- 管道 字符 表示或.因此,您可以使用 TOPIC 或 COMMAND 或者带有基本 ipa help 命令的主题或命令。
  • 主题 "catYou"可以 运行命令 ipa help 主题,它将正确执行。命令显示 IPA 帮助涵盖的主题列表,如 用户证书服务器 等。
  • 带有大写字母的 TO PIC - SAS TOPIC 表示变量,因此您可以使用特定主题 ,例如 ipahelp user
  • 命令 依次运行 ipa help 命令, 并且该命令将正确执行。命令显示 IPA 帮助涵盖的命令列表,例如 user-add、ca- enable、server- show 和许多其他命令。
  • COMMAND SAS- SAS 带有大写字母的 COMMAND 表示变量,因此您可以使用特定的命令 ,例如 ipa 帮助 user-add

3.3. 使用 IPA 帮助主题

以下流程可帮助您了解在命令行界面中使用 IPA 帮助。

流程

  1. 打开终端并连接到 IdM 服务器。
  2. 输入 ipa help 主题 以显示帮助涵盖的主题列表。

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

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

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

    $ ipa help user | less

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

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

3.4. 使用 IPA help 命令

以下流程可帮助您了解在命令行界面中创建 IPA 帮助命令。

流程

  1. 打开终端并连接到 IdM 服务器。
  2. 输入 ipa help 命令显示帮助 涵盖的命令列表。

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

    $ ipa help user-add

其它资源

  • 详情请查看 man ipa page。

3.5. IPA 命令的结构

IPA CLI 区分以下命令类型:

  • IdM 服务器中提供内置命令 SAS- SASBuilt-in 命令。
  • 插件提供的命令

通过 IPA 命令的结构,您可以管理各种类型的对象。例如:

  • 用户,
  • 主机、
  • DNS 记录、
  • 证书、

以及许多其他信息.

对于大多数对象,IPA CLI 包括以下命令:

  • 添加(添加
  • 修改(mod)
  • 删除(del)
  • 搜索(查找
  • 显示(显示

命令具有以下结构:

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 命令,脚本会逐个询问您的详细信息。

若要更改现有对象,您需要定义对象,因此 命令还包括 object: ipa user-mod USER_NAME [options]

3.6. 使用 IPA 命令向 IdM 添加用户帐户

下面介绍使用命令行将新用户添加到身份管理(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

3.7. 使用 IPA 命令修改 IdM 中的用户帐户

您可以为每个用户帐户更改多个参数。例如,您可以向用户添加新密码。

基本命令语法与 user-add 语法不同,因为您需要定义要对其执行更改的现有用户帐户,例如,添加密码。

先决条件

  • 您需要具有管理员特权才能修改 IdM 服务器中的用户帐户。

流程

  1. 打开终端并连接到 IdM 服务器。
  2. 输入命令来添加密码:

    $ ipa user-mod euser --password

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

  3. 输入新密码并按 Enter 键

成功添加用户名后,用户帐户被添加到 IdM 数据库,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

3.8. 如何为 IdM 工具提供值列表

Identity Management(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: SAS -34 ipa permission- mod 命令更新所有以前添加的权限。

$ ipa permission-mod --right=read --right=write --right=delete ...

或者

$ ipa permission-mod --right={read,write,delete} ...

示例 2 SAS- SAS ipa permission -mod 命令会删除 --right =delete 参数,因为它没有包含在命令中:

$ ipa permission-mod --right=read --right=write ...

或者

$ ipa permission-mod --right={read,write} ...

3.9. 如何在 IdM 工具中使用特殊字符

将包含特殊字符的命令行参数传递给 ipa 命令时,请使用反斜杠(\)转义这些字符。例如,常见的特殊字符包括方括号(< 和 >)、ampersand(&)、星号(*)或竖线(|)。

例如,要转义星号(*):

$ ipa certprofile-show certificate_profile --out=exported\*profile.cfg

包含未转义特殊字符的命令无法按预期工作,因为 shell 无法正确解析这些字符。

第 4 章 从命令行搜索身份管理条目

以下小节介绍了如何使用 IPA 命令,这可帮助您查找或显示对象。

4.1. IdM 条目列表概述

本节论述了 ipa *-find 命令,它可以帮助您搜索特定类型的 IdM 条目。

要列出所有 查找 命令,请使用以下 ipa help 命令:

$ ipa help commands | grep find

您可能需要检查特定的用户是否包含在 IdM 数据库中。然后您可以使用以下命令列出所有用户:

$ ipa user-find

列出指定属性包含关键字的用户组:

$ ipa group-find keyword

例如,ip a group-find admin 命令列出了名称或描述包含字符串 admin 的所有组:

----------------
3 groups matched
----------------
   Group name: admins
   Description: Account administrators group
   GID: 427200002

   Group name: editors
   Description: Limited admins who can edit other users
   GID: 427200002

   Group name: trust admins
   Description: Trusts administrators group

在搜索用户组时,您还可以将搜索结果限制为包含特定用户的组:

$ ipa group-find --user=user_name

搜索不包含特定用户的组:

$ ipa group-find --no-user=user_name

4.2. 显示特定条目的详情

使用 ipa *-show 命令显示特定 IdM 条目的详情。

流程

  • 显示名为 server.example.com 的主机详情:

    $ ipa host-show server.example.com
    
    Host name: server.example.com
    Principal name: host/server.example.com@EXAMPLE.COM
    ...

4.3. 调整搜索大小和时间限制

有些查询(比如请求 IdM 用户列表)可能会返回大量条目。通过调整这些搜索操作,您可以在运行 ipa *-find 命令时提高总体服务器性能,如 ipa user-find,并在 Web UI 中显示对应的列表。

搜索大小限制

定义从客户端 CLI 发送发送到服务器的请求或从访问 IdM Web UI 的浏览器返回的最大条目数。

默认: 100 条目。

搜索时间限制

定义服务器等待搜索运行的最长时间(以秒为单位)。搜索达到这个限制后,服务器将停止搜索并返回该时间里发现的条目。

默认: 2 秒。

如果您将值设置为 -1,IdM 在搜索时不会应用任何限制。

重要

如果设置的搜索大小或时间限制太大,则可能会对服务器性能造成负面影响。

4.3.1. 在命令行中调整搜索大小和时间限制

以下文本描述了在命令行中调整搜索大小和时间限制:

  • 全局
  • 对于一个特定条目

流程

  1. 要在 CLI 中显示当前的搜索时间和大小限制,请使用 ipa config-show 命令:

    $ ipa config-show
    
    Search time limit: 2
    Search size limit: 100
  2. 要在全局范围内调整所有查询的限制,请使用 ipa config-mod 命令并添加 --searchrecordslimit--searchtimelimit 选项。例如:

    $ ipa config-mod --searchrecordslimit=500 --searchtimelimit=5
  3. 要仅调整特定查询的限制,请在命令中添加 --sizelimit--timelimit 选项。例如:
$ ipa user-find --sizelimit=200 --timelimit=120

4.3.2. 在 Web UI 中调整搜索大小和时间限制

以下文本描述了在 IdM Web UI 中调整搜索大小和时间限制:

  • 全局
  • 对于一个特定条目

流程

为所有查询在全局范围内调整限制:

  1. 登录到 IdM Web UI。
  2. IPA Server

    Screenshot of the IdM Web UI highlighting the "IPA Server" tab from the top menu

  3. IPA Server 选项卡中点 Configuration
  4. 搜索选项区域中设置所需的值。

    默认值为:

    • 搜索大小限制: 100 个条目
    • 搜索时间限值: 2 秒
  5. 点页面顶部的 Save

    Screenshot of the IdM Web UI highlighting the Save button which is below the "Configuration" title at the top of the Configuration page

保存值后,搜索条目并验证结果。

第 5 章 在网页浏览器中访问 IdM Web UI

以下小节概述了 IdM(身份管理)Web UI,并描述了如何访问它。

5.1. 什么是 IdM Web UI

IdM(身份管理)Web UI 是 IdM 管理的 Web 应用,这是 IdM 命令行工具的图形替代方案。

您可以以以下方式访问 IdM Web UI:

  • IdM 用户:有限的操作集合,具体取决于为 IdM 服务器中的用户授予的权限。基本上,活动的 IdM 用户可以登录 IdM 服务器并配置自己的帐户。它们无法更改其他用户的设置或 IdM 服务器设置。
  • 管理员:对 IdM 服务器的完整访问权限。
  • Active Directory 用户:一组操作,具体取决于授予用户的权限。Active Directory 用户现在可以是身份管理的管理员。详情请参阅启用 AD 用户来管理 IdM

5.2. 支持访问 Web UI 的 Web 浏览器

IdM(身份管理)支持以下浏览器来连接到 Web UI:

  • Mozilla Firefox 38 及更新的版本
  • Google Chrome 46 及更新的版本

5.3. 访问 Web UI

以下流程描述了首次使用密码登录到 IdM(身份管理)Web UI。

第一次登录后,您可以将 IdM 服务器配置为进行身份验证:

流程

  1. 在浏览器地址栏中输入 IdM 服务器 URL。该名称类似以下示例:

    https://server.example.com

    您只需使用 IdM 服务器的 DNS 名称更改 server.example.com

    这会在浏览器中打开 IdM Web UI 登录屏幕。

    Screenshot of the IdM Web UI accessed within a web browser displaying a "Username" field and a "Password" field. There is a blue "Log in" button below and to the right of those two fields.

    • 如果服务器没有响应或者登录屏幕未打开,请检查您要连接的 IdM 服务器上的 DNS 设置。
    • 如果您使用自签名证书,浏览器会发出警告。检查证书并接受安全例外以进行登录。

      为避免安全例外,请安装由证书颁发机构签名的证书。

  2. 在 Web UI 登录屏幕上,输入您在 IdM 服务器安装中添加的管理员帐户凭证。

    详情请参阅安装带有集成 CA 的身份管理服务器: 集成 DNS

    如果已在 IdM 服务器中输入您的个人帐户凭证,则可以输入它们。

    A Screenshot of the IdM Web UI with the "Username" field filled in with "admin" and the "Password" field displays several black circles obfuscating the password by replacing the characters tat were typed in.

  3. 单击登录

登录成功后,您可以开始配置 IdM 服务器。

A screenshot of the first screen visible after logging in to the IdM Web UI. There are 5 tabs listed along the top of the screen: Identity - Policy - Authentication - Network Services - IPA Server. The Identity tab has been selected and it is displaying the Users page which is the first menu item among 6 choices just below the tabs: Users - Hosts - Services - Groups - ID Views - Automember. The Active users page displays a table of user logins and their information: First name - Last name - Status - UID - Email address - Telephone number - Job Title.

第 6 章 在 Web UI 中登录到 IdM: 使用 Kerberos ticket

以下小节描述了环境的初始配置,以启用 Kerberos 登录 IdM Web UI 并使用 Kerberos 身份验证访问 IdM。

先决条件

6.1. Identity Management 中的 Kerberos 身份验证

身份管理(IdM)使用 Kerberos 协议来支持单点登录。单点登录身份验证允许您仅提供一次正确的用户名和密码,然后您可以在不提示系统再次输入凭据的情况下访问身份管理服务。

如果正确配置了 DNS 和证书设置,IdM 服务器会在安装后立即提供 Kerberos 身份验证。详情请参阅安装身份管理

要在主机上使用 Kerberos 身份验证,请安装:

6.2. 使用 kinit 手动登录到 IdM

这个步骤描述了使用 kinit 工具手动向 Identity Management(IdM)环境进行身份验证。kinit 程序代表 IdM 用户获取并缓存 Kerberos 票据授予票据(TGT)。

注意

只有在初始 Kerberos TGT 销毁或者已过期时才使用这个步骤。作为 IdM 用户,当登录到本地机器时,您也会自动登录到 IdM。这意味着登录后,您不需要使用 kinit 工具来访问 IdM 资源。

流程

  1. 要登录到 IdM

    • 在当前登录到本地系统的用户的用户名下,使用 kinit 但不指定用户名。例如,如果您在本地系统中以 example_user 身份登录:

      [example_user@server ~]$ kinit
      Password for example_user@EXAMPLE.COM:
      [example_user@server ~]$

      如果本地用户的用户名与 IdM 中的任何用户条目不匹配,则身份验证尝试会失败:

      [example_user@server ~]$ kinit
      kinit: Client 'example_user@EXAMPLE.COM' not found in Kerberos database while getting initial credentials
    • 使用与您的本地用户名不匹配的 Kerberos 主体,将所需的用户名传递给 kinit 实用程序。例如,要以 admin 用户身份登录:

      [example_user@server ~]$ kinit admin
      Password for admin@EXAMPLE.COM:
      [example_user@server ~]$
  2. 要验证登录是否成功,可使用 klist 实用程序显示缓存的 TGT。在以下示例中,缓存包含 example_user 主体的 ticket,这意味着在这个特定的主机上,当前只允许 example_user 访问 IdM 服务:

    $ klist
    Ticket cache: KEYRING:persistent:0:0
    Default principal: example_user@EXAMPLE.COM
    
    Valid starting     	Expires            	Service principal
    11/10/2019 08:35:45  	11/10/2019 18:35:45  	krbtgt/EXAMPLE.COM@EXAMPLE.COM

6.3. 为 Kerberos 身份验证配置浏览器

要使用 Kerberos ticket 启用身份验证,您可能需要浏览器配置。

以下步骤可帮助您支持 Kerberos 协商以访问 IdM 域。

每个浏览器都以不同的方式支持 Kerberos,并且需要不同的设置。IdM Web UI 包含以下浏览器的指南:

  • Firefox
  • Chrome

流程

  1. 在 Web 浏览器中打开 IdM Web UI 登录对话框。
  2. 在 Web UI 登录屏幕上,单击浏览器配置的链接。

    A screenshot of the IdM Web UI log in page with empty entry fields for the Username and Password and a blue "Log in" button below those fields. Text to the right of the "Log in" button explains "to log in with Kerberos please make sure you have valid tickets (obtainable via kinit) and configured the browser correctly then click Log in." The URL for the word "configured" has been highlighted.

  3. 按照配置页面中的步骤进行操作。

    A screenshot of a web browser with instructions for "Browser Kerberos Setup."

设置后,切回到 IdM Web UI,再单击 Log in

6.4. 使用 Kerberos ticket 登录 Web UI

这个步骤描述了使用 Kerberos 票据(TGT)登录到 IdM Web UI。

TGT 在预定义的时间过期。默认的时间间隔为 24 小时,您可以在 IdM Web UI 中更改它。

时间间隔过期后,您需要续订票据:

  • 使用 kinit 命令。
  • 在 Web UI 登录对话框中使用 IdM 登录凭据。

流程

  • 打开 IdM Web UI。

    如果 Kerberos 身份验证正常工作,并且您拥有有效的票据,您将会自动验证身份并打开 Web UI。

    如果票据过期,需要首先使用凭证进行身份验证。但是,当 IdM Web UI 下次自动打开时,不会打开登录对话框。

    如果您看到 带有 Kerberos 失败的消息身份验证,请验证您的浏览器是否已针对 Kerberos 身份验证进行了配置。请参阅 第 6.3 节 “为 Kerberos 身份验证配置浏览器”

    IdM Web UI 登录屏幕截图显示空 Username 和 Password 字段上方的错误。错误消息指出"身份验证与 Kerberos 失败"。

6.5. 为 Kerberos 身份验证配置外部系统

本节论述了如何配置外部系统,以便身份管理(IdM)用户可以使用 Kerberos 凭证从外部系统登录 IdM。

当您的基础架构包含多个域或重叠域时,在外部系统中启用 Kerberos 身份验证特别有用。如果系统尚未通过 ipa-client-install 注册任何 IdM 域,它也很有用。

要从不属于 IdM 域成员的系统启用对 IdM 的 Kerberos 身份验证,请在外部系统中定义特定于 IdM 的 Kerberos 配置文件。

先决条件

  • krb5-workstation 软件包安装在外部系统上。

    要查找是否安装了该软件包,请使用以下 CLI 命令:

    # yum list installed krb5-workstation
    Installed Packages
    krb5-workstation.x86_64    1.16.1-19.el8     @BaseOS

流程

  1. /etc/krb5.conf 文件从 IdM 服务器复制到外部系统。例如:

    # scp /etc/krb5.conf root@externalsystem.example.com:/etc/krb5_ipa.conf
    警告

    不要覆盖外部系统上的现有 krb5.conf 文件。

  2. 在外部系统中,将终端会话设置为使用复制的 IdM Kerberos 配置文件:

    $ export KRB5_CONFIG=/etc/krb5_ipa.conf

    KRB5_CONFIG 变量仅临时存在,直到您注销为止。要防止此丢失,请使用其他文件名导出 变量。

  3. 将 Kerberos 配置代码段从 /etc/krb5.conf.d/ 目录复制到外部系统。
  4. 在外部系统中配置浏览器,如 第 6.3 节 “为 Kerberos 身份验证配置浏览器” 所述。

外部系统中的用户现在可以使用 kinit 工具对 IdM 服务器进行身份验证。

6.6. Active Directory 用户的 Web UI 登录

要为 Active Directory 用户启用 Web UI 登录,请在默认信任视图中为每个 Active Directory 用户定义 ID 覆盖。例如:

[admin@server ~]$ ipa idoverrideuser-add 'Default Trust View' ad_user@ad.example.com

第 7 章 使用一个时间密码登录到身份管理 Web UI

可以通过多种方法保护对 IdM Web UI 的访问。基本的一点是密码身份验证。

要提高密码身份验证的安全性,您可以添加第二个步骤并需要自动生成的一次性密码(OTP)。最常见的用途是组合与用户帐户连接的密码,将时间限制由硬件或软件令牌生成的一次性密码。

以下部分可帮助您:

  • 了解 OTP 身份验证在 IdM 中的工作方式。
  • 在 IdM 服务器中配置 OTP 身份验证。
  • 创建 OTP 令牌,并将它们与您电话中的 FreeOTP 应用程序同步。
  • 通过组合用户密码和一个时间密码,向 IdM Web UI 进行身份验证。
  • 在 Web UI 中重新同步令牌.

7.1. 先决条件

7.2. 在 Identity Management 中一次进行密码(OTP)身份验证

次密码可为您的身份验证安全添加额外步骤。身份验证使用您的密码 + 自动生成的一次性密码。

要生成一个时间密码,您可以使用硬件或软件令牌。IdM 支持软件和硬件令牌。

身份管理支持以下两个标准 OTP 机制:

  • 基于 HMAC 的一次性密码(HOTP)算法基于计数器。HMAC 代表哈希消息身份验证代码。
  • 基于时间的一次性密码(TOTP)算法是 HOTP 的扩展,以支持基于时间的移动因素。
重要

IdM 不支持 Active Directory 信任用户的 OTP 登录。

7.3. 在 Web UI 中启用一次性密码

The IdM Web UI allows you to configure hardware or software device to generate one-time passwords.

仅在登录对话框中专用字段中的常规密码之后输入一次性密码。

只有管理员才能在用户设置中启用 OTP 身份验证。

先决条件

  • 管理特权

流程

  1. 使用您的用户名和密码登录 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 sub-menu from the Identity tab.

  3. 单击您的用户名以打开用户设置。
  4. 在用户验证类型中 ,选择两种因素验证(密码 + OTP)。
  5. Save

此时,IdM 服务器中启用了 OTP 身份验证。

现在,您或用户自己需要为用户帐户分配新的令牌 ID。

7.4. 在 Web UI 中添加 OTP 令牌

下面的部分帮助您将令牌添加到 IdM Web UI 和您的软件令牌生成器中。

先决条件

  • IdM 服务器上的活跃用户帐户。
  • 管理员已在 IdM Web UI 中为特定用户帐户启用 OTP。
  • 生成 OTP 令牌的软件设备,如 FreeOTP。

流程

  1. 使用您的用户名和密码登录 IdM Web UI。
  2. 要在手机中创建令牌,打开 Authentication → OTP Tokens 选项卡。
  3. 添加

    Screenshot of the IdM Web UI highlighting the Add button near the top-right of the OTP Tokens page which is a sub-page of the Authentication section

  4. Add OTP 令牌对话框中,未填充所有内容并点击 Add

    在这个阶段,IdM 服务器在服务器中创建一个带有默认参数的令牌,并打开一个带有 QR 代码的页面。

  5. 将 QR 代码复制到您的手机。
  6. 单击确定以关闭 QR 代码。

现在,您可以生成一个时间密码,并使用它们登录到 IdM Web UI。

Screenshot of the FreeOTP application from a mobile telephone displaying two entries for OTP tokens. The first OTP token is for the example.user@IDM.EXAMPLE.COM domain and its entry displays a 6-digit OTP while its timer is running out.

7.5. 使用一次性密码登录 Web UI

这个步骤描述了首次使用一次性密码(OTP)登录 IdM Web UI。

先决条件

流程

  1. 在 Identity Management 登录屏幕中,输入您的用户名或 IdM 服务器管理员帐户的用户名。
  2. 为上面输入的用户名添加密码。
  3. 在您的设备上生成一次性密码。
  4. 在密码后面输入一次性密码(不带空格)。
  5. 登录

    如果身份验证失败,请同步 OTP 令牌。

    如果您的 CA 使用自签名证书,浏览器会发出警告。检查证书并接受安全例外以进行登录。

    如果 IdM Web UI 没有打开,请验证身份管理服务器的 DNS 配置。

登录成功后,会出现 IdM Web UI。

A screenshot of the first screen visible after logging in to the IdM Web UI. There are 5 tabs listed along the top of the screen: Identity - Policy - Authentication - Network Services - IPA Server. The Identity tab has been selected and it is displaying the Users page which is the first menu item among 6 choices just below the tabs: Users - Hosts - Services - Groups - ID Views - Automember. The Active users page displays a table of user logins and their information: First name - Last name - Status - UID - Email address - Telephone number - Job Title.

7.6. 使用 Web UI 同步 OTP 令牌

如果 OTP 登录(一次时间密码)失败,OTP 令牌不会被正确同步。

以下文本描述了令牌重新同步。

先决条件

  • 此时打开登录屏幕。
  • 生成 OTP 令牌的设备。

流程

  1. 在 IdM Web UI 登录屏幕上,单击 Sync OTP Token

    A screenshot of the IdM Web UI log in page. The "Username" and "Password" fields are empty. A link to "Sync OTP Token" at the bottom right next to the "Log In" button is highlighted.

  2. 在登录屏幕中,输入您的用户名和密码。
  3. 生成一个时间密码,并将它输入到 First OTP 字段中。
  4. 再生成一个时间密码,并将它输入到第二个 OTP 字段中。
  5. (可选)输入令牌 ID。

    A screenshot of the screen to change the OTP token. The "Username" field has been filled in with "admin". The password in the "Password" field has been obfuscated with solid circles. The "First OTP" and "Second OTP" fields also have their 6-character entries obfuscated. The last field is labeled "Token ID" and has 16 hexadecimal characters such as "18c5d06cfcbd4927". There are "Cancel" and "Sync OTP Token" buttons at the bottom right.

  6. 单击 Sync OTP Token

同步成功后,您可以登录 IdM 服务器。

7.7. 更改过期的密码

身份管理管理员可以强制您在下一次登录时更改密码。这意味着,在更改密码之前,您无法成功登录 IdM Web UI。

您第一次登录 Web UI 时可能会出现密码过期时间。

如果显示过期密码对话框,请按照 流程中的说明操作。

先决条件

  • 此时打开登录屏幕。
  • IdM 服务器的有效帐户。

流程

  1. 在密码过期登录屏幕中,输入用户名。
  2. 为上面输入的用户名添加密码。
  3. 在 OTP 字段中,如果使用一次性密码身份验证,则生成一个时间密码。

    如果您没有启用 OTP 身份验证,请将该字段留空。

  4. 输入两次新密码进行验证。
  5. 单击重置密码

    A screenshot of the IdM Web UI with a banner across the top that states "Your password has expired. Please enter a new password." The "Username" field displays "example.user" and cannot be edited. The following fields have been filled in but their contents have been replaced with dots to obfuscate the passwords: "Current Password" - "OTP" - "New Password" - "Verify Password."

成功更改密码后,将显示常见的登录对话框。使用新密码登录。

第 8 章 IdM 中 SSSD 身份验证故障排除

在 Identity Management(IdM)环境中的身份验证涉及许多组件:

在 IdM 客户端中:

  • SSSD 服务.
  • 名称服务切换(NSS)。
  • 可插拔验证模块(PAM)。

在 IdM 服务器上:

  • SSSD 服务.
  • IdM 目录服务器.
  • IdM Kerberos 密钥分发中心(KDC)。

如果您要以 Active Directory(AD)用户进行身份验证:

  • AD 域控制器上的目录服务器.
  • AD 域控制器上的 Kerberos 服务器.

要验证用户,您必须使用 SSSD 服务执行以下功能:

  • 从身份验证服务器检索用户信息。
  • 提示用户输入其凭据,将这些凭据传递到身份验证服务器,然后处理结果。

以下小节讨论 SSSD 服务和存储用户信息的服务器之间的信息流,以便您可以排除环境中身份验证尝试失败的问题:

8.1. 使用 SSSD 获取 IdM 用户信息时的数据流

下图使用 getent passwd <idm_user_name> 命令在请求 IdM 用户信息的过程中简化 IdM 客户端和 IdM 服务器之间的信息流。

A diagram with numbered arrows representing the flow of information between an IdM client and an IdM server. The following numbered list describes each step in the process.

  1. getent 命令会触发来自 libc 库的 getpwnam 调用。
  2. The libc 库引用 /etc/nsswitch.conf 配置文件来检查哪个服务负责提供用户信息,并发现 SSSD 服务的条目。
  3. The libc library opens then ss_sss 模块。
  4. nss_sss 模块检查内存映射缓存以获取用户信息。如果缓存中存在数据,则 ss_sss 模块会返回它。
  5. 如果用户信息不在内存映射缓存中,则会将请求传递给 SSSD sssd_nss 响应程序进程。
  6. SSSD 服务检查其缓存。如果缓存中存在数据并有效,sssd _nss 响应程序会从缓存中读取数据并将其返回到应用。
  7. 如果缓存中没有数据或数据已过期,sssd _nss 响应器将查询相应的后端进程并等待回复。SSSD 服务在 IdM 环境中使用 IPA 后端,通过 sssd.conf 配置文件中的 id_provider=ipa 启用。
  8. sssd_be 后端进程连接到 IdM 服务器,并从 IdM LDAP 目录服务器请求信息。
  9. IdM 服务器上的 SSSD 后端响应 IdM 客户端上的 SSSD 后端进程。
  10. 客户端上的 SSSD 后端将生成的数据存储在 SSSD 缓存中,并提醒已更新缓存的响应程序进程。
  11. sssd_nss 前端响应器进程从 SSSD 缓存检索信息。
  12. sssd_nss 响应器将用户信息发送到 then ss_sss 响应者,以完成请求。
  13. The libc 库将用户信息返回到请求它的应用程序。

8.2. 使用 SSSD 获取 AD 用户信息时的数据流

如果您在 IdM 环境和 Active Directory(AD)域之间建立了跨林信任,则在 IdM 客户端上检索 AD 用户信息时的信息流与检索 IdM 用户信息时的信息流非常相似,以及联系 AD 用户数据库的额外步骤。

下图是当用户使用 getent passwd <ad_user_name@ad.example.com> 命令请求 AD 用户信息时,信息流的简化。当使用 SSSD 检索 IdM 用户信息时,此图不包括数据流 中讨论的内部详细信息。它侧重于 IdM 客户端上的 SSSD 服务、IdM 服务器上的 SSSD 服务和 AD 域控制器上的 LDAP 数据库之间的通信。

A diagram with numbered arrows representing the flow of information between an IdM client, an IdM server, and an AD Domain Controller. The following numbered list describes each step in the process.

  1. IdM 客户端为 AD 用户信息查找其本地 SSSD 缓存。
  2. 如果 IdM 客户端没有用户信息,或者信息是 stale,客户端上的 SSSD 服务会联系 IdM 服务器上的 extdom_extop 插件来执行 LDAP 扩展操作并请求信息。
  3. IdM 服务器上的 SSSD 服务在其本地缓存中查找 AD 用户信息。
  4. 如果 IdM 服务器在其 SSSD 缓存中没有用户信息,或者其信息为过时,它将执行 LDAP 搜索,以从 AD 域控制器请求用户信息。
  5. IdM 服务器上的 SSSD 服务从 AD 域控制器接收 AD 用户信息,并将其存储在其缓存中。
  6. extdom_extop 插件从 IdM 服务器上的 SSSD 服务接收信息,该服务完成 LDAP 扩展操作。
  7. IdM 客户端上的 SSSD 服务从 LDAP 扩展操作接收 AD 用户信息。
  8. IdM 客户端将 AD 用户信息存储在其 SSSD 缓存中,并将信息返回给请求它的应用程序。

8.3. 以 IdM 中的 SSSD 用户身份进行身份验证时的数据流

以 IdM 服务器或客户端中的用户身份进行身份验证涉及以下组件:

  • 启动身份验证请求的服务,如 sshd 服务。
  • 可插拔验证模块(PAM)库及其模块.
  • SSSD 服务、其响应者和后端。
  • 智能卡读取器,如果配置了智能卡验证。
  • 身份验证服务器:

    • IdM 用户通过 IdM Kerberos 密钥分发中心(KDC)进行身份验证。
    • Active Directory(AD)用户通过 AD 域控制器(DC)进行身份验证。

下图是用户在尝试通过命令行上的 SSH 服务在本地登录主机期间需要进行身份验证时的简化信息流。

A diagram with numbered arrows representing the flow of information between an IdM client and an IdM server or AD Domain Controller during an authentication attempt. The following numbered list describes each step in the process.

  1. 使用 ssh 命令尝试身份验证会触发 libpam 库。
  2. libpam 库引用 /etc/pam.d/ 目录中与请求身份验证尝试的服务对应的 PAM 文件。在本例中,libpam 库涉及通过本地主机上的 SSH 服务进行身份验证,libpam 库检查 /etc/pam.d/system-auth 配置文件并发现 SSSD PAM 的 pam_sss.so 条目:

    auth    sufficient    pam_sss.so
  3. 要确定哪些身份验证方法可用,lib pam 库会打开 pam_sss 模块,并将 SSS_PAM_PREAUTH 请求发送到 SSSD 服务的 sssd_pam PAM 响应者。
  4. 如果配置了智能卡验证,SSSD 服务会生成一个临时 p11_child 进程,以检查智能卡并从中检索证书。
  5. 如果为用户配置了智能卡验证,sssd _pam 响应程序会尝试将智能卡中的证书与用户匹配。sssd_pam 响应器还搜索用户所属的组,因为组成员身份可能会影响访问控制。
  6. sssd_pam 响应器将 SSS_PAM_PREAUTH 请求发送到 sssd_be 后端响应器,以查看服务器支持的身份验证方法,如密码或 2 因素身份验证。在 IdM 环境中,SSSD 服务使用 IPA 响应器,默认的身份验证方法是 Kerberos。在本例中,用户使用简单的 Kerberos 密码进行身份验证。
  7. sssd_be 响应器生成一个临时 krb5_child 进程。
  8. krb5_child 进程联系 IdM 服务器上的 KDC,并检查可用的身份验证方法。
  9. KDC 响应请求:

    1. krb5_child 进程评估回复,并将结果发回到 sssd_be 后端进程。
    2. sssd_be 后端进程会接收结果。
    3. sssd_pam 响应器会收到结果。
    4. pam_sss 模块接收结果。
  10. 如果为用户配置了密码身份验证,pam_sss 模块将提示用户输入其密码。如果配置了智能卡验证,pam_sss 模块会提示用户输入其智能卡 PIN。
  11. 模块会发送带有用户名和密码的 SSS_PAM_AUTHENTICATE 请求,该请求经过以下操作:

    1. sssd_pam 响应器.
    2. sssd_be 后端进程.
  12. sssd_be 进程生成一个临时 krb5_child 进程来联系 KDC。
  13. krb5_child 进程尝试使用用户提供的用户名和密码从 KDC 检索 Kerberos Ticket Granting Ticket(TGT)。
  14. krb5_child 进程接收身份验证尝试的结果。
  15. krb5_child 进程:

    1. 将 TGT 存储到凭据缓存中。
    2. 将身份验证结果返回到 sssd_be 后端进程。
  16. 身份验证结果从 sssd_be 进程传输到:

    1. sssd_pam 响应器.
    2. pam_sss 模块.
  17. pam_sss 模块使用用户 TGT 的位置设置环境变量,以便其他应用可以引用它。

8.4. 缩小身份验证问题的范围

要成功验证用户,您必须能够使用 SSSD 服务从存储用户信息的数据库检索用户信息。以下流程描述了测试身份验证流程的不同组件的步骤,以便您可以在用户无法登录时缩小身份验证问题的范围。

流程

  1. 验证 SSSD 服务及其进程是否正在运行。

    [root@client ~]# pstree -a | grep sssd
      |-sssd -i --logger=files
      |   |-sssd_be --domain implicit_files --uid 0 --gid 0 --logger=files
      |   |-sssd_be --domain example.com --uid 0 --gid 0 --logger=files
      |   |-sssd_ifp --uid 0 --gid 0 --logger=files
      |   |-sssd_nss --uid 0 --gid 0 --logger=files
      |   |-sssd_pac --uid 0 --gid 0 --logger=files
      |   |-sssd_pam --uid 0 --gid 0 --logger=files
      |   |-sssd_ssh --uid 0 --gid 0 --logger=files
      |   `-sssd_sudo --uid 0 --gid 0 --logger=files
      |-sssd_kcm --uid 0 --gid 0 --logger=files
  2. 验证客户端可以通过 IP 地址联系用户数据库服务器。

    [user@client ~]$ ping <IP_address_of_the_database_server>

    如果此步骤失败,请检查您的网络和防火墙设置是否允许 IdM 客户端和服务器之间进行直接通信。请参阅使用和配置 firewalld

  3. 验证客户端可以通过完全限定的主机名发现并联系 IdM LDAP 服务器(适用于 IdM 用户)或 AD 域控制器( AD 用户)。

    [user@client ~]$ dig -t SRV _ldap._tcp.example.com @<name_server>
    [user@client ~]$ ping <fully_qualified_host_name_of_the_server>

    如果此步骤失败,请检查您的 Dynamic Name Service(DNS)设置,包括 /etc/resolv.conf 文件。请参阅配置 DNS 服务器顺序

    注意

    默认情况下,SSSD 服务会尝试通过 DNS 服务(SRV)记录自动发现 LDAP 服务器和 AD DC。另外,您可以通过在 sssd.conf 配置文件中设置以下选项,将 SSSD 服务限制为使用特定的服务器:

    • ipa_server = <fully_qualified_host_name_of_the_server>
    • ad_server = <fully_qualified_host_name_of_the_server>
    • ldap_uri = <fully_qualified_host_name_of_the_server>

    如果使用这些选项,请验证您可以联系它们中列出的服务器。

  4. 验证客户端是否可以对 LDAP 服务器进行身份验证,并使用 ldapsearch 命令检索用户信息。

    1. 如果您的 LDAP 服务器是 IdM 服务器,如 server.example.com,检索主机的 Kerberos 票据,并使用主机 Kerberos 主体进行身份验证数据库搜索:

      [user@client ~]$ kinit -t 'host/client.example.com@EXAMPLE.COM'
      [user@client ~]$ ldapsearch -LLL -Y GSSAPI -h server.example.com -b “dc=example,dc=com” uid=<user_name>
    2. 如果您的 LDAP 服务器是 Active Directory(AD)域控制器(DC),如 server.ad.example.com,请检索主机的 Kerberos 票据,并使用主机 Kerberos 主体执行数据库搜索:

      [user@client ~]$ kinit -t 'CLIENT$@AD.EXAMPLE.COM'
      [user@client ~]$ ldapsearch -LLL -Y GSSAPI -h server.ad.example.com -b “dc=example,dc=com” sAMAccountname=<user_name>
    3. 如果您的 LDAP 服务器是普通 LDAP 服务器,且您在 sssd.conf 文件中设置了 ldap_default_bind _dn 和 ldap_default_authtok 选项,请验证为同一 ldap_default_bind_dn 帐户:

      [user@client ~]$ ldapsearch -xLLL -D "cn=ldap_default_bind_dn_value" -W -h ldapserver.example.com -b “dc=example,dc=com” uid=<user_name>

    如果此步骤失败,请验证您的数据库设置是否允许您的主机搜索 LDAP 服务器。

  5. 由于 SSSD 服务使用 Kerberos 加密,因此请以无法登录的用户身份获得 Kerberos 票据。

    1. 如果您的 LDAP 服务器是 IdM 服务器:

      [user@client ~]$ kinit <user_name>
    2. 如果 LDAP 服务器数据库是 AD 服务器:

      [user@client ~]$ kinit <user_name@AD.EXAMPLE.COM>

    如果此步骤失败,请验证您的 Kerberos 服务器是否正常运行,所有服务器都已同步其时间,并且用户帐户未被锁定。

  6. 验证您是否可以通过命令行检索用户信息。

    [user@client ~]$ getent passwd <user_name>
    [user@client ~]$ id <user_name>

    如果此步骤失败,请验证客户端上的 SSSD 服务是否可以从用户数据库接收信息。检查 /var/log/messages 日志文件中的错误。在 SSSD 服务中启用详细日志记录,收集调试日志,并查看日志以指示问题来源。(可选)打开红帽技术支持问题单并提供您收集的故障排除信息

  7. 使用 sssctl 实用程序验证允许用户登录。

    [user@client ~]$ sssctl user-checks -a auth -s ssh <user_name>

    如果此步骤失败,请验证您的授权设置,如 PAM 配置、IdM HBAC 规则和 IdM RBAC 规则。检查 /var/log/secure 和 /var/log/messages 日志文件中的授权错误。在 SSSD 服务中启用详细日志记录,收集调试日志,并查看日志以指示问题来源。(可选)打开红帽技术支持问题单并提供您收集的故障排除信息

8.5. SSSD 日志文件和日志记录级别

每个 SSSD 服务登录到 /var/log/sssd/ 目录中自己的日志文件。对于 example.com IdM 域中的 IdM 服务器,其日志文件可能类似如下:

[root@server ~]# ls -l /var/log/sssd/
total 620
-rw-------.  1 root root      0 Mar 29 09:21 krb5_child.log
-rw-------.  1 root root  14324 Mar 29 09:50 ldap_child.log
-rw-------.  1 root root 212870 Mar 29 09:50 sssd_example.com.log
-rw-------.  1 root root      0 Mar 29 09:21 sssd_ifp.log
-rw-------.  1 root root      0 Mar 29 09:21 sssd_implicit_files.log
-rw-------.  1 root root      0 Mar 29 09:21 sssd.log
-rw-------.  1 root root 219873 Mar 29 10:03 sssd_nss.log
-rw-------.  1 root root      0 Mar 29 09:21 sssd_pac.log
-rw-------.  1 root root  13105 Mar 29 09:21 sssd_pam.log
-rw-------.  1 root root   9390 Mar 29 09:21 sssd_ssh.log
-rw-------.  1 root root      0 Mar 29 09:21 sssd_sudo.log

8.5.1. SSSD 日志文件用途

krb5_child.log
Kerberos 身份验证中涉及的短期帮助程序进程的日志文件。
ldap_child.log
与 LDAP 服务器通信的简短帮助程序进程的日志文件,涉及获取 Kerberos 票据。
sssd_<example.com>.log

对于 sssd.conf 文件中的每个域部分,SSSD 服务将有关与 LDAP 服务器通信的信息记录到单独的日志文件。例如,在名为 example.com 的 IdM 域的环境中,SSSD 服务将其信息记录在名为 sssd_example.com.log 的文件中。如果主机直接与名为 ad.example.com 的 AD 域集成,信息将记录到名为 sssd_ad.example.com.log 的文件。

注意

如果您有一个 IdM 环境以及与 AD 域的跨林信任,则有关 AD 域的信息仍会记录到 IdM 域的日志文件中。

类似地,如果主机直接集成到 AD 域,则任何子域的信息都会写入到主域的日志文件中。

selinux_child.log
用于检索和设置 SELinux 信息的短生命帮助器进程的日志文件。
sssd.log
SSSD 监控并与其响应器和后端进程通信的日志文件。
sssd_ifp.log
InfoPipe 响应器的日志文件,它提供了一个可通过系统总线访问的公共 D-Bus 接口。
sssd_nss.log
用于检索用户和组信息的 Name Services Switch(NSS)响应器的日志文件。
sssd_pac.log
Microsoft Privilege Attribute 证书(PAC)响应器的日志文件,从 AD Kerberos 票据收集 PAC,并从 PAC 中生成 AD 用户的信息,从而避免直接从 AD 请求它。
sssd_pam.log
可插拔验证模块(PAM)响应器的日志文件。
sssd_ssh.log
SSH 响应器进程的日志文件。

8.5.2. SSSD 日志记录级别

设置 debug 级别也会启用它下面的所有调试级别。例如,在 6 设置 debug 级别也会启用 debug 级别 0 到 5。

表 8.1. SSSD 日志记录级别

level描述

0

严重故障.阻止 SSSD 服务启动或导致它终止的错误。这是 RHEL 8.3 及更早版本的默认调试日志级别。

1

严重故障.不终止 SSSD 服务的错误,但至少有一个主要功能无法正常工作。

2

严重故障.声明特定请求或操作失败的错误。这是 RHEL 8.4 及之后的版本的默认调试日志级别。

3

小故障.导致级别 2 中捕获操作失败的错误。

4

配置设置.

5

功能数据.

6

跟踪操作功能的消息

7

跟踪内部控制功能的消息

8

功能内部变量的内容.

9

极低级别的追踪信息

8.6. 在 sssd.conf 文件中为 SSSD 启用详细日志记录

默认情况下,RHEL 8.4 及更新版本中的 SSSD 服务仅记录严重故障(调试级别 2),但不记录在对身份验证问题进行故障排除所需的详细级别。

要在 SSSD 服务重启 过程中永久启用详细的日志记录,请在 /etc/sssd/sssd.conf 配置文件的每个部分添加 debug_level= <integer&gt; 选项,其中 <integer> 值是一个 0 到 9 之间的数字。debug 级别最多 3 个日志较大的故障,级别 8 和更高级别提供大量详细的日志消息。级别 6 是调试身份验证问题的良好起点。

先决条件

  • 您需要 root 密码来编辑 sssd.conf 配置文件并重新启动 SSSD 服务。

流程

  1. 在文本编辑器中打开 /etc/sssd/sssd.conf 文件。
  2. debug_level 选项添加到文件的每个部分,并将 debug 级别设置为您选择的详细程度。

    [domain/example.com]
    debug_level = 6
    id_provider = ipa
    ...
    
    [sssd]
    debug_level = 6
    services = nss, pam, ifp, ssh, sudo
    domains = example.com
    
    [nss]
    debug_level = 6
    
    [pam]
    debug_level = 6
    
    [sudo]
    debug_level = 6
    
    [ssh]
    debug_level = 6
    
    [pac]
    debug_level = 6
    
    [ifp]
    debug_level = 6
  3. 保存并关闭 sssd.conf 文件。
  4. 重启 SSSD 服务以加载新的配置设置。

    [root@server ~]# systemctl restart sssd

8.7. 使用 sssctl 命令为 SSSD 启用详细的日志记录

默认情况下,RHEL 8.4 及更新版本中的 SSSD 服务仅记录严重故障(调试级别 2),但不记录在对身份验证问题进行故障排除所需的详细级别。

您可以使用 sssctl debug-level <integer> 命令在命令行中更改 SSSD 服务的 debug 级别,其中 <integer> 值是 0 到 9 之间的数字。debug 级别最多 3 个日志较大的故障,级别 8 和更高级别提供大量详细的日志消息。级别 6 是调试身份验证问题的良好起点。

先决条件

  • 您需要 root 密码来运行 sssctl 命令。

流程

  • 使用 sssctl debug-level 命令将所选的调试级别设置为您所需的详细程度。

    [root@server ~]# sssctl debug-level 6

8.8. 从 SSSD 服务收集调试日志,对 IdM 服务器的身份验证问题进行故障排除

如果您在尝试以 IdM 用户身份对 IdM 服务器进行身份验证时遇到问题,请在服务器上的 SSSD 服务中启用详细的调试日志,并收集尝试检索用户信息的日志。

先决条件

  • 您需要 root 密码来运行 sssctl 命令并重新启动 SSSD 服务。

流程

  1. 在 IdM 服务器上启用详细的 SSSD 调试日志。

    [root@server ~]# sssctl debug-level 6
  2. 为遇到身份验证问题的用户在 SSSD 缓存中使对象无效,因此您不会绕过 LDAP 服务器并检索 SSSD 的信息。

    [root@server ~]# sssctl cache-expire -u idmuser
  3. 通过删除旧的 SSSD 日志来最大程度减少数据集的故障排除。

    [root@server ~]# sssctl logs-remove
  4. 尝试切换至遇到身份验证问题的用户,同时在尝试前后收集时间戳。这些时间戳进一步缩小了数据集的范围。

    [root@server sssd]# date; su idmuser; 日期
    Mon Mar 29 15:33:48 EDT 2021
    su: user idmuser does not exist
    Mon Mar 29 15:33:49 EDT 2021
  5. (可选)如果您不想继续收集详细的 SSSD 日志,请降低 debug 级别。

    [root@server ~]# sssctl debug-level 2
  6. 查看 SSSD 日志,了解失败请求的信息。例如,检查 /var/log/sssd/sssd_example.com.log 文件表明 SSSD 服务没有在 cn=accounts,dc=example,dc=com LDAP 子树中找到用户。这可能表示用户不存在,或者存在于其他位置。

    (Mon Mar 29 15:33:48 2021) [sssd[be[example.com]]] [dp_get_account_info_send] (0x0200): Got request for [0x1][BE_REQ_USER][name=idmuser@example.com]
    ...
    (Mon Mar 29 15:33:48 2021) [sssd[be[example.com]]] [sdap_get_generic_ext_step] (0x0400): calling ldap_search_ext with [(&(uid=idmuser)(objectclass=posixAccount)(uid=)(&(uidNumber=)(!(uidNumber=0))))][cn=accounts,dc=example,dc=com].
    (Mon Mar 29 15:33:48 2021) [sssd[be[example.com]]] [sdap_get_generic_op_finished] (0x0400): Search result: Success(0), no errmsg set
    (Mon Mar 29 15:33:48 2021) [sssd[be[example.com]]] [sdap_search_user_process] (0x0400): Search for users, returned 0 results.
    (Mon Mar 29 15:33:48 2021) [sssd[be[example.com]]] [sysdb_search_by_name] (0x0400): No such entry
    (Mon Mar 29 15:33:48 2021) [sssd[be[example.com]]] [sysdb_delete_user] (0x0400): Error: 2 (No such file or directory)
    (Mon Mar 29 15:33:48 2021) [sssd[be[example.com]]] [sysdb_search_by_name] (0x0400): No such entry
    (Mon Mar 29 15:33:49 2021) [sssd[be[example.com]]] [ipa_id_get_account_info_orig_done] (0x0080): Object not found, ending request
  7. 如果您无法确定导致身份验证问题的原因:

    1. 收集您最近生成的 SSSD 日志。

      [root@server ~]# sssctl logs-fetch sssd-logs-Mar29.tar
    2. 创建一个红帽技术支持问题单并提供:

      1. SSSD 日志:sssd -logs-Mar29.tar
      2. 与日志对应的请求的控制台输出,包括时间戳和用户名:

        [root@server sssd]# date; id idmuser; date
        Mon Mar 29 15:33:48 EDT 2021
        id: ‘idmuser’: no such user
        Mon Mar 29 15:33:49 EDT 2021

8.9. 从 SSSD 服务收集调试日志,以对 IdM 客户端的身份验证问题进行故障排除

如果您在尝试以 IdM 用户身份向 IdM 客户端进行身份验证时遇到问题,请验证您可以检索 IdM 服务器上的用户信息。如果您无法在 IdM 服务器上检索用户信息,您将无法在 IdM 客户端(从 IdM 服务器检索信息)中检索它。

确认身份验证问题不源自 IdM 服务器后,从 IdM 服务器和 IdM 客户端收集 SSSD 调试日志。

先决条件

  • 用户仅在 IdM 客户端而不是 IdM 服务器中存在身份验证问题。
  • 您需要 root 密码来运行 sssctl 命令并重新启动 SSSD 服务。

流程

  1. 在客户端上:在文本编辑器中打开 /etc/sssd/sssd.conf 文件。
  2. 在客户端:ipa_server 选项添加到文件的 [domain] 部分,并将其设置为 IdM 服务器。这可避免 IdM 客户端自动发现其他 IdM 服务器,从而将此测试限制为一个客户端和一个服务器。

    [domain/example.com]
    ipa_server = server.example.com
    ...
  3. 在客户端上: 保存并关闭 sssd.conf 文件。
  4. 客户端:重启 SSSD 服务以加载配置更改。

    [root@client ~]# systemctl restart sssd
  5. 在服务器和客户端上:启用详细的 SSSD 调试日志。

    [root@server ~]# sssctl debug-level 6
    [root@client ~]# sssctl debug-level 6
  6. 在服务器和客户端中:为遇到身份验证问题的用户验证 SSSD 缓存中的对象,因此您不用绕过 LDAP 数据库,并检索 SSSD 信息已经缓存。

    [root@server ~]# sssctl cache-expire -u idmuser
    [root@client ~]# sssctl cache-expire -u idmuser
  7. 在服务器和客户端上:通过删除旧的 SSSD 日志来最小化 dataset 故障排除。

    [root@server ~]# sssctl logs-remove
    [root@server ~]# sssctl logs-remove
  8. 在客户端上:尝试在尝试前后收集时间戳时,尝试切换到遇到身份验证问题的用户。这些时间戳进一步缩小了数据集的范围。

    [root@client sssd]# date; su idmuser; date
    Mon Mar 29 16:20:13 EDT 2021
    su: user idmuser does not exist
    Mon Mar 29 16:20:14 EDT 2021
  9. (可选) 在服务器和客户端中:如果您不想继续收集详细的 SSSD 日志,请降低调试级别。

    [root@server ~]# sssctl debug-level 0
    [root@client ~]# sssctl debug-level 0
  10. 服务器和客户端:查看 SSSD 日志以获取有关失败请求的信息。

    1. 在客户端日志中查看来自客户端的请求。
    2. 在服务器日志中查看来自客户端的请求。
    3. 在服务器日志中检查请求的结果。
    4. 查看客户端收到来自服务器的请求结果的结果。
  11. 如果您无法确定导致身份验证问题的原因:

    1. 收集您最近在 IdM 服务器和 IdM 客户端中生成的 SSSD 日志。根据主机名或角色标记它们。

      [root@server ~]# sssctl logs-fetch sssd-logs-server-Mar29.tar
      [root@client ~]# sssctl logs-fetch sssd-logs-client-Mar29.tar
    2. 创建一个红帽技术支持问题单并提供:

      1. SSSD 调试日志:

        1. sssd-logs-server-Mar29.tar,来自服务器
        2. 客户端 中的 sssd-logs-client-Mar29.tar
      2. 与日志对应的请求的控制台输出,包括时间戳和用户名:

        [root@client sssd]# date; su idmuser; date
        Mon Mar 29 16:20:13 EDT 2021
        su: user idmuser does not exist
        Mon Mar 29 16:20:14 EDT 2021

第 9 章 使用 Ansible playbook 配置全局 IdM 设置

使用 Ansible config 模块,您可以检索和设置 Identity Management(IdM)的全局配置参数。

本章包括以下部分:

9.1. 使用 Ansible playbook 检索 IdM 配置

以下流程描述了如何使用 Ansible playbook 来检索有关当前全局 IdM 配置的信息。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。

流程

  1. 创建一个清单文件,如 inventory.file,并在 [ipaserver] 部分中定义要从中检索 IdM 配置的 IdM 服务器。例如,要指示 Ansible 从 server.idm.example.com 检索数据,请输入:

    [ipaserver]
    server.idm.example.com
  2. 打开 /usr/share/doc/ansible-freeipa/playbooks/config/retrieve-config.yml Ansible playbook 文件进行编辑:

    ---
    - name: Playbook to handle global IdM configuration
      hosts: ipaserver
      become: no
      gather_facts: no
    
      tasks:
      - name: Query IPA global configuration
        ipaconfig:
          ipaadmin_password: Secret123
        register: serverconfig
    
      - debug:
          msg: "{{ serverconfig }}"
  3. 通过更改以下内容来调整文件:

    • IdM 管理员的密码。
    • 其他值(如有必要)。
  4. 保存该文件。
  5. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/config/retrieve-config.yml
    [...]
    TASK [debug]
    ok: [server.idm.example.com] => {
        "msg": {
            "ansible_facts": {
                "discovered_interpreter_
            },
            "changed": false,
            "config": {
                "ca_renewal_master_server": "server.idm.example.com",
                "configstring": [
                    "AllowNThash",
                    "KDC:Disable Last Success"
                ],
                "defaultgroup": "ipausers",
                "defaultshell": "/bin/bash",
                "emaildomain": "idm.example.com",
                "enable_migration": false,
                "groupsearch": [
                    "cn",
                    "description"
                ],
                "homedirectory": "/home",
                "maxhostname": "64",
                "maxusername": "64",
                "pac_type": [
                    "MS-PAC",
                    "nfs:NONE"
                ],
                "pwdexpnotify": "4",
                "searchrecordslimit": "100",
                "searchtimelimit": "2",
                "selinuxusermapdefault": "unconfined_u:s0-s0:c0.c1023",
                "selinuxusermaporder": [
                    "guest_u:s0$xguest_u:s0$user_
                ],
                "usersearch": [
                    "uid",
                    "givenname",
                    "sn",
                    "telephonenumber",
                    "ou",
                    "title"
                ]
            },
            "failed": false
        }
    }

9.2. 使用 Ansible playbook 配置 IdM CA 续订服务器

在使用嵌入式证书颁发机构(CA)的 Identity Management(IdM)部署中,CA 续订服务器维护并更新 IdM 系统证书。它确保了强大的 IdM 部署。

有关 IdM CA 续订服务器角色的详情,请参阅 使用 IdM CA 续订服务器

以下流程描述了如何使用 Ansible playbook 配置 IdM CA 续订服务器。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。

流程

  1. 可选:识别当前 IdM CA 续订服务器:

    $ ipa config-show | grep 'CA renewal'
      IPA CA renewal master: server.idm.example.com
  2. 创建一个清单文件,如 inventory.file,并在该文件中定义 ipaserver

    [ipaserver]
    server.idm.example.com
  3. 打开 /usr/share/doc/ansible-freeipa/playbooks/config/set-ca-renewal-master-server.yml Ansible playbook 文件进行编辑:

    ---
    - name: Playbook to handle global DNS configuration
      hosts: ipaserver
      become: no
      gather_facts: no
    
      tasks:
      - name: set ca_renewal_master_server
        ipaconfig:
          ipaadmin_password: SomeADMINpassword
          ca_renewal_master_server: carenewal.idm.example.com
  4. 通过更改调整文件:

    • ipaadmin_password 变量设置的 IdM 管理员密码。
    • ca_renewal_master_server 变量所设置的 CA 续订服务器的名称。
  5. 保存该文件。
  6. 运行 Ansible playbook。指定 playbook 文件和清单文件:

    $ ansible-playbook -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/config/set-ca-renewal-master-server.yml

验证步骤

您可以验证 CA 续订服务器是否已更改:

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

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. 请求 IdM CA 续订服务器的身份:

    $ ipa config-show | grep ‘CA renewal’
    IPA CA renewal master:  carenewal.idm.example.com

    输出显示 watchnewal.idm.example.com 服务器是新的 CA 续订服务器。

9.3. 使用 Ansible playbook 为 IdM 用户配置默认 shell

shell 是一个接受和解释命令的程序。Red Hat Enterprise Linux(RHEL)中提供了多个 shell,如 bash、sh、ksh zshzsh、玻璃 缸式等。Bash/bin/bash 是大多数 Linux 系统中常用的 shell,它通常是 RHEL 上用户帐户的默认 shell。

以下流程描述了如何使用 Ansible playbook 将 sh (替代 shell)配置为 IdM 用户的默认 shell。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。

流程

  1. 可选: 使用 retrieve-config.yml Ansible playbook 来识别 IdM 用户的当前 shell。详情请参阅使用 Ansible playbook 检索 IdM 配置
  2. 创建一个清单文件,如 inventory.file,并在该文件中定义 ipaserver

    [ipaserver]
    server.idm.example.com
  3. 打开 /usr/share/doc/ansible-freeipa/playbooks/config/ensure-config-options-are-set.yml Ansible playbook 文件进行编辑:

    ---
    - name: Playbook to ensure some config options are set
      hosts: ipaserver
      become: true
    
      tasks:
      # Set defaultlogin and maxusername
      - ipaconfig:
          ipaadmin_password: Secret123
          defaultshell: /bin/bash
          maxusername: 64
  4. 通过更改以下内容来调整文件:

    • ipaadmin_password 变量设置的 IdM 管理员密码。
    • IdM 用户的默认 shell,默认 shell 变量设置为 /bin/sh
  5. 保存该文件。
  6. 运行 Ansible playbook。指定 playbook 文件和清单文件:

    $ ansible-playbook -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/config/ensure-config-options-are-set.yml

验证步骤

您可以通过在 IdM 中启动一个新会话来验证默认用户 shell 是否已更改:

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

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. 显示当前的 shell:

    [admin@server /]$ echo "$SHELL"
    /bin/sh

    登录用户正在使用 sh shell。

其它资源

  • 您可以在 /usr/share/doc/ansible -freeipa/ 目录中看到用于配置全局 IdM 设置的 Ansible playbook 示例,以及README- config.md Markdown 文件中可能的变量列表。
  • 您可以在 /usr/share/doc/ansible-freeipa/playbooks/config 目录中看到各种 IdM 配置相关操作的 Ansible playbook 示例。

第 10 章 使用命令行管理用户帐户

本章包含 IdM(身份管理)中用户生命周期的基本描述。以下部分介绍了如何进行:

  • 创建用户帐户
  • 激活 stage 用户帐户
  • 保留用户帐户
  • 删除活跃、暂存或保留的用户帐户
  • 恢复保留的用户帐户

10.1. 用户生命周期

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

  • 阶段用户不允许进行身份验证。这是初始状态。无法设置活动用户所需的一些用户帐户属性,例如组成员资格。
  • 活动用户被允许进行身份验证。所有必需的用户帐户属性都必须设置为此状态。
  • 保留的用户是以前被视为不活跃且无法向 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)总是解析 IdM 用户和组。这意味着 IdM 组成员资格不适用于本地用户。

10.2. 使用命令行添加用户

您可以将用户添加为:

  • Active SAS- SASuser 帐户,这些帐户可供其用户主动使用。
  • stage SAS- SASusers 无法使用这些帐户。如果要准备新用户帐户,请使用它。当用户准备好使用其帐户时,您可以激活这些帐户。

以下流程描述了使用 ipa user-add 命令将活跃用户添加到 IdM 服务器中。

同样,您可以使用 ipa stageuser-add 命令创建暂存用户帐户。

注意

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 始终需要在登录时以小写形式输入用户名。此外,无法添加仅以字母 cas casing 不同的用户名,如用户和用户

    用户名的默认最大长度为 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 帮助 信息。

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

$ ipa $ ipa user-find

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

10.3. 使用命令行激活用户

要激活用户帐户,请将其从 stage 移至激活,请使用 ipa stageuser-activate 命令。

先决条件

流程

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

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

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

$ ipa $ ipa user-find

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

10.4. 使用命令行保留用户

要保留用户帐户,请使用 ipa user-del 或 ipa stageuser-del 命令。

先决条件

流程

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

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

10.5. 使用命令行删除用户

IdM(身份管理)可让您永久删除用户。您可以删除:

  • 使用以下命令的活动用户: ipa user-del
  • 使用以下命令暂存用户: ipa stageuser-del
  • 使用以下命令保留用户: 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 永久删除。

10.6. 使用命令行恢复用户

您可以将保留的用户恢复到:

  • 活动用户: ipa user-undel
  • 阶段用户: 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 $ ipa user-find

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

第 11 章 使用 IdM Web UI 管理用户帐户

身份管理(IdM)提供多个阶段,可帮助您管理各种用户工作生命周期情况:

创建用户帐户

在员工在公司职业生涯开始之前创建阶段用户帐户,并在员工办公室出现并想要激活客户时提前做好准备。

您可以省略此步骤并直接创建活跃的用户帐户。这个过程与创建阶段用户帐户类似。

激活用户帐户
激活该帐户是该员工的第一个工作日
禁用用户帐户
如果用户离开了几个月,您将需要临时禁用该帐户
启用用户帐户
用户返回时,您将需要重新启用该帐户
保留用户帐户
如果用户想要离开公司,您将需要删除该帐户,以便能够将其恢复,因为人们可以在一段时间后返回到公司
恢复用户帐户
两年后,用户恢复,您需要恢复保留的帐户
删除用户帐户
如果该员工被终止,您会在没有备份的情况下删除该帐户

11.1. 用户生命周期

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

  • 阶段用户不允许进行身份验证。这是初始状态。无法设置活动用户所需的一些用户帐户属性,例如组成员资格。
  • 活动用户被允许进行身份验证。所有必需的用户帐户属性都必须设置为此状态。
  • 保留的用户是以前被视为不活跃且无法向 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)总是解析 IdM 用户和组。这意味着 IdM 组成员资格不适用于本地用户。

11.2. 在 Web UI 中添加用户

通常,您需要在新员工开始工作前创建新的用户帐户。这样的 stage 帐户无法访问,您需要稍后将其激活。

注意

或者,您可以直接创建活跃的用户帐户。要添加活跃用户,请按照下面的步骤,并在 Active 用户选项卡中添加用户帐户

先决条件

  • 管理 IdM 或 User Administrator 角色的管理员特权。

流程

  1. 登录到 IdM Web UI。

    详情请参阅在 Web 浏览器中访问 IdM Web UI

  2. 进入 Users → Stage Users 选项卡。

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

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

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

  6. [可选] 在 GID 下拉菜单中,选择应包含该用户的组。
  7. [可选] 在密码 和验证密码字段中
  8. 单击"添加 "按钮。

    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.

注意

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

11.3. 在 IdM Web UI 中激活阶段用户

必须激活一个 stage 用户帐户,然后用户才能登录到 IdM 组,并在该用户添加到 IdM 组之前。本节论述了如何激活暂存用户帐户。

先决条件

  • 管理 IdM Web UI 或 User Administrator 角色的管理员特权。
  • IdM 中至少有一个分阶段用户帐户。

流程

  1. 登录到 IdM Web UI。

    详情请参阅在 Web 浏览器中访问 IdM Web UI

  2. 进入 Users → Stage users 选项卡。
  3. 单击您要激活的用户帐户的复选框。
  4. 单击"激活 "按钮。

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

注意

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

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

您可以禁用活跃的用户帐户。禁用用户帐户会取消激活帐户,因此无法使用用户帐户来验证和使用 IdM 服务(如 Kerberos)或执行任何任务。

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

注意

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

先决条件

  • 管理 IdM Web UI 或 User Administrator 角色的管理员特权。

流程

  1. 登录到 IdM Web UI。

    详情请参阅在 Web 浏览器中访问 IdM Web UI

  2. 进入 Users → Active users 选项卡。
  3. 点击您要禁用的用户帐户的复选框。
  4. 单击"禁用 "按钮。

    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.

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

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

先决条件

  • 管理 IdM Web UI 或 User Administrator 角色的管理员特权。

流程

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

    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 列中验证。

11.6. 在 IdM Web UI 中保留活跃用户

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

如果员工离开公司,请保留用户帐户。如果您要禁用用户帐户数周或数月(例如,父章节),请禁用该帐户。详情请查看 第 11.4 节 “在 Web UI 中禁用用户帐户”。保留的帐户未激活,用户无法使用它们访问您的内部网络,但该帐户保留在数据库中所有数据。

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

注意

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

先决条件

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

流程

  1. 登录到 IdM Web UI。

    详情请参阅在 Web 浏览器中访问 IdM Web UI

  2. 进入 Users → Active users 选项卡。
  3. 单击您要保留的用户帐户的复选框。
  4. 单击删除按钮

    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 单选按钮来保留
  6. 单击删除按钮

    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 用户

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

11.7. 在 IdM Web UI 中恢复用户

IdM(身份管理)可让您恢复保留的用户帐户回活动状态。

先决条件

  • 管理 IdM Web UI 或 User Administrator 角色的管理员特权。

流程

  1. 登录到 IdM Web UI。

    详情请参阅在 Web 浏览器中访问 IdM Web UI

  2. 进入 Users → Preserved users 标签页。
  3. 单击您要恢复的用户帐户上的复选框。
  4. 单击恢复按钮

    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 选项卡中。

11.8. 在 IdM Web UI 中删除用户

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

您可以删除:

  • Active users SAS- SAS IdM Web UI 为您提供了选项:

  • 阶段用户 SAS - 只需永久删除暂存用户即可。
  • 保留的用户 SAS-确认您可以永久删除保留的用户。

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

  • Stage users 选项卡
  • 保留用户选项卡

先决条件

  • 管理 IdM Web UI 或 User Administrator 角色的管理员特权。

流程

  1. 登录到 IdM Web UI。

    详情请参阅在 Web 浏览器中访问 IdM Web UI

  2. 进入 Users → Active users 选项卡。

    或者,您可以删除 Users → Stage usersUsers → Preserved 用户的密码

  3. Delete 图标。
  4. Remove users 对话框中,切换 Delete mode 单选按钮以删除
  5. 单击删除按钮

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

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

您可以使用 Ansible playbook 管理 IdM 中的用户。本章论述了将 Ansible playbook 用于以下操作:

12.1. 使用 Ansible playbook 确保存在 IdM 用户

以下流程描述了确保使用 Ansible playbook 在 IdM 中存在用户。

先决条件

  • 您知道 IdM 管理器密码。
  • ansible-freeipa 软件包安装在 Ansible 控制器上。

流程

  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
      become: true
    
      tasks:
      - name: Create user idm_user
        ipauser:
          ipaadmin_password: MySecret123
          name: idm_user
          first: Alice
          last: Acme
          uid: 1000111
          gid: 10011
          phone: "+555123457"
          email: idm_user@acme.com
          passwordexpiration: "2023-01-19 23:59:59"
          password: "Password123"
          update_password: on_create

    您必须使用以下选项来添加用户:

    • name :登录名称
    • 首先 :第一个名称字符串
    • 最后 :姓氏字符串

    有关可用用户选项的完整列表,请参阅 /usr/share/doc/ansible-freeipa/README-user.md Markdown 文件。

    注意

    如果您使用 update_password: on_create 选项,Ansible 仅在创建用户时创建用户密码。如果已使用密码创建了用户,Ansible 不会生成新的密码。

  3. 运行 playbook:

    $ ansible-playbook -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 的用户。

12.2. 使用 Ansible playbook 确保存在多个 IdM 用户

以下流程描述了确保使用 Ansible playbook 在 IdM 中存在多个用户。

先决条件

  • 您知道 IdM 管理器密码。
  • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。

流程

  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_1、idm_user_2idm_user_3,并添加 Password123 作为密码 idm_user_1

    ---
    - name: Playbook to handle users
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Create user idm_users
        ipauser:
          ipaadmin_password: MySecret123
          users:
          - name: idm_user_1
            first: Alice
            last: Acme
            uid: 10001
            gid: 10011
            phone: "+555123457"
            email: idm_user@acme.com
            passwordexpiration: "2023-01-19 23:59:59"
            password: "Password123"
          - name: idm_user_2
            first: Bob
            last: Acme
            uid: 100011
            gid: 10011
          - name: idm_user_3
            first: Eve
            last: Acme
            uid: 1000111
            gid: 10011
    注意

    如果没有指定 update_password: on_create 选项,Ansible 每次运行 playbook 时都会重新设置用户密码:如果用户自上次运行 playbook 起更改了密码,则 Ansible 重新设置密码。

  3. 运行 playbook:

    $ ansible-playbook -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 的用户。

12.3. 使用 Ansible playbook 确保存在 JSON 文件中的多个 IdM 用户

以下流程描述了如何使用 Ansible playbook 确保在 IdM 中存在多个用户。用户存储在 JSON 文件中。

先决条件

  • 您知道 IdM 管理器密码。
  • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。

流程

  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
      become: true
    
      tasks:
      - name: Include users.json
        include_vars:
          file: users.json
    
      - name: Users present
        ipauser:
          ipaadmin_password: MySecret123
          users: "{{ users }}"
  3. 创建 users.json 文件,并将 IdM 用户添加到其中。要简化此步骤,您可以复制并修改 /usr/share/doc/ansible-freeipa/playbooks/user/users.json 文件中的示例。例如,要创建用户 idm_user_1、idm_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. 运行指定 playbook 文件和清单文件的 Ansible playbook:

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

验证步骤

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

    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 的用户。

12.4. 确保没有用户使用 Ansible playbook

以下流程描述了如何使用 Ansible playbook 来确保 IdM 中没有特定用户。

先决条件

  • 您知道 IdM 管理器密码。
  • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。

流程

  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_1、idm_user_2idm_user_3

    ---
    - name: Playbook to handle users
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Delete users idm_user_1, idm_user_2, idm_user_3
        ipauser:
          ipaadmin_password: MySecret123
          users:
          - name: idm_user_1
          - name: idm_user_2
          - name: idm_user_3
          state: absent
  3. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -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 的用户。

其它资源

  • 您可以看到有关其他 IdM 用户相关操作的 Ansible playbook 示例,如保留、删除、启用、禁用、解锁和取消删除用户,该文件位于 /usr/share/doc/ansible-freeipa/ 目录中的 README- user.md Markdown 文件中。该文件还包含 ipauser 变量的定义。
  • 您还可以在 /usr/share/doc/ansible-freeipa/playbooks/user 目录中查看 Ansible playbook 示例。

第 13 章 在 IdM CLI 中管理用户组

本章介绍了使用 IdM CLI 管理用户组。

用户组是一组具有常见特权、密码策略和其他特征的用户。

Identity Management(IdM)中的用户组可以包括:

  • IdM 用户
  • 其他 IdM 用户组
  • 外部用户,即 IdM 之外的用户

13.1. IdM 中的不同组类型

IdM 支持以下类型的组:

POSIX 组(默认)

POSIX 组支持其成员的 Linux POSIX 属性。请注意,与 Active Directory 交互的组无法使用 POSIX 属性。

POSIX 属性将用户识别为单独的实体。与用户相关的 POSIX 属性示例包括 uidNumber、用户编号(UID)和 gidNumber、组号(GID)。

非POSIX 组

非POSIX 组不支持 POSIX 属性。例如,这些组没有定义 GID。

这种组的所有成员必须属于 IdM 域。

外部组

使用外部组添加存在于 IdM 域外部的身份存储中的组成员,例如:

  • 本地系统
  • Active Directory 域
  • 目录服务

外部组不支持 POSIX 属性。例如,这些组没有定义 GID。

表 13.1. 默认创建的用户组

组名称默认组成员

ipausers

所有 IdM 用户

管理员

具有管理特权的用户,包括默认的 admin 用户

编辑器

这是一个旧组,不再具有任何特殊权限

信任管理员

具有管理 Active Directory 信任权限的用户

将用户添加到用户组时,该用户将获得与组关联的特权和策略。例如,若要向用户授予管理特权,可将该用户添加到 admins 组

警告

不要删除 admins 组。由于 admins 是 IdM 要求的预定义组,因此此操作会导致某些命令出现问题。

另外,当 IdM 中创建新用户时,IdM 默认会创建用户私有组有关私有组的更多信息,请参阅在没有私有组的情况下添加用户

13.2. 直接和间接组成员

IdM 中的用户组属性适用于直接和间接成员:当组 B 是组 A 的成员时,组 B 中的所有用户都被视为组 A 的间接成员。

例如,在下图中:

  • 用户 1 和用户 2 是组 A 的直接成员
  • 用户 3、用户 4 和用户 5 是组 A 的间接成员

图 13.1. 直接和间接组成员身份

包含组 A(包含 2 个用户)和 Group B(有 3 个用户)的图表。组 B 嵌套在组 A 内,因此组 A 包含总计 5 个用户。

如果您为用户组 A 设置密码策略,该策略也适用于用户组 B 中的所有用户。

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

    默认情况下,ip a group-add 添加 POSIX 用户组。要指定不同的组类型,在 ipa group-add 中添加选项:

    • --nonposix 用于创建非POSIX 组
    • --external 创建外部组

      有关组类型的详情,请查看 IdM 中的不同组类型

    您可以使用 --gid=custom_GID 选项在添加用户组时指定自定义 GID。如果这样做,请小心以避免 ID 冲突。如果没有指定自定义 GID,IdM 会自动从可用的 ID 范围内分配 GID。

警告

不要将本地组添加到 IdM。在解析本地用户和组前,名称服务切换(NSS)总是解析 IdM 用户和组。这意味着 IdM 组成员资格不适用于本地用户。

13.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 中的不同组类型

13.5. 使用 IdM CLI 删除用户组

本节论述了如何使用 IdM CLI 删除用户组。请注意,删除组不会从 IdM 中删除组成员。

先决条件

流程

  • 使用 ipa group-del group_name 命令删除用户组。例如,要删除 group_a:

    $ ipa group-del group_a
    --------------------------
    Deleted group "group_a"
    --------------------------

13.6. 使用 IdM CLI 将成员添加到用户组中

本节论述了如何使用 IdM CLI 将成员添加到用户组中。您可以添加用户和用户组作为用户组的成员。如需更多信息,请参阅 IdM 和直接和间接组成员中的不同组类型

先决条件

流程

  • 使用 ipa group-add-member 命令向用户组添加成员。

    使用这些选项指定成员类型:

    • --users 添加 IdM 用户
    • --external 添加一个存在于 IdM 域外的用户,格式为 DOMAIN\user_name 或 user_name@domain
    • --groups 添加 IdM 用户组

    例如,将 group_b 添加为 group_a 的成员:

    $ ipa group-add-member group_a --groups=group_b
    Group name: group_a
    GID: 1133400009
    Member users: user_a
    Member groups: group_b
    Indirect Member users: user_b
    -------------------------
    Number of members added 1
    -------------------------

    group_b 的成员现在是 group_a 的间接成员。

重要

将组添加为另一个组的成员时,请勿创建递归组。例如,如果组 A 是组 B 的成员,则不要将组 B 添加为组 A 的成员。递归组可能会导致无法预计的行为。

注意

将成员添加到用户组后,更新可能需要一些时间才能传播到身份管理环境中的所有客户端。这是因为,当任何给定主机解析用户、组和网络组时,系统安全服务守护进程 (SSSD)首先检查其缓存,并且仅对缺失或过期的记录执行服务器查找。

13.7. 在没有用户专用组的情况下添加用户

默认情况下,IdM 会在 IdM 中创建新用户时创建用户私有组(UPG)。UPG 是特定的组类型:

  • UPG 的名称与新创建的用户相同。
  • 用户是 UPG 的唯一成员。UPG 无法包含任何其他成员。
  • 私有组的 GID 与用户的 UID 相匹配。

不过,可以在不创建 UPG 的情况下添加用户。

13.7.1. 没有用户专用组的用户

如果 NIS 组或其他系统组已使用将分配给用户专用组的 GID,则有必要避免创建 UPG。

您可以通过两种方式执行此操作:

在这两种情况下,IdM 都需要在添加新用户时指定 GID,否则操作将失败。这是因为 IdM 需要新用户的 GID,但默认用户组 ipausers 是一个非 POSIX 组,因此没有关联的 GID。您指定的 GID 不必与已存在的组对应。

注意

指定 GID 不会创建新组。它仅设置新用户的 GID 属性,因为 IdM 需要 属性。

13.7.2. 在全局启用专用组时添加没有用户专用组的用户

您可以添加用户而不创建用户专用组(UPG),即使系统上启用了 UPG。这需要为新用户手动设置 GID。有关为什么需要此操作的详情请参考 第 13.7.1 节 “没有用户专用组的用户”

流程

  • 要防止 IdM 创建 UPG,请在 ipa user-add 命令中添加 --noprivate 选项。

    请注意,命令若要成功,您必须指定一个自定义 GID。例如,使用 GID 10000 添加新用户:

    $ ipa user-add jsmith --first=John --last=Smith --noprivate --gid 10000

13.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 定义 实例,请使用 ipa-managed-entries -e "UPG Definition" enable 命令。

  4. 重新启动目录服务器以加载新配置。

    $ sudo systemctl restart dirsrv.target

    要在禁用 UPGs 后添加用户,您需要指定 GID。如需更多信息,请参阅在用户私有组群全局禁用时添加用户

验证步骤

  • 要检查 UPG 是否全局禁用,请再次使用 disable 命令:

    $ ipa-managed-entries -e "UPG Definition" disable
    Plugin already disabled

13.7.4. 当全局禁用用户私人组群时添加用户

当全局禁用用户私有组(UPG)时,IdM 不会自动为新用户分配 GID。要成功添加用户,您必须手动分配 GID,或使用自动成员规则来分配 GID。有关为什么需要此操作的详情请参考 第 13.7.1 节 “没有用户专用组的用户”

先决条件

流程

  • 要确保在创建 UPG 时添加新用户成功,请选择以下之一:

    • 添加新用户时指定自定义 GID。GID 不必与已经存在的用户组对应。

      例如,当从命令行添加用户时,请在 ipa user-add 命令中添加 --gid 选项。

    • 使用自动记住规则将用户添加到具有 GID 的现有组中。

13.8. 使用 IdM CLI 将用户或组作为成员管理器添加到 IdM 用户组中

本节论述了如何使用 IdM CLI 将用户或组作为成员管理器添加到 IdM 用户组中。成员管理器可以将用户或组添加到 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
    -------------------------

    用户 测试 现在可以管理 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 的成员。

注意

将 member manager 添加到用户组后,可能需要过些时间,才能将更新传播到身份管理环境中的所有客户端。

验证步骤

  • 使用 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

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

    间接成员列表不包括来自可信 Active Directory 域的外部用户。Active Directory 信任用户对象在身份管理界面中不可见,因为它们在身份管理中作为 LDAP 对象不存在。

13.10. 使用 IdM CLI 从用户组中删除成员

本节论述了如何使用 IdM CLI 从用户组中删除成员。

先决条件

流程

  1. 可选。使用 ipa group-show 命令确认组是否包含您要删除的成员。
  2. 使用 ipa group-remove-member 命令从用户组中删除成员。

    使用这些选项指定要删除的成员:

    • --users 删除 IdM 用户
    • --external 删除 IdM 域外存在的用户,格式为 DOMAIN\user_name 或 user_name@domain
    • --groups 删除 IdM 用户组

    例如,要从名为 group_name 的组中删除user1 、user2 和 group1

    $ ipa group-remove-member group_name --users=user1 --users=user2 --groups=group1

13.11. 使用 IdM CLI 从 IdM 用户组中删除作为成员管理器的用户或组

本节论述了如何使用 IdM CLI 从 IdM 用户组中作为成员管理器删除用户或组。成员管理器可以从 IdM 用户组中删除用户或组,但不能更改组的属性。

先决条件

流程

  • 使用 ipa group-remove-member-manager 命令,将用户作为 IdM 用户组的成员管理器删除。

    例如,要删除作为 group_a 的成员管理器的用户 测试

    $ 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
    ---------------------------

    用户 测试 无法再管理 group_a 的成员。

  • 使用 ipa group-remove-member-manager 命令,将组作为 IdM 用户组的成员管理器删除。

    例如,要删除 group_admins 作为 group_a 的成员管理器:

    $ 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 的成员。

注意

从用户组中删除 member manager 后,可能需要稍等片刻才能将更新分布到身份管理环境中的所有客户端。

验证步骤

  • 使用 ipa group-show 命令,验证用户和组已作为成员管理器被删除。

    $ ipa group-show group_a
    Group name: group_a
    GID: 1133400009

其它资源

  • 如需了解更多详细信息,请参阅 ipa group-remove-member-manager --help

第 14 章 在 IdM Web UI 中管理用户组

本章介绍了使用 IdM Web UI 进行的用户组管理。

用户组是一组具有常见特权、密码策略和其他特征的用户。

Identity Management(IdM)中的用户组可以包括:

  • IdM 用户
  • 其他 IdM 用户组
  • 外部用户,即 IdM 之外的用户

14.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。

表 14.1. 默认创建的用户组

组名称默认组成员

ipausers

所有 IdM 用户

管理员

具有管理特权的用户,包括默认的 admin 用户

编辑器

这是一个旧组,不再具有任何特殊权限

信任管理员

具有管理 Active Directory 信任权限的用户

将用户添加到用户组时,该用户将获得与组关联的特权和策略。例如,若要向用户授予管理特权,可将该用户添加到 admins 组

警告

不要删除 admins 组。由于 admins 是 IdM 要求的预定义组,因此此操作会导致某些命令出现问题。

另外,当 IdM 中创建新用户时,IdM 默认会创建用户私有组有关私有组的更多信息,请参阅在没有私有组的情况下添加用户

14.2. 直接和间接组成员

IdM 中的用户组属性适用于直接和间接成员:当组 B 是组 A 的成员时,组 B 中的所有用户都被视为组 A 的间接成员。

例如,在下图中:

  • 用户 1 和用户 2 是组 A 的直接成员
  • 用户 3、用户 4 和用户 5 是组 A 的间接成员

图 14.1. 直接和间接组成员身份

包含组 A(包含 2 个用户)和 Group B(有 3 个用户)的图表。组 B 嵌套在组 A 内,因此组 A 包含总计 5 个用户。

如果您为用户组 A 设置密码策略,该策略也适用于用户组 B 中的所有用户。

14.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。

    "添加用户组"弹出窗口的屏幕截图,包含以下字段:组名(此字段必填) - 描述 - 组类型 - GID."添加"按钮位于底部。
  4. 单击 Add 确认。

14.4. 使用 IdM Web UI 删除用户组

本节论述了如何使用 IdM Web UI 删除用户组。请注意,删除组不会从 IdM 中删除组成员。

先决条件

  • 已登陆到 IdM Web UI。

流程

  1. 点击 Identity → Groups 并选择 User Groups
  2. 选择要删除的组。
  3. Delete
  4. 单击 Delete 确认。

14.5. 使用 IdM Web UI 将成员添加到用户组中

您可以添加用户和用户组作为用户组的成员。如需更多信息,请参阅 IdM 和直接和间接组成员中的不同组类型

先决条件

  • 已登陆到 IdM Web UI。

流程

  1. Identity → Groups 并选择左侧栏中的 User Groups
  2. 单击组的名称。
  3. 选择您要添加的组成员类型:User、User Groups 或 External

    "User Group"页面截图,突出显示您可以添加的三种组成员的三个按钮:"用户" - "User Groups" - "External users"。
  4. 添加
  5. 选中您要添加的一个或多个成员旁边的复选框。
  6. 单击向右箭头,将选定的成员移到组中。

    "将用户添加到用户组 group_a"弹出窗口的屏幕截图,左列的左侧有"可用用户"登录,可以检查。您可以单击右箭头,将用户添加到右侧的"产品"列表中。
  7. 单击 Add 确认。

14.6. 使用 Web UI 将用户或组作为成员管理器添加到 IdM 用户组中

本节论述了如何使用 Web UI 将用户或组作为成员管理器添加到 IdM 用户组中。成员管理器可以将用户或组添加到 IdM 用户组,但不能更改组的属性。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须具有要添加为成员管理器的用户名以及您要管理的组的名称。

流程

  1. Identity → Groups 并选择左侧栏中的 User Groups
  2. 单击组的名称。
  3. 选择您要添加的组成员管理器类型:User or User Groups

    组添加成员管理器
  4. 添加
  5. 选中您要添加的一个或多个成员旁边的复选框。
  6. 单击向右箭头,将选定的成员移到组中。

    组添加成员管理器用户
  7. 单击 Add 确认。
注意

将 member manager 添加到用户组后,可能需要过些时间,才能将更新传播到身份管理环境中的所有客户端。

验证步骤

  • 验证新添加的用户或用户组是否已添加到用户或用户组的成员管理器列表中:

    添加了组成员管理器

其它资源

  • 如需更多信息,请参阅 ipa group-add-member-manager --help

14.7. 使用 IdM Web UI 查看组成员

本节论述了如何使用 IdM Web UI 查看组的成员。您可以查看直接和间接组成员。如需更多信息,请参阅直接和间接组成员

先决条件

  • 已登陆到 IdM Web UI。

流程

  1. 选择 Identity → Groups
  2. 在左侧栏中选择"用户组 "。
  3. 单击您要查看的组的名称。
  4. 在直接成员身份和 间接成员之间切换.

    显示"Direct Membership"和"直接成员资格"选项旁边的"显示代理"按钮的屏幕截图"显示结果"

14.8. 使用 IdM Web UI 从用户组中删除成员

本节论述了如何使用 IdM Web UI 从用户组中移除成员。

先决条件

  • 已登陆到 IdM Web UI。

流程

  1. Identity → Groups 并选择左侧栏中的 User Groups
  2. 单击组的名称。
  3. 选择要删除的组成员类型:User、User GroupsExternal

    "User Group"页面截图,突出显示您可以添加的三种组成员的三个按钮:"用户" - "User Groups" - "External users"。
  4. 选中您要删除的成员旁边的复选框。
  5. Delete
  6. 单击 Delete 确认。

14.9. 使用 Web UI 从 IdM 用户组中删除作为成员管理器的用户或组

本节论述了如何使用 Web UI 将用户或组作为成员管理器从 IdM 用户组中移除。成员管理器可以从 IdM 用户组中删除用户或组,但不能更改组的属性。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须具有要删除的现有成员管理器用户或组的名称,以及它们要管理的组的名称。

流程

  1. Identity → Groups 并选择左侧栏中的 User Groups
  2. 单击组的名称。
  3. 选择您要删除的成员管理器类型: Users 或 User Groups

    组添加成员管理器
  4. 选中您要删除的成员管理器旁边的复选框。
  5. Delete
  6. 单击 Delete 确认。
注意

从用户组中删除 member manager 后,可能需要稍等片刻才能将更新分布到身份管理环境中的所有客户端。

验证步骤

  • 验证用户或用户组已从用户组成员管理器列表中删除:

    删除了组成员管理器

其它资源

  • 如需了解更多详细信息,请参阅 ipa group-add-member-manager --help

第 15 章 使用 Ansible playbook 管理用户组

本节介绍使用 Ansible playbook 进行的用户组管理,具体包括:

15.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。

表 15.1. 默认创建的用户组

组名称默认组成员

ipausers

所有 IdM 用户

管理员

具有管理特权的用户,包括默认的 admin 用户

编辑器

这是一个旧组,不再具有任何特殊权限

信任管理员

具有管理 Active Directory 信任权限的用户

将用户添加到用户组时,该用户将获得与组关联的特权和策略。例如,若要向用户授予管理特权,可将该用户添加到 admins 组

警告

不要删除 admins 组。由于 admins 是 IdM 要求的预定义组,因此此操作会导致某些命令出现问题。

另外,当 IdM 中创建新用户时,IdM 默认会创建用户私有组有关私有组的更多信息,请参阅在没有私有组的情况下添加用户

15.2. 直接和间接组成员

IdM 中的用户组属性适用于直接和间接成员:当组 B 是组 A 的成员时,组 B 中的所有用户都被视为组 A 的间接成员。

例如,在下图中:

  • 用户 1 和用户 2 是组 A 的直接成员
  • 用户 3、用户 4 和用户 5 是组 A 的间接成员

图 15.1. 直接和间接组成员身份

包含组 A(包含 2 个用户)和 Group B(有 3 个用户)的图表。组 B 嵌套在组 A 内,因此组 A 包含总计 5 个用户。

如果您为用户组 A 设置密码策略,该策略也适用于用户组 B 中的所有用户。

15.3. 使用 Ansible playbook 确保存在 IdM 组和组成员

以下流程描述了使用 Ansible playbook 确保存在 IdM 组和组成员(用户和组组)。

先决条件

流程

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

    [ipaserver]
    server.idm.example.com
  2. 使用必要的用户和组信息创建一个 Ansible playbook 文件:

    ---
    - name: Playbook to handle groups
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Create group ops with gid 1234
        ipagroup:
          ipaadmin_password: MySecret123
          name: ops
          gidnumber: 1234
    
      - name: Create group sysops
        ipagroup:
          ipaadmin_password: MySecret123
          name: sysops
          user:
          - idm_user
    
      - name: Create group appops
        ipagroup:
          ipaadmin_password: MySecret123
          name: appops
    
      - name: Add group members sysops and appops to group ops
        ipagroup:
          ipaadmin_password: MySecret123
          name: ops
          group:
          - sysops
          - appops
  3. 运行 playbook:

    $ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-group-members.yml

验证步骤

您可以使用 ipa group-show 命令验证 ops 组是否包含 sysops 和 appops 作为直接成员,idm_user 作为间接成员:

  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 中已存在 appops 和 sysops 组,后者包括 idm_user 用户。

其它资源

  • 有关确保存在使用 Ansible 的用户组的更多信息,请参阅 /usr/share/doc/ansible-freeipa/README-group.md Markdown 文件。

15.4. 使用 Ansible playbook 确保 IdM 用户组中存在成员管理器

以下流程描述了使用 Ansible playbook 确保存在 IdM 成员管理器(用户和用户组)。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
  • 您必须具有要添加为成员管理器的用户名以及您要管理的组的名称。

流程

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

    [ipaserver]
    server.idm.example.com
  2. 使用必要的用户和组成员管理信息创建一个 Ansible playbook 文件:

    ---
    - name: Playbook to handle membership management
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure user test is present for group_a
        ipagroup:
          ipaadmin_password: MySecret123
          name: group_a
          membermanager_user: test
    
      - name: Ensure group_admins is present for group_a
        ipagroup:
          ipaadmin_password: MySecret123
          name: group_a
          membermanager_group: group_admins
  3. 运行 playbook:

    $ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-member-managers-user-groups.yml

验证步骤

您可以使用 ipa group-show 命令验证 group_a 组是否包含 test 作为成员管理器,而 group_admins 是否是 group _a 的成员管理器:

  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。

15.5. 使用 Ansible playbook 确保 IdM 用户组中没有成员管理器

以下流程描述了在使用 Ansible playbook 时确保 IdM 成员管理器(用户和用户组)不存在。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
  • 您必须具有要删除的现有成员管理器用户或组的名称,以及它们要管理的组的名称。

流程

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

    [ipaserver]
    server.idm.example.com
  2. 使用必要的用户和组成员管理信息创建一个 Ansible playbook 文件:

    ---
    - name: Playbook to handle membership management
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure member manager user and group members are absent for group_a
        ipagroup:
          ipaadmin_password: MySecret123
          name: group_a
          membermanager_user: test
          membermanager_group: group_admins
          action: member
          state: absent
  3. 运行 playbook:

    $ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-member-managers-are-absent.yml

验证步骤

您可以使用 ipa group-show 命令验证 group_a 组是否不包含作为成员管理器和 group_admins 作为 group_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。

第 16 章 使用 IdM CLI 自动组成员资格

通过使用自动组成员资格,您可以根据其属性自动将用户和主机分配到组。例如,您可以:

  • 根据员工的经理、位置或任何其他属性,将员工的用户条目划分为组。
  • 根据主机的类、位置或任何其他属性来划分主机。
  • 将所有用户或全部主机添加到单个全局组。

本章涵盖了以下主题:

16.1. 自动组成员资格的好处

通过为用户使用自动成员资格,您可以:

  • 减少手动管理组成员资格的开销

    您不必再手动将每个用户和主机分配到组。

  • 提高用户和主机管理的一致性

    用户和主机根据严格定义和自动评估标准分配到组。

  • 简化基于组的设置的管理

    为组定义各种设置,然后应用到各个组成员,如 sudo 规则、自动挂载或访问控制。将用户和主机添加到组中会自动使管理这些设置变得更加简单。

16.2. Automember 规则

在配置自动组成员资格时,管理员定义自动成员规则。自动成员规则应用到特定的用户或主机目标组。它不能同时应用到多个组。

创建规则后,管理员会为其添加条件。它们指定在目标组中包含或排除哪些用户或主机:

  • 包含的条件

    当用户或主机条目满足包含的条件时,它将包含在目标组中。

  • 专用条件

    当用户或主机条目满足独占条件时,它不会包含在目标组中。

条件以 Perl 兼容的正则表达式(PCRE)格式指定为正则表达式。有关 PCRE 的更多信息,请参阅 pcresyntax(3)man page。

注意

IdM 在包含之前评估独占条件。在发生冲突时,独占性条件优先于包含的条件。

自动成员规则应用到将来创建的每个条目。这些条目将自动添加到指定的目标组中。如果条目满足多个自动成员规则中指定的条件,它将添加到所有对应的组中。

现有条目不会受到新规则的影响如果要更改现有条目,请参阅使用 IdM CLI 将自动记住规则应用到现有条目

16.3. 使用 IdM CLI 添加自动成员规则

本节论述了使用 IdM CLI 添加自动成员规则。有关自动成员规则的详情,请参考 Automember 规则

添加自动成员规则后,您可以使用在自动成员规则中添加条件中所述的步骤为其添加条件

先决条件

流程

  1. 输入 ipa automember-add 命令以添加自动成员规则。
  2. 在提示时,指定:

    • 自动成员规则.这是目标组群名称。
    • 分组类型.这将指定规则以用户组还是主机组为目标。要目标用户组,请输入组。若要目标主机组,可输入 hostgroup

    例如,要为名为 user_group 的用户组添加自动成员规则:

    $ ipa automember-add
    Automember Rule: user_group
    Grouping Type: group
    --------------------------------
    Added automember rule "user_group"
    --------------------------------
        Automember Rule: user_group

16.4. 使用 IdM CLI 在自动成员规则中添加条件

本节论述了如何使用 IdM CLI 在自动成员规则中添加条件。有关自动成员规则的详情,请参考 Automember 规则

先决条件

流程

  1. 使用 ipa automember-add-condition 命令定义一个或多个包含或专用条件。
  2. 在提示时,指定:

    • 自动成员规则.这是目标规则名称。详情请查看 Automember 规则
    • 属性键.这将指定过滤器将应用到的条目属性。例如,uid 适用于用户:
    • 分组类型.这将指定规则以用户组还是主机组为目标。要目标用户组,请输入组。若要目标主机组,可输入 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
    ----------------------------

    再举一个例子,您可以使用自动成员资格规则以从 Active Directory(AD)同步的所有 Windows 用户为目标。要达到此目的,请创建一个条件,该条件将在其 项中以所有用户 withntUser 为目标,该属性由所有 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
    ----------------------------

16.5. 使用 IdM CLI 查看现有的自动成员规则

本节论述了如何使用 IdM CLI 查看现有的自动成员规则。

先决条件

流程

  1. 输入 ipa automember-find 命令。
  2. 在提示时,指定 Grouping 类型

    • 要目标用户组,请输入组
    • 若要目标主机组,可输入 hostgroup

      例如:

    $ ipa automember-find
    Grouping Type: group
    ---------------
    1 rules matched
    ---------------
      Automember Rule: user_group
      Inclusive Regex: uid=.*
    ----------------------------
    Number of entries returned 1
    ----------------------------

16.6. 使用 IdM CLI 删除自动成员规则

本节论述了如何使用 IdM CLI 删除自动成员规则。

删除自动成员规则也会删除与规则关联的所有条件。要只从规则中删除特定条件,请参阅使用 IdM CLI 从自动成员规则中删除条件

先决条件

流程

  1. 输入 ipa automember-del 命令。
  2. 在提示时,指定:

    • 自动成员规则.这是您要删除的规则。
    • 分组规则.这将指定您要删除的规则是针对用户组还是主机组。输入组或 主机组.

16.7. 使用 IdM CLI 从自动成员规则中删除条件

本节论述了如何从自动成员规则中删除特定条件。

先决条件

流程

  1. 输入 ipa automember-remove-condition 命令。
  2. 在提示时,指定:

    • 自动成员规则.这是您要从中删除条件的规则名称。
    • 属性键.这是目标条目属性。例如,uid 适用于用户:
    • 分组类型.这将指定您要删除的条件是针对用户组还是主机组。输入组或 主机组.
    • 包含正则表达式和 独占正则表达式.它们指定要删除的条件。如果您只想指定一个条件,在提示输入另一个条件时按 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
    ------------------------------

16.8. 使用 IdM CLI 将自动成员规则应用到现有条目

Automember 规则自动应用到添加规则后创建的用户和主机条目。它们不会追溯到在添加规则之前存在的条目。

要将自动成员规则应用到之前添加的条目,您必须手动重建自动成员资格。重建自动成员资格会重新评估所有现有的自动成员规则,并将其应用到所有用户或主机条目或特定的条目。

注意

重建自动成员资格不会从组中删除用户或主机条目,即使条目不再与组的包含条件匹配。要手动删除它们,请参阅使用 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 选项。

16.9. 使用 IdM CLI 配置默认的自动成员组

当您配置默认的自动成员组时,与任何自动成员规则不匹配的新用户或主机条目将自动添加到此默认组中。

先决条件

流程

  1. 输入 ipa automember-default-group-set 命令,以配置默认的自动成员组。
  2. 在提示时,指定:

    • 默认(回调)组,指定目标组名称。
    • 组类型,指定目标是否为用户组还是主机组。要目标用户组,请输入组。若要目标主机组,可输入 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

第 17 章 使用 IdM Web UI 自动组成员资格

通过使用自动组成员资格,您可以根据其属性自动将用户和主机分配到组。例如,您可以:

  • 根据员工的经理、位置或任何其他属性,将员工的用户条目划分为组。
  • 根据主机的类、位置或任何其他属性来划分主机。
  • 将所有用户或全部主机添加到单个全局组。

本章涵盖了以下主题:

17.1. 自动组成员资格的好处

通过为用户使用自动成员资格,您可以:

  • 减少手动管理组成员资格的开销

    您不必再手动将每个用户和主机分配到组。

  • 提高用户和主机管理的一致性

    用户和主机根据严格定义和自动评估标准分配到组。

  • 简化基于组的设置的管理

    为组定义各种设置,然后应用到各个组成员,如 sudo 规则、自动挂载或访问控制。将用户和主机添加到组中会自动使管理这些设置变得更加简单。

17.2. Automember 规则

在配置自动组成员资格时,管理员定义自动成员规则。自动成员规则应用到特定的用户或主机目标组。它不能同时应用到多个组。

创建规则后,管理员会为其添加条件。它们指定在目标组中包含或排除哪些用户或主机:

  • 包含的条件

    当用户或主机条目满足包含的条件时,它将包含在目标组中。

  • 专用条件

    当用户或主机条目满足独占条件时,它不会包含在目标组中。

条件以 Perl 兼容的正则表达式(PCRE)格式指定为正则表达式。有关 PCRE 的更多信息,请参阅 pcresyntax(3)man page。

注意

IdM 在包含之前评估独占条件。在发生冲突时,独占性条件优先于包含的条件。

自动成员规则应用到将来创建的每个条目。这些条目将自动添加到指定的目标组中。如果条目满足多个自动成员规则中指定的条件,它将添加到所有对应的组中。

现有条目不会受到新规则的影响如果要更改现有条目,请参阅使用 IdM Web UI 将自动记住规则应用到现有条目

17.3. 使用 IdM Web UI 添加自动成员规则

本节论述了使用 IdM Web UI 添加自动成员规则。有关自动成员规则的详情,请参考 Automember 规则

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。
  • 新规则的目标组存在于 IdM 中。

流程

  1. 点击 Identity → Automember,然后选择 User group rulesHost group rules
  2. 添加
  3. Automember rule 字段中,选择规则要应用的组。这是目标组群名称。

    "添加规则"窗口的截图显示 Automember Rule 的下拉字段,您可以在其中选择之前定义的规则。
  4. 单击 Add 确认。
  5. 可选: 您可以使用使用 IdM Web UI 为自动成员规则添加条件中所述的步骤,为新规则添加新条件

17.4. 使用 IdM Web UI 在自动成员规则中添加条件

本节论述了如何使用 IdM Web UI 在自动成员规则中添加条件。有关自动成员规则的详情,请参考 Automember 规则

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。
  • IdM 中存在目标规则。

流程

  1. 点击 Identity → Automember,然后选择 User group rulesHost group rules
  2. 点击您要添加条件的规则。
  3. 在 Inclusive Exclusive 部分中,点 Add。

    User group 规则页面的屏幕截图,其中显示了 user_group 规则的属性。"Inclusive"部分有一个带有"Attribute"列的表,以及带有 Attribute "uid" 条目的"Expression"列,其表达式为 ".*"。底部是 Exclusive 部分,它也有一个含有 Attribute 列和 Expression 列的表,但它没有条目。
  4. Attribute 字段中,选择 required 属性,如uid
  5. Expression 字段中,定义正则表达式。
  6. 添加

    例如,以下条件以用户 ID(uid)属性中任何值(.*)的所有用户为目标。

    "Add Condition into automember"弹出窗口的截图显示 Attribute(选择了uid)的下拉菜单以及对应"Expression"的字段(必需,已输入 .*)。"添加"按钮位于窗口的底部。

17.5. 使用 IdM Web UI 查看现有的自动成员规则和条件

本节论述了如何使用 IdM Web UI 查看现有的自动成员规则和条件。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。

流程

  1. 点击 Identity → Automember,然后选择 User group rulesHost group rules 来查看对应的自动成员规则。
  2. 可选:点击规则,在 Inclusive Exclusive 部分中查看该规则的条件

    包含用户组规则"user_group"详细信息的屏幕截图。 有一个"常规"部分,其中显示了 Automember 规则的名称和"说明"。 底部有一个"原生"部分,其中包含带有标有"Attribute"和"Expression"列的表格显示条目。 此表有一个条目,uid 作为 Attribute,.* 作为表达式。在底部有一个"Exclusive"部分,其中包含与"Inclusive"表结构匹配的表,但没有条目。

17.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"条目的复选框,并突出显示"删除"按钮。
  4. 单击 Delete 确认。

17.7. 使用 IdM Web UI 从自动成员规则中删除条件

本节论述了如何使用 IdM Web UI 从自动成员规则中删除特定条件。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。

流程

  1. 点击 Identity → Automember,然后选择 User group rulesHost group rules 来查看对应的自动成员规则。
  2. 点击规则,在 Inclusive 或 Exclusive 部分中 查看该规则的条件
  3. 选中您要删除的条件旁边的复选框。
  4. Delete

    显示"user_group"信息的"User group rule"页面截图。"Inclusive"部分中的条目选中了复选框,并突出显示与"Inclusive"部分相关的"删除"按钮。
  5. 单击 Delete 确认。

17.8. 使用 IdM Web UI 将自动成员规则应用到现有条目

Automember 规则自动应用到添加规则后创建的用户和主机条目。它们不会追溯到在添加规则之前存在的条目。

要将自动成员规则应用到之前添加的条目,您必须手动重建自动成员资格。重建自动成员资格会重新评估所有现有的自动成员规则,并将其应用到所有用户或主机条目或特定的条目。

注意

重建自动成员资格不会从组中删除用户或主机条目,即使条目不再与组的包含条件匹配。要手动删除它们,请参阅使用 IdM Web UI 或 IdM Web UI 中的删除主机组成员从用户组中删除成员。

17.8.1. 为所有用户或主机重建自动成员资格

本节论述了如何为所有用户或主机条目重建自动成员资格。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。

流程

  1. 选择 IdentityUsersHosts
  2. ActionsRebuild auto membership

    突出显示"重新构建自动成员资格"的屏幕截图是"选项"下拉菜单中的选项。

17.8.2. 只为单个用户或主机重建自动成员资格

本节论述了如何为特定用户或主机条目重建自动成员资格。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。

流程

  1. 选择 IdentityUsersHosts
  2. 单击所需的用户或主机名。
  3. ActionsRebuild auto membership

    屏幕截图中强调"重新构建自动成员资格"选项,以及"选项"下拉菜单中的许多其他选项。

17.9. 使用 IdM Web UI 配置默认用户组

当您配置默认用户组时,与任何自动成员规则不匹配的新用户条目将自动添加到此默认组中。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。
  • IdM 中您要被设置为默认用户组的目标用户组。

流程

  1. 点击 Identity → Automember,然后选择 User group rules
  2. Default user group 字段中,选择您要设置为默认用户组的组。

    设置默认用户组

17.10. 使用 IdM Web UI 配置默认主机组

配置默认主机组时,与任何自动成员规则不匹配的新主机条目将自动添加到此默认组中。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。
  • IdM 中您要被设置为 default 的目标主机组。

流程

  1. 点击 Identity → Automember,然后选择 Host group rules
  2. Default 主机组字段中,选择您要设置为默认主机组的组。

    设置默认主机组

第 18 章 使用 CLI 管理 IdM 中的自助服务规则

本章介绍了身份管理(IdM)中的自助服务规则,并描述了如何在命令行界面(CLI)中创建和编辑自助服务访问规则。

18.1. IdM 中的自助服务访问控制

自助服务访问控制规则定义 Identity Management(IdM)实体可以在其 IdM 目录服务器条目上执行的操作:例如,IdM 用户能够更新自己的密码。

这种控制方法允许经过身份验证的 IdM 实体编辑其 LDAP 条目中的特定属性,但不允许对整个条目 添加 或删除 操作。

警告

使用自助服务访问控制规则时要小心: 不当配置访问控制规则可能会意外地提升实体的特权。

18.2. 使用 CLI 创建自助服务规则

这个步骤描述了使用命令行界面(CLI)在 IdM 中创建自助服务访问规则。

先决条件

流程

  • 要添加自助服务规则,请使用 ipa selfservice-add 命令并指定以下两个选项:

    --permissions
    设置 Access Control 指令(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

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

18.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 命令显示所有自助服务规则。您刚才删除的规则应该缺失。

第 19 章 使用 IdM Web UI 管理自助服务规则

本章介绍了身份管理(IdM)中的自助服务规则,并描述了如何在 Web 界面(IdM Web UI)中创建和编辑自助服务访问规则。

19.1. IdM 中的自助服务访问控制

自助服务访问控制规则定义 Identity Management(IdM)实体可以在其 IdM 目录服务器条目上执行的操作:例如,IdM 用户能够更新自己的密码。

这种控制方法允许经过身份验证的 IdM 实体编辑其 LDAP 条目中的特定属性,但不允许对整个条目 添加 或删除 操作。

警告

使用自助服务访问控制规则时要小心: 不当配置访问控制规则可能会意外地提升实体的特权。

19.2. 使用 IdM Web UI 创建自助服务规则

这个步骤描述了如何使用 Web 界面(IdM Web UI)在 IdM 中创建自助服务访问规则。

先决条件

流程

  1. IPA 服务器选项卡中 ,打开基于角色的访问控制子菜单 ,再选择自助服务权限
  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. 单击添加按钮
    2. 在以下 Add Custom Attribute 窗口的 Attribute 文本字段中输入属性名称。
    3. 单击 OK 按钮以添加该属性
    4. 验证是否已选中新属性
  6. 单击表单底部的添加按钮,以保存新的自助服务规则。
    或者,您可以通过单击添加和编辑按钮保存并继续编辑自助服务规则 ,或者通过单击添加和添加另一个按钮保存并添加其他规则

19.3. 使用 IdM Web UI 编辑自助服务规则

这个步骤描述了如何使用 Web 界面(IdM Web UI)编辑 IdM 中的自助服务访问规则。

先决条件

流程

  1. IPA 服务器选项卡中 ,打开基于角色的访问控制子菜单 ,再选择自助服务权限
  2. 单击您要修改的自助服务规则的名称。

    Editing an existing self-service rule

  3. edit 页面只允许您编辑您要添加或删除自助服务规则的属性列表。选择或取消选择适当的复选框。
  4. 单击 Save 按钮,将更改保存到自助服务规则。

19.4. 使用 IdM Web UI 删除自助服务规则

这个步骤描述了如何使用 Web 界面(IdM Web UI)删除 IdM 中的自助服务访问规则。

先决条件

流程

  1. IPA 服务器选项卡中 ,打开基于角色的访问控制子菜单 ,再选择自助服务权限
  2. 选中您要删除的规则旁边的复选框,然后单击列表右侧的 Delete 按钮。

    Deleting a self-service rule

  3. 此时会打开一个对话框,单击 Delete 进行确认

第 20 章 使用 Ansible playbook 管理 IdM 中的自助服务规则

本节介绍 Identity Management(IdM)中的自助服务规则,并介绍如何使用 Ansible playbook 创建和编辑自助服务访问规则。自助服务访问控制规则允许 IdM 实体在其 IdM 目录服务器条目上执行指定操作。

本节涵盖了以下主题:

20.1. IdM 中的自助服务访问控制

自助服务访问控制规则定义 Identity Management(IdM)实体可以在其 IdM 目录服务器条目上执行的操作:例如,IdM 用户能够更新自己的密码。

这种控制方法允许经过身份验证的 IdM 实体编辑其 LDAP 条目中的特定属性,但不允许对整个条目 添加 或删除 操作。

警告

使用自助服务访问控制规则时要小心: 不当配置访问控制规则可能会意外地提升实体的特权。

20.2. 使用 Ansible 确保存在自助服务规则

以下流程描述了如何使用 Ansible playbook 定义自助服务规则并确保它们在身份管理(IdM)服务器上存在。在本例中,新用户可以管理自己的名称详细信息 规则,授予用户更改其 指定名称、 显示名称、 标题和 初始 属性的权限。例如,这允许他们更改其显示名称或首字母(如果他们想更改)。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了符合以下要求的 Ansible 控制节点:

    • 您使用 Ansible 版本 2.8 或更高版本。
    • 您已安装 ansible-freeipa 软件包。
    • ~/MyPlaybooks/ 目录中,您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件

流程

  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 变量设置为新自助服务规则的名称。
    • 权限 变量设置为以逗号分隔的权限列表,以授予: 读取和写入
    • 属性 变量设置为用户可以自己管理的属性列表: givenname、displayname、name initials

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Self-service present
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure self-service rule "Users can manage their own name details" is present
        ipaselfservice:
          ipaadmin_password: Secret123
          name: "Users can manage their own name details"
          permission: read, write
          attribute:
          - givenname
          - displayname
          - title
          - initials
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory selfservice-present-copy.yml

其它资源

  • 有关自助服务规则概念的更多信息,请参阅 IdM 中的自助服务访问控制
  • 有关使用 ipaselfservice 模块的更多 Ansible playbook 示例,请参阅:

    • The README-selfservice.md 文件位于 /usr/share/doc/ansible-freeipa/ 目录中。此文件还包含 ipaselfservice 变量的定义。
    • /usr/share/doc/ansible-freeipa/playbooks/selfservice 目录。

20.3. 使用 Ansible 确保缺少自助服务规则

以下流程描述了如何使用 Ansible playbook 来确保 IdM 配置中没有指定的自助服务规则。以下示例描述了如何确保用户可以管理自己的名称详情自助服务规则在 IdM 中不存在。这将确保用户无法更改自己的显示名称或首字母。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了符合以下要求的 Ansible 控制节点:

    • 您使用 Ansible 版本 2.8 或更高版本。
    • 您已安装 ansible-freeipa 软件包。
    • ~/MyPlaybooks/ 目录中,您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件

流程

  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
      become: true
    
      tasks:
      - name: Ensure self-service rule "Users can manage their own name details" is absent
        ipaselfservice:
          ipaadmin_password: Secret123
          name: "Users can manage their own name details"
          state: absent
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory selfservice-absent-copy.yml

其它资源

  • 有关自助服务规则概念的更多信息,请参阅 IdM 中的自助服务访问控制
  • 有关使用 ipaselfservice 模块的更多 Ansible playbook 示例,请参阅:

    • The README-selfservice.md 文件位于 /usr/share/doc/ansible-freeipa/ 目录中。此文件还包含 ipaselfservice 变量的定义。
    • /usr/share/doc/ansible-freeipa/playbooks/selfservice 目录。

20.4. 使用 Ansible 确保自助服务规则具有特定属性

以下流程描述了如何使用 Ansible playbook 确保现有自助服务规则具有特定的设置。在示例中,您可以确保用户可以管理自己的名称详细信息 自助服务规则,也具有urname member 属性。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了符合以下要求的 Ansible 控制节点:

    • 您使用 Ansible 版本 2.8 或更高版本。
    • 您已安装 ansible-freeipa 软件包。
    • ~/MyPlaybooks/ 目录中,您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
  • 用户可以在 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 变量设置为要修改的自助服务规则的名称。
    • 属性 变量设置为ur name
    • action 变量设置为 member

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Self-service member present
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure selfservice "Users can manage their own name details" member attribute surname is present
        ipaselfservice:
          ipaadmin_password: Secret123
          name: "Users can manage their own name details"
          attribute:
          - surname
          action: member
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory selfservice-member-present-copy.yml

其它资源

  • 有关自助服务规则概念的更多信息,请参阅 IdM 中的自助服务访问控制
  • 有关使用 ipaselfservice 模块的更多 Ansible playbook 示例,请参阅:

    • The README-selfservice.md 文件位于 /usr/share/doc/ansible-freeipa/ 目录中。此文件还包含 ipaselfservice 变量的定义。
    • /usr/share/doc/ansible-freeipa/playbooks/selfservice 目录。

20.5. 使用 Ansible 确保自助服务规则没有特定属性

以下流程描述了如何使用 Ansible playbook 来确保自助服务规则没有特定的设置。您可以使用此 playbook 确保自助服务规则不授予不需要的访问权限。在示例中,您可以确保用户可以管理自己的名称详细信息 自助服务规则没有 给定的name 和urname 成员 属性。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了符合以下要求的 Ansible 控制节点:

    • 您使用 Ansible 版本 2.8 或更高版本。
    • 您已安装 ansible-freeipa 软件包。
    • ~/MyPlaybooks/ 目录中,您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
  • 用户可以在 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 变量设置为您要修改的自助服务规则的名称。
    • 属性 变量设置为 givenname 和 top name
    • action 变量设置为 member
    • state 变量设置为 absent

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Self-service member absent
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure selfservice "Users can manage their own name details" member attributes givenname and surname are absent
        ipaselfservice:
          ipaadmin_password: Secret123
          name: "Users can manage their own name details"
          attribute:
          - givenname
          - surname
          action: member
          state: absent
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory selfservice-member-absent-copy.yml

其它资源

  • 有关自助服务规则概念的更多信息,请参阅 IdM 中的自助服务访问控制
  • 有关使用 ipaselfservice 模块的更多 Ansible playbook 示例,请参阅:

    • The README-selfservice.md 文件位于 /usr/share/doc/ansible-freeipa/ 目录中。此文件还包含 ipaselfservice 变量的定义。
    • /usr/share/doc/ansible-freeipa/playbooks/selfservice 目录。

第 21 章 委派权限到用户组,以使用 IdM CLI 管理用户

委派是 IdM 中的访问控制方法之一,以及自助服务规则和基于角色的访问控制(RBAC)。您可以使用 delegation 为一组用户分配权限,以管理另一组用户的条目。

本节涵盖了以下主题:

21.1. 委派规则

您可以通过创建委派规则,将权限委派给用户组来管理用户。

委派规则允许特定用户组对另一用户组中用户的特定属性执行写入(编辑)操作。这种形式的访问控制规则仅限于编辑您在委派规则中指定的属性子集的值;它不授予添加或删除整个条目或控制未指定属性的权限。

委派规则向 IdM 中的现有用户组授予权限。例如,您可以使用 delegation,允许 managers 用户组管理 employees 用户 组中的选定用户属性。

21.2. 使用 IdM CLI 创建委托规则

本节论述了如何使用 IdM CLI 创建委托规则。

先决条件

  • 您已作为 admins 组的成员登录。

流程

  • 输入 ipa delegation-add 命令。指定以下选项:

    • --Group: 被授予 user 组中用户条目 权限的组。
    • --membergroup:group whose 条目可以由委派组的成员编辑
    • --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

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

21.4. 使用 IdM CLI 修改委托规则

本节论述了如何使用 IdM CLI 修改现有委派规则。

重要

--attrs 选项覆盖先前支持的属性列表,因此始终包括属性的完整列表以及任何新属性。这也适用于 --permissions 选项。

先决条件

  • 您已作为 admins 组的成员登录。

流程

  • 输入 ipa delegation-mod 命令及所需的更改。例如,将 displayname 属性添加到 基本管理器属性 示例规则中:

    $ 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

21.5. 使用 IdM CLI 删除委托规则

本节论述了如何使用 IdM CLI 删除现有委派规则。

先决条件

  • 您已作为 admins 组的成员登录。

流程

  • 输入 ipa delegation-del 命令。
  • 提示时,输入您要删除的委派规则的名称:

    $ ipa delegation-del
    Delegation name: basic manager attributes
    ---------------------------------------------
    Deleted delegation "basic manager attributes"
    ---------------------------------------------

第 22 章 委派权限到用户组,以使用 IdM Web UI 管理用户

委派是 IdM 中的访问控制方法之一,以及自助服务规则和基于角色的访问控制(RBAC)。您可以使用 delegation 为一组用户分配权限,以管理另一组用户的条目。

本节涵盖了以下主题:

22.1. 委派规则

您可以通过创建委派规则,将权限委派给用户组来管理用户。

委派规则允许特定用户组对另一用户组中用户的特定属性执行写入(编辑)操作。这种形式的访问控制规则仅限于编辑您在委派规则中指定的属性子集的值;它不授予添加或删除整个条目或控制未指定属性的权限。

委派规则向 IdM 中的现有用户组授予权限。例如,您可以使用 delegation,允许 managers 用户组管理 employees 用户 组中的选定用户属性。

22.2. 使用 IdM WebUI 创建委托规则

本节论述了如何使用 IdM Web UI 创建委托规则。

先决条件

  • 您已作为 admins 组的成员登录到 IdM Web UI。

流程

  1. IPA Server 菜单中点击 Role-Based Access ControlDelegations
  2. 添加

    IdM Web UI 的截图,显示"IPA Server"选项卡中"基于角色的访问控制"下拉菜单的内容。"基于角色的访问控制"下拉菜单中有五个选项:角色 - 特权 - 权限 - Permissions - 自助服务权限 - 委派.
  3. Add delegation 窗口中执行以下操作:

    1. 将新委托规则命名为。
    2. 通过选择复选框来设置权限,该复选框指示用户是否有权查看给定的属性(读取)并添加或更改给定的属性(写入)。
    3. 在"用户组"下拉菜单中,选择被授予权限的组来查看或编辑成员组中的用户条目
    4. Member user group 下拉菜单中,选择委派组的成员可以编辑 groupwhose 条目
    5. 在属性框中,按您要为其授予权限的属性选择复选框。

      "添加委派"弹出窗口的屏幕截图,您可以在其中输入委派的详细信息。条目选项包括委派名称的文本字段,以及"读取"和"写入"权限的复选框。用户组还有一个下拉菜单,即 Member 用户组的下拉菜单,以及许多属性复选框(例如部门编号 - 员工编号 - 业务类别 - 员工类型)。
    6. 单击添加按钮,以保存新的委派规则。

22.3. 使用 IdM WebUI 查看现有委派规则

本节论述了如何使用 IdM Web UI 查看现有的委派规则。

先决条件

  • 您已作为 admins 组的成员登录到 IdM Web UI。

流程

  • IPA Server 菜单中点击 Role-Based Access ControlDelegations

    IdM Web UI 的屏幕截图,显示了"IPA Server"选项卡的"基于角色的访问控制"子菜单中的"Delegations"页面。有一个表显示了其"指定名称"组织的授权。

22.4. 使用 IdM WebUI 修改委托规则

本节论述了如何使用 IdM Web UI 修改现有委托规则。

先决条件

  • 您已作为 admins 组的成员登录到 IdM Web UI。

流程

  1. IPA Server 菜单中点击 Role-Based Access ControlDelegations

    IdM Web UI 的截图,显示 IPA Server 选项卡中基于角色的访问控制子页面。Delegations 页面显示一个表,其中包含一个用于"基本管理器属性"委派名称的条目。
  2. 点击您要修改的规则。
  3. 进行所需的更改:

    • 更改规则的名称。
    • 通过选择复选框来更改授予的权限,该复选框指示用户是否有权查看给定的属性(读取)并添加或更改给定的属性(写入)。
    • 在"用户组"下拉菜单中,选择被授予权限的组来查看或编辑成员组中的用户条目
    • Member user group 下拉菜单中,选择委派组的成员可以编辑 groupwhose 条目
    • 在属性框中,按您要为其授予权限的属性选择复选框。若要删除属性的权限,可取消选中相关复选框。

      Delegation 页面显示"基本管理器属性"委派的详细信息,如委派名称 - Permissions(必需,如"读取"和"写入") - 用户组(如"managers") - member 用户组(必需),如"员工编号"和属性(必需)。突出显示左上角的"保存"按钮。
    • 单击 Save 按钮以保存更改。

22.5. 使用 IdM WebUI 删除委托规则

本节论述了如何使用 IdM Web UI 删除现有委托规则。

先决条件

  • 您已作为 admins 组的成员登录到 IdM Web UI。

流程

  1. IPA Server 菜单中点击 Role-Based Access ControlDelegations
  2. 选中您要删除的规则旁边的复选框。
  3. Delete

    "IPA 服务器"选项卡"基于角色的访问控制"子菜单的屏幕截图."Delegations"页面显示带有委派名称的表,并选中了"基本管理器属性"条目的复选框。"删除"按钮已突出显示。
  4. 单击 Delete 确认。

第 23 章 委派权限到用户组,以使用 Ansible playbook 管理用户

委派是 IdM 中的访问控制方法之一,以及自助服务规则和基于角色的访问控制(RBAC)。您可以使用 delegation 为一组用户分配权限,以管理另一组用户的条目。

本节涵盖了以下主题:

23.1. 委派规则

您可以通过创建委派规则,将权限委派给用户组来管理用户。

委派规则允许特定用户组对另一用户组中用户的特定属性执行写入(编辑)操作。这种形式的访问控制规则仅限于编辑您在委派规则中指定的属性子集的值;它不授予添加或删除整个条目或控制未指定属性的权限。

委派规则向 IdM 中的现有用户组授予权限。例如,您可以使用 delegation,允许 managers 用户组管理 employees 用户 组中的选定用户属性。

23.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 主机组,它包含来自 theeu 和 us 组的所有主机。

23.3. 使用 Ansible 确保存在委派规则

以下流程描述了如何使用 Ansible playbook 为新的 IdM 委派规则定义特权并确保其存在。在这个示例中,新的 基本管理器属性 委派规则授予 managers 组为 employees 组成员读取和写入以下属性 的权限

  • businesscategory
  • departmentnumber
  • employeenumber
  • employeetype

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了符合以下要求的 Ansible 控制节点:

    • 您使用 Ansible 版本 2.8 或更高版本。
    • 您已安装 ansible-freeipa 软件包。
    • 您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。

流程

  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 变量设置为新委派规则的名称。
    • 权限 变量设置为以逗号分隔的权限列表,以授予: 读取和写入
    • 属性 变量设置为委派的用户组可以管理的属性列表: Business category、Departmentnumberworkernumber 和 employees type
    • group 变量设置为被授予查看或修改属性访问权限的组名称。
    • membergroup 变量设置为组的名称,其属性可以查看或修改。

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Playbook to manage a delegation rule
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure delegation "basic manager attributes" is present
        ipadelegation:
          ipaadmin_password: Secret123
          name: "basic manager attributes"
          permission: read, write
          attribute:
          - businesscategory
          - departmentnumber
          - employeenumber
          - employeetype
          group: managers
          membergroup: employees
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i ~/MyPlaybooks/inventory delegation-present-copy.yml

其它资源

  • 有关委派规则概念的更多信息,请参阅委派规则
  • 有关使用 ipadelegation 模块的更多 Ansible playbook 示例,请参阅:

    • The README-delegation.md 文件位于 /usr/share/doc/ansible-freeipa/ 目录中。此文件还包含 ipadelegation 变量的定义。
    • /usr/share/doc/ansible-freeipa/playbooks/ipadelegation 目录。

23.4. 使用 Ansible 确保缺少委派规则

以下流程描述了如何使用 Ansible playbook 来确保您的 IdM 配置中没有指定的委托规则。以下示例描述了如何确保 IdM 中不存在自定义基本管理器属性委派规则

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了符合以下要求的 Ansible 控制节点:

    • 您使用 Ansible 版本 2.8 或更高版本。
    • 您已安装 ansible-freeipa 软件包。
    • 您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。

流程

  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
      become: true
    
      tasks:
      - name: Ensure delegation "basic manager attributes" is absent
        ipadelegation:
          ipaadmin_password: Secret123
          name: "basic manager attributes"
          state: absent
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i ~/MyPlaybooks/inventory delegation-absent-copy.yml

其它资源

  • 有关委派规则概念的更多信息,请参阅委派规则
  • 有关使用 ipadelegation 模块的更多 Ansible playbook 示例,请参阅:

    • The README-delegation.md 文件位于 /usr/share/doc/ansible-freeipa/ 目录中。此文件还包含 ipadelegation 变量的定义。
    • /usr/share/doc/ansible-freeipa/playbooks/ipadelegation 目录。

23.5. 使用 Ansible 确保委派规则具有特定属性

以下流程描述了如何使用 Ansible playbook 确保委派规则具有特定的设置。您可以使用此 playbook 修改您之前创建的委派角色。在示例中,您可以确保 基本的管理器属性 委派规则仅具有 Department number member 属性。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了符合以下要求的 Ansible 控制节点:

    • 您使用 Ansible 版本 2.8 或更高版本。
    • 您已安装 ansible-freeipa 软件包。
    • 您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。
  • IdM 中存在基本的管理器属性委派规则

流程

  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 变量设置为要修改的委派规则的名称。
    • 属性 变量设置为 Departmentnumber
    • action 变量设置为 member

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Delegation member present
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure delegation "basic manager attributes" member attribute departmentnumber is present
        ipadelegation:
          ipaadmin_password: Secret123
          name: "basic manager attributes"
          attribute:
          - departmentnumber
          action: member
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i ~/MyPlaybooks/inventory delegation-member-present-copy.yml

其它资源

  • 有关委派规则概念的更多信息,请参阅委派规则
  • 有关使用 ipadelegation 模块的更多 Ansible playbook 示例,请参阅:

    • The README-delegation.md 文件位于 /usr/share/doc/ansible-freeipa/ 目录中。此文件还包含 ipadelegation 变量的定义。
    • /usr/share/doc/ansible-freeipa/playbooks/ipadelegation 目录。

23.6. 使用 Ansible 确保委派规则没有特定属性

以下流程描述了如何使用 Ansible playbook 来确保委派规则没有特定的设置。您可以使用此 playbook 确保委派角色不授予不需要的访问权限。在该示例中,您可以确保 基本管理器属性 委派规则没有 employees number 和 employees type 成员属性。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了符合以下要求的 Ansible 控制节点:

    • 您使用 Ansible 版本 2.8 或更高版本。
    • 您已安装 ansible-freeipa 软件包。
    • 您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。
  • IdM 中存在基本的管理器属性委派规则

流程

  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 变量设置为要修改的委派规则的名称。
    • 属性 变量设置为 employeesnumberemployeestype
    • action 变量设置为 member
    • state 变量设置为 absent

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Delegation member absent
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure delegation "basic manager attributes" member attributes employeenumber and employeetype are absent
        ipadelegation:
          ipaadmin_password: Secret123
          name: "basic manager attributes"
          attribute:
          - employeenumber
          - employeetype
          action: member
          state: absent
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i ~/MyPlaybooks/inventory delegation-member-absent-copy.yml

其它资源

  • 有关委派规则概念的更多信息,请参阅委派规则
  • 有关使用 ipadelegation 模块的更多 Ansible playbook 示例,请参阅:

    • The README-delegation.md 文件位于 /usr/share/doc/ansible-freeipa/ 目录中。此文件还包含 ipadelegation 变量的定义。
    • /usr/share/doc/ansible-freeipa/playbooks/ipadelegation 目录。

第 24 章 使用 CLI 在 IdM 中管理基于角色的访问控制

本章介绍了身份管理(IdM)中的基于角色的访问控制,并描述了命令行界面(CLI)中的以下操作:

24.1. IdM 中的基于角色的访问控制

与自助服务和委派访问控制相比,IdM 中的基于角色的访问控制(RBAC)向用户授予完全不同的授权。

基于角色的访问控制由三个部分组成:

  • 权限授予执行特定任务的权利,如添加或删除用户、修改组、启用读取访问等。
  • 权限结合权限,例如添加新用户所需的所有权限。
  • 角色向用户、用户组、主机或主机组授予一组特权。

24.1.1. IdM 中的权限

权限是基于角色的访问控制的最低级别单元,它们定义这些操作所应用到的 LDAP 条目。与构建块类似,可以根据需要对尽可能多的权限分配权限。
一个或多个权利定义了允许的操作

  • 写入
  • 读取
  • search
  • compare
  • add
  • delete
  • all

这些操作适用于三个基本目标

  • 子树 :域名(DN);此 DN 下的子树
  • 目标过滤器 :LDAP 过滤器
  • 目标 :带有可能通配符的 DN 指定条目

此外,以下方便选项可设置对应的属性:

  • 类型 :对象类型(用户、组等);设置 子树 和目标过滤器
  • member Of:组成员;设置 目标过滤器
  • TargetGroup: 授予修改特定组的权限(如授予管理组成员资格的权限);设置 目标

使用 IdM 权限,您可以控制哪些用户有权访问哪些对象,甚至控制这些对象的属性。IdM 允许您允许或阻止单个属性,或更改特定 IdM 功能(如用户、组或 sudo)的所有可见性,适用于所有匿名用户、所有经过身份验证的用户,或者只更改一组特定的特权用户。
例如,如果管理员只想将用户或组的访问权限限制到这些用户或组需要访问的特定部分,并且使其他部分完全隐藏于他们,此方法的灵活性对管理员很有用。

注意

权限不能包含其他权限。

24.1.2. 默认管理权限

管理的权限是 IdM 默认附带的权限。它们的行为与用户创建的其他权限类似,但有以下区别:

  • 您无法删除它们或修改其名称、位置和目标属性。
  • 它们有三组属性:

    • 默认属性,用户无法修改它们,因为它们由 IdM 管理
    • 包含的属性,它们是用户添加的额外属性
    • 排除的属性,这些属性由用户删除

管理的权限适用于 default 和 included 属性集中显示的所有属性,但不应用到排除集中的所有属性。

注意

虽然您无法删除受管权限,但将其绑定类型设置为权限并从所有特权中删除托管权限会有效地禁用该权限。

所有受管权限的名称都以 System: 开头,例如 System: 添加 Sudo 规则或 System: Modify Services。IdM 的早期版本将不同的方案用于默认权限。例如,用户无法删除它们,而只能将它们分配到特权。这些默认权限大部分已转换为受管权限,但以下权限仍使用以前的方案:

  • 添加 Automember Rebuild Membership 任务
  • 添加配置子条目
  • 添加复制协议
  • 证书删除冻结
  • 从 CA 获取证书状态
  • 读取 DNA 范围
  • 修改 DNA 范围
  • 读取 PassSync Manager 配置
  • 修改 PassSync Manager 配置
  • 阅读复制协议
  • 修改复制协议
  • 删除复制协议
  • 读取 LDBM 数据库配置
  • 请求证书
  • 请求证书忽略 CA ACL
  • 从不同主机请求证书
  • 从 CA 检索证书
  • 撤销证书
  • 写入 IPA 配置
注意

如果您试图通过命令行修改受管权限,系统不允许更改您无法修改的属性,命令会失败。如果您试图从 Web UI 修改受管权限,则无法修改的属性将被禁用。

24.1.3. IdM 中的权限

特权是一组适用于角色的权限。
虽然权限提供了执行单个操作的权限,但某些 IdM 任务需要多个权限才能成功。因此,特权组合了执行特定任务所需的不同权限。
例如,为新 IdM 用户设置帐户需要以下权限:

  • 创建新用户条目
  • 重置用户密码
  • 将新用户添加到默认 IPA 用户组

以名为 的自定义特权的形式将这三个低级别任务合并到更高级别的任务中,例如,添加用户可使系统管理员更加轻松地管理角色。IdM 已包含几个默认权限。除了用户和用户组外,还将特权分配到主机和主机组,以及网络服务。这种方法允许精细控制一组主机上使用特定网络服务的操作。

注意

特权可能不包含其他特权。

24.1.4. IdM 中的角色

角色是用户为角色指定的特权列表。
实际上,权限授予执行给定低级别任务(创建用户条目、向组添加条目等)的权限,权限组合了更高级别任务(如在给定组中创建新用户)所需的一个或多个这些权限。角色根据需要收集权限:例如,用户管理员角色能够添加、修改和删除用户。

重要

角色用于对允许的操作进行分类。它们不用作实施特权升级或防止特权升级的工具。

注意

角色不能包含其他角色。

24.1.5. Identity Management 中的预定义角色

Red Hat Identity Management 提供以下预定义角色范围:

表 24.1. Identity Management 中的预定义角色

角色权限描述

helpdesk

修改用户和重置密码,修改组成员资格

负责执行简单的用户管理任务

IT 安全专家

Netgroups 管理员, HBAC 管理员, Sudo Administrator

负责管理安全策略,如基于主机的访问控制、sudo 规则

IT 专家

主机管理员、主机组管理员、服务管理员、自动挂载管理员

负责管理主机

安全架构师

委派管理员、复制管理员、写入 IPA 配置、密码策略管理员

负责管理身份管理环境、创建信任、创建复制协议

用户管理员

用户管理员, 组管理员, Stage User Administrators

负责创建用户和组

24.2. 在 CLI 中管理 IdM 权限

本节论述了如何使用命令行界面(CLI)管理身份管理(IdM)权限。

先决条件

流程

  1. 使用 ipa permission-add 命令创建新的权限条目。
    例如,添加名为 dns admin 的权限:

    $ ipa permission-add "dns admin"
  2. 使用以下选项指定权限属性:

    • --bindtype 指定 bind 规则类型。此选项接受 all匿名 和权限 参数。权限 绑定类型表示只有通过角色授予此权限的用户才能执行该权限。
      例如:

      $ ipa permission-add "dns admin" --bindtype=all

      如果没有指定 --bindtype,则 权限 是默认值。

      注意

      无法通过非默认绑定规则类型向 权限添加权限。您也不能将特权中已存在的权限设置为非默认绑定规则类型。

    • --right 列出权限授予的权限,它替换了已弃用的 --permissions 选项。可用的值有 adddelete读取搜索比较写入全部

      您可以使用多个 --right 选项或使用大括号内以逗号分隔的列表来设置多个属性。例如:

      $ ipa permission-add "dns admin" --right=read --right=write
      $ ipa permission-add "dns admin" --right={read,write}
      注意

      添加 和删除 入门级操作(例如删除用户、添加组等),而 读取搜索比较写入 则是更多属性级别:您可以写入 userCertificate,但不能读取 userPassword

    • --attrs 提供授予权限的属性列表。
      您可以使用多个 --attrs 选项或通过在大括号内以逗号分隔的列表列出选项,从而设置多个属性。例如:

      $ ipa permission-add "dns admin" --attrs=description --attrs=automountKey
      $ ipa permission-add "dns admin" --attrs={description,automountKey}

      通过 --attrs 提供的属性必须存在,并且是给定对象类型的允许属性,否则 命令会失败并显示架构语法错误。

    • --type 定义权限应用到的条目对象类型,如用户、主机或服务。每种类型都有自己的一组允许的属性。
      例如:

      $ ipa permission-add "manage service" --right=all --type=service --attrs=krbprincipalkey --attrs=krbprincipalname --attrs=managedby
    • --subtree 提供子树条目;然后,过滤器以这个子树条目下的每个条目为目标。提供现有的子树条目;-- subtree 不接受通配符或不存在的域名(DN)。在 目录中包括 DN。
      因为 IdM 使用简化的扁平目录树结构,所以 --subtree 可用于将某些类型的条目作为目标,如自动挂载位置,它们是容器或父条目供其他配置使用。例如:

      $ ipa permission-add "manage automount locations" --subtree="ldap://ldap.example.com:389/cn=automount,dc=example,dc=com" --right=write --attrs=automountmapname --attrs=automountkey --attrs=automountInformation
      注意

      type --subtree 选项是互斥的:您可以看到 --type 中包含 过滤器是 --subtree 的 简化,目的是使管理员的工作更为简单。

    • --filter 使用 LDAP 过滤器来识别权限应用到的条目。
      IdM 自动检查给定过滤器的有效性。该过滤器可以是任何有效的 LDAP 过滤器,例如:

      $ ipa permission-add "manage Windows groups" --filter="(!(objectclass=posixgroup))" --right=write --attrs=description
    • --memberOf 检查组是否存在后,将目标过滤器设置为 给定组的成员。例如,要让拥有此权限的用户修改 engineer 组成员的登录 shell:

      $ ipa permission-add ManageShell --right="write" --type=user --attr=loginshell --memberof=engineers
    • --Target Group 在检查组存在后将目标设置为指定的用户组。例如,要让那些拥有权限的学员在 engineer 组中写入 member 属性(这样他们可以添加或删除成员):

      $ ipa permission-add ManageMembers --right="write" --subtree=cn=groups,cn=accounts,dc=example,dc=test --attr=member --targetgroup=engineers
    • 另外,您还可以指定目标域名(DN):

      • --target 指定要将权限应用到的 DN。可接受通配符.
      • --targetto 指定条目可移动到的 DN 子树。
      • --targetfrom 指定可从中移动条目的 DN 子树。

24.3. 现有权限的命令选项

根据需要,使用以下变体修改现有权限:

  • 要编辑现有权限,请使用 ipa permission-mod 命令。您可以使用与 添加权限相同的命令选项。
  • 要查找现有权限,请使用 ipa permission-find 命令。您可以使用与 添加权限相同的命令选项。
  • 要查看特定权限,请使用 ipa permissions-show 命令。
    raw 参数 显示生成的原始 389-ds ACI。例如:

     $ ipa permission-show <permission> --raw
  • ipa permissions-del 命令完全删除权限。

其它资源

有关 ipa 权限 命令的详情,请参考 ipa man page 和 ipa help 命令。

24.4. 在 CLI 中管理 IdM 权限

本节论述了如何使用命令行界面(CLI)管理身份管理(IdM)权限。

先决条件

流程

  1. 使用 ipa privilege-add 命令添加 权限条目
    例如,添加名为 管理文件系统 的特权并带有描述:

    $ ipa privilege-add "managing filesystems" --desc="for filesystems"
  2. 使用 privilege-add-permission 命令为权限组分配所需的权限
    例如,将名为 管理自动挂载 的权限添加至 管理文件系统 的权限

    $ ipa privilege-add-permission "managing filesystems" --permissions="managing automount" --permissions="managing ftp services"

24.5. 现有权限的命令选项

根据需要,使用以下变体修改现有权限:

  • 若要修改现有的特权,可使用 ipa privilege-mod 命令。
  • 要查找现有的特权,请使用 ipa privilege-find 命令。
  • 若要查看特定的特权,可使用 ipa privilege-show 命令。
  • ipa privilege-remove-permission 命令从特权中删除一个或多个权限。
  • ipa privilege-del 命令完全删除特权。

其它资源

有关 ipa 权限命令 的详情,请参考 ipa man page 和 ipa help 命令。

24.6. 在 CLI 中管理 IdM 角色

本节论述了如何使用命令行界面(CLI)管理身份管理(IdM)角色。

先决条件

流程

  1. 使用 ipa role-add 命令添加新角色条目:

    $ ipa role-add --desc="User Administrator" useradmin
    ------------------------
    Added role "useradmin"
    ------------------------
    Role name: useradmin
    Description: User Administrator
  2. 使用 ipa role-add-privilege 命令为角色添加所需的权限:

    $ ipa role-add-privilege --privileges="user administrators" useradmin
    Role name: useradmin
    Description: User Administrator
    Privileges: user administrators
    ----------------------------
    Number of privileges added 1
    ----------------------------
  3. 使用 ipa role-add-member 命令将所需的成员添加到角色中。允许的成员类型有:用户、组、主机和主机组。
    例如,将名为 useradmins 的组添加到之前创建的 useradmin 角色中:

    $ ipa role-add-member --groups=useradmins useradmin
    Role name: useradmin
    Description: User Administrator
    Member groups: useradmins
    Privileges: user administrators
    -------------------------
    Number of members added 1
    -------------------------

24.7. 现有角色的命令选项

根据需要,使用以下变体修改现有角色:

  • 若要修改现有角色,可使用 ipa role-mod 命令。
  • 要查找现有的角色,请使用 ipa role-find 命令。
  • 要查看特定的角色,请使用 ipa role-show 命令。
  • 若要从角色中删除成员,可使用 ipa role-remove-member 命令。
  • ipa role-remove-privilege 命令从角色中删除一个或多个特权。
  • ipa role-del 命令可以完全删除角色。

其它资源

有关 ipa 角色 命令的详情,请参考 ipa man page 和 ipa help 命令。

第 25 章 使用 IdM Web UI 管理基于角色的访问控制

本章介绍了身份管理(IdM)中的基于角色的访问控制,并描述了 Web 界面(Web UI)中的以下操作:

25.1. IdM 中的基于角色的访问控制

与自助服务和委派访问控制相比,IdM 中的基于角色的访问控制(RBAC)向用户授予完全不同的授权。

基于角色的访问控制由三个部分组成:

  • 权限授予执行特定任务的权利,如添加或删除用户、修改组、启用读取访问等。
  • 权限结合权限,例如添加新用户所需的所有权限。
  • 角色向用户、用户组、主机或主机组授予一组特权。

25.1.1. IdM 中的权限

权限是基于角色的访问控制的最低级别单元,它们定义这些操作所应用到的 LDAP 条目。与构建块类似,可以根据需要对尽可能多的权限分配权限。
一个或多个权利定义了允许的操作

  • 写入
  • 读取
  • search
  • compare
  • add
  • delete
  • all

这些操作适用于三个基本目标

  • 子树 :域名(DN);此 DN 下的子树
  • 目标过滤器 :LDAP 过滤器
  • 目标 :带有可能通配符的 DN 指定条目

此外,以下方便选项可设置对应的属性:

  • 类型 :对象类型(用户、组等);设置 子树 和目标过滤器
  • member Of:组成员;设置 目标过滤器
  • TargetGroup: 授予修改特定组的权限(如授予管理组成员资格的权限);设置 目标

使用 IdM 权限,您可以控制哪些用户有权访问哪些对象,甚至控制这些对象的属性。IdM 允许您允许或阻止单个属性,或更改特定 IdM 功能(如用户、组或 sudo)的所有可见性,适用于所有匿名用户、所有经过身份验证的用户,或者只更改一组特定的特权用户。
例如,如果管理员只想将用户或组的访问权限限制到这些用户或组需要访问的特定部分,并且使其他部分完全隐藏于他们,此方法的灵活性对管理员很有用。

注意

权限不能包含其他权限。

25.1.2. 默认管理权限

管理的权限是 IdM 默认附带的权限。它们的行为与用户创建的其他权限类似,但有以下区别:

  • 您无法删除它们或修改其名称、位置和目标属性。
  • 它们有三组属性:

    • 默认属性,用户无法修改它们,因为它们由 IdM 管理
    • 包含的属性,它们是用户添加的额外属性
    • 排除的属性,这些属性由用户删除

管理的权限适用于 default 和 included 属性集中显示的所有属性,但不应用到排除集中的所有属性。

注意

虽然您无法删除受管权限,但将其绑定类型设置为权限并从所有特权中删除托管权限会有效地禁用该权限。

所有受管权限的名称都以 System: 开头,例如 System: 添加 Sudo 规则或 System: Modify Services。IdM 的早期版本将不同的方案用于默认权限。例如,用户无法删除它们,而只能将它们分配到特权。这些默认权限大部分已转换为受管权限,但以下权限仍使用以前的方案:

  • 添加 Automember Rebuild Membership 任务
  • 添加配置子条目
  • 添加复制协议
  • 证书删除冻结
  • 从 CA 获取证书状态
  • 读取 DNA 范围
  • 修改 DNA 范围
  • 读取 PassSync Manager 配置
  • 修改 PassSync Manager 配置
  • 阅读复制协议
  • 修改复制协议
  • 删除复制协议
  • 读取 LDBM 数据库配置
  • 请求证书
  • 请求证书忽略 CA ACL
  • 从不同主机请求证书
  • 从 CA 检索证书
  • 撤销证书
  • 写入 IPA 配置
注意

如果您试图通过命令行修改受管权限,系统不允许更改您无法修改的属性,命令会失败。如果您试图从 Web UI 修改受管权限,则无法修改的属性将被禁用。

25.1.3. IdM 中的权限

特权是一组适用于角色的权限。
虽然权限提供了执行单个操作的权限,但某些 IdM 任务需要多个权限才能成功。因此,特权组合了执行特定任务所需的不同权限。
例如,为新 IdM 用户设置帐户需要以下权限:

  • 创建新用户条目
  • 重置用户密码
  • 将新用户添加到默认 IPA 用户组

以名为 的自定义特权的形式将这三个低级别任务合并到更高级别的任务中,例如,添加用户可使系统管理员更加轻松地管理角色。IdM 已包含几个默认权限。除了用户和用户组外,还将特权分配到主机和主机组,以及网络服务。这种方法允许精细控制一组主机上使用特定网络服务的操作。

注意

特权可能不包含其他特权。

25.1.4. IdM 中的角色

角色是用户为角色指定的特权列表。
实际上,权限授予执行给定低级别任务(创建用户条目、向组添加条目等)的权限,权限组合了更高级别任务(如在给定组中创建新用户)所需的一个或多个这些权限。角色根据需要收集权限:例如,用户管理员角色能够添加、修改和删除用户。

重要

角色用于对允许的操作进行分类。它们不用作实施特权升级或防止特权升级的工具。

注意

角色不能包含其他角色。

25.1.5. Identity Management 中的预定义角色

Red Hat Identity Management 提供以下预定义角色范围:

表 25.1. Identity Management 中的预定义角色

角色权限描述

helpdesk

修改用户和重置密码,修改组成员资格

负责执行简单的用户管理任务

IT 安全专家

Netgroups 管理员, HBAC 管理员, Sudo Administrator

负责管理安全策略,如基于主机的访问控制、sudo 规则

IT 专家

主机管理员、主机组管理员、服务管理员、自动挂载管理员

负责管理主机

安全架构师

委派管理员、复制管理员、写入 IPA 配置、密码策略管理员

负责管理身份管理环境、创建信任、创建复制协议

用户管理员

用户管理员, 组管理员, Stage User Administrators

负责创建用户和组

25.2. 在 IdM Web UI 中管理权限

本节论述了如何使用 Web 界面(IdM Web UI)在 Identity Management(IdM)中管理权限。

先决条件

流程

  1. 要添加新权限,在 IPA Server 选项卡中打开基于角色的访问控制子菜单并选择 权限

    Permissions task

  2. 此时会打开权限列表:点击权限列表顶部的 Add 按钮:

    Adding a new permission

  3. 此时会打开 Add Permission 表单。指定新权限的名称,并相应地定义其属性:

    Form for adding a permission

  4. 选择适当的 Bind 规则类型:

    • 权限是默认权限类型,通过特权和角色授予访问权限
    • all 指定权限适用于所有经过身份验证的用户
    • anonymous 指定权限适用于所有用户,包括未经身份验证的用户

      注意

      无法通过非默认绑定规则类型向 权限添加权限。您也不能将特权中已存在的权限设置为非默认绑定规则类型。

  5. 选择授予此权限的权利
  6. 定义用于标识权限的目标条目的方法:

    • type 指定条目类型,如 user、host 或 service。如果您为 Type 设置选择一个值,则会在 Effective Attributes 下显示可通过此 ACI 访问的所有可能属性列表。定义 TypeSubtreeTarget DN 设置为其中一个预定义的值。
    • 子树 (必需)指定一个子树条目;这个子树条目下的每个条目都是目标条目。提供现有的子树条目,因为 Subtree 不接受通配符或不存在的域名(DN)。例如: cn=automount,dc=example,dc=com
    • 额外目标过滤器使用 LDAP 过滤器来识别权限应用到的条目。过滤器可以是任何有效的 LDAP 过滤器,例如: (!(objectclass=posixgroup))
      IdM 会自动检查给定过滤器的有效性。如果您输入无效的过滤器,IdM 会在您尝试保存权限时警告您。
    • 目标 DN 指定域名(DN)并接受通配符。例如: uid=*,cn=users,cn=accounts,dc=com
    • 组的成员将目标过滤器设置为给定组的成员。指定过滤器设置并点击 Add 后,IdM 会验证过滤器。如果所有权限设置都正确,IdM 将执行搜索。如果某些权限设置不正确,IdM 将显示一条消息,通知您哪个设置不正确。
  7. 在权限中添加属性:

    • 如果设置 Type,请从可用 ACI 属性列表中选择 Effective 属性。
    • 如果您没有使用 Type,通过将属性写入 Effective 属性字段来手动添加属性。一次添加单个属性;若要添加多个属性,可单击 Add 以添加另一个输入字段

      重要

      如果您没有为权限设置任何属性,则权限默认包含所有属性。

  8. 使用表单底部的 Add 按钮完成添加权限:

    • 单击添加按钮以保存权限并返回权限列表
    • 或者,您可以保存权限,并通过单击 Add 和 Add 另一个按钮继续在同一表单中添加其他权限
    • 通过 Add and Edit 按钮,您可以保存并继续编辑新创建的权限。
  9. 可选。您还可以通过单击现有权限列表中的名称以显示权限设置页面来编辑现有权限的属性
  10. 可选。如果您需要删除现有权限,请在列表中选中其名称旁边的复选框后单击删除按钮 ,以显示删除权限对话框

    注意

    对默认管理权限的操作受到限制:您无法修改的属性在 IdM Web UI 中禁用,您无法完全删除受管权限。
    但是,您可以通过从所有权限中删除受管权限,有效禁用绑定类型设置为权限的托管权限。

例如,要让那些拥有权限的学员在 engineer 组中写入 member 属性(这样他们可以添加或删除成员):
Example for adding a permission

25.3. 在 IdM Web UI 中管理权限

本节论述了如何使用 Web 界面(IdM Web UI)在 IdM 中管理权限。

先决条件

流程

  1. 要添加新权限,在 IPA Server 选项卡中打开基于角色的访问控制子菜单,然后选择 Privileges

    Privileges task

  2. 此时会打开权限列表。点击权限列表顶部的 Add 按钮:

    Adding a new privilege

  3. 此时会打开 Add Privilege 表单。输入权限的名称和描述:

    Form for adding a privilege

  4. 单击添加和编辑按钮,以保存新特权并继续特权配置页面以添加权限。
  5. 单击权限列表中的特权名称,以编辑特权属性。此时会打开权限配置页面。
  6. Permissions 选项卡显示选定特权中包含的权限列表。点击列表顶部的 Add 按钮为权限添加权限:

    Adding Permissions

  7. 勾选每个要添加的权限名称旁边的复选框,并使用 > 按钮将权限移到 Prospective 列中:

    Selecting Permissions

  8. 单击添加按钮进行确认
  9. 可选。如果您需要删除权限,请在相关权限旁勾选复选框后单击 Delete 按钮:将打开删除权限对话框
  10. 可选。如果您需要删除现有的特权,请在列表中勾选其名称旁边的复选框后单击 Delete 按钮: Remove 权限对话框将打开

25.4. 在 IdM Web UI 中管理角色

本节论述了如何使用 Web 界面(IdM Web UI)在 Identity Management(IdM)中管理角色。

先决条件

流程

  1. 要添加新角色,请在 IPA Server 选项卡中打开基于角色的访问控制子菜单并选择 角色

    Roles task

  2. 角色列表会打开。单击基于角色的访问控制指令列表顶部的添加按钮

    Adding a new role

  3. 此时会打开 Add Role 表单。输入角色名称和描述:

    Form for adding a role

  4. 单击 Add 和 Edit 按钮,以保存新角色,再前往角色配置页面以添加特权和用户。
  5. 单击角色列表中的角色名称,以编辑角色的属性。roles 配置页面将打开。
  6. 单击相关列表顶部的 Add 按钮,使用用户、用户组、主机 、主机组或服务 选项卡添加成员

    Adding users

  7. 在打开的窗口中,选择左侧的成员,并使用 > 按钮将它们移到 Prospective 列中。

    Selecting Users

  8. Privileges 选项卡顶部,单击 Add

    Adding Privileges

  9. 选择左侧的特权,并使用 > 按钮将它们移到 Prospective 列中。

    Selecting Privileges

  10. 单击"添加 "按钮保存。
  11. 可选。如果您需要从角色中删除特权或成员,请在勾选您要删除的实体名称旁边的复选框后单击 Delete 按钮。此时会打开一个对话框。
  12. 可选。如果您需要删除现有角色,请在列表中选中其名称旁边的复选框后单击 Delete 按钮,以显示 Remove 角色对话框

第 26 章 准备您的环境以使用 Ansible playbook 管理 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 特权,即可执行 ipaserver、ipareplica、ipaclientipabackup ansible-freeipa 角色。这些角色需要具有目录和 dnf 软件包管理器的特权访问权限。

本节论述了如何创建 ~/MyPlaybooks 目录并进行配置,以便您可以使用它来存储和运行 Ansible playbook。

先决条件

  • 您已在受管节点上安装了 IdM 服务器server.idm.example.com replica.idm.example.com
  • 您已配置了 DNS 和网络,以便您可以直接从控制节点登录到受管节点server.idm.example.com replica.idm.example.com
  • 您知道 IdM 管理员 密码。

流程

  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 文件:

    [eu]
    server.idm.example.com
    
    [us]
    replica.idm.example.com
    
    [ipaserver:children]
    eu
    us

    此配置定义了两个主机组,即euus,用于这些位置中的主机。此外,此配置定义 ipaserver 主机组,它包含来自 theeu 和 us 组的所有主机。

  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 章 在 IdM 中使用 Ansible playbook 管理基于角色的访问控制

基于角色的访问控制(RBAC)是一种基于角色和特权定义的策略中立访问控制机制。在 Identity Management(IdM)中的 RBAC 组件是角色、权限和权限:

  • 权限授予执行特定任务的权利,如添加或删除用户、修改组、启用读取访问等。
  • 权限结合权限,例如添加新用户所需的所有权限。
  • 角色向用户、用户组、主机或主机组授予一组特权。

尤其是在大型公司,使用 RBAC 可以帮助创建具有各个职责领域的管理员分层系统。

本章介绍了使用 Ansible playbook 管理 RBAC 时执行的以下操作:

27.1. IdM 中的权限

权限是基于角色的访问控制的最低级别单元,它们定义这些操作所应用到的 LDAP 条目。与构建块类似,可以根据需要对尽可能多的权限分配权限。
一个或多个权利定义了允许的操作

  • 写入
  • 读取
  • search
  • compare
  • add
  • delete
  • all

这些操作适用于三个基本目标

  • 子树 :域名(DN);此 DN 下的子树
  • 目标过滤器 :LDAP 过滤器
  • 目标 :带有可能通配符的 DN 指定条目

此外,以下方便选项可设置对应的属性:

  • 类型 :对象类型(用户、组等);设置 子树 和目标过滤器
  • member Of:组成员;设置 目标过滤器
  • TargetGroup: 授予修改特定组的权限(如授予管理组成员资格的权限);设置 目标

使用 IdM 权限,您可以控制哪些用户有权访问哪些对象,甚至控制这些对象的属性。IdM 允许您允许或阻止单个属性,或更改特定 IdM 功能(如用户、组或 sudo)的所有可见性,适用于所有匿名用户、所有经过身份验证的用户,或者只更改一组特定的特权用户。
例如,如果管理员只想将用户或组的访问权限限制到这些用户或组需要访问的特定部分,并且使其他部分完全隐藏于他们,此方法的灵活性对管理员很有用。

注意

权限不能包含其他权限。

27.2. 默认管理权限

管理的权限是 IdM 默认附带的权限。它们的行为与用户创建的其他权限类似,但有以下区别:

  • 您无法删除它们或修改其名称、位置和目标属性。
  • 它们有三组属性:

    • 默认属性,用户无法修改它们,因为它们由 IdM 管理
    • 包含的属性,它们是用户添加的额外属性
    • 排除的属性,这些属性由用户删除

管理的权限适用于 default 和 included 属性集中显示的所有属性,但不应用到排除集中的所有属性。

注意

虽然您无法删除受管权限,但将其绑定类型设置为权限并从所有特权中删除托管权限会有效地禁用该权限。

所有受管权限的名称都以 System: 开头,例如 System: 添加 Sudo 规则或 System: Modify Services。IdM 的早期版本将不同的方案用于默认权限。例如,用户无法删除它们,而只能将它们分配到特权。这些默认权限大部分已转换为受管权限,但以下权限仍使用以前的方案:

  • 添加 Automember Rebuild Membership 任务
  • 添加配置子条目
  • 添加复制协议
  • 证书删除冻结
  • 从 CA 获取证书状态
  • 读取 DNA 范围
  • 修改 DNA 范围
  • 读取 PassSync Manager 配置
  • 修改 PassSync Manager 配置
  • 阅读复制协议
  • 修改复制协议
  • 删除复制协议
  • 读取 LDBM 数据库配置
  • 请求证书
  • 请求证书忽略 CA ACL
  • 从不同主机请求证书
  • 从 CA 检索证书
  • 撤销证书
  • 写入 IPA 配置
注意

如果您试图通过命令行修改受管权限,系统不允许更改您无法修改的属性,命令会失败。如果您试图从 Web UI 修改受管权限,则无法修改的属性将被禁用。

27.3. IdM 中的权限

特权是一组适用于角色的权限。
虽然权限提供了执行单个操作的权限,但某些 IdM 任务需要多个权限才能成功。因此,特权组合了执行特定任务所需的不同权限。
例如,为新 IdM 用户设置帐户需要以下权限:

  • 创建新用户条目
  • 重置用户密码
  • 将新用户添加到默认 IPA 用户组

以名为 的自定义特权的形式将这三个低级别任务合并到更高级别的任务中,例如,添加用户可使系统管理员更加轻松地管理角色。IdM 已包含几个默认权限。除了用户和用户组外,还将特权分配到主机和主机组,以及网络服务。这种方法允许精细控制一组主机上使用特定网络服务的操作。

注意

特权可能不包含其他特权。

27.4. IdM 中的角色

角色是用户为角色指定的特权列表。
实际上,权限授予执行给定低级别任务(创建用户条目、向组添加条目等)的权限,权限组合了更高级别任务(如在给定组中创建新用户)所需的一个或多个这些权限。角色根据需要收集权限:例如,用户管理员角色能够添加、修改和删除用户。

重要

角色用于对允许的操作进行分类。它们不用作实施特权升级或防止特权升级的工具。

注意

角色不能包含其他角色。

27.5. Identity Management 中的预定义角色

Red Hat Identity Management 提供以下预定义角色范围:

表 27.1. Identity Management 中的预定义角色

角色权限描述

helpdesk

修改用户和重置密码,修改组成员资格

负责执行简单的用户管理任务

IT 安全专家

Netgroups 管理员, HBAC 管理员, Sudo Administrator

负责管理安全策略,如基于主机的访问控制、sudo 规则

IT 专家

主机管理员、主机组管理员、服务管理员、自动挂载管理员

负责管理主机

安全架构师

委派管理员、复制管理员、写入 IPA 配置、密码策略管理员

负责管理身份管理环境、创建信任、创建复制协议

用户管理员

用户管理员, 组管理员, Stage User Administrators

负责创建用户和组

27.6. 使用 Ansible 确保存在带有特权的 IdM RBAC 角色

要对身份管理(IdM)中的资源(IdM)中的资源进行更加精细的控制,请创建自定义角色。

以下流程描述了如何使用 Ansible playbook 为新的 IdM 自定义角色定义特权并确保其存在。在这个示例中,新的 user_and_host_administrator 角色默认包含 IdM 中的以下权限的唯一组合:

  • 组管理员
  • 用户管理员
  • 阶段用户管理员
  • 组管理员

先决条件

  • 您知道 IdM 管理员密码。
  • 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
  • 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
  • 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。

流程

  1. 进入 ~/<MyPlaybooks>/ 目录:

    $ cd ~/<MyPlaybooks>/
  2. 创建位于 /usr/share/doc/ansible -freeipa/playbooks/role/ 目录的 role- member-user-present.yml 文件的副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-user-present.yml role-member-user-present-copy.yml
  3. 打开 role-member-user-present-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 iparole 任务部分设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为新角色的名称。
    • 特权 列表设置为您要包含在新角色中的 IdM 权限的名称。
    • (可选)将 user 变量设置为您要授予新角色的用户名称。
    • (可选)将 group 变量设置为要授予新角色的组的名称。

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: yes
      gather_facts: no
    
      tasks:
      - iparole:
          ipaadmin_password: Secret123
          name: user_and_host_administrator
          user: idm_user01
          group: idm_group01
          privilege:
          - Group Administrators
          - User Administrators
          - Stage User Administrators
          - Group Administrators
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-member-user-present-copy.yml

其它资源

27.7. 使用 Ansible 确保缺少 IdM RBAC 角色

作为管理身份管理(IdM)中基于角色的访问控制(RBAC)的系统管理员,您可能希望确保没有过时的角色,以便任何管理员不会意外将它分配给任何用户。

以下流程描述了如何使用 Ansible playbook 来确保缺少角色。以下示例描述了如何确保 IdM 中不存在自定义 user_and_host_administrator 角色。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
  • 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
  • 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。

流程

  1. 进入 ~/<MyPlaybooks>/ 目录:

    $ cd ~/<MyPlaybooks>/
  2. 制作位于 /usr/share/doc/ansible -freeipa/playbooks/role/ 目录的 role- is-absent.yml 文件的副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-is-absent.yml role-is-absent-copy.yml
  3. 打开 role-is-absent-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 iparole 任务部分设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为角色的名称。
    • 确保 state 变量设置为 absent

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: yes
      gather_facts: no
    
      tasks:
      - iparole:
          ipaadmin_password: Secret123
          name: user_and_host_administrator
          state: absent
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-is-absent-copy.yml

其它资源

27.8. 使用 Ansible 确保为一组用户分配 IdM RBAC 角色

作为管理身份管理(IdM)中基于角色的访问控制(RBAC)的系统管理员,您可能希望为一组特定的用户(如初级管理员)分配角色。

以下示例描述了如何使用 Ansible playbook 来确保为 Micro_sysadmins 分配内置 IdM RBAC 帮助 台角色

先决条件

  • 您知道 IdM 管理员密码。
  • 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
  • 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
  • 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。

流程

  1. 进入 ~/<MyPlaybooks>/ 目录:

    $ cd ~/<MyPlaybooks>/
  2. 创建位于 /usr/share/doc/ansible -freeipa/playbooks/role/ 目录的 role- member-group-present.yml 文件的副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-group-present.yml role-member-group-present-copy.yml
  3. 打开 role-member-group-present-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 iparole 任务部分设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为您要分配的角色的名称。
    • group 变量设置为组的名称。
    • action 变量设置为 member

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: yes
      gather_facts: no
    
      tasks:
      - iparole:
          ipaadmin_password: Secret123
          name: helpdesk
          group: junior_sysadmins
          action: member
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-member-group-present-copy.yml

其它资源

27.9. 使用 Ansible 确保没有将特定用户分配给 IdM RBAC 角色

作为系统管理员,在身份管理(IdM)中管理基于角色的访问控制(RBAC),您可能需要确保在特定用户已移至公司内的不同位置后,不会为其分配 RBAC 角色。

以下流程描述了如何使用 Ansible playbook 来确保没有将名为 user_01user_02 的用户分配到 helpdesk 角色

先决条件

  • 您知道 IdM 管理员密码。
  • 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
  • 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
  • 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。

流程

  1. 进入 ~/<MyPlaybooks>/ 目录:

    $ cd ~/<MyPlaybooks>/
  2. 生成位于 /usr/share/doc/ansible -freeipa/playbooks/role/ 目录的 role-member- user-absent.yml 文件的副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-user-absent.yml role-member-user-absent-copy.yml
  3. 打开 role-member-user-absent-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 iparole 任务部分设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为您要分配的角色的名称。
    • 用户 列表设置为用户的名称。
    • action 变量设置为 member
    • state 变量设置为 absent

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: yes
      gather_facts: no
    
      tasks:
      - iparole:
          ipaadmin_password: Secret123
          name: helpdesk
          user
          - user_01
          - user_02
          action: member
          state: absent
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-member-user-absent-copy.yml

其它资源

27.10. 使用 Ansible 确保服务是 IdM RBAC 角色的成员

作为管理身份管理(IdM)中基于角色的访问控制(RBAC)的系统管理员,您可能希望确保注册 IdM 的特定服务是特定角色的成员。以下示例描述了如何确保自定义 web_administrator 角色可以管理 client01.idm.example.com 服务器上运行的 HTTP 服务。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
  • 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
  • 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。
  • web_administrator 角色存在于 IdM 中。
  • IdM 中存在 HTTP/client01.idm.example.com@IDM.EXAMPLE.COM 服务。

流程

  1. 进入 ~/<MyPlaybooks>/ 目录:

    $ cd ~/<MyPlaybooks>/
  2. 创建位于 /usr/share/doc/ansible -freeipa/playbooks/role/ 目录的 role- member-service-present.yml 文件的副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-service-present-absent.yml role-member-service-present-copy.yml
  3. 打开 role-member-service-present-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 iparole 任务部分设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为您要分配的角色的名称。
    • 服务 列表设置为服务的名称。
    • action 变量设置为 member

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: yes
      gather_facts: no
    
      tasks:
      - iparole:
          ipaadmin_password: Secret123
          name: web_administrator
          service:
          - HTTP/client01.idm.example.com
          action: member
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-member-service-present-copy.yml

其它资源

27.11. 使用 Ansible 确保主机是 IdM RBAC 角色的成员

作为在身份管理(IdM)中管理基于角色的访问控制的系统管理员,您可能希望确保特定的主机或主机组与特定角色关联。以下示例描述了如何确保自定义 web_administrator 角色可以管理运行 HTTP 服务的 client01.idm.example.com IdM 主机。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
  • 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
  • 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。
  • web_administrator 角色存在于 IdM 中。
  • client01.idm.example.com 主机存在于 IdM 中。

流程

  1. 进入 ~/<MyPlaybooks>/ 目录:

    $ cd ~/<MyPlaybooks>/
  2. 创建位于 /usr/share/doc/ansible -freeipa/playbooks/role/ 目录的 role- member-host-present.yml 文件的副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-host-present.yml role-member-host-present-copy.yml
  3. 打开 role-member-host-present-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 iparole 任务部分设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为您要分配的角色的名称。
    • 将主机 列表设置为主机的名称。

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: yes
      gather_facts: no
    
      tasks:
      - iparole:
          ipaadmin_password: Secret123
          name: web_administrator
          host:
          - client01.idm.example.com
          action: member
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-member-host-present-copy.yml

其它资源

27.12. 使用 Ansible 确保主机组是 IdM RBAC 角色的成员

作为在身份管理(IdM)中管理基于角色的访问控制的系统管理员,您可能希望确保特定的主机或主机组与特定角色关联。以下示例描述了如何确保自定义 web_administrator 角色可以管理运行 HTTP 服务的 IdM 主机组的 web_servers 组。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
  • 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
  • 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。
  • web_administrator 角色存在于 IdM 中。
  • web_servers 主机组存在于 IdM 中。

流程

  1. 进入 ~/<MyPlaybooks>/ 目录:

    $ cd ~/<MyPlaybooks>/
  2. 创建位于 /usr/share/doc/ansible -freeipa/playbooks/role/ 目录的 role-member- hostgroup-present.yml 文件的副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-hostgroup-present.yml role-member-hostgroup-present-copy.yml
  3. 打开 role-member-hostgroup-present-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 iparole 任务部分设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为您要分配的角色的名称。
    • hostgroup 列表设置为 hostgroup 的名称。

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Playbook to manage IPA role with members.
      hosts: ipaserver
      become: yes
      gather_facts: no
    
      tasks:
      - iparole:
          ipaadmin_password: Secret123
          name: web_administrator
          hostgroup:
          - web_servers
          action: member
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-member-hostgroup-present-copy.yml

其它资源

第 28 章 使用 Ansible playbook 管理 RBAC 特权

基于角色的访问控制(RBAC)是一种基于角色、特权和权限定义的策略中立访问控制机制。尤其是在大型公司,使用 RBAC 可以帮助创建具有各个职责领域的管理员分层系统。

本章介绍了以下操作,以使用 Ansible playbook 管理身份管理(IdM)中的 RBAC 特权:

28.1. 使用 Ansible 确保存在自定义 IdM RBAC 特权

要在 Identity Management(IdM)基于角色的访问控制(RBAC)中有一个完全设计的自定义权限,您需要逐步进行:

  1. 创建没有附加权限的特权。
  2. 将您选择的权限添加到特权。

以下流程描述了如何使用 Ansible playbook 创建空特权,以便稍后您可以向它添加权限。这个示例描述了如何创建名为 full_host_administration 的特权,它旨在组合与主机管理相关的所有 IdM 权限。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
  • 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
  • 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。

流程

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 生成位于 /usr/share/doc/ansible -freeipa/playbooks/privilege/ 目录中的 privilege- present.yml 文件副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-present.yml privilege-present-copy.yml
  3. 打开 privilege-present-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 ipaprivilege 任务部分设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为新特权 full_host_administration 的名称。
    • (可选)利用 description 变量描述 特权。

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Privilege present example
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure privilege full_host_administration is present
        ipaprivilege:
          ipaadmin_password: Secret123
          name: full_host_administration
          description: This privilege combines all IdM permissions related to host administration
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory privilege-present-copy.yml

28.2. 使用 Ansible 确保自定义 IdM RBAC 特权中存在成员权限

要在 Identity Management(IdM)基于角色的访问控制(RBAC)中有一个完全设计的自定义权限,您需要逐步进行:

  1. 创建没有附加权限的特权。
  2. 将您选择的权限添加到特权。

以下流程描述了如何使用 Ansible playbook 向上一步中创建的特权添加权限。这个示例描述了如何将与主机管理相关的所有 IdM 权限添加到名为 full_host_administration 的特权中。默认情况下,权限在 主机注册、 HostAdministrators 和 Host Group Administrator 权限之间分发。

先决条件

流程

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 创建位于 /usr/share/doc/ansible -freeipa/playbooks/privilege/ 目录中的 privilege- member-present.yml 文件的副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-member-present.yml privilege-member-present-copy.yml
  3. 打开 privilege-member-present-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 ipaprivilege 任务部分设置以下变量来调整文件:

    • 调整任务 的名称,使其与您的用例对应。
    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为特权的名称。
    • 权限 列表设置为您要包含在权限中的权限名称。
    • 确保 action 变量设置为 member

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Privilege member present example
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure that permissions are present for the "full_host_administration" privilege
        ipaprivilege:
          ipaadmin_password: Secret123
          name: full_host_administration
          permission:
          - "System: Add krbPrincipalName to a Host"
          - "System: Enroll a Host"
          - "System: Manage Host Certificates"
          - "System: Manage Host Enrollment Password"
          - "System: Manage Host Keytab"
          - "System: Manage Host Principals"
          - "Retrieve Certificates from the CA"
          - "Revoke Certificate"
          - "System: Add Hosts"
          - "System: Add krbPrincipalName to a Host"
          - "System: Enroll a Host"
          - "System: Manage Host Certificates"
          - "System: Manage Host Enrollment Password"
          - "System: Manage Host Keytab"
          - "System: Manage Host Keytab Permissions"
          - "System: Manage Host Principals"
          - "System: Manage Host SSH Public Keys"
          - "System: Manage Service Keytab"
          - "System: Manage Service Keytab Permissions"
          - "System: Modify Hosts"
          - "System: Remove Hosts"
          - "System: Add Hostgroups"
          - "System: Modify Hostgroup Membership"
          - "System: Modify Hostgroups"
          - "System: Remove Hostgroups"
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory privilege-member-present-copy.yml

28.3. 使用 Ansible 确保 IdM RBAC 特权不包括权限

作为身份管理系统管理员(IdM),您可以自定义 IdM 基于角色的访问控制。

以下流程描述了如何使用 Ansible playbook 从特权中删除权限。示例描述了如何从默认 证书 管理员权限中删除请求证书 忽略 CA ACL 权限,例如,管理员认为它存在安全风险。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
  • 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
  • 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。

流程

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 创建位于 /usr/share/doc/ansible -freeipa/playbooks/privilege/ 目录中的 privilege- member-present.yml 文件的副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-member-absent.yml privilege-member-absent-copy.yml
  3. 打开 privilege-member-absent-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 ipaprivilege 任务部分设置以下变量来调整文件:

    • 调整任务 的名称,使其与您的用例对应。
    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为特权的名称。
    • 权限 列表设置为您要从特权中删除的权限名称。
    • 确保 action 变量设置为 member
    • 确保 state 变量设置为 absent

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Privilege absent example
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure that the "Request Certificate ignoring CA ACLs" permission is absent from the "Certificate Administrators" privilege
        ipaprivilege:
          ipaadmin_password: Secret123
          name: Certificate Administrators
          permission:
          - "Request Certificate ignoring CA ACLs"
          action: member
          state: absent
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory privilege-member-absent-copy.yml

28.4. 使用 Ansible 重命名自定义 IdM RBAC 特权

作为身份管理系统管理员(IdM),您可以自定义 IdM 基于角色的访问控制。

以下流程描述了如何重命名权限,例如,您已从其中删除了一些权限。因此,特权的名称不再准确。在示例中,管理员将 full_host_administration 特权重命名为 limited_host_administration

先决条件

流程

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 生成位于 /usr/share/doc/ansible -freeipa/playbooks/privilege/ 目录中的 privilege- present.yml 文件副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-present.yml rename-privilege.yml
  3. 打开 rename-privilege.yml Ansible playbook 文件以进行编辑。
  4. 通过在 ipaprivilege 任务部分设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为特权的当前名称。
    • 添加 重命名 变量,并将它设置为特权的新名称。
    • 添加 state 变量,并将它设置为 重命名
  5. 重新命名 playbook 本身,例如:

    ---
    - name: Rename a privilege
      hosts: ipaserver
      become: true
  6. 在 playbook 中重命名任务,例如:

    [...]
    tasks:
    - name: Ensure the full_host_administration privilege is renamed to limited_host_administration
      ipaprivilege:
      [...]

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Rename a privilege
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure the full_host_administration privilege is renamed to limited_host_administration
        ipaprivilege:
          ipaadmin_password: Secret123
          name: full_host_administration
          rename: limited_host_administration
          state: renamed
  7. 保存该文件。
  8. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory rename-privilege.yml

28.5. 使用 Ansible 确保缺少 IdM RBAC 特权

作为身份管理系统管理员(IdM),您可以自定义 IdM 基于角色的访问控制。以下流程描述了如何使用 Ansible playbook 来确保缺少 RBAC 特权。这个示例描述了如何确保缺少 CA 管理员特权。因此,管理员 成为在 IdM 中管理证书颁发机构的唯一用户。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
  • 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
  • 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。

流程

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 制作位于 /usr/share/doc/ansible -freeipa/playbooks/privilege/ 目录中的 privilege- absent.yml 文件副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-absent.yml privilege-absent-copy.yml
  3. 打开 privilege-absent-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 ipaprivilege 任务部分设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为您要删除的特权的名称。
    • 确保 state 变量设置为 absent
  5. 在 playbook 中重命名任务,例如:

    [...]
    tasks:
    - name: Ensure privilege "CA administrator" is absent
      ipaprivilege:
      [...]

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Privilege absent example
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure privilege "CA administrator" is absent
        ipaprivilege:
          ipaadmin_password: Secret123
          name: CA administrator
          state: absent
  6. 保存该文件。
  7. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory privilege-absent-copy.yml

其它资源

  • 有关 IdM RBAC 中权限概念的更多信息,请参阅 IdM 中的特权
  • 有关 IdM RBAC 中权限概念的更多信息,请参阅 IdM 中的权限
  • 有关使用 ipaprivilege 模块的更多 Ansible playbook 示例,请参阅 /usr/share/doc/ansible -freeipa/ 目录中的README- privilege 文件。该文件还包含 ipaprivilege 变量的定义。
  • 有关使用 ipaprivilege 模块的更多 Ansible playbook 示例,请参阅 /usr/share/doc/ansible-freeipa/playbooks/ipaprivilege 目录。

第 29 章 使用 Ansible playbook 在 IdM 中管理 RBAC 权限

基于角色的访问控制(RBAC)是一种基于角色、特权和权限定义的策略中立访问控制机制。尤其是在大型公司,使用 RBAC 可以帮助创建具有各个职责领域的管理员分层系统。

本章介绍了使用 Ansible playbook 管理身份管理(IdM)中 RBAC 权限时执行的以下操作:

29.1. 使用 Ansible 确保存在 RBAC 权限

作为身份管理系统管理员(IdM),您可以自定义 IdM 基于角色的访问控制(RBAC)。

以下流程描述了如何使用 Ansible playbook 确保 IdM 中存在权限,以便它可以添加到特权中。这个示例描述了如何确保以下目标状态:

  • MyPermission 权限存在。
  • MyPermission 权限只能应用到主机。
  • 授予了包含权限的用户可以对条目执行以下所有可能的操作:

    • 搜索
    • 比较
    • 添加
    • 删除

先决条件

流程

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 制作位于 /usr/share/doc/ansible -freeipa/playbooks/permission/ 目录中的 permission- present.yml 文件的副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-present.yml permission-present-copy.yml
  3. 打开 permission-present-copy.yml Ansible playbook 文件进行编辑。
  4. 通过在 ipapermission 任务部分中设置以下变量来调整文件:

    • 调整任务 的名称,使其与您的用例对应。
    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为权限的名称。
    • object_type 变量设置为 host
    • 正确的 变量设置为 all

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Permission present example
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure that the "MyPermission" permission is present
        ipapermission:
          ipaadmin_password: Secret123
          name: MyPermission
          object_type: host
          right: all
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory permission-present-copy.yml

29.2. 使用 Ansible 确保存在带有属性的 RBAC 权限

作为身份管理系统管理员(IdM),您可以自定义 IdM 基于角色的访问控制(RBAC)。

以下流程描述了如何使用 Ansible playbook 确保 IdM 中存在权限,以便它可以添加到特权中。这个示例描述了如何确保以下目标状态:

  • MyPermission 权限存在。
  • MyPermission 权限只能用于添加主机。
  • 获得了包含权限的用户可以在主机条目上执行以下所有可能的操作:

    • 搜索
    • 比较
    • 添加
    • 删除
  • 被授予特权的用户创建的主机条目包含 MyPermission 权限,可以具有 描述 值。
注意

创建或修改权限时可以指定的属性类型不受 IdM LDAP 模式的限制。但是,指定 attrs: car_licence(如果 object_typehost )会导致 ipa: ERROR: 属性"car-license"在尝试执行该权限时不允许出现 错误消息,并为主机添加特定的车辆许可证值。

先决条件

流程

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 制作位于 /usr/share/doc/ansible -freeipa/playbooks/permission/ 目录中的 permission- present.yml 文件的副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-present.yml permission-present-with-attribute.yml
  3. 打开 permission-present-with-attribute.yml Ansible playbook 文件进行编辑。
  4. 通过在 ipapermission 任务部分中设置以下变量来调整文件:

    • 调整任务 的名称,使其与您的用例对应。
    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为权限的名称。
    • object_type 变量设置为 host
    • 正确的 变量设置为 all
    • attrs 变量设置为 description

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Permission present example
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure that the "MyPermission" permission is present with an attribute
        ipapermission:
          ipaadmin_password: Secret123
          name: MyPermission
          object_type: host
          right: all
          attrs: description
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory permission-present-with-attribute.yml

其它资源

29.3. 使用 Ansible 确保缺少 RBAC 权限

作为身份管理系统管理员(IdM),您可以自定义 IdM 基于角色的访问控制(RBAC)。

以下流程描述了如何使用 Ansible playbook 确保 IdM 中缺少权限,因此无法将其添加到特权中。

先决条件

流程

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 制作位于 /usr/share/doc/ansible -freeipa/playbooks/permission/ 目录中的 permission- absent.yml 文件的副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-absent.yml permission-absent-copy.yml
  3. 打开 permission-absent-copy.yml Ansible playbook 文件进行编辑。
  4. 通过在 ipapermission 任务部分中设置以下变量来调整文件:

    • 调整任务 的名称,使其与您的用例对应。
    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为权限的名称。

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Permission absent example
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure that the "MyPermission" permission is absent
        ipapermission:
          ipaadmin_password: Secret123
          name: MyPermission
          state: absent
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory permission-absent-copy.yml

29.4. 使用 Ansible 确保属性是 IdM RBAC 权限的成员

作为身份管理系统管理员(IdM),您可以自定义 IdM 基于角色的访问控制(RBAC)。

以下流程描述了如何使用 Ansible playbook 确保属性是 IdM 中 RBAC 权限的成员。因此,拥有 权限的用户可以创建具有 属性的条目。

示例描述了如何确保特权包含 MyPermission 权限的用户创建的主机条目可以具有 gecosdescription 值。

注意

创建或修改权限时可以指定的属性类型不受 IdM LDAP 模式的限制。但是,指定 attrs: car_licence(如果 object_typehost )会导致 ipa: ERROR: 属性"car-license"在尝试执行该权限时不允许出现 错误消息,并为主机添加特定的车辆许可证值。

先决条件

流程

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 制作位于 /usr/share/doc/ansible -freeipa/playbooks/permission/ 目录中的 permission- member-present.yml 文件的副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-member-present.yml permission-member-present-copy.yml
  3. 打开 permission-member-present-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 ipapermission 任务部分中设置以下变量来调整文件:

    • 调整任务 的名称,使其与您的用例对应。
    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为权限的名称。
    • attrs 列表设置为 descriptiongecos 变量。
    • 确保 action 变量设置为 member

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Permission member present example
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure that the "gecos" and "description" attributes are present in "MyPermission"
        ipapermission:
          ipaadmin_password: Secret123
          name: MyPermission
          attrs:
          - description
          - gecos
          action: member
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory permission-member-present-copy.yml

29.5. 使用 Ansible 确保属性不是 IdM RBAC 权限的成员

作为身份管理系统管理员(IdM),您可以自定义 IdM 基于角色的访问控制(RBAC)。

以下流程描述了如何使用 Ansible playbook 确保属性不是 IdM 中 RBAC 权限的成员。因此,当拥有权限的用户在 IdM LDAP 中创建条目时,该条目不能具有与 属性关联的值。

这个示例描述了如何确保以下目标状态:

  • MyPermission 权限存在。
  • 具有特权的用户创建的主机条目包含 MyPermission 权限,不能具有 description 属性。

先决条件

流程

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 制作位于 /usr/share/doc/ansible -freeipa/playbooks/permission/ 目录的 permission- member-absent.yml 文件的副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-member-absent.yml permission-member-absent-copy.yml
  3. 打开 permission-member-absent-copy.yml Ansible playbook 文件进行编辑。
  4. 通过在 ipapermission 任务部分中设置以下变量来调整文件:

    • 调整任务 的名称,使其与您的用例对应。
    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为权限的名称。
    • attrs 变量设置为 description
    • action 变量设置为 member
    • 确保 state 变量设置为 absent

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Permission absent example
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Ensure that an attribute is not a member of "MyPermission"
        ipapermission:
          ipaadmin_password: Secret123
          name: MyPermission
          attrs: description
          action: member
          state: absent
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory permission-member-absent-copy.yml

29.6. 使用 Ansible 重命名 IdM RBAC 权限

作为身份管理系统管理员(IdM),您可以自定义 IdM 基于角色的访问控制。

以下流程描述了如何使用 Ansible playbook 重新命名权限。这个示例描述了如何将 MyPermission 重命名为 MyNewPermission

先决条件

  • 您知道 IdM 管理员密码。
  • 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
  • 示例假定您已创建并配置了 ~/MyPlaybooks/ 目录,作为存储示例 playbook 副本的中央位置。
  • MyPermission 存在于 IdM 中。
  • IdM 中不存在 MyNewPermission

流程

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 制作位于 /usr/share/doc/ansible -freeipa/playbooks/permission/ 目录中的 permission- renamed.yml 文件的副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-renamed.yml permission-renamed-copy.yml
  3. 打开 permission-renamed-copy.yml Ansible playbook 文件进行编辑。
  4. 通过在 ipapermission 任务部分中设置以下变量来调整文件:

    • 调整任务 的名称,使其与您的用例对应。
    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为权限的名称。

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Permission present example
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Rename the "MyPermission" permission
        ipapermission:
          ipaadmin_password: Secret123
          name: MyPermission
          rename: MyNewPermission
          state: renamed
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory permission-renamed-copy.yml

29.7. 其它资源

  • 有关 IdM RBAC 中权限概念的更多信息,请参阅 IdM 中的权限
  • 有关 IdM RBAC 中权限概念的更多信息,请参阅 IdM 中的特权
  • 有关使用 ipapermission 模块的更多 Ansible playbook 示例,请参阅 /usr/share/doc/ansible -freeipa/ 目录中的README- permission 文件。文件还包含 ipapermission 变量的定义。
  • 有关使用 ipapermission 模块的更多 Ansible playbook 示例,请参阅 /usr/share/doc/ansible-freeipa/playbooks/ipapermission 目录。

第 30 章 使用 ID 视图覆盖 IdM 客户端中的用户属性值

如果 Identity Management(IdM)用户希望覆盖存储在 IdM LDAP 服务器中的一些用户或组属性,例如登录名称、主目录、用于身份验证的证书或 SSH 密钥,您将作为 IdM 管理员可以使用 IdM ID 视图重新定义特定 IdM 客户端的这些值。例如,您可以为 IdM 客户端中的用户指定不同的主目录,此用户最常用于登录 IdM。

本章论述了如何重新定义在作为客户端注册 IdM 的主机上与 IdM 用户关联的 POSIX 属性值。具体来说,本章论述了如何重新定义用户登录名称和主目录。

本章包括以下部分:

30.1. ID 视图

Identity Management(IdM)中的 ID 视图是一个 IdM 客户端侧视图,它指定以下信息:

  • 集中定义的 POSIX 用户或组属性的新值
  • 应用新值的客户端主机或主机。

ID 视图包含一个或多个覆盖。覆盖是集中定义的 POSIX 属性值的特定替换。

您只能为 IdM 服务器中集中的 IdM 客户端定义 ID 视图。您无法在本地为 IdM 客户端配置客户端覆盖。

例如,您可以使用 ID 视图来实现以下目标:

  • 为不同的环境定义不同的属性值。例如,您可以允许 IdM 管理员或其他 IdM 用户在不同 IdM 客户端上拥有不同的主目录:您可以在另一个 IdM 客户端上将 /home/crypt/username 配置为此用户的主目录,并在另一个客户端上将 /dropbox/username 配置为此用户的主目录。在这种情况下使用 ID 视图非常方便,例如,更改 fallback_homediroverwrite_homedir 或客户端的 /etc/sssd/sssd.conf 文件中的其他主目录变量将影响所有用户。例如,请参阅添加 ID 视图来覆盖 IdM 客户端上的 IdM 用户主目录
  • 将之前生成的属性值替换为其他值,如覆盖用户的 UID。当您要实现系统范围的更改时,此功能非常有用,否则在 LDAP 方面很难实现,例如将 1009 设为 IdM 用户的 UID。用于生成 IdM 用户 UID 的 IdM ID 范围从不低于 1000 甚至 10000。如果 IdM 用户所有 IdM 客户端上存在一个 UID 为 1009 的本地用户,您可以使用 ID 视图覆盖在 IdM 中创建用户时生成的 IdM 用户的 UID。
重要

您只能将 ID 视图应用到 IdM 客户端,不适用于 IdM 服务器。

其它资源

30.2. ID 视图对 SSSD 性能的潜在负面影响

当您定义 ID 视图时,IdM 会将所需的覆盖值放在 IdM 服务器的系统安全服务守护进程(SSSD)缓存中。在 IdM 客户端上运行的 SSSD 然后从服务器缓存中检索覆盖值。

应用 ID 视图可能会对系统安全服务守护进程(SSSD)性能造成负面影响,因为某些优化和 ID 视图无法同时运行。例如,ID 视图可防止 SSSD 在服务器上优化查找组的过程:

  • 使用 ID 视图时,SSSD 必须检查返回的组成员名称列表中的每位成员(如果组名称已被覆盖)。
  • 如果没有 ID 视图,SSSD 只能从组对象的 member 属性收集用户名。

当 SSSD 缓存为空或清除缓存后,这种负面影响最明显,这使得所有条目都无效。

30.3. ID 视图可以覆盖的属性

ID 视图由用户和组 ID 覆盖组成。覆盖定义新的 POSIX 属性值。

用户和组 ID 覆盖可以为以下 POSIX 属性定义新值:

用户属性
  • 登录名(uid)
  • GECOS条目(gecos)
  • UID 号(uidNumber)
  • GID 号(gidNumber)
  • 登录 shell(loginShell)
  • 主目录(主目录
  • SSH 公钥(ipaSshPubkey)
  • 证书(userCertificate)
组属性
  • 组名(cn)
  • 组 GID 号(gidNumber)

30.4. 获取 ID view 命令的帮助信息

您可以获得 IdM 命令行界面(CLI)中涉及 Identity Management(IdM)ID 视图的命令帮助。

先决条件

  • 您已为 IdM 用户获得了 Kerberos 票据。

流程

  • 显示用于管理 ID 视图和覆盖的所有命令:

    $ ipa help idviews
    ID Views
    
    Manage ID Views
    
    IPA allows to override certain properties of users and groups[...]
    [...]
    Topic commands:
      idoverridegroup-add          Add a new Group ID override
      idoverridegroup-del          Delete a Group ID override
    [...]
  • 要显示特定命令的详细帮助信息,请在命令中添加 --help 选项:

    $ ipa idview-add --help
    Usage: ipa [global-options] idview-add NAME [options]
    
    Add a new ID View.
    Options:
      -h, --help      show this help message and exit
      --desc=STR      Description
    [...]

30.5. 使用 ID 视图覆盖特定主机上 IdM 用户的登录名称

本节论述了如何为特定 Identity Management(IdM)客户端创建 ID 视图,该客户端覆盖与特定 IdM 用户关联的 POSIX 属性值。该流程使用 ID 视图示例,它可让名为 idm_user 的 IdM 用户使用 user_1234 登录名称登录名为 host1 的 IdM 客户端。

先决条件

  • 您以具有所需特权的用户身份登录,如 admin

流程

  1. 创建新的 ID 视图。例如,创建名为 example_for_host1 的 ID 视图:

    $ ipa idview-add example_for_host1
    ---------------------------
    Added ID View "example_for_host1"
    ---------------------------
      ID View Name: example_for_host1
  2. 将用户覆盖添加到 example_for_host1 ID 视图。覆盖用户登录:

    • 输入 ipa idoverrideuser-add 命令
    • 添加 ID 视图的名称
    • 添加用户名,也称为定位符
    • 添加 --login 选项:

      $ ipa idoverrideuser-add example_for_host1 idm_user --login=user_1234
      -----------------------------
      Added User ID override "idm_user"
      -----------------------------
        Anchor to override: idm_user
        User login: user_1234

      要获得可用选项列表,请运行 ipa idoverrideuser-add --help。

      注意

      ipa idoverrideuser-add --certificate 命令替换指定 ID 视图中帐户的所有现有证书。要附加额外证书,请使用 ipa idoverrideuser-add-cert 命令替代:

      $ ipa idoverrideuser-add-cert example_for_host1 user --certificate="MIIEATCC..."
  3. 可选:使用 ipa idoverrideuser-mod 命令,您可以为现有用户覆盖指定新的属性值。
  4. example_for_host1 应用到 host1.idm.example.com 主机:

    $ ipa idview-apply example_for_host1 --hosts=host1.idm.example.com
    -----------------------------
    Applied ID View "example_for_host1"
    -----------------------------
    hosts: host1.idm.example.com
    ---------------------------------------------
    Number of hosts the ID View was applied to: 1
    ---------------------------------------------
    注意

    ipa idview-apply 命令也接受 --hostgroups 选项。选项将 ID 视图应用到属于指定主机组但不会将 ID 视图与主机组本身相关联的主机。相反,hostgroups 选项会展开指定主机组的成员,并单独应用 --hosts 选项到其中每一个。

    这意味着,如果以后将主机添加到主机组中,该 ID 视图不会应用到新主机。

  5. 将新配置立即应用到 host1.idm.example.com 系统:

    1. 以 root 身份通过 SSH 连接到该系统:

      $ ssh root@host1
      Password:
    2. 清除 SSSD 缓存:

      root@host1 ~]# sss_cache -E
    3. 重启 SSSD 守护进程:
    root@host1 ~]# systemctl restart sssd

验证步骤

  • 如果您有 user_1234 的凭证,您可以使用它们登录到 host1 上的 IdM:

    1. 使用 user_1234 作为登录名称通过 SSH 连接到 host1

      [root@r8server ~]# ssh user_1234@host1.idm.example.com
      Password:
      
      Last login: Sun Jun 21 22:34:25 2020 from 192.168.122.229
      [user_1234@host1 ~]$
    2. 显示工作目录:

      [user_1234@host1 ~]$ pwd
      /home/idm_user/
  • 或者,如果您在 host1 上有 root 凭证,您可以使用它们来检查 id 命令的 id 命令输出,即 id_useruser_1234:

    [root@host1 ~]# id idm_user
    uid=779800003(user_1234) gid=779800003(idm_user) groups=779800003(idm_user)
    [root@host1 ~]# user_1234
    uid=779800003(user_1234) gid=779800003(idm_user) groups=779800003(idm_user)

30.6. 修改 IdM ID 视图

Identity Management(IdM)中的 ID 视图覆盖与特定 IdM 用户关联的 POSIX 属性值。本节论述了如何修改现有 ID 视图。具体来说,它描述了如何修改 ID 视图以启用名为 idm_user 的用户,使其使用 /home/user_1234/ 目录作为用户主目录,在 host1. idm.example.com IdM 客户端上使用 /home/idm _user/

先决条件

  • 具有 host1.idm.example.com 的 root 访问权限。
  • 您以具有所需特权的用户身份登录,如 admin
  • 您为 idm_user 配置了一个 ID 视图,它适用于 host1 IdM 客户端。

流程

  1. 以 root 用户身份,创建您要在 host1.idm.example.com 上用作用户主目录的目录

    [root@host1 /]# mkdir /home/user_1234/
  2. 更改目录的所有权:

    [root@host1 /]# chown idm_user:idm_user /home/user_1234/
  3. 显示 ID 视图,包括当前要应用 ID 视图的主机。显示名为 example_for_host1 的 ID 视图:

    $ ipa idview-show example_for_host1 --all
      dn: cn=example_for_host1,cn=views,cn=accounts,dc=idm,dc=example,dc=com
      ID View Name: example_for_host1
      User object override: idm_user
      Hosts the view applies to: host1.idm.example.com
      objectclass: ipaIDView, top, nsContainer

    输出显示 ID 视图当前应用于 host1.idm.example.com

  4. 修改 example_for_host1 ID 视图的用户覆盖。覆盖用户主目录:

    • 输入 ipa idoverrideuser-add 命令
    • 添加 ID 视图的名称
    • 添加用户名,也称为定位符
    • 添加 --homedir 选项:

      $ ipa idoverrideuser-mod example_for_host1 idm_user --homedir=/home/user_1234
      -----------------------------
      Modified an User ID override "idm_user"
      -----------------------------
        Anchor to override: idm_user
        User login: user_1234
        Home directory: /home/user_1234/

    要获得可用选项列表,请运行 ipa idoverrideuser-mod --help

  5. 将新配置立即应用到 host1.idm.example.com 系统:

    1. 以 root 身份通过 SSH 连接到该系统:

      $ ssh root@host1
      Password:
    2. 清除 SSSD 缓存:

      root@host1 ~]# sss_cache -E
    3. 重启 SSSD 守护进程:
    root@host1 ~]# systemctl restart sssd

验证步骤

  1. idm_user 用户身份通过 SSH 连接到 host 1:

    [root@r8server ~]# ssh idm_user@host1.idm.example.com
    Password:
    
    Last login: Sun Jun 21 22:34:25 2020 from 192.168.122.229
    [user_1234@host1 ~]$
  2. 打印工作目录:

    [user_1234@host1 ~]$ pwd
    /home/user_1234/

30.7. 添加 ID 视图以覆盖 IdM 客户端中的 IdM 用户主目录

Identity Management(IdM)中的 ID 视图覆盖与特定 IdM 用户关联的 POSIX 属性值。本节论述了如何在名为 host1 的 IdM 客户端上创建应用于 idm_user 的 ID 视图,以便用户将 /home/user_1234/ 目录用作用户主目录,而不是 /home/idm_user/

先决条件

  • 具有 host1.idm.example.com 的 root 访问权限。
  • 您以具有所需特权的用户身份登录,如 admin

流程

  1. 以 root 用户身份,创建您要在 host1.idm.example.com 上用作用户主目录的目录

    [root@host1 /]# mkdir /home/user_1234/
  2. 更改目录的所有权:

    [root@host1 /]# chown idm_user:idm_user /home/user_1234/
  3. 创建 ID 视图。例如,创建名为 example_for_host1 的 ID 视图:

    $ ipa idview-add example_for_host1
    ---------------------------
    Added ID View "example_for_host1"
    ---------------------------
      ID View Name: example_for_host1
  4. 将用户覆盖添加到 example_for_host1 ID 视图。覆盖用户主目录:

    • 输入 ipa idoverrideuser-add 命令
    • 添加 ID 视图的名称
    • 添加用户名,也称为定位符
    • 添加 --homedir 选项:
    $ ipa idoverrideuser-add example_for_host1 idm_user --homedir=/home/user_1234
    -----------------------------
    Added User ID override "idm_user"
    -----------------------------
      Anchor to override: idm_user
      Home directory: /home/user_1234/
  5. example_for_host1 应用到 host1.idm.example.com 主机:

    $ ipa idview-apply example_for_host1 --hosts=host1.idm.example.com
    -----------------------------
    Applied ID View "example_for_host1"
    -----------------------------
    hosts: host1.idm.example.com
    ---------------------------------------------
    Number of hosts the ID View was applied to: 1
    ---------------------------------------------
    注意

    ipa idview-apply 命令也接受 --hostgroups 选项。选项将 ID 视图应用到属于指定主机组但不会将 ID 视图与主机组本身相关联的主机。相反,hostgroups 选项会展开指定主机组的成员,并单独应用 --hosts 选项到其中每一个。

    这意味着,如果以后将主机添加到主机组中,该 ID 视图不会应用到新主机。

  6. 将新配置立即应用到 host1.idm.example.com 系统:

    1. 以 root 身份通过 SSH 连接到该系统:

      $ ssh root@host1
      Password:
    2. 清除 SSSD 缓存:

      root@host1 ~]# sss_cache -E
    3. 重启 SSSD 守护进程:
    root@host1 ~]# systemctl restart sssd

验证步骤

  1. idm_user 用户身份通过 SSH 连接到 host 1:

    [root@r8server ~]# ssh idm_user@host1.idm.example.com
    Password:
    Activate the web console with: systemctl enable --now cockpit.socket
    
    Last login: Sun Jun 21 22:34:25 2020 from 192.168.122.229
    [idm_user@host1 /]$
  2. 打印工作目录:

    [idm_user@host1 /]$ pwd
    /home/user_1234/

30.8. 将 ID 视图应用到 IdM 主机组

ipa idview-apply 命令接受 --hostgroups 选项。不过,选项充当一次性操作,它将 ID 视图应用到当前属于指定主机组的主机,但不动态地将 ID 视图与主机组本身关联。host groups 选项将展开指定主机组的成员,并单独应用 --hosts 选项到其中每一个选项。

如果稍后向主机组添加新主机,您必须使用 ipa idview-apply 命令及 --hosts 选项,手动将 ID 视图应用到新主机。

类似地,如果您从主机组中删除主机,则移除后仍会将 ID 视图分配到主机。要取消应用删除的主机中的 ID 视图,您必须运行 ipa idview-unapply id_view_name --hosts=name_of_the_removed_host 命令。

本节论述了如何实现以下目标:

  1. 如何创建主机组并向其添加主机。
  2. 如何将 ID 视图应用到主机组。
  3. 如何添加新主机到主机组,并将 ID 视图应用到新主机。

先决条件

流程

  1. 创建主机组并为其添加主机:

    1. 创建主机组.例如,创建名为 baltimore 的主机组:

      [root@server ~]# ipa hostgroup-add --desc="Baltimore hosts" baltimore
      ---------------------------
      Added hostgroup "baltimore"
      ---------------------------
      Host-group: baltimore
      Description: Baltimore hosts
    2. 将主机添加到 主机组。例如,将 host102host103 添加到 baltimore 主机组:

      [root@server ~]# ipa hostgroup-add-member --hosts={host102,host103} baltimore
      Host-group: baltimore
      Description: Baltimore hosts
      Member hosts: host102.idm.example.com, host103.idm.example.com
      -------------------------
      Number of members added 2
      -------------------------
  2. 将 ID 视图应用到 主机组中的主机。例如,将 example_for_host1 ID 视图应用到 baltimore 主机组:

    [root@server ~]# ipa idview-apply --hostgroups=baltimore
    ID View Name: example_for_host1
    -----------------------------------------
    Applied ID View "example_for_host1"
    -----------------------------------------
      hosts: host102.idm.example.com, host103.idm.example.com
    ---------------------------------------------
    Number of hosts the ID View was applied to: 2
    ---------------------------------------------
  3. 将新主机添加到主机组,并将 ID 视图应用到新主机:

    1. 将新主机添加到 主机组。例如,将 somehost.idm.example.com 主机添加到 baltimore 主机组:

      [root@server ~]# ipa hostgroup-add-member --hosts=somehost.idm.example.com baltimore
        Host-group: baltimore
        Description: Baltimore hosts
        Member hosts:  host102.idm.example.com, host103.idm.example.com,somehost.idm.example.com
      -------------------------
      Number of members added 1
      -------------------------
    2. (可选)显示 ID 视图信息。例如,显示 example_for_host1 ID 视图的详情:

      [root@server ~]# ipa idview-show example_for_host1 --all
        dn: cn=example_for_host1,cn=views,cn=accounts,dc=idm,dc=example,dc=com
        ID View Name: example_for_host1
      [...]
        Hosts the view applies to: host102.idm.example.com, host103.idm.example.com
        objectclass: ipaIDView, top, nsContainer

      输出显示 ID 视图没有应用到 somehost.idm.example.com(在 baltimore 主机组中新添加的主机)。

    3. 将 ID 视图应用到新主机。例如,将 example_for_host1 ID 视图应用到 somehost.idm.example.com

      [root@server ~]# ipa idview-apply --host=somehost.idm.example.com
      ID View Name: example_for_host1
      -----------------------------------------
      Applied ID View "example_for_host1"
      -----------------------------------------
        hosts: somehost.idm.example.com
      ---------------------------------------------
      Number of hosts the ID View was applied to: 1
      ---------------------------------------------

验证步骤

  • 再次显示 ID 视图信息:

    [root@server ~]# ipa idview-show example_for_host1 --all
      dn: cn=example_for_host1,cn=views,cn=accounts,dc=idm,dc=example,dc=com
      ID View Name: example_for_host1
    [...]
      Hosts the view applies to: host102.idm.example.com, host103.idm.example.com, somehost.idm.example.com
      objectclass: ipaIDView, top, nsContainer

    输出显示 ID 视图现在已应用到 somehost.idm.example.com(在 baltimore 主机组中新添加的主机)。

第 31 章 手动调整 ID 范围

IdM 服务器生成唯一用户 ID(UID)和组 ID(GID)编号。通过创建和分配不同的 ID 范围到副本,它还确保它们永远不会生成相同的 ID 号。默认情况下,此过程是自动的。但是,您可以在 IdM 服务器安装过程中手动调整 IdM ID 范围,或者手动定义副本的 DNA ID 范围。

31.1. ID 范围

ID 编号划分为 ID 范围。为个别服务器和副本保持单独的数字范围可避免在其他服务器或副本中的另一个条目已使用为条目发布的 ID 号的几率。

请注意,有两种不同的 ID 范围:

作为域的后端 389 Directory Server 实例的一部分,通过 DNA 插件更新和共享服务器和副本之间的范围。

DNA 范围定义由两个属性设置:服务器的下一个可用数字( DNA 范围的低端)和最大值( DNA 范围的顶端)。初始底部范围在插件实例配置期间设置。之后,插件会更新底部值。通过将可用数字划分成范围,服务器可以持续分配数量,而不会相互重叠。

31.2. 自动 ID 范围分配

默认情况下,IdM ID 范围会在 IdM 服务器安装过程中自动分配。ipa-server-install 命令随机选择并分配总 10,000 个可能范围内的 200,000 个 ID。当您决定以后合并两个独立的 IdM 域时,以这种方法选择一个随机范围可显著降低冲突 ID 的可能性。

注意

此 IdM ID 范围在创建后无法修改。您只能使用手动调整 DNA ID 范围中描述的命令来手动调整分布式 Numeric Assignment(强制)ID 范围。在安装过程中自动创建与 IdM ID 范围匹配的 DNA 范围。

如果您安装了单个 IdM 服务器,它会控制整个 DNA ID 范围。当您安装新副本和副本请求其自己的 DNA ID 范围时,服务器分割的初始 ID 范围并在服务器和副本之间分发:副本接收到初始服务器上可用的其余 DNA ID 范围内的一半。服务器和副本随后将原始 ID 范围的对应部分用于新用户或组条目。另外,如果副本接近减少其分配的 ID 范围且保留小于 100 个 ID,则副本会联系其他可用的服务器来请求新的 DNA ID 范围。

重要

安装副本时,它不会立即收到 ID 范围。副本在首次使用 DNA 插件时收到 ID 范围,例如首次添加用户时。直到那时,副本没有定义 ID 范围。

如果初始服务器在副本请求的 DNA ID 范围前停止工作,则副本无法与服务器联系来请求 ID 范围。尝试在副本上添加新用户会失败。在这种情况下,您可以找出分配给禁用的服务器的 ID 范围 ,并手动为副本分配 ID 范围

31.3. 在服务器安装过程中手动分配 IdM ID 范围

您可以覆盖默认行为,并手动设置 IdM ID 范围,而不是随机分配。

重要

不要设置包含 UID 值 1000 和 less 的 ID 范围;这些值保留给系统使用。另外,不要设置包含 0 值的 ID 范围;SSSD 服务不处理 0 ID 值。

流程

  • 您可以在服务器安装过程中手动定义 IdM ID 范围,方法是在 ipa-server-install 中使用以下两个选项:

    • --idstart 为 UID 和 GID 编号提供起始值。
    • --idmax 提供最大 UID 和 GID 编号;默认情况下,值为 --idstart 启动 值加上 199,999。

验证步骤

  • 要检查 ID 范围是否已正确分配,您可以使用 ipa idrange-find 命令显示分配的 IdM ID 范围:

    # ipa idrange-find
    ---------------
    1 range matched
    ---------------
      Range name: IDM.EXAMPLE.COM_id_range
      First Posix ID of the range: 882200000
      Number of IDs in the range: 200000
      Range type: local domain range
    ----------------------------
    Number of entries returned 1
    ----------------------------

31.4. 添加新 IdM ID 范围

在某些情况下,您可能想要除原始 ID 范围外创建新的 IdM ID 范围;例如,当副本耗尽 ID 且原始 IdM ID 范围已被耗尽时。

重要

添加新 IdM ID 范围不会自动创建新的 DNA ID 范围。您需要根据需要手动分配新的 DNA ID 范围。有关如何执行此操作的更多信息,请参阅手动调整 DNA ID 范围

流程

  1. 要创建新的 IdM ID 范围,请使用 ipa idrange-add 命令。您需要指定新范围名称、范围和范围大小的第一个 ID 号:

    # ipa idrange-add IDM.EXAMPLE.COM_new_range --base-id=1000000 --range-size=200000
    ------------------------------------------
    Added ID range "IDM.EXAMPLE.COM_new_range"
    ------------------------------------------
      Range name: IDM.EXAMPLE.COM_new_range
      First Posix ID of the range: 1000000
      Number of IDs in the range: 200000
      Range type: local domain range
  2. 可选:立即更新 ID 范围:

    1. 清除系统安全服务守护进程(SSSD)缓存:

      # sss_cache -E
    2. 重启 SSSD 守护进程:

      # systemctl restart sssd
    注意

    如果您没有清除 SSSD 缓存并重新启动服务,SSSD 需要一些时间才能注意到新的 ID 范围。更具体地说,它更新域列表和 IdM 服务器上存储的其他配置数据时会注意到范围。

验证步骤

  • 您可以使用 ipa idrange-find 命令检查新范围是否正确设置:
# ipa idrange-find
----------------
2 ranges matched
----------------
  Range name: IDM.EXAMPLE.COM_id_range
  First Posix ID of the range: 882200000
  Number of IDs in the range: 200000
  Range type: local domain range

  Range name: IDM.EXAMPLE.COM_new_range
  First Posix ID of the range: 1000000
  Number of IDs in the range: 200000
  Range type: local domain range
----------------------------
Number of entries returned 2
----------------------------

31.5. 删除 AD 信任后删除 ID 范围

如果您删除了 IdM 和 Active Directory(AD)环境之间的信任,您可能需要删除与其关联的 ID 范围。

警告

分配给 ID 范围的 ID 与可信域相关联,可能仍然用于注册到 IdM 的系统上的文件和目录的所有权。

如果您删除了与已删除的 AD 信任对应的 ID 范围,您将无法解析 AD 用户拥有的任何文件和目录的所有权。

先决条件

  • 您已删除了对 AD 环境的信任。

流程

  1. 显示所有当前正在使用的 ID 范围:

    [root@server ~]# ipa idrange-find
  2. 识别与您删除的信任关联的 ID 范围的名称。ID 范围名称的第一部分是 trust: name_of_the_trust_id_range 的名称,如 AD.EXAMPLE.COM_id_range
  3. 删除范围:

    [root@server ~]# ipa idrange-del name_of_the_trust_id_range
  4. 重启 SSSD 服务,以删除对删除的 ID 范围的引用。

    [root@server ~]# systemctl restart sssd

其它资源

31.6. 显示当前分配的 DNA ID 范围

您可以在服务器上显示当前活跃的 Distributed Numeric Assignment(44)ID 范围,如果分配了一个 Nistributed Numeric Assignment,还可以显示其下一个 DNA 范围。

流程

  • 要显示为拓扑中的服务器配置哪些 DNA ID 范围,请使用以下命令:

    • ipa-replica-manage dnarange-show 显示在所有服务器上设置的当前 DNA ID 范围;或者,如果您指定的服务器,则仅在指定的服务器上设置,例如:

      # ipa-replica-manage dnarange-show
      serverA.example.com: 1001-1500
      serverB.example.com: 1501-2000
      serverC.example.com: No range set
      
      # ipa-replica-manage dnarange-show serverA.example.com
      serverA.example.com: 1001-1500
    • ipa-replica-manage dnanextrange-show 显示所有服务器上当前设置的下一个 DNA ID 范围;或者,如果您指定了服务器,则仅在指定服务器上指定,例如:

      # ipa-replica-manage dnanextrange-show
      serverA.example.com: 2001-2500
      serverB.example.com: No on-deck range set
      serverC.example.com: No on-deck range set
      
      # ipa-replica-manage dnanextrange-show serverA.example.com
      serverA.example.com: 2001-2500

31.7. 自动 DNA ID 范围扩展

当您删除正常工作的副本时,ip a-replica-manage del 命令检索分配给副本的 DNA ID 范围,并将它们作为下一个范围添加到另一个可用的 IdM 副本中。这样可确保高效地使用 DNA ID 范围。

删除副本后,您可以使用显示当前分配的 DNA ID 范围中介绍的命令,验证为其他服务器配置了哪些 DNA ID 范围

31.8. 手动调整 DNA ID 范围

在某些情况下,需要手动调整分布式 Numeric Assignment(强制)ID 范围,例如:

  • 副本的 ID 不足,IdM ID 范围已耗尽

    副本已耗尽为其分配的 DNA ID 范围,请求额外 ID 会失败,因为 IdM 范围内没有更多可用 ID。

    要解决这种情况,请扩展分配给副本的 DNA ID 范围。您可以通过两种方式执行此操作:

    • 缩短分配给不同副本的 DNA ID 范围,然后将新可用值分配给已耗尽的副本。
    • 创建新的 IdM ID 范围,然后在这个创建的 IdM 范围内为副本设置一个新的 DNA ID 范围。

      有关如何创建新 IdM ID 范围的详情,请参考 Adding a new IdM ID 范围

  • 副本停止工作

    当副本终止并且需要删除时,副本的 DNA ID 范围不会自动检索,这意味着之前分配给副本的 DNA ID 范围变得不可用。您要恢复 DNA ID 范围,并使其可用于其他副本。

    如果要恢复属于已停止运行的副本的 DNA ID 范围并将其分配到其他服务器,在手动将该范围分配给其他服务器之前,首先需要了解 ID 范围值。此外,为了避免重复的 UID 或 GID,请确保之前没有将恢复范围内的 ID 值分配给用户或组;您可以通过检查现有用户和组的 UID 和 GID 来完成此操作。

您可以使用手动调整 DNA ID 范围中的命令来手动调整副本的 DNA ID 范围

注意

如果您分配了新的 DNA ID 范围,则服务器或副本上已存在条目的 UID 保持不变。这不会造成问题,因为即使您更改了当前的 DNA ID 范围,IdM 也会保留过去分配的范围的记录。

31.9. 手动调整 DNA ID 范围

在某些情况下,您可能需要手动调整分配给非副本的分布式 Numeric Assignment(强制)ID 范围,例如重新分配分配给非副本的 DNA ID 范围。如需更多信息,请参阅 手动 DNA ID 范围调整

在手动调整 DNA ID 范围时,请确保新调整的范围包含在 IdM ID 范围内;您可以使用 ipa idrange-find 命令检查此范围。否则,命令将失败。

重要

注意不要创建重叠 ID 范围。如果您分配给服务器或副本重叠的任何 ID 范围,可能会导致两个不同的服务器分配相同的 ID 值到不同的条目。

先决条件

流程

  • 要为指定服务器定义当前的 DNA ID 范围,请使用 ipa-replica-manage dnarange-set

    # ipa-replica-manage dnarange-set serverA.example.com 1250-1499
  • 要为指定服务器定义下一个 DNA ID 范围,请使用 ipa-replica-manage dnanextrange-set

    # ipa-replica-manage dnanextrange-set serverB.example.com 1500-5000

第 32 章 使用 Ansible 管理 IdM 中的复制拓扑

您可以维护多个身份管理(IdM)服务器,并使它们相互复制,以实现冗余目的,以减少或防止服务器丢失。例如,如果一个服务器失败,其他服务器就会为域提供服务。您还可以根据剩余的服务器创建新副本来恢复丢失的服务器。

存储在 IdM 服务器上的数据会根据复制协议复制:当两台服务器配置了复制协议时,它们将共享其数据。复制的数据存储在拓扑 后缀中。当两个副本在其后缀之间具有复制协议时,后缀组成一个拓扑 片段

本章论述了如何使用 Red Hat Ansible Engine 管理 IdM 复制协议、拓扑片段和拓扑后缀。本章包含以下部分:

32.1. 使用 Ansible 确保 IdM 中存在复制协议

存储在身份管理(IdM)服务器上的数据存储基于复制协议:配置了两个服务器时,它们共享其数据。复制协议始终为现实:数据从第一个副本复制到另一个副本,另一个副本复制到第一个副本。

本节介绍如何使用 Ansible playbook 确保 server.idm.example.com 和 replica.idm.example.com 之间存在 类型的复制协议。

先决条件

流程

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 复制位于 /usr/share/doc/ansible -freeipa/playbooks/topology/ 目录中的 add-topology segment.yml Ansible playbook 文件:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/topology/add-topologysegment.yml add-topologysegment-copy.yml
  3. 打开 add-topologysegment-copy.yml 文件进行编辑。
  4. 通过在 ipatopologysegment 任务部分 设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM admin 的密码。
    • 根据您要添加的分段类型,将 后缀 变量设置为 domainca
    • 左侧 变量设置为您要作为复制协议左侧节点的 IdM 服务器的名称。
    • right 变量设置为您要作为复制协议正确节点的 IdM 服务器的名称。
    • 确保 state 变量设置为 present

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Playbook to handle topologysegment
      hosts: ipaserver
      become: true
    
      tasks:
    - name: Add topology segment
        ipatopologysegment:
          ipaadmin_password: Secret123
          suffix: domain
          left: server.idm.example.com
          right: replica.idm.example.com
          state: present
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory add-topologysegment-copy.yml

其它资源

32.2. 使用 Ansible 确保多个 IdM 副本之间存在复制协议

存储在身份管理(IdM)服务器上的数据存储基于复制协议:配置了两个服务器时,它们共享其数据。复制协议始终为现实:数据从第一个副本复制到另一个副本,另一个副本复制到第一个副本。

本节论述了如何确保 IdM 中的多个副本对存在复制协议。

先决条件

流程

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 复制位于 /usr/share/doc/ansible -freeipa/playbooks/topology/ 目录中的 add-topologysegments.yml Ansible playbook 文件:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/topology/add-topologysegments.yml add-topologysegments-copy.yml
  3. 打开 add-topologysegments-copy.yml 文件进行编辑。
  4. 通过在 vars 部分中 设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM admin 的密码。
    • 对于每个拓扑片段,在 ipatopology_segments 部分添加一个行并设置以下变量:

      • 根据您要添加的分段类型,将 后缀 变量设置为 domainca
      • 左侧 变量设置为您要作为复制协议左侧节点的 IdM 服务器的名称。
      • right 变量设置为您要作为复制协议正确节点的 IdM 服务器的名称。
  5. add-topologysegments-copy.yml 文件的 tasks 部分中,确保 state 变量设置为 present

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Add topology segments
      hosts: ipaserver
      become: true
      gather_facts: false
    
      vars:
        ipaadmin_password: Secret123
        ipatopology_segments:
        - {suffix: domain, left: replica1.idm.example.com , right: replica2.idm.example.com }
        - {suffix: domain, left: replica2.idm.example.com , right: replica3.idm.example.com }
        - {suffix: domain, left: replica3.idm.example.com , right: replica4.idm.example.com }
        - {suffix: domain+ca, left: replica4.idm.example.com , right: replica1.idm.example.com }
    
      tasks:
      - name: Add topology segment
        ipatopologysegment:
          ipaadmin_password: "{{ ipaadmin_password }}"
          suffix: "{{ item.suffix }}"
          name: "{{ item.name | default(omit) }}"
          left: "{{ item.left }}"
          right: "{{ item.right }}"
          state: present
          #state: absent
          #state: checked
          #state: reinitialized
        loop: "{{ ipatopology_segments | default([]) }}"
  6. 保存该文件。
  7. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory add-topologysegments-copy.yml

其它资源

32.3. 使用 Ansible 检查两个副本之间是否存在复制协议

存储在身份管理(IdM)服务器上的数据存储基于复制协议:配置了两个服务器时,它们共享其数据。复制协议始终为现实:数据从第一个副本复制到另一个副本,另一个副本复制到第一个副本。

本节论述了如何验证 IdM 中的多个副本对是否存在复制协议。

先决条件

流程

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 复制位于 /usr/share/doc/ansible -freeipa/playbooks/topology/ 目录中的 check-topologysegments.yml Ansible playbook 文件:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/topology/check-topologysegments.yml check-topologysegments-copy.yml
  3. 打开 check-topologysegments-copy.yml 文件进行编辑。
  4. 通过在 vars 部分中 设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM admin 的密码。
    • 对于每个拓扑片段,在 ipatopology_segments 部分添加一个行并设置以下变量:

      • 根据您要添加的分段类型,将 后缀 变量设置为 ca
      • 左侧 变量设置为您要作为复制协议左侧节点的 IdM 服务器的名称。
      • right 变量设置为您要作为复制协议正确节点的 IdM 服务器的名称。
  5. check-topologysegments-copy.yml 文件的 tasks 部分中,确保 state 变量设置为 present

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Add topology segments
      hosts: ipaserver
      become: true
      gather_facts: false
    
      vars:
        ipaadmin_password: Secret123
        ipatopology_segments:
        - {suffix: domain, left: replica1.idm.example.com, right: replica2.idm.example.com }
        - {suffix: domain, left: replica2.idm.example.com , right: replica3.idm.example.com }
        - {suffix: domain, left: replica3.idm.example.com , right: replica4.idm.example.com }
        - {suffix: domain+ca, left: replica4.idm.example.com , right: replica1.idm.example.com }
    
      tasks:
      - name: Check topology segment
        ipatopologysegment:
          ipaadmin_password: "{{ ipaadmin_password }}"
          suffix: "{{ item.suffix }}"
          name: "{{ item.name | default(omit) }}"
          left: "{{ item.left }}"
          right: "{{ item.right }}"
          state: checked
        loop: "{{ ipatopology_segments | default([]) }}"
  6. 保存该文件。
  7. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory check-topologysegments-copy.yml

其它资源

32.4. 使用 Ansible 验证 IdM 中是否存在拓扑后缀

在身份管理(IdM)中的复制协议中,拓扑后缀存储要复制的数据。IdM 支持两种类型的拓扑后缀: domainca。每个后缀代表一个单独的后端,即一个单独的复制拓扑。配置复制协议时,它会在两个不同的服务器上加入同一类型的两个拓扑后缀。

后缀包含与域相关的所有数据,如用户、组和策略。ca 后缀包含证书系统组件的数据。它仅存在于安装有证书颁发机构(CA)的服务器上。

本节论述了如何使用 Ansible playbook 来确保 IdM 中存在拓扑后缀。这个示例描述了如何确保 IdM 中存在 后缀。

先决条件

  • 您知道 IdM 管理员 密码。
  • 您已配置了符合以下要求的 Ansible 控制节点:

    • 您使用 Ansible 版本 2.8 或更高版本。
    • 您已安装 ansible-freeipa 软件包。
    • ~/MyPlaybooks/ 目录中,您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件

流程

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 复制位于 /usr/share/doc/ansible -freeipa/playbooks/topology/ 目录中的 verify-topologys uffix.yml Ansible playbook 文件:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/topology/ verify-topologysuffix.yml verify-topologysuffix-copy.yml
  3. 打开 verify-topologysuffix-copy.yml Ansible playbook 文件进行编辑。
  4. 通过在 ipatopologysuffix 部分中设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM admin 的密码。
    • suffix 变量设置为 domain。如果您要验证 ca 后缀是否存在,请将 变量设置为 ca
    • 确保 state 变量设置为 verify。不允许使用其他选项。

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Playbook to handle topologysuffix
      hosts: ipaserver
      become: true
    
      tasks:
      - name: Verify topology suffix
        ipatopologysuffix:
          ipaadmin_password: Secret123
          suffix: domain
          state: verified
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory verify-topologysuffix-copy.yml

其它资源

32.5. 使用 Ansible 重新初始化 IdM 副本

如果副本已长时间离线或者其数据库已损坏,您可以重新初始化它。重新初始化会使用更新的一组数据来刷新副本。例如,如果需要从备份进行权威恢复,则可以使用重新初始化。

注意

与复制更新不同,副本仅互相发送更改的条目,重新初始化会刷新整个数据库。

运行 命令的本地主机是重新初始化的副本。要指定从中获取数据的副本,请使用 方向 选项。

本节介绍如何使用 Ansible playbook 从 server .idm.example.com 中重新初始化 replica.idm.example.com 上的 数据。

先决条件

  • 您知道 IdM 管理员 密码。
  • 您已配置了符合以下要求的 Ansible 控制节点:

    • 您使用 Ansible 版本 2.8 或更高版本。
    • 您已安装 ansible-freeipa 软件包。
    • ~/MyPlaybooks/ 目录中,您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件

流程

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 复制位于 /usr/share/doc/ansible -freeipa/playbooks/topology/ 目录下的 reinitialize-topology segment.yml Ansible playbook 文件:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/topology/reinitialize-topologysegment.yml reinitialize-topologysegment-copy.yml
  3. 打开 reinitialize-topologysegment-copy.yml 文件进行编辑。
  4. 通过在 ipatopologysegment 部分中设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM admin 的密码。
    • suffix 变量设置为 domain。如果您要重新初始化 ca 数据,请将 变量设置为 ca
    • 左侧 变量设置为复制协议的左侧节点。
    • 正确的 变量设置为复制协议的正确节点。
    • 方向 变量设置为重新初始化数据的方向。左向向右 方向表示数据从左侧节点流到右侧节点。
    • 确保将 state 变量设置为 重新初始化

      这是当前示例修改的 Ansible playbook 文件:

      ---
      - name: Playbook to handle topologysegment
        hosts: ipaserver
        become: true
      
        tasks:
        - name: Reinitialize topology segment
          ipatopologysegment:
            ipaadmin_password: Secret123
            suffix: domain
            left: server.idm.example.com
            right: replica.idm.example.com
            direction: left-to-right
            state: reinitialized
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory reinitialize-topologysegment-copy.yml

其它资源

32.6. 使用 Ansible 确保 IdM 中没有复制协议

存储在身份管理(IdM)服务器上的数据存储基于复制协议:配置了两个服务器时,它们共享其数据。复制协议始终为现实:数据从第一个副本复制到另一个副本,另一个副本复制到第一个副本。

本节论述了如何确保 IdM 中不存在两个副本之间的复制协议。这个示例描述了如何确保在 replica01.idm.example.com 和 replica02.idm.example.com IdM 服务器之间不存在 类型的复制协议。

先决条件

流程

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 复制位于 /usr/share/doc/ansible -freeipa/playbooks/topology/ 目录中的 delete-topology segment.yml Ansible playbook 文件:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/topology/delete-topologysegment.yml delete-topologysegment-copy.yml
  3. 打开 delete-topologysegment-copy.yml 文件进行编辑。
  4. 通过在 ipatopologysegment 任务部分 设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM admin 的密码。
    • suffix 变量设置为 domain。或者,如果您确保 ca 数据 不在左侧和右侧节点之间复制,请将 变量设置为 ca
    • 左侧 变量设置为 IdM 服务器的名称,该服务器是复制协议的左侧节点。
    • right 变量设置为 IdM 服务器的名称,该服务器是复制协议的正确节点。
    • 确保 state 变量设置为 absent

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Playbook to handle topologysegment
      hosts: ipaserver
      become: true
    
      tasks:
    - name: Delete topology segment
        ipatopologysegment:
          ipaadmin_password: Secret123
          suffix: domain
          left: replica01.idm.example.com
          right: replica02.idm.example.com:
          state: absent
  5. 保存该文件。
  6. 运行指定 playbook 文件和清单文件的 Ansible playbook:

    $ ansible-playbook -v -i inventory delete-topologysegment-copy.yml

其它资源

32.7. 其它资源

第 33 章 为外部置备用户配置 IdM

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

外部置备系统的管理员不必使用 ipa 实用程序,而是可以使用 ldapmodify 实用程序访问 IdM LDAP。管理员可以使用 ldapmodify 或 LDIF 文件从 CLI 添加个别阶段用户。

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

您可以配置脚本,以自动将外部调配系统创建的暂存用户移到活动用户

本章包含以下部分:

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

其它材料

有关将 ldapmodify 用作完整 IdM 管理员的示例和模板,请执行需要较高特权的用户和组管理操作,请参阅使用 ldapmodify

33.1. 准备 IdM 帐户以自动激活暂存用户帐户

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

先决条件

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

流程

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

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

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

      1. 创建自定义角色 System Provisioning 以管理添加阶段用户:

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

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

        $ ipa role-add-member --users=provisionator "System Provisioning"
      4. 验证 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. 添加激活器用户帐户:

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

      $ 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 用户密码会立即过期。

33.2. 配置 IdM 阶段用户帐户的自动激活

此流程演示了如何创建用于激活阶段用户的脚本。系统在指定的时间间隔内自动运行 脚本。这样可确保新用户帐户自动激活并在创建后不久可用。

重要

该程序假定外部调配系统的所有者已经验证了用户,并且他们不需要在 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.

33.3. 添加 LDIF 文件中定义的 IdM 阶段用户

本节论述了外部置备系统的管理员如何访问 IdM LDAP,并使用 LDIF 文件添加暂存用户。下例中演示了添加一个用户,但可以将多个用户以批量模式添加到一个文件中。

先决条件

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

    • 分辨名称 (dn)
    • 通用名称 (cn)
    • 姓氏 (sn)
    • The 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 协议连接到 IdM 服务器作为 置备程序

    $ ssh provisionator@server.idm.example.com
    Password:
    [provisionator@server ~]$
  4. 在 IdM 服务器上,获取置备程序帐户的 Kerberos ticket-granting ticket(TGT):

    [provisionator@server ~]$ kinit provisionator
  5. 使用 -f 选项和 LDIF 文件的名称输入 ldapadd 命令。指定 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"

33.4. 使用 ldapmodify 直接从 CLI 添加 IdM 暂存用户

本节论述了外部调配系统的管理员如何访问身份管理(IdM)LDAP,并使用 ldapmodify 实用程序添加暂存用户。

先决条件

  • IdM 管理员已为其创建了调配器帐户及其密码