Red Hat Training

A Red Hat training course is available for RHEL 8

配置和管理身份管理

Red Hat Enterprise Linux 8

登录到 IdM 并管理服务、用户、主机、组、访问控制规则和证书。

Red Hat Customer Content Services

摘要

红帽身份管理(IdM)的主要功能是管理用户、组、主机、访问控制规则和证书。但是,在 IdM 中执行管理任务前,您必须登录到服务。当您使用命令行或 IdM Web UI 登录时,您可以使用 Kerberos 和一次性密码作为 IdM 中的身份验证方法。
您可以使用集成的或外部证书颁发机构(CA)来管理 IdM 中的证书。您可以使用许多工具(如 Ansible Playbook)请求、续订和替换证书。要替换 IdM 服务器的 Web 服务器和 LDAP 服务器证书,您必须执行手动操作。

使开源包含更多

红帽承诺替换我们的代码、文档和网页属性中存在问题的语言。我们从这四个术语开始: 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

对红帽文档提供反馈

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

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

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

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

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

重要

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

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

1.1. 使用 kinit 手动登录到 IdM

按照以下流程,使用 kinit 工具手动向身份管理(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 主体的票,这意味着在这个特定的主机上,当前只允许 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 票

按照以下流程清除包含用户的活跃 Kerberos 票据的凭证缓存。

流程

  1. 销毁您的 Kerberos 票:

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

    [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 服务器进行身份验证。

1.4. 其它资源

  • krb5.conf(5) 手册页。
  • kinit(1) 手册页。
  • klist(1) 手册页。
  • kdestroy(1) 手册页。

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

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

2.1. IdM 服务

有许多不同服务可以在 IdM 服务器和客户端上安装并运行。

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 互联网名称域)实现包括 命名的 DNS 服务器。named-pkcs11 是使用对 PKCS#11 加密标准的原生支持构建的 BIND DNS 服务器版本。

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

Apache HTTP 服务器
httpd 服务

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

Samba/ Winbind
SMBwinbind 服务

Samba 在 Red Hat Enterprise Linux 中实现了服务器消息块(SMB)协议,也称为通用互联网文件系统(CIFS)协议。通过 smb 服务,SMB 协议可让您访问服务器上的资源,如文件共享和共享打印机。如果您使用活动目录(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 目录服务器和 OpenDNSSEC 之间的同步。

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

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. 启动和停止整个身份管理服务器

使用 ipa systemd 服务停止、启动或重启整个 IdM 服务器以及所有安装的服务。使用 systemctl 实用程序控制 ipa systemd 服务,确保所有服务都以适当的顺序停止、启动或重启。ipa systemd 服务也会在启动 IdM 服务前升级 RHEL IdM 配置,并在管理 IdM 服务时使用正确的 SELinux 上下文。您不需要具有有效的 Kerberos 票据来运行 systemctl ipa 命令。

ipa systemd service 命令

启动整个 IdM 服务器:

# systemctl start ipa

停止整个 IdM 服务器:

# systemctl stop ipa

重启整个 IdM 服务器:

# systemctl restart ipa

要显示组成 IdM 的所有服务的状态,请使用 ipactl 工具:

# ipactl status
重要
  • 不要直接使用 ipactl 工具来启动、停止或重启 IdM 服务。使用 systemctl ipa 命令,在可预测的环境中调用 ipactl 工具。
  • 您不能使用 IdM Web UI 来执行 ipactl 命令。

2.4. 启动和停止单个身份管理服务

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

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

# systemctl restart dirsrv@REALM-NAME.service

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

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

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

# systemctl restart sssd.service

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

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

重要

要重启多个 IdM 域服务,请始终使用 systemctl restart ipa。由于与 IdM 服务器一起安装的服务之间的依赖关系,这些服务启动和停止的顺序至关重要。ipa systemd 服务确保服务以适当的顺序启动和停止。

有用的 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)命令行工具的基础知识。

先决条件

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

    详情请参阅 安装身份管理

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

    有关获取有效的 Kerberos 票据的详情,请参阅 从命令行登录到身份管理

3.1. 什么是 IPA 命令行界面

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

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

IPA CLI 允许您:

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

3.2. IPA 帮助是什么

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

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

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

输入没有选项的 ipa help 命令会显示有关基本帮助用法和最常见的命令示例的信息。

您可以对不同的 ipa help 用例使用以下选项:

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

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

3.3. 使用 IPA 帮助主题

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

流程

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

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

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

    $ ipa help user
  4. 如果 IPA 帮助输出太长,您不能整个文本,请用以下语法:

    $ ipa help user | less

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

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

3.4. 使用 IPA help 命令

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

流程

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

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

    $ ipa help user-add

其它资源

  • ipa 手册页。

3.5. IPA 命令的结构

IPA CLI 区分以下命令类型:

  • 内置命令 — IdM 服务器中可用的内置命令。
  • 插件提供的命令

IPA 命令的结构允许您管理各种类型的对象。例如:

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

以及许多其他信息。

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

  • 添加(add
  • 修改(mod)
  • 删除(del)
  • 搜索(find
  • 显示(show

命令具有以下结构:

ipa user-add, ipa user-mod, ipa user-del, ipa user-find, ipa user-show

ipa host-add, ipa host-mod, ipa host-del, ipa host-find, ipa host-show

ipa dnsrecord-add, ipa dnsrecord-mod, ipa dnsrecord-del, ipa dnsrecord-find, ipa dnrecord-show

您可以使用 ipa user-add [options] 创建用户,其中 [options] 是可选的。如果您只使用 ipa user-add 命令,脚本将逐个询问您详细信息。

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

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 语法不同,因为您需要定义要对其执行更改的现有用户帐户,例如,添加密码。

先决条件

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

流程

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

    $ ipa user-mod euser --password

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

  3. 输入新密码并按 Enter 键。

IPA CLI 打印以下输出:

----------------------
Modified user "euser"
----------------------
User login: euser
First name: Example
Last name: User
Home directory: /home/euser
Principal name: euser@IDM.EXAMPLE.COM
Principal alias: euser@IDM.EXAMPLE.COM
Email address: euser@idm.example.com
UID: 427200006
GID: 427200006
Password: True
Member of groups: ipausers
Kerberos keys available: True

现在,为帐户设置了用户密码,用户可以登录 IdM 了。

其它资源

  • 运行 ipa help user-mod 命令来了解有关参数的更多信息。

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

身份管理(IdM)将多值属性的值存储在列表中。

IdM 支持以下提供多值列表的方法:

  • 在同一命令调用中多次使用相同的命令行参数:

    $ ipa permission-add --right=read --permissions=write --permissions=delete ...
  • 或者,您可以将列表用大括号括起来,在这种情况下,shell 执行展开:

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

上面的示例显示了命令 permission-add,它为对象添加权限。示例中没有提及对象。需要添加要为其添加权限的对象,而不是 …​

当您从命令行更新此类多值属性时,IdM 会使用新列表完全覆盖以前的值列表。因此,当更新多值属性时,您必须指定整个新列表,而不只是您要添加的单个值。

例如,在以上命令中,权限列表包括读、写和删除。当您决定使用 permission-mod 命令更新列表时,您必须添加所有的值,否则未提及的值将被删除。

示例 1: -ipa permission-mod 命令更新所有以前添加的权限。

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

或者

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

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

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

或者

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

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

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

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

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

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

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

以下章节描述了如何使用 IPA 命令,其可帮助您查找或显示对象。

4.1. 列出 IdM 条目的概述

您可以使用 ipa *-find 命令帮助您搜索特定类型的 IdM 条目。

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

$ ipa help commands | grep find

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

$ ipa user-find

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

$ ipa group-find keyword

例如,ipa 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 章 在 web 浏览器中访问 IdM Web UI

IdM (身份管理)Web UI 是一个 IdM 管理的 Web 应用程序,是 IdM 命令行界面(CLI)的图形替代方案。

5.1. 什么是 IdM Web UI

IdM (身份管理)Web UI 是一个 IdM 管理的 Web 应用程序。您可以以以下方式访问 IdM Web UI:

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

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

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

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

如果您的浏览器尝试使用 TLS v1.3,您可能会遇到使用智能卡访问 IdM Web UI 的问题。

[ssl:error] [pid 125757:tid 140436077168384] [client 999.999.999.999:99999] AH: verify client post handshake
[ssl:error] [pid 125757:tid 140436077168384] [client 999.999.999.999:99999] AH10158: cannot perform post-handshake authentication
[ssl:error] [pid 125757:tid 140436077168384] SSL Library Error: error:14268117:SSL routines:SSL_verify_client_post_handshake:extension not received

这是因为,最新的浏览器版本没有默认启用 TLS Post-Handshake Authentication(PHA),或者不支持 PHA。对于网站的一部分,PHA 只需要 TLS 客户端证书,比如使用智能卡验证访问 IdM Web UI 时。

要在 Mozilla Firefox 68 及更新的版本中解决这个问题,请启用 TLS PHA:

  1. 在地址栏中输入 about:config 以访问 Mozilla Firefox 首选项菜单。
  2. 在搜索栏中输入 security.tls.enable_post_handshake_auth
  3. 点切换按钮将参数设置为 true。

要解决 Chrome (目前不支持 PHA)的问题,请禁用 TLS v1.3:

  1. 打开 /etc/httpd/conf.d/ssl.conf 配置文件。
  2. -TLSv1.3 添加到 SSLProtocol 选项:

    SSLProtocol all -TLSv1 -TLSv1.1 -TLSv1.3
  3. 重启 httpd 服务:

    service httpd restart

请注意,IdM 管理 ssl.conf 文件,并可能会在软件包更新过程中覆盖其内容。在更新 IdM 软件包后验证自定义设置。

5.3. 访问 Web UI

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

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

流程

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

    https://server.example.com

    您只需要将 server.example.com 更改为您 IdM 服务器的 DNS 名称。

    这会在您的浏览器中打开 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 服务器安装过程中添加的管理员帐户凭证。

    详情请参阅 安装身份管理服务器:使用集成的 DNS,以及集成的 CA

    如果您已经进入到 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. 单击 Log in

登录成功后,您可以开始配置 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 票据

了解更多有关如何配置您的环境,以使用 Kerberos 身份验证,使 Kerberos 能够登录到 IdM Web UI ,并访问 IdM。

先决条件

6.1. 身份管理中的 Kerberos 身份验证

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

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

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

6.2. 使用 kinit 手动登录到 IdM

按照以下流程,使用 kinit 工具手动向身份管理(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 主体的票,这意味着在这个特定的主机上,当前只允许 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 票据的身份验证,您可能需要浏览器配置。

以下步骤可帮助您支持 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 票据登录到 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 将自动打开,而不会打开登录对话框。

    如果您看到错误消息 Authentication with Kerberos failed,请验证您的浏览器是否已针对 Kerberos 身份验证进行了配置。请参阅 为 Kerberos 身份验证配置浏览器

    IdM Web UI 登录屏幕截图,在空 Username 和 Password 字段上方显示了一个错误。错误消息显示"Authentication with Kerberos failed"。

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. 在外部系统上配置浏览器,如 为 Kerberos 身份验证配置浏览器 中所述。

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

6.6. 活动目录用户的 Web UI 登录

要为活动目录用户启用 Web UI 登录,请在 Default Trust View 中为每个活动目录用户定义一个 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. 身份管理中的一次性密码(OTP)身份验证

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

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

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

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

IdM 不支持活动目录信任用户的 OTP 登录。

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

IdM Web UI 允许您配置硬件或软件设备来生成一次性密码。

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

只有管理员才能在用户设置中启用 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 submenu from the Identity tab.

  3. 单击您的用户名来打开用户设置。
  4. User authentication types 中,选择 Two factor authentication (password + 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. 点击 Add

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

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

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

  5. 将 QR 代码复制到您的手机。
  6. 单击 OK 来关闭 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。

先决条件

  • OTP 配置在身份管理服务器上为用于 OTP 身份验证的用户帐户启用 OTP 配置。管理员和用户本身也可以启用 OTP。

    要启用 OTP 配置,请参阅 在 Web UI 中启用一次性密码

  • 生成 OTP 令牌的硬件或软件设备已配置。

流程

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

    如果身份验证失败,请同步 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. 再生成一次性密码,并将它输入到 Second 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. 单击 Reset Password

    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 服务。
  • Name Services Switch (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. libc 库引用 /etc/nsswitch.conf 配置文件来检查哪个服务负责提供用户信息,并发现 SSSD 服务的条目。
  3. libc 库打开 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 响应器将用户信息发送到 ss_sss 响应者,以完成请求。
  13. libc 库将用户信息返回到请求它的应用程序。

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

如果您已在 IdM 环境和活动目录(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. 要确定哪些身份验证方法可用,libpam 库会打开 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 后端响应程序,以查看服务器支持的身份验证方法,如密码或双因素身份验证。在 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 -k '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 -k '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_dnldap_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 服务是否可以接收用户数据库的信息:

    1. 查看 /var/log/messages 日志文件中的错误。
    2. 在 SSSD 服务中启用详细的日志记录,收集调试日志,并查看日志以确定问题的根源。
    3. (可选)创建一个红帽技术支持问题单,并提供您收集的故障排除信息。
  7. 如果您被允许在主机上运行 sudo,请使用 sssctl 工具来验证用户是否被允许登录。

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

    如果这一步失败,请验证您的授权设置,如 PAM 配置、IdM HBAC 规则和 IdM RBAC 规则:

    1. 确保用户的 UID 等于或大于 UID_MIN,它在 /etc/login.defs 文件中定义。
    2. 查看 /var/log/secure/var/log/messages 日志文件中的授权错误。
    3. 在 SSSD 服务中启用详细的日志记录,收集调试日志,并查看日志以确定问题的根源。
    4. (可选)创建一个红帽技术支持问题单,并提供您收集的故障排除信息。

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 级别后,也会启用它以下的所有 debug 级别。例如,把 debug 级别设置为 6 后,也会启用 debug 级别 0 到 5。

表 8.1. SSSD 日志记录级别

级别Description

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> 选项,其中 <integer> 值是一个 0 到 9 之间的数字。debug 级别 0 到 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 级别 0 到 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; date
    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 日志,请降低 debug 级别。

    [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

8.10. 跟踪 SSSD 后端中的客户端请求

SSSD 以异步方式处理请求,并将来自不同请求的消息添加到同一日志文件中,您可以使用唯一的请求标识符和客户端 ID 来在后端日志中跟踪客户端请求。唯一的请求标识符以 RID#<integer> 形式添加到调试日志中,客户端 ID 的格式为 [CID #<integer]。这可让您隔离与单个请求相关的日志,您可以跨多个SSSD 组件的日志文件从头到尾跟踪请求。

先决条件

  • 您已启用了调试日志,并且已从 IdM 客户端提交了请求。
  • 您必须具有 root 特权才能显示 SSSD 日志文件的内容。

流程

  1. 要查看 SSSD 日志文件,请使用 less 工具打开日志文件。例如,查看 /var/log/sssd/sssd_example.com.log

    [root@server ~]# less /var/log/sssd/sssd_example.com.log
  2. 查看 SSSD 日志,以获取有关客户端请求的信息。

    (2021-07-26 18:26:37): [be[testidm.com]] [dp_req_destructor] (0x0400): [RID#3] Number of active DP request: 0
    (2021-07-26 18:26:37): [be[testidm.com]] [dp_req_reply_std] (0x1000): [RID#3] DP Request AccountDomain #3: Returning [Internal Error]: 3,1432158301,GetAccountDomain() not supported
    (2021-07-26 18:26:37): [be[testidm.com]] [dp_attach_req] (0x0400): [RID#4] DP Request Account #4: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001].
    (2021-07-26 18:26:37): [be[testidm.com]] [dp_attach_req] (0x0400): [RID#4] Number of active DP request: 1

    SSSD 日志文件中的这个示例输出显示了两个不同的请求的唯一标识符 RID#3RID#4

但是,对 SSSD 客户端接口的单一客户端请求通常会在后端触发多个请求,因此客户端请求和后端中的请求之间不是 1 到 1 的对应关系。虽然后端中的多个请求有不同的 RID 号,但每个初始后端请求都包括唯一的客户端 ID,以便管理员可以跟踪单个客户端请求的多个 RID 号。

以下示例显示了一个客户端请求 [sssd.nss CID #1] 和多个在后端生成的请求,[RID#5][RID#13]:

(2021-10-29 13:24:16): [be[ad.vm]] [dp_attach_req] (0x0400): [RID#5] DP Request [Account #5]: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001].
(2021-10-29 13:24:16): [be[ad.vm]] [dp_attach_req] (0x0400): [RID#6] DP Request [AccountDomain #6]: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001].
(2021-10-29 13:24:16): [be[ad.vm]] [dp_attach_req] (0x0400): [RID#7] DP Request [Account #7]: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001].
(2021-10-29 13:24:17): [be[ad.vm]] [dp_attach_req] (0x0400): [RID#8] DP Request [Initgroups #8]: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001].
(2021-10-29 13:24:17): [be[ad.vm]] [dp_attach_req] (0x0400): [RID#9] DP Request [Account #9]: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001].
(2021-10-29 13:24:17): [be[ad.vm]] [dp_attach_req] (0x0400): [RID#10] DP Request [Account #10]: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001].
(2021-10-29 13:24:17): [be[ad.vm]] [dp_attach_req] (0x0400): [RID#11] DP Request [Account #11]: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001].
(2021-10-29 13:24:17): [be[ad.vm]] [dp_attach_req] (0x0400): [RID#12] DP Request [Account #12]: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001].
(2021-10-29 13:24:17): [be[ad.vm]] [dp_attach_req] (0x0400): [RID#13] DP Request [Account #13]: REQ_TRACE: New request. [sssd.nss CID #1] Flags [0x0001].

8.11. 使用日志分析器工具跟踪客户端请求

系统安全服务守护进程(SSSD)包含一个日志解析工具,可用于跟踪跨多个 SSSD 组件的日志文件的从头到尾的请求。

8.11.1. 日志分析器工具是如何工作的

使用日志解析工具,您可以跟踪跨多个 SSSD 组件的日志文件的从头到尾的 SSSD 请求。您可以使用 sssctl analyze 命令运行分析器工具。

日志分析器工具可帮助您排除 SSSD 中的 NSS 和 PAM 问题,并更容易查看 SSSD 调试日志。您只能提取和打印与跨多个 SSSD 进程的某些客户端请求有关的 SSSD 日志。

SSSD 跟踪用户和组身份信息(id,getent),与用户身份验证(sussh)分开进行。NSS 响应器中的客户端 ID(CID)与 PAM 响应器中的 CID 无关,在分析 NSS 和 PAM 请求时会看到重叠的数字。在 sssctl analyze 命令中使用 --pam 选项来查看 PAM 请求。

注意

从 SSSD 内存缓存返回的请求不会被记录,并且日志分析器工具无法跟踪。

其它资源

  • sudo sssctl analyze request --help
  • sudo sssctl analyze --help
  • sssd.conf 手册页
  • sssctl 手册页

8.11.2. 运行日志分析器工具

按照以下流程,使用日志分析器工具跟踪 SSSD 中的客户端请求。

先决条件

  • 您必须在 [$responder] 部分和 /etc/sssd/sssd.conf 文件的 [domain/$domain] 部分中将 debug_level 至少设为 7,以启用日志解析功能。
  • 要分析的日志必须来自使用 libtevent 链 ID 支持构建的 SSSD 的兼容版本,它是 RHEL 8.5 及之后版本中的 SSSD。

流程

  1. 列表 模式运行日志分析器工具,来确定您在跟踪的请求的客户端 ID,添加 -v 选项以显示详细输出:

    # sssctl analyze request list -v

    将显示最近向 SSSD 发出的客户端请求的详细列表。

    注意

    如果分析 PAM 请求,请运行带有 --pam 选项的 sssctl analyze request list 命令。

  2. 运行带有 show [unique client ID] 选项的日志分析器工具,来显示与指定客户端 ID 号相关的日志:

    # sssctl analyze request show 20
  3. 如果需要,您可以针对日志文件运行日志分析器工具,例如:

    # sssctl analyze request --logdir=/tmp/var/log/sssd

其它资源

  • sssctl analyze request list --help
  • sssctl analyze request show --help
  • sssctl 手册页。

8.12. 其它资源

第 9 章 准备您的环境以使用 Ansible playbook 管理 IdM

作为管理身份管理 (IdM) 的系统管理员,在使用 Red Hat Ansible Engine 时,最好执行以下操作:

  • 在您的主目录中,创建专用于 Ansible playbook 的子目录,如 ~/MyPlaybooks
  • 将示例 Ansible playbook 从 /usr/share/doc/ansible-freeipa/*/usr/share/doc/rhel-system-roles/* 目录以及它们的子目录复制到 ~/MyPlaybooks 目录中并进行调整。
  • 将清单文件包含在 ~/MyPlaybooks 目录中。

使用这个方法,您可以在一个位置找到所有 playbook。

注意

您可以在不调用受管节点上的 root 权限的情况下运行 ansible-freeipa playbook。例外包括使用 ipaserveripareplicaipaclientipasmartcard_serveripasmartcard_clientipabackup ansible-freeipa 角色的 playbook。这些角色需要具有目录和 dnf 软件包管理器的特权访问权限。

Red Hat Enterprise Linux IdM 文档中的 playbook 假设以下 安全配置

  • IdM admin 是受管节点上的远程 Ansible 用户。
  • 您可以将 IdM admin 密码加密存储在 Ansible 库中。
  • 您已将保护 Ansible 库的密码放置在密码文件中。
  • 您阻止对 vault 密码文件的访问权限,但您的本地 ansible 用户除外。
  • 您定期删除并重新创建 vault 密码文件。

还要考虑 其他安全配置

9.1. 准备控制节点和受管节点以使用 Ansible playbook 管理 IdM

按照以下流程创建 ~/MyPlaybooks 目录并进行配置,以便您可以使用它来存储和运行 Ansible playbook。

先决条件

  • 您已在受管节点上安装了 IdM 服务器 server.idm.example.comreplica.idm.example.com
  • 您已配置了 DNS 和网络,以便您可以直接从控制节点登录到受管节点 server.idm.example.comreplica.idm.example.com
  • 您需要知道 IdM admin 密码。

流程

  1. 在主目录中为您的 Ansible 配置和 playbook 创建目录:

    $ mkdir ~/MyPlaybooks/
  2. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks
  3. 使用以下内容创建 ~/MyPlaybooks/ansible.cfg 文件:

    [defaults]
    inventory = /home/your_username/MyPlaybooks/inventory
    remote_user = admin
  4. 使用以下内容创建 ~/MyPlaybooks/inventory 文件:

    [eu]
    server.idm.example.com
    
    [us]
    replica.idm.example.com
    
    [ipaserver:children]
    eu
    us

    此配置定义了两个主机组,即 euus,用于这些位置中的主机。此外,此配置定义了 ipaserver 主机组,它包含来自 euus 组的所有主机。

  5. [可选] 创建 SSH 公钥和私钥。要在测试环境中简化访问,请不要在私钥中设置密码:

    $ ssh-keygen
  6. 将 SSH 公钥复制到每个受管节点上的 IdM admin 帐户:

    $ ssh-copy-id admin@server.idm.example.com
    $ ssh-copy-id admin@replica.idm.example.com

    这些命令要求您输入 IdM admin 密码。

  7. 创建包含 vault 密码的 password_file 文件:

    redhat
  8. 更改权限以修改该文件:

    $ chmod 0600 password_file
  9. 创建一个 secret.yml Ansible 库来存储 IdM admin 密码:

    1. 配置 password_file 以存储 vault 密码:

      $ ansible-vault create --vault-password-file=password_file secret.yml
    2. 出现提示时,输入 secret.yml 文件的内容:

      ipaadmin_password: Secret123
注意

要在 playbook 中使用加密的 ipaadmin_password,您必须使用 vars_file 指令。例如,删除 IdM 用户的简单 playbook 可以如下所示:

---
- name: Playbook to handle users
  hosts: ipaserver

  vars_files:
  - /home/user_name/MyPlaybooks/secret.yml

  tasks:
  - name: Delete user robot
    ipauser:
      ipaadmin_password: "{{ ipaadmin_password }}"
      name: robot
      state: absent

在执行 playbook 时,通过添加 --vault-password-file=password_file选项,指示 Ansible 使用 vault 密码来解密 ipaadmin_password _password。例如:

ansible-playbook -i inventory --vault-password-file=password_file del-user.yml
警告

为安全起见,删除每个会话末尾的 vault 密码文件,并在每个新会话开始时重复步骤 7-9。

9.2. 提供 ansible-freeipa playbook 所需的凭证的不同方法

不同的方法都有一些优点和缺点,为运行使用 ansible-freeipa 角色和模块的 playbook 提供所需的凭证。

在 playbook 中以纯文本形式存储密码

优点

  • 运行 playbook 时,不会显示所有。
  • 易于实施。

缺陷

  • 有权访问该文件的人都可以读取密码。设置错误的权限和共享文件(例如在内部或外部存储库中)可能会破坏安全性。
  • 高维护工作:如果更改了密码,则需要在所有 playbook 中进行更改。

执行 playbook 时以交互方式输入密码

优点

  • 无人可以窃取密码,因为它不在任何位置存储。
  • 您可以轻松更新密码。
  • 易于实施。

缺陷

  • 如果您在脚本中使用 Ansible playbook,以交互方式输入密码的要求可能比较不方便。

将密码存储在 Ansible vault 中,并将 vault 密码存储在一个文件中:

优点

  • 用户密码以加密方式存储。
  • 您可以通过创建新的 Ansible vault 来轻松更新用户密码。
  • 您可以使用 ansible-vault rekey --new-vault-password-file=NEW_VAULT_PASSWORD_FILE secret.yml 命令来轻松更新保护 ansible vault 的密码文件。
  • 如果您在脚本中使用 Ansible playbook,则不必以交互方式输入密码。

缺陷

  • 务必要确保包含敏感纯文本密码的文件通过文件权限和其他安全措施进行保护。

将密码存储在 Ansible 库中,并以交互方式输入 vault 密码

优点

  • 用户密码以加密方式存储。
  • 无人可以窃取 vault 密码,因为它不在任何位置存储。
  • 您可以通过创建新的 Ansible vault 来轻松更新用户密码。
  • 您还可以使用 ansible-vault rekey file_name 命令,轻松更新 vault 密码。

缺陷

  • 如果您在脚本中使用 Ansible playbook,则需要以交互方式输入 vault 密码。

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

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

10.1. 使用 Ansible playbook 检索 IdM 配置

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

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible 库存储了 ipaadmin_password

流程

  1. 打开 /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
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Query IPA global configuration
        ipaconfig:
          ipaadmin_password: "{{ ipaadmin_password }}"
        register: serverconfig
    
      - debug:
          msg: "{{ serverconfig }}"
  2. 通过更改以下内容来调整文件:

    • IdM 管理员的密码。
    • 其他值(如有必要)。
  3. 保存该文件。
  4. 运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -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
        }
    }

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

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

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

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

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible 库存储了 ipaadmin_password

流程

  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
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: set ca_renewal_master_server
        ipaconfig:
          ipaadmin_password: "{{ ipaadmin_password }}"
          ca_renewal_master_server: carenewal.idm.example.com
  4. 通过更改调整文件:

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

    $ ansible-playbook --vault-password-file=password_file -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 续订服务器。

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

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

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

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible 库存储了 ipaadmin_password

流程

  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
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      # Set defaultlogin and maxusername
      - ipaconfig:
          ipaadmin_password: "{{ ipaadmin_password }}"
          defaultshell: /bin/bash
          maxusername: 64
  4. 通过更改以下内容来调整文件:

    • ipaadmin_password 变量设置的 IdM 管理员密码。
    • IdM 用户的默认 shell 由 /bin/sh 中的 defaultshell 设置。
  5. 保存该文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -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。

10.4. 使用 Ansible 为 IdM 域配置 NetBIOS 名称

NetBIOS 名称用于 Microsoft Windows 的(SMB)类型的共享和消息。您可以使用 NetBIOS 名称映射驱动器或连接到打印机。

按照以下流程,使用 Ansible playbook 为您的身份管理(IdM)域配置 NetBIOS 名称。

先决条件

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

    • 您使用 Ansible 版本 2.14 或更高版本。
    • ansible-freeipa 软件包已安装。

假设

  • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
  • 示例假定 secret.yml Ansible vault 存储了您的 ipaadmin_password,并且您知道 vault 文件密码。

流程

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 创建一个 netbios-domain-name-present.yml Ansible playbook 文件。
  3. 在文件中添加以下内容:

    ---
    - name: Playbook to change IdM domain netbios name
      hosts: ipaserver
      become: no
      gather_facts: no
    
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
        - name: Set IdM domain netbios name
          ipaconfig:
            ipaadmin_password: "{{ ipaadmin_password }}"
            netbios_name: IPADOM
  4. 保存该文件。
  5. 运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory netbios-domain-name-present.yml

    出现提示时,提供 vault 文件密码。

10.5. 使用 Ansible 确保 IdM 用户和组有 SID

身份管理(IdM)服务器可以根据本地域的 ID 范围中的数据,在内部将唯一安全标识符(SID)分配给 IdM 用户和组。SID 存储在用户和组对象中。

确保 IdM 用户和组有 SID 的目标是允许生成特权属性证书(PAC),这是 IdM-IdM 信任的第一步。如果 IdM 用户和组有 SID,IdM 能够使用 PAC 数据发布 Kerberos 票据。

按照以下流程实现以下目标:

  • 为已存在的 IdM 用户和用户组生成 SID。
  • 为 IdM 新用户和组启用 SID 生成。

先决条件

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

    • 您使用 Ansible 版本 2.14 或更高版本。
    • ansible-freeipa 软件包已安装。

假设

  • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
  • 示例假定 secret.yml Ansible vault 存储了您的 ipaadmin_password,并且您知道 vault 文件密码。

流程

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 创建一个 sids-for-users-and-groups-present.yml Ansible playbook 文件。
  3. 在文件中添加以下内容:

    ---
    - name: Playbook to ensure SIDs are enabled and users and groups have SIDs
      hosts: ipaserver
      become: no
      gather_facts: no
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
        - name: Enable SID and generate users and groups SIDS
          ipaconfig:
            ipaadmin_password: "{{ ipaadmin_password }}"
            enable_sid: true
            add_sids: true

    enable_sid 变量为将来的 IdM 用户和组启用 SID 生成。add_sids 变量为现有的 IdM 用户和组生成 SID。

    注意

    使用 add_sids: true 时,您还必须将 enable_sid 变量设置为 true

  4. 保存该文件。
  5. 运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory sids-for-users-and-groups-present.yml

    出现提示时,提供 vault 文件密码。

10.6. 其它资源

  • 请参阅 /usr/share/doc/ansible-freeipa/ 目录中的 README-config.md
  • 请参阅 /usr/share/doc/ansible-freeipa/playbooks/config 目录中的 playbook 示例。

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

IdM (身份管理)中的用户生命周期有几个阶段,包括:

  • 创建用户帐户
  • 激活 stage 用户帐户
  • 保留用户帐户
  • 删除 active、stage 或 preserved 用户帐户
  • 恢复 preserved 用户帐户

11.1. 用户生命周期

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

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

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

您可以从 IdM 数据库永久删除用户条目。

重要

删除的用户帐户无法恢复。当您删除用户帐户时,与帐户相关的所有信息都将永久丢失。

只能由具备管理员权限的用户(如默认的 admin 用户)才能创建新的管理员。如果您意外删除所有管理员帐户,目录管理器必须在 Directory 服务器中手动创建新管理员。

警告

不要删除 admin 用户。由于 admin 是 IdM 所需的预定义用户,因此此操作会导致某些命令出现问题。如果要定义和使用另外的 admin 用户,请先至少为一个其他用户授予 admin 权限,然后再使用 ipa user-disable admin 命令来禁用预定义的 admin 用户。

警告

不要将本地用户添加到 IdM。NSS(Name Service Switch)在解析本地用户和组前,总会先解析 IdM 的用户和组。这意味着 IdM 组成员资格不适用于本地用户。

11.2. 使用命令行添加用户

您可以将用户添加为:

  • Active - 可以被他们的用户主动使用的用户账户。
  • stage - 无法使用这些帐户。如果要准备新用户帐户,请使用它。当用户准备好使用其帐户时,您可以激活他们。

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

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

注意

IdM 自动给新用户帐户分配唯一的用户 ID(UID)。您也可以手动执行此操作,但服务器不会验证 UID 号是否是唯一的。因此,多个用户条目可能被分配了相同的 ID 号。红帽建议防止多个条目具有相同的 UID 。

先决条件

流程

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

    $ ipa user-add user_login --first=first_name --last=last_name --email=email_address

    IdM 支持可通过以下正则表达式描述的用户名:

    [a-zA-Z0-9_.][a-zA-Z0-9_.-]{0,252}[a-zA-Z0-9_.$-]?
    注意

    支持以末尾的美元符号($)结尾的用户名,以启用 Samba 3.x 机器支持。

    如果您添加了包含大写字符的用户名,IdM 会在保存名称时自动将其转换为小写。因此,IdM 总是需要在登录时以小写形式输入用户名。此外,不能添加仅在字母大小写上不同的用户名,比如 userUser

    用户名的默认最大长度为 32 个字符。要更改它,请使用 ipa config-mod --maxusername 命令。例如,要将最大用户名长度增加到 64 个字符:

    $ ipa config-mod --maxusername=64
     Maximum username length: 64
     ...

    ipa user-add 命令包含许多参数。要全部列出它们,请使用 ipa help 命令:

    $ ipa help user-add

    有关 ipa help 命令的详情,请查看 什么是 IPA help

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

$ ipa user-find

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

11.3. 使用命令行激活用户

要通过将用户帐户从 stage 移到 active 来激活它,,请使用 ipa stageuser-activate 命令。

先决条件

流程

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

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

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

$ ipa user-find

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

11.4. 使用命令行保留用户

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

先决条件

流程

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

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

    尽管输出说用户帐户已删除,但实际上是被保留了。

11.5. 使用命令行删除用户

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

  • 活动用户,使用以下命令:ipa user-del
  • Stage 用户,使用以下命令:ipa stageuser-del
  • Preserved 用户,使用以下命令:ipa user-del

删除多个用户时,请使用 --continue 选项强制命令继续,而不论出现什么错误。命令完成后,会将成功和失败的操作摘要输出到 stdout 标准输出流。

$ ipa user-del --continue user1 user2 user3

如果不使用 --continue,命令会继续删除用户,直到它遇到错误,然后它会停止并退出。

先决条件

流程

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

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

用户帐户从 IdM 永久删除。

11.6. 使用命令行恢复用户

您可以将 preserved 用户恢复成:

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

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

先决条件

流程

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

    $ ipa user-undel user_login
    ------------------------------
    Undeleted user account "user_login"
    ------------------------------

    或者,您可以将用户帐户恢复为暂存的用户帐户:

    $ ipa user-stage user_login
    ------------------------------
    Staged user account "user_login"
    ------------------------------

验证步骤

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

    $ ipa user-find

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

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

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

创建用户帐户

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

您可以省略此步骤,并直接创建活动的用户帐户。这个流程与创建 stage 用户帐户的流程类似。

激活用户帐户
激活帐户 在员工的第一个工作日。
禁用用户帐户
如果用户要休几个月的产假,您需要 临时禁用该帐户
启用用户帐户
用户返回时,您需要 重新启用该帐户
保留用户帐户
如果用户想要离开公司,您需要删除该 帐户,并有可能恢复它, 因为人们可以在一段时间后回到公司。
恢复用户帐户
两年后,用户回来了,您需要 恢复保留的帐户
删除用户帐户
如果取消了员工,请在没有备份的情况下删除帐户

12.1. 用户生命周期

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

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

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

您可以从 IdM 数据库永久删除用户条目。

重要

删除的用户帐户无法恢复。当您删除用户帐户时,与帐户相关的所有信息都将永久丢失。

只能由具备管理员权限的用户(如默认的 admin 用户)才能创建新的管理员。如果您意外删除所有管理员帐户,目录管理器必须在 Directory 服务器中手动创建新管理员。

警告

不要删除 admin 用户。由于 admin 是 IdM 所需的预定义用户,因此此操作会导致某些命令出现问题。如果要定义和使用另外的 admin 用户,请先至少为一个其他用户授予 admin 权限,然后再使用 ipa user-disable admin 命令来禁用预定义的 admin 用户。

警告

不要将本地用户添加到 IdM。NSS(Name Service Switch)在解析本地用户和组前,总会先解析 IdM 的用户和组。这意味着 IdM 组成员资格不适用于本地用户。

12.2. 在 Web UI 中添加用户

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

注意

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

先决条件

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

流程

  1. 登录到 IdM Web UI。

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

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

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

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

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

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

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

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

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

注意

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

12.3. 在 IdM Web UI 中 stage 用户

在用户可以登录到 IdM 之前以及将用户添加到 IdM 组之前,您必须按照这个流程激活 stage 用户帐户。

先决条件

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

流程

  1. 登录到 IdM Web UI。

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

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

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

  5. Confirmation 对话框中,单击 OK

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

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

注意

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

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

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

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

注意

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

先决条件

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

流程

  1. 登录到 IdM Web UI。

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

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

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

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

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

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

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

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

先决条件

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

流程

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

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

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

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

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

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

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

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

注意

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

先决条件

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

流程

  1. 登录到 IdM Web UI。

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

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

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

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

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

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

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

12.7. 在 IdM Web UI 中恢复用户

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

先决条件

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

流程

  1. 登录到 IdM Web UI。

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

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

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

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

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

12.8. 在 IdM Web UI 中删除用户

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

您可以删除:

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

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

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

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

先决条件

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

流程

  1. 登录到 IdM Web UI。

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

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

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

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

用户帐户从 IdM 永久删除。

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

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

13.1. 用户生命周期

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

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

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

您可以从 IdM 数据库永久删除用户条目。

重要

删除的用户帐户无法恢复。当您删除用户帐户时,与帐户相关的所有信息都将永久丢失。

只能由具备管理员权限的用户(如默认的 admin 用户)才能创建新的管理员。如果您意外删除所有管理员帐户,目录管理器必须在 Directory 服务器中手动创建新管理员。

警告

不要删除 admin 用户。由于 admin 是 IdM 所需的预定义用户,因此此操作会导致某些命令出现问题。如果要定义和使用另外的 admin 用户,请先至少为一个其他用户授予 admin 权限,然后再使用 ipa user-disable admin 命令来禁用预定义的 admin 用户。

警告

不要将本地用户添加到 IdM。NSS(Name Service Switch)在解析本地用户和组前,总会先解析 IdM 的用户和组。这意味着 IdM 组成员资格不适用于本地用户。

13.2. 使用 Ansible playbook 确保存在一个 IdM 用户

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

先决条件

  • 您需要知道 IdM admin 密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible 库存储了 ipaadmin_password

流程

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

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

    ---
    - name: Playbook to handle users
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Create user idm_user
        ipauser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: idm_user
          first: Alice
          last: Acme
          uid: 1000111
          gid: 10011
          phone: "+555123457"
          email: idm_user@acme.com
          passwordexpiration: "2023-01-19 23:59:59"
          password: "Password123"
          update_password: on_create

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

    • name:登录名称
    • first:名(字符串)
    • last:姓(字符串)

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

    注意

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

  3. 运行 playbook:

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

验证步骤

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

    1. 以 admin 用户身份登录 ipaserver

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

      $ kinit admin
      Password for admin@IDM.EXAMPLE.COM:
    3. 请求有关 idm_user 的信息:

      $ ipa user-show idm_user
        User login: idm_user
        First name: Alice
        Last name: Acme
        ....

    IdM 中存在名为 idm_user 的用户。

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

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

先决条件

  • 您需要知道 IdM admin 密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible 库存储了 ipaadmin_password

流程

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

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

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

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

  3. 运行 playbook:

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

验证步骤

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

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

      $ ssh administrator@server.idm.example.com
      Password:
      [admin@server /]$
    2. 显示有关 idm_user_1 的信息:

      $ ipa user-show idm_user_1
        User login: idm_user_1
        First name: Alice
        Last name: Acme
        Password: True
        ....

    IdM 中存在名为 idm_user_1 的用户。

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

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

先决条件

  • 您需要知道 IdM admin 密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible 库存储了 ipaadmin_password

流程

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

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

    ---
    - name: Ensure users' presence
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Include users.json
        include_vars:
          file: users.json
    
      - name: Users present
        ipauser:
          ipaadmin_password: "{{ ipaadmin_password }}"
          users: "{{ users }}"
  3. 创建 users.json 文件,并将 IdM 用户添加到其中。要简化此步骤,您可以复制并修改 /usr/share/doc/ansible-freeipa/playbooks/user/users.json 文件中的示例。例如,要创建用户 idm_user_1idm_user_2idm_user_3,并添加 Password123 作为密码 idm_user_1

    {
      "users": [
       {
        "name": "idm_user_1",
        "first": "Alice",
        "last": "Acme",
        "password": "Password123"
       },
       {
        "name": "idm_user_2",
        "first": "Bob",
        "last": "Acme"
       },
       {
        "name": "idm_user_3",
        "first": "Eve",
        "last": "Acme"
       }
      ]
    }
  4. 运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:

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

验证步骤

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

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

      $ ssh administrator@server.idm.example.com
      Password:
      [admin@server /]$
    2. 显示有关 idm_user_1 的信息:

      $ ipa user-show idm_user_1
        User login: idm_user_1
        First name: Alice
        Last name: Acme
        Password: True
        ....

    IdM 中存在名为 idm_user_1 的用户。

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

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

先决条件

  • 您需要知道 IdM admin 密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible 库存储了 ipaadmin_password

流程

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

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

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

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

验证步骤

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

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

    $ ssh administrator@server.idm.example.com
    Password:
    [admin@server /]$
  2. 请求有关 idm_user_1 的信息:

    $ ipa user-show idm_user_1
    ipa: ERROR: idm_user_1: user not found

    IdM 中不存在名为 idm_user_1 的用户。

13.6. 其它资源

  • 请参阅 /usr/share/doc/ansible-freeipa/ 目录中的 README-user.md Markdown 文件。
  • 请参阅 /usr/share/doc/ansible-freeipa/playbooks/user 目录中的 Ansible playbook 示例。

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

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

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

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

admins

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

editors

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

trust admins

具有管理 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 CLI 添加用户组

按照以下流程,使用 IdM CLI 添加用户组。

先决条件

流程

  • 使用 ipa group-add group_name 命令添加用户组。例如,创建 group_a:

    $ ipa group-add group_a
    ---------------------
    Added group "group_a"
    ---------------------
      Group name: group_a
      GID: 1133400009

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

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

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

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

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

14.5. 使用 IdM CLI 删除用户组

按照以下流程,使用 IdM CLI 删除用户组。请注意,删除组不会从 IdM 中删除组成员。

先决条件

流程

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

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

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

您可以将用户和用户组添加为用户组的成员。如需更多信息,请参阅 IdM 中不同的组类型 以及 直接和间接组成员。按照以下流程,使用 IdM CLI 将成员添加到用户组中。

先决条件

流程

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

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

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

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

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

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

重要

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

注意

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

14.7. 添加没有用户私有组的用户

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

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

不过,可以添加用户而不创建 UPG 。

14.7.1. 没有用户私有组的用户

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

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

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

注意

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

14.7.2. 在全局启用私有组时添加没有用户私有组的用户

您可以添加用户而不创建用户私有组(UPG),即使系统上启用了 UPG。这需要为新用户手动设置 GID。有关为何需要此功能的详情,请查看 没有用户私有组的用户

流程

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

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

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

14.7.3. 对所有用户全局禁用用户私有组

您可以在全局范围内禁用用户私有组(UPG)。这样可防止为所有新用户创建 UPG。现有用户不会受到这一更改的影响。

流程

  1. 获取管理员权限:

    $ kinit admin
  2. IdM 使用目录服务器管理的条目插件来管理 UPG。列出插件的实例:

    $ ipa-managed-entries --list
  3. 要确保 IdM 不创建 UPG,请禁用负责管理用户私有组的插件实例:

    $ ipa-managed-entries -e "UPG Definition" disable
    Disabling Plugin
    注意

    要在稍后重新启用 UPG Definition 实例,请使用 ipa-managed-entries -e "UPG Definition" enable 命令。

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

    $ sudo systemctl restart dirsrv.target

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

验证步骤

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

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

14.7.4. 当全局禁用用户私有组时添加用户

当全局禁用用户私有组(UPG)时,IdM 不会自动为新用户分配 GID。要成功添加用户,您必须手动分配 GID,或使用自动成员规则来分配 GID。有关为何需要此功能的详情,请查看 没有用户私有组的用户

先决条件

流程

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

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

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

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

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

按照以下流程,使用 IdM CLI 将用户或组作为成员管理者添加到 IdM 用户组。成员管理者可以将用户或组添加到 IdM 用户组中,但不能更改组的属性。

先决条件

  • 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM
  • 您必须具有要添加为成员管理器的用户名以及您要管理的组的名称。

流程

  • 使用 ipa group-add-member-manager 命令,将用户作为成员管理者添加到 IdM 用户组。

    例如,要将用户 test 添加为 group_a 的成员管理者:

    $ ipa group-add-member-manager group_a --users=test
    Group name: group_a
    GID: 1133400009
    Membership managed by users: test
    -------------------------
    Number of members added 1
    -------------------------

    用户 test 现在可以管理 group_a 的成员。

  • 使用 ipa group-add-member-manager 命令,将组作为成员管理者添加到 IdM 用户组。

    例如,要将 group_admins 添加为 group_a 的成员管理者:

    $ ipa group-add-member-manager group_a --groups=group_admins
    Group name: group_a
    GID: 1133400009
    Membership managed by groups: group_admins
    Membership managed by users: test
    -------------------------
    Number of members added 1
    -------------------------

    group_admins 现在可以管理 group_a 的成员。

注意

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

验证步骤

  • 使用 ipa group-show 命令来验证用户和组是否已被添加为成员管理者。

    $ ipa group-show group_a
    Group name: group_a
    GID: 1133400009
    Membership managed by groups: group_admins
    Membership managed by users: test

其它资源

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

14.9. 使用 IdM CLI 查看组成员

按照以下流程,使用 IdM CLI 查看组成员。您可以查看直接和间接组成员。如需更多信息,请参阅 直接和间接组成员

流程:

  • 要列出组成员,请使用 ipa group-show group_name 命令。例如:

    $ ipa group-show group_a
      ...
      Member users: user_a
      Member groups: group_b
      Indirect Member users: user_b
    注意

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

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

按照以下流程,使用 IdM CLI 从用户组中删除成员。

先决条件

流程

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

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

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

    例如,要从名为 group_name 的组中删除 user1user2group1

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

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

按照以下流程,使用 IdM CLI ,以成员管理者身份从 IdM 用户组中删除用户或组。成员管理者可以从 IdM 用户组中删除用户或组,但不能更改组的属性。

先决条件

  • 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM
  • 您必须具有要删除的现有成员管理者用户或组的名称,以及它们要管理的组的名称。

流程

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

    例如,要删除作为 group_a 的成员管理者的用户 test

    $ ipa group-remove-member-manager group_a --users=test
    Group name: group_a
    GID: 1133400009
    Membership managed by groups: group_admins
    ---------------------------
    Number of members removed 1
    ---------------------------

    用户 test 不再管理 group_a 的成员。

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

    例如,要删除作为 group_a 的成员管理者的组 group_admins

    $ ipa group-remove-member-manager group_a --groups=group_admins
    Group name: group_a
    GID: 1133400009
    ---------------------------
    Number of members removed 1
    ---------------------------

    group_admins 不再管理 group_a 的成员。

注意

从用户组中删除成员管理者后,可能需要稍等片刻才能将更新传播到身份管理环境中的所有客户端。

验证步骤

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

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

其它资源

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

14.12. 为 IdM 中的本地和远程组启用组合并

组可以由域(如身份管理(IdM)或 Active Directory (AD))提供,或者它们在 etc/group 文件中的本地系统上进行管理。在大多数情况下,用户依赖于集中管理的存储。然而,在某些情况下,软件仍依赖于已知组中的成员资格来管理访问控制。

如果要从域控制器和本地 etc/group 文件管理组,您可以启用组合并。您可以配置 nsswitch.conf 文件,以检查本地文件和远程服务。如果组同时出现在这两个组中,则将合并成员用户列表并在单个响应中返回。

以下步骤描述了如何为用户启用组合并,idmuser

流程

  1. [SUCCESS=merge] 添加到 /etc/nsswitch.conf 文件中:

    # Allow initgroups to default to the setting for group.
    initgroups: sss [SUCCESS=merge] files
  2. idmuser 添加到 IdM:

    # ipa user-add idmuser
    First name: idm
    Last name: user
    ---------------------
    Added user "idmuser"
    ---------------------
    User login: idmuser
    First name: idm
    Last name: user
    Full name: idm user
    Display name: idm user
    Initials: tu
    Home directory: /home/idmuser
    GECOS: idm user
    Login shell: /bin/sh
    Principal name: idmuser@IPA.TEST
    Principal alias: idmuser@IPA.TEST
    Email address: idmuser@ipa.test
    UID: 19000024
    GID: 19000024
    Password: False
    Member of groups: ipausers
    Kerberos keys available: False
  3. 验证本地 音频 组的 GID。

    $ getent group audio
    ---------------------
    audio:x:63
  4. 将组 音频 添加到 IdM:

    $ ipa group-add audio --gid 63
    -------------------
    Added group "audio"
    -------------------
    Group name: audio
    GID: 63
    注意

    您在将 音频 组添加到 IdM 时定义的 GID 必须与本地 音频 组的 GID 相同。

  5. idmuser 用户添加到 IdM 音频 组中:

    $ ipa group-add-member audio --users=idmuser
    Group name: audio
    GID: 63
    Member users: idmuser
    -------------------------
    Number of members added 1
    -------------------------

验证

  1. idmuser 身份登录。
  2. 验证 idmuser 在其会话中是否有本地组:

    $ id idmuser
    uid=1867800003(idmuser) gid=1867800003(idmuser) groups=1867800003(idmuser),63(audio),10(wheel)

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

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

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

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

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

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

admins

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

editors

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

trust admins

具有管理 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. 使用 IdM Web UI 添加用户组

按照以下流程,使用 IdM Web UI 添加用户组。

先决条件

  • 已登陆到 IdM Web UI。

流程

  1. 点击 Identity → Groups,然后选择左侧栏中的 User Groups
  2. 单击 Add 开始添加组。
  3. 填写有关组的信息。有关用户组类型的更多信息,请参阅 IdM 中不同的组类型

    您可以为组指定自定义的 GID。如果您这样做,请小心以避免 ID 冲突。如果没有指定自定义的 GID,IdM 会自动从可用的 ID 范围内分配一个 GID。

    "Add user group"弹出窗口的屏幕截图,包含以下字段:Group name(为必填字段) - Description - Group Type - GID."Add"按钮位于底部。
  4. 单击 Add 确认。

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

按照以下流程,使用 IdM Web UI 删除用户组。请注意,删除组不会从 IdM 中删除组成员。

先决条件

  • 已登陆到 IdM Web UI。

流程

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

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

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

先决条件

  • 已登陆到 IdM Web UI。

流程

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

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

    "Add users into user group group_a"弹出窗口的屏幕截图,左侧有一列"Available users"登录,可供检查。您可以单击右箭头,将用户添加到右侧的"Prospective"列表中。
  7. 单击 Add 确认。

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

按照以下流程,使用 Web UI ,以成员管理者身份将用户或组添加到 IdM 用户组。成员管理者可以将用户或组添加到 IdM 用户组中,但不能更改组的属性。

先决条件

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

流程

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

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

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

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

验证步骤

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

    添加了组成员管理者

其它资源

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

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

按照以下流程,使用 IdM Web UI 查看组成员。您可以查看直接和间接组成员。如需更多信息,请参阅 直接和间接组成员

先决条件

  • 已登陆到 IdM Web UI。

流程

  1. 选择 Identity → Groups
  2. 在左侧栏中选择 User Groups
  3. 单击您要查看的组的名称。
  4. Direct MembershipIndirect Membership 之间切换。

    显示"Show Results"旁边的"Direct Membership"和"Indirect Membership"选项旁边的单选按钮的屏幕截图

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

按照以下流程,使用 IdM Web UI 从用户组中删除成员。

先决条件

  • 已登陆到 IdM Web UI。

流程

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

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

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

按照以下流程,使用 Web UI ,以成员管理者的身份从 IdM 用户组中删除用户或组。成员管理者可以从 IdM 用户组中删除用户或组,但不能更改组的属性。

先决条件

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

流程

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

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

从用户组中删除成员管理者后,可能需要稍等片刻才能将更新传播到身份管理环境中的所有客户端。

验证步骤

  • 验证用户或用户组是否已从用户或用户组的成员管理者列表中删除:

    删除了组成员管理者

其它资源

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

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

本节介绍使用 Ansible playbook 进行用户组管理。

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

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

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

本节包括以下主题:

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

表 16.1. 默认创建的用户组

组名称默认组成员

ipausers

所有 IdM 用户

admins

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

editors

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

trust admins

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

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

警告

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

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

16.2. 直接和间接组成员

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

例如,在下图中:

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

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

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

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

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

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

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible 库存储了 ipaadmin_password
  • IdM 中已存在您想要引用的用户。有关确保存在使用 Ansible 的用户的详细信息,请参阅使用 Ansible playbook 管理用户帐户

流程

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

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

    ---
    - name: Playbook to handle groups
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Create group ops with gid 1234
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: ops
          gidnumber: 1234
    
      - name: Create group sysops
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: sysops
          user:
          - idm_user
    
      - name: Create group appops
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: appops
    
      - name: Add group members sysops and appops to group ops
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: ops
          group:
          - sysops
          - appops
  3. 运行 playbook:

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

验证步骤

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

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

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. 显示关于 ops 的信息:

    ipaserver]$ ipa group-show ops
      Group name: ops
      GID: 1234
      Member groups: sysops, appops
      Indirect Member users: idm_user

    IdM 中已存在 appopssysops 组,后者包括 idm_user 用户。

其它资源

  • 请参阅 /usr/share/doc/ansible-freeipa/README-group.md Markdown 文件。

16.4. 使用 Ansible 在单个任务中添加多个 IdM 组

您可以使用 ansible-freeipa ipagroup 模块添加、修改和删除带有单个 Ansible 任务的多个身份管理(IdM)用户组。为此,请使用 ipagroup 模块的 groups 选项。

使用 groups 选项,您还可以指定多个仅应用到特定组的组变量。根据 name 变量定义此组,这是 groups 选项的唯一强制变量。

完成此流程,以确保在单个任务中存在 sysopsappops 组。将 sysops 组定义为非posix 组,并将 appops 组定义为外部组。

先决条件

  • 在控制节点上:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已安装 ansible-freeipa 软件包。
    • 您已在 ~/MyPlaybooks/ 目录中创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 您使用 RHEL 8.9 及更新的版本。
    • 您已将 ipaadmin_password 存储在 secret.yml Ansible vault 中。

流程

  1. 使用以下内容创建 Ansible playbook 文件 add-nonposix-and-external-groups.yml

    ---
    - name: Playbook to add nonposix and external groups
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
    
      tasks:
      - name: Add nonposix group sysops and external group appops
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          groups:
          - name: sysops
            nonposix: true
          - name: appops
            external: true
  2. 运行 playbook:

    $ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/add-nonposix-and-external-groups.yml

16.5. 使用 Ansible 启用 AD 用户管理 IdM

按照以下流程,使用 Ansible playbook 确保户 ID 覆盖在身份管理(IdM)组中存在。用户 ID 覆盖是您在使用 AD 建立信任视图中创建的 Active Directory (AD)用户覆盖。因此,运行 playbook (如 AD 用户)能够完全管理 IdM,而无需两个不同的帐户和密码。

先决条件

  • 您需要知道 IdM admin 密码。
  • 已使用 AD 安装信任
  • IdM 中已存在 AD 用户的用户 ID 覆盖。如果没有,使用 ipa idoverrideuser-add 'default trust view' ad_user@ad.example.com 命令创建它。
  • 您要将用户 ID 覆盖添加至其中的组在 IdM 中已存在
  • 您可以使用 IdM 的 4.8.7 版本或更高版本。要查看您在服务器上安装的 IdM 版本,请输入 ipa --version
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible 库存储了 ipaadmin_password

流程

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 使用以下内容创建 add-useridoverride-to-group.yml playbook:

    ---
    - name: Playbook to ensure presence of users in a group
      hosts: ipaserver
    
    
      - name: Ensure the ad_user@ad.example.com user ID override is a member of the admins group:
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: admins
          idoverrideuser:
          - ad_user@ad.example.com

    在示例中:

    • Secret123 是 IdM 管理员密码
    • 管理员 是您要添加 ad_user@ad.example.com ID 覆盖的 IdM POSIX 组的名称。此组成员具有全部的管理员特权。
    • ad_user@ad.example.com 是 AD 管理员的用户 ID 覆盖。用户存储在已建立信任的 AD 域中。
  3. 保存该文件。
  4. 运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory add-useridoverride-to-group.yml

其它资源

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

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

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible 库存储了 ipaadmin_password
  • 您必须具有要添加为成员管理器的用户名以及您要管理的组的名称。

流程

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

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

    ---
    - name: Playbook to handle membership management
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure user test is present for group_a
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: group_a
          membermanager_user: test
    
      - name: Ensure group_admins is present for group_a
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: group_a
          membermanager_group: group_admins
  3. 运行 playbook:

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

验证步骤

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

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

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. 显示 managergroup1 的信息:

    ipaserver]$ ipa group-show group_a
      Group name: group_a
      GID: 1133400009
      Membership managed by groups: group_admins
      Membership managed by users: test

其它资源

  • 请参阅 ipa host-add-member-manager --help
  • 请参阅 ipa man page。

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

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

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible 库存储了 ipaadmin_password
  • 您必须具有要删除的现有成员管理者用户或组的名称,以及它们要管理的组的名称。

流程

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

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

    ---
    - name: Playbook to handle membership management
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure member manager user and group members are absent for group_a
        ipagroup:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: group_a
          membermanager_user: test
          membermanager_group: group_admins
          action: member
          state: absent
  3. 运行 playbook:

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

验证步骤

您可以使用 ipa group-show 命令验证 group_a 组不包含 test 作为成员管理者,以及 group_adminsgroup_a 的成员管理者:

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

    $ ssh admin@server.idm.example.com
    Password:
    [admin@server /]$
  2. 显示 group_a 的信息:

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

其它资源

  • 请参阅 ipa host-remove-member-manager --help
  • 请参阅 ipa man page。

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

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

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

本章涵盖了以下主题:

17.1. 自动化组成员资格的好处

对用户使用自动成员资格,允许您:

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

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

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

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

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

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

17.2. 自动成员规则

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

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

  • 包含的条件

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

  • 排他条件

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

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

注意

IdM 在包含条件之前评估排他条件。在发生冲突时,排他条件优先于包含条件。

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

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

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

按照以下流程,使用 IdM CLI 添加自动成员规则。有关自动成员规则的详情,请参考 自动成员规则

添加自动成员规则后,您可以在 向自动成员规则中添加条件 中所述的流程为其添加条件 。

注意

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

先决条件

流程

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

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

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

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

验证步骤

17.4. 使用 IdM CLI 将条件添加到自动成员规则中

配置自动成员规则后,您可以使用 IdM CLI 向该自动成员规则添加条件。有关自动成员规则的详情,请参考 自动成员规则

先决条件

流程

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

    • 自动成员规则。这是目标规则名称。详情请查看 自动成员规则
    • 属性键。这将指定过滤器将应用到的条目属性。例如,用户的 uid
    • 分组类型。这将指定规则以用户组还是主机组为目标。要以用户组为目标,请输入 group。要以主机组为目标,请输入 hostgroup
    • 包含正则表达式排他正则表达式。它们将一个或多个条件指定为正则表达式。如果您只想指定一个条件,请在提示输入其它条件时按 Enter 键。

    例如,以下条件针对用户登录属性(uid)中带有任何值(.*)的所有用户。

    $ ipa automember-add-condition
    Automember Rule: user_group
    Attribute Key: uid
    Grouping Type: group
    [Inclusive Regex]: .*
    [Exclusive Regex]:
    ----------------------------------
    Added condition(s) to "user_group"
    ----------------------------------
      Automember Rule: user_group
      Inclusive Regex: uid=.*
    ----------------------------
    Number of conditions added 1
    ----------------------------

    再举一个例子,您可以使用自动成员资格规则以从活动目录(AD)中同步的所有 Windows 用户为目标。要达到此目的,请创建一个条件,该条件以其objectClass 属性中带有 ntUser 的用户为目标,该属性由所有 AD 用户共享:

    $ ipa automember-add-condition
    Automember Rule: ad_users
    Attribute Key: objectclass
    Grouping Type: group
    [Inclusive Regex]: ntUser
    [Exclusive Regex]:
    -------------------------------------
    Added condition(s) to "ad_users"
    -------------------------------------
      Automember Rule: ad_users
      Inclusive Regex: objectclass=ntUser
    ----------------------------
    Number of conditions added 1
    ----------------------------

验证步骤

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

按照以下流程,使用 IdM CLI 查看现有的自动成员规则。

先决条件

流程

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

    • 要以用户组为目标,请输入 group
    • 要以主机组为目标,请输入 hostgroup

      例如:

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

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

按照以下流程,使用 IdM CLI 删除自动成员规则。

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

先决条件

流程

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

    • 自动成员规则。这是您要删除的规则。
    • 分组规则。这将指定您要删除的规则是针对用户组的还是主机组的。输入 grouphostgroup

17.7. 使用 IdM CLI 从自动成员规则中删除条件

按照以下步流程,从自动成员规则中删除特定条件。

先决条件

流程

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

    • 自动成员规则。这是您要从中删除条件的规则的名称。
    • 属性键。这是目标条目属性。例如,用户的 uid
    • 分组类型。这将指定您要删除的条件是针对用户组的还是主机组的。输入 grouphostgroup
    • 包含正则表达式排他正则表达式。它们指定您要删除的条件。如果您只想指定一个条件,请在提示输入其它条件时按 Enter 键。

      例如:

    $ ipa automember-remove-condition
    Automember Rule: user_group
    Attribute Key: uid
    Grouping Type: group
    [Inclusive Regex]: .*
    [Exclusive Regex]:
    -----------------------------------
    Removed condition(s) from "user_group"
    -----------------------------------
      Automember Rule: user_group
    ------------------------------
    Number of conditions removed 1
    ------------------------------

17.8. 使用 IdM CLI 将自动成员规则应用到现有条目

自动成员规则在规则添加后,自动应用到所创建的用户和主机条目。它们不会追溯到在规则添加之前存在的条目。

要将自动成员规则应用到之前添加的条目,您必须手动重建自动成员资格。重建自动成员资格会重新评估所有现有的自动成员规则,并将其应用到所有用户或主机条目或特定的条目。

注意

重建自动成员资格 不会 从组中删除用户或主机条目,即使条目不再与组的包含条件匹配。要手动删除它们,请参阅 使用 IdM CLI 从用户组中删除成员使用 CLI 删除 IdM 主机组成员

先决条件

流程

  • 要重建自动成员资格,请输入 ipa automember-rebuild 命令。使用以下选项指定要定为目标的条目:

    • 要为所有用户重建自动成员资格,请使用 --type=group 选项:

      $ ipa automember-rebuild --type=group
      --------------------------------------------------------
      Automember rebuild task finished. Processed (9) entries.
      --------------------------------------------------------
    • 要为所有主机重建自动成员资格,请使用 --type=hostgroup 选项。
    • 要为指定的一个用户或多个用户重建自动成员资格,请使用 --users=target_user 选项:

      $ ipa automember-rebuild --users=target_user1 --users=target_user2
      --------------------------------------------------------
      Automember rebuild task finished. Processed (2) entries.
      --------------------------------------------------------
    • 要为指定一个主机或多个主机重建自动成员资格,请使用 --hosts=client.idm.example.com 选项。

17.9. 使用 IdM CLI 配置默认的自动成员组

当您配置默认的自动成员组时,与任何自动成员规则不匹配的新用户或主机条目将自动添加到此默认组中。

先决条件

流程

  1. 输入 ipa automember-default-group-set 命令,来配置默认的自动成员组。
  2. 在提示时,指定:

    • Default (fallback) Group,指定目标组名称。
    • Grouping Type,指定目标是用户组还是主机组。要以用户组为目标,请输入 group。要以主机组为目标,请输入 hostgroup

      例如:

      $ ipa automember-default-group-set
      Default (fallback) Group: default_user_group
      Grouping Type: group
      ---------------------------------------------------
      Set default (fallback) group for automember "default_user_group"
      ---------------------------------------------------
        Default (fallback) Group: cn=default_user_group,cn=groups,cn=accounts,dc=example,dc=com
    注意

    要删除当前的默认自动成员组,请输入 ipa automember-default-group-remove 命令。

验证步骤

  • 要验证组是否已正确设置,请输入 ipa automember-default-group-show 命令。命令显示当前的默认的自动成员组。例如:

    $ ipa automember-default-group-show
    Grouping Type: group
      Default (fallback) Group: cn=default_user_group,cn=groups,cn=accounts,dc=example,dc=com

第 18 章 使用 IdM Web UI 自动化组成员资格

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

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

本章涵盖了以下主题:

18.1. 自动化组成员资格的好处

对用户使用自动成员资格,允许您:

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

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

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

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

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

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

18.2. 自动成员规则

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

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

  • 包含的条件

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

  • 排他条件

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

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

注意

IdM 在包含条件之前评估排他条件。在发生冲突时,排他条件优先于包含条件。

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

现有条目 不会受到 新规则的影响。如果要更改现有条目,请参阅 使用 IdM Web UI 将自动成员规则应用到现有条目

18.3. 使用 IdM Web UI 添加自动成员规则

按照以下流程,使用 IdM Web UI 添加自动成员规则。有关自动成员规则的信息,请参考 自动成员规则

注意

现有条目 不会受到 新规则的影响。如果要更改现有条目,请参阅 使用 IdM Web UI 将自动成员规则应用到现有条目

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。
  • 新规则的目标组在 IdM 中存在。

流程

  1. 点击 Identity → Automember,然后选择 User group rulesHost group rules
  2. 点击 Add
  3. Automember rule 字段中,选择规则要应用的组。这是目标组名称。

    "Add Rule"窗口的截图显示自动成员规则的下拉字段,您可以在其中对之前定义的规则进行选择。
  4. 单击 Add 确认。
  5. 可选: 您可以使用在 使用 IdM Web UI 向自动成员规则中添加条件 中所述的步骤,向新规则添加条件。

18.4. 使用 IdM Web UI 向自动成员规则中添加条件

配置自动成员规则后,您可以使用 IdM Web UI 向该自动成员规则添加条件。有关自动成员规则的信息,请参考 自动成员规则

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。
  • 目标规则在 IdM 中存在。

流程

  1. 点击 Identity → Automember,然后选择 User group rulesHost group rules
  2. 点击您要向其添加条件的规则。
  3. InclusiveExclusive 部分中,点击 Add。

    User group 规则页面的屏幕截图,其中显示了 user_group 规则的属性。"Inclusive"部分有一个带有"Attribute"列的表,以及带有 Attribute "uid" 条目的"Expression"列,其表达式为 ".*"。底部是 Exclusive 部分,它也有一个带有 Attribute 列和 Expression 列的表,但它没有条目。
  4. Attribute 字段中,选择需要的属性,如 uid
  5. Expression 字段中,定义正则表达式。
  6. 点击 Add

    例如,以下条件以用户 ID(uid)属性中带有任何值(.*)的所有用户为目标。

    "Add Condition into automember"弹出窗口的截图显示了 Attribute(选择了uid)以及相应的"Expression"的字段(必需的,已输入 .*)的下拉菜单。"Add"按钮位于窗口的底部。

18.5. 使用 IdM Web UI 查看现有的自动成员规则和条件

按照以下流程,使用 IdM Web UI 查看现有的自动成员规则和条件。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。

流程

  1. 点击 Identity → Automember,然后选择 User group rulesHost group rules 来查看对应的自动成员规则。
  2. 可选:点击规则,来查看 InclusiveExclusive 部分中规则的条件。

    用户组规则"user_group"的详细信息的屏幕截图。 有一个"General"部分,其中显示了自动成员规则的名称和"描述"。 底部有一个"Inclusive"部分,其中有一个表,显示标有"Attribute"和"Expression"列的条目。 此表有一个条目,其中 uid 作为 Attribute,.* 作为 Expression。在底部有一个"Exclusive"部分,其中有一个表,其与"Inclusive"表结构相匹配,但没有条目。

18.6. 使用 IdM Web UI 删除自动成员规则

按照以下流程,使用 IdM Web UI 删除自动成员规则。

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

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。

流程

  1. 点击 Identity → Automember,然后选择 User group rulesHost group rules 来查看对应的自动成员规则。
  2. 选中您要删除的规则旁边的复选框。
  3. 单击 Delete

    "User group rules"页面截图,其中显示了一个自动成员规则表。"user_group"条目的复选框已选中,"Delete"按钮已高亮显示。
  4. 单击 Delete 确认。

18.7. 使用 IdM Web UI 从自动成员规则中删除条件

按照以下流程,使用 IdM Web UI 从自动成员规则中删除特定条件。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。

流程

  1. 点击 Identity → Automember,然后选择 User group rulesHost group rules 来查看对应的自动成员规则。
  2. 点击规则,来查看 InclusiveExclusive 部分中规则的条件。
  3. 选中您要删除的条件旁边的复选框。
  4. 单击 Delete

    显示"user_group"信息的"User group rule"页面的截图。"Inclusive"部分中条目的复选框已选中,而且与"Inclusive"部分相关的"Delete"按钮已高亮显示。
  5. 单击 Delete 确认。

18.8. 使用 IdM Web UI 将自动成员规则应用到现有条目

自动成员规则在规则添加后,自动应用到所创建的用户和主机条目。它们不会追溯到在规则添加之前存在的条目。

要将自动成员规则应用到之前添加的条目,您必须手动重建自动成员资格。重建自动成员资格会重新评估所有现有的自动成员规则,并将其应用到所有用户或主机条目或特定的条目。

注意

重建自动成员资格 不会 从组中删除用户或主机条目,即使条目不再与组的包含条件匹配。要手动删除它们,请参阅 使用 IdM Web UI 从用户组中删除成员在 IdM Web UI 中删除主机组成员

18.8.1. 为所有用户或主机重建自动成员资格

按照以下流程,为所有用户或主机条目重建自动成员资格。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。

流程

  1. 选择 IdentityUsersHosts
  2. 单击 ActionsRebuild auto membership

    高亮显示"Rebuild auto membership"是"Actions"下拉菜单中的一个选项的屏幕截图。

18.8.2. 只为单个用户或主机重建自动成员资格

按照以下流程,为特定用户或主机条目重建自动成员资格。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。

流程

  1. 选择 IdentityUsersHosts
  2. 单击所需的用户或主机名。
  3. 单击 ActionsRebuild auto membership

    在"Actions"下拉菜单内容中高亮显示许多其他选项中的"Rebuild auto membership"选项的屏幕截图。

18.9. 使用 IdM Web UI 配置默认的用户组

当您配置默认用户组时,不与任何自动成员规则匹配的新用户条目将自动添加到此默认组中。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。
  • 您要设置为默认的目标用户组在 IdM 中存在。

流程

  1. 点击 Identity → Automember,然后选择 User group rules
  2. Default user group 字段中,选择您要设置为默认用户组的组。

    设置默认用户组

18.10. 使用 IdM Web UI 配置默认的主机组

配置默认主机组时,不与任何自动成员规则匹配的新主机条目将自动添加到此默认组中。

先决条件

  • 已登陆到 IdM Web UI。
  • 您必须是 admins 组的成员。
  • 您要设置为默认的目标主机组在 IdM 中存在。

流程

  1. 点击 Identity → Automember,然后选择 Host group rules
  2. Default host group 字段中,选择您要设置为默认主机组的组。

    设置默认主机组

第 19 章 使用 Ansible 在 IdM 中自动化组成员资格

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

  • 根据员工的经理、地点、职位或任何其他属性将员工的用户条目分成不同的组。您可以通过在命令行中输入 ipa user-add --help 来列出所有属性。
  • 根据它们的类、位置或任何其他属性,将主机分成不同的组。您可以通过在命令行中输入 ipa host-add --help 来列出所有属性。
  • 将所有用户或全部主机添加到单个全局组。

您可以使用 Red Hat Ansible Engine 来自动管理身份管理(IdM)中的自动化组成员资格。

本节涵盖了以下主题:

19.1. 准备 Ansible 控制节点来管理 IdM

作为管理身份管理 (IdM) 的系统管理员,在使用 Red Hat Ansible Engine 时,最好执行以下操作:

  • 在您的主目录中,创建专用于 Ansible playbook 的子目录,如 ~/MyPlaybooks
  • 将示例 Ansible playbook 从 /usr/share/doc/ansible-freeipa/*/usr/share/doc/rhel-system-roles/* 目录以及它们的子目录复制到 ~/MyPlaybooks 目录中并进行调整。
  • 将清单文件包含在 ~/MyPlaybooks 目录中。

按照这种做法,您可以在一个地方找到所有 playbook,您可以在不调用 root 特权的情况下运行 playbook。

注意

您只需要受管主机上的 root 权限来执行 ipaserveripareplicaipaclientipabackupipasmartcard_serveripasmartcard_client ansible-freeipa 角色。这些角色需要具有目录和 dnf 软件包管理器的特权访问权限。

按照以下流程创建 ~/MyPlaybooks 目录并进行配置,以便您可以使用它来存储和运行 Ansible playbook。

先决条件

  • 您已在受管节点上安装了 IdM 服务器 server.idm.example.comreplica.idm.example.com
  • 您已配置了 DNS 和网络,以便您可以直接从控制节点登录到受管节点 server.idm.example.comreplica.idm.example.com
  • 您需要知道 IdM admin 密码。

流程

  1. 在主目录中为您的 Ansible 配置和 playbook 创建目录:

    $ mkdir ~/MyPlaybooks/
  2. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks
  3. 使用以下内容创建 ~/MyPlaybooks/ansible.cfg 文件:

    [defaults]
    inventory = /home/your_username/MyPlaybooks/inventory
    
    [privilege_escalation]
    become=True
  4. 使用以下内容创建 ~/MyPlaybooks/inventory 文件:

    [ipaserver]
    server.idm.example.com
    
    [ipareplicas]
    replica1.idm.example.com
    replica2.idm.example.com
    
    [ipacluster:children]
    ipaserver
    ipareplicas
    
    [ipacluster:vars]
    ipaadmin_password=SomeADMINpassword
    
    [ipaclients]
    ipaclient1.example.com
    ipaclient2.example.com
    
    [ipaclients:vars]
    ipaadmin_password=SomeADMINpassword

    此配置定义了两个主机组,即 euus,用于这些位置中的主机。此外,此配置定义了 ipaserver 主机组,它包含来自 euus 组的所有主机。

  5. [可选] 创建 SSH 公钥和私钥。要在测试环境中简化访问,请不要在私钥中设置密码:

    $ ssh-keygen
  6. 将 SSH 公钥复制到每个受管节点上的 IdM admin 帐户:

    $ ssh-copy-id admin@server.idm.example.com
    $ ssh-copy-id admin@replica.idm.example.com

    输入这些命令时,您必须输入 IdM admin 密码。

19.2. 使用 Ansible 确保 IdM 用户组的自动成员规则存在

以下流程描述了如何使用 Ansible playbook 确保身份管理(IdM)组的 自动成员 规则存在。在示例中,确保 testing_group 用户组的 自动成员 规则存在。

先决条件

  • 您需要知道 IdM admin 密码。
  • IdM 中存在 testing_group 用户组。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible 库存储了 ipaadmin_password

流程

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 复制位于 /usr/share/doc/ansible-freeipa/playbooks/automember/ 目录中的 automember-group-present.yml Ansible playbook 文件:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-group-present.yml automember-group-present-copy.yml
  3. 打开 automember-group-present-copy.yml 文件进行编辑。
  4. 通过在 ipaautomember 任务部分中设置以下变量来调整该文件:

    • ipaadmin_password 变量设置为 IdM admin 的密码。
    • name 变量设为 testing_group
    • automember_type 变量设为 group
    • 确保 state 变量设置为 present

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Automember group present example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure group automember rule admins is present
        ipaautomember:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: testing_group
          automember_type: group
          state: present
  5. 保存该文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory automember-group-present-copy.yml

其它资源

19.3. 使用 Ansible 确保指定的条件在 IdM 用户组自动成员规则中存在

以下流程描述了如何使用 Ansible playbook 来确保指定的条件在身份管理(IdM)组的 自动成员 规则中存在。在示例中,确保 testing_group 组的 自动成员 规则中存在与 UID 相关的条件。通过指定 .* 条件,您可以确保所有将来的 IdM 用户都自动成为 testing_group 的成员。

先决条件

  • 您需要知道 IdM admin 密码。
  • testing_group 用户组和自动成员用户组规则在 IdM 中存在。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible 库存储了 ipaadmin_password

流程

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 复制位于 /usr/share/doc/ansible-freeipa/playbooks/automember/ 目录中的 automember-hostgroup-rule-present.yml Ansible playbook 文件,并将它命名为 automember-usergroup-rule-present.yml

    $ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-hostgroup-rule-present.yml automember-usergroup-rule-present.yml
  3. 打开 automember-usergroup-rule-present.yml 文件进行编辑。
  4. 通过修改以下参数来调整文件:

    • 重命名 playbook 以便对应于您的用例,例如:自动成员用户组规则成员存在
    • 重命名任务以便对应于您的用例,例如:确保用户组的自动成员条件存在
    • ipaautomember 任务部分中设置以下变量:

      • ipaadmin_password 变量设置为 IdM admin 的密码。
      • name 变量设为 testing_group
      • automember_type 变量设为 group
      • 确保 state 变量设置为 present
      • 确保 action 变量设为 member
      • inclusive key 变量设为 UID
      • inclusive expression 变量设为 .*

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Automember user group rule member present
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure an automember condition for a user group is present
        ipaautomember:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: testing_group
          automember_type: group
          state: present
          action: member
          inclusive:
            - key: UID
              expression: .*
  5. 保存该文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory automember-usergroup-rule-present.yml

验证步骤

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

    $ kinit admin
  2. 例如,添加用户:

    $ ipa user-add user101 --first user --last 101
    -----------------------
    Added user "user101"
    -----------------------
      User login: user101
      First name: user
      Last name: 101
      ...
      Member of groups: ipausers, testing_group
      ...

其它资源

19.4. 使用 Ansible 确保条件在 IdM 用户组自动成员规则中不存在

以下流程描述了如何使用 Ansible playbook 确保条件在身份管理(IdM)组的 自动成员 规则中不存在。在示例中,条件在 自动成员 规则中不存在确保了应包含指定 首字母dp 的用户。将自动成员规则应用到 testing_group 组。通过应用条件,您可以确保将来首字母为 dp 的用户不会成为 testing_group 的成员。

先决条件

  • 您需要知道 IdM admin 密码。
  • testing_group 用户组和自动成员用户组规则在 IdM 中存在。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible 库存储了 ipaadmin_password

流程

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 复制位于 /usr/share/doc/ansible-freeipa/playbooks/automember/ 目录中的 automember-hostgroup-rule-absent.yml Ansible playbook 文件,并将其命名为 automember-usergroup-rule-absent.yml

    $ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-hostgroup-rule-absent.yml automember-usergroup-rule-absent.yml
  3. 打开 automember-usergroup-rule-absent.yml 文件进行编辑。
  4. 通过修改以下参数来调整文件:

    • 重命名 playbook 以对应于您的用例,例如:自动成员用户组规则成员不存在
    • 重命名任务以对应于您的用例,例如:确保用户组的自动成员条件不存在
    • ipaautomember 任务部分中设置以下变量:

      • ipaadmin_password 变量设置为 IdM admin 的密码。
      • name 变量设为 testing_group
      • automember_type 变量设为 group
      • 确保 state 变量设置为 absent
      • 确保 action 变量设为 member
      • inclusive key 变量设为 initials
      • inclusive expression 变量设为 dp

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Automember user group rule member absent
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure an automember condition for a user group is absent
        ipaautomember:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: testing_group
          automember_type: group
          state: absent
          action: member
          inclusive:
            - key: initials
              expression: dp
  5. 保存该文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory automember-usergroup-rule-absent.yml

验证步骤

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

    $ kinit admin
  2. 查看自动成员组:

    $ ipa automember-show --type=group testing_group
     Automember Rule: testing_group

输出中没有 Inclusive Regex: initials=dp 条目确认 testing_group 自动成员规则不包含指定的条件。

其它资源

19.5. 使用 Ansible 确保 IdM 用户组的自动成员规则不存在

以下流程描述了如何使用 Ansible playbook 确保身份管理(IdM)组的 自动成员 规则不存在。在示例中,确保 testing_group 组的 automember 规则不存在。

注意

删除自动成员规则也会删除与规则相关的所有条件。要从规则中只删除特定的条件,请参阅 使用 Ansible 确保条件在 IdM 用户组自动成员规则中不存在

先决条件

  • 您需要知道 IdM admin 密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible 库存储了 ipaadmin_password

流程

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 复制位于 /usr/share/doc/ansible-freeipa/playbooks/automember/ 目录中的 automember-group-absent.yml Ansible playbook 文件:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-group-absent.yml automember-group-absent-copy.yml
  3. 打开 automember-group-absent-copy.yml 文件进行编辑。
  4. 通过在 ipaautomember 任务部分中设置以下变量来调整该文件:

    • ipaadmin_password 变量设置为 IdM admin 的密码。
    • name 变量设为 testing_group
    • automember_type 变量设为 group
    • 确保 state 变量设置为 absent

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Automember group absent example
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure group automember rule admins is absent
        ipaautomember:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: testing_group
          automember_type: group
          state: absent
  5. 保存该文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory automember-group-absent.yml

其它资源

19.6. 使用 Ansible 确保 IdM 主机组自动成员规则中存在条件

按照以下流程,使用 Ansible 确保条件在 IdM 主机组自动成员规则中存在。示例描述了如何确保 FQDN.*.idm.example.com 的主机是 primary_dns_domain_hosts 主机组的成员,以及 FQDN.*.example.org 的主机不是 primary_dns_domain_hosts 主机组的成员。

先决条件

  • 您需要知道 IdM admin 密码。
  • IdM 中存在 primary_dns_domain_hosts 主机组和自动成员主机组规则。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible 库存储了 ipaadmin_password

流程

  1. 进入您的 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 复制位于 /usr/share/doc/ansible-freeipa/playbooks/automember/ 目录中的 automember-hostgroup-rule-present.yml Ansible playbook 文件:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-hostgroup-rule-present.yml automember-hostgroup-rule-present-copy.yml
  3. 打开 automember-hostgroup-rule-present-copy.yml 文件进行编辑。
  4. 通过在 ipaautomember 任务部分中设置以下变量来调整该文件:

    • ipaadmin_password 变量设置为 IdM admin 的密码。
    • name 变量设为 primary_dns_domain_hosts
    • automember_type 变量设为 hostgroup
    • 确保 state 变量设置为 present
    • 确保 action 变量设为 member
    • 确保 inclusive key 变量设为 fqdn
    • 将对应的 inclusive expression 变量设为 .*.idm.example.com
    • exclusive key 变量设为 fqdn
    • 将对应的 exclusive expression 变量设为 .*.example.org

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Automember user group rule member present
      hosts: ipaserver
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure an automember condition for a user group is present
        ipaautomember:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: primary_dns_domain_hosts
          automember_type: hostgroup
          state: present
          action: member
          inclusive:
            - key: fqdn
              expression: .*.idm.example.com
          exclusive:
            - key: fqdn
              expression: .*.example.org
  5. 保存该文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory automember-hostgroup-rule-present-copy.yml

其它资源

19.7. 其它资源

第 20 章 IdM 中的访问控制

访问控制定义了授予用户对其他用户或对象(如主机或服务)执行操作的权利或权限。身份管理(IdM)提供了多个访问控制区,以明确授予了哪些类型的访问权限,以及权限被授予给了谁。因此,IdM 会区分了对域中资源的访问控制和对 IdM 配置本身的访问控制。

本章概述了 IdM 用户对域内资源以及对 IdM 配置本身的不同的内部访问控制机制。

20.1. IdM 中的访问控制指令

身份管理(IdM)访问控制结构是基于 389 目录服务器访问控制的。通过使用访问控制指令(ACI),您可以授予或拒绝特定的 IdM 用户对其他条目的访问。所有条目(包括 IdM 用户)都存储在 LDAP 中。

ACI 有三个部分:

行动者
被授予权限可以做某事的实体。在 LDAP 访问控制模型中,您可以指定 ACI 规则只有在用户使用其可区分的名称(DN)绑定到目录时才应用。此类规格称为 绑定规则 :它会定义用户是谁,并可以选择要求对绑定尝试的其他限制,例如将尝试限制在一天的某段时间或某台机器上。
目标
允许行动者对其执行操作的条目。
操作类型
确定行动者可以执行哪种操作。最常见的操作有 add、delete、write、read 和 search。在 IdM 中,非管理员用户的读和搜索权限是有限制的,IdM Web UI 中的限制比 IdM CLI 中的限制更多。

当尝试 LDAP 操作时,会出现以下情况:

  1. IdM 客户端将用户凭证发送到 IdM 服务器,作为绑定 操作的一部分。
  2. IdM 服务器 DS 检查用户凭证。
  3. IdM 服务器 DS 检查用户帐户,以查看用户是否有执行所请求的操作的权限。

20.2. IdM 中的访问控制方法

身份管理(IdM)将访问控制方法分为以下类别:

自助服务规则
定义用户对其自己的个人条目可以执行哪些操作。此访问控制类型仅允许对用户条目中的特定属性具有写权限。用户可以更新特定属性的值,但不能添加或删除这些属性。
委派规则
通过使用委派规则,您可以允许特定的用户组对另一个用户组中特定的用户属性执行写(也就是编辑)操作。与自助服务规则类似,这种形式的访问控制规则被限制为编辑特定属性的值。它不能授予添加或删除整个条目或控制未指定属性的权限。
基于角色的访问控制

创建特殊的访问控制组,然后对 IdM 域中的所有实体类型授予更大的权力。可以授予角色编辑、添加和删除的权限,即可以授予它们对整个条目的完整控制,而不仅仅是对所选择的属性。

默认情况下,IdM 中已经提供了某些角色,如 Enrollment AdministratorIT Security SpecialistIT Specialist。您可以创建额外的角色来管理任何类型的条目,如主机、自动挂载配置、网络组、DNS 设置和 IdM 配置。

第 21 章 使用 CLI 管理 IdM 中的自助服务规则

了解身份管理(IdM)中的自助服务规则,以及如何在命令行界面(CLI)中创建和编辑自助服务访问规则。

21.1. IdM 中的自助服务访问控制

自助服务访问控制规则定义 Identity Management (IdM) 实体可以在其 IdM 目录服务器条目上执行的操作:例如,IdM 用户能够更新自己的密码。

这种控制方法允许经过身份验证的 IdM 实体编辑其 LDAP 条目中的特定属性,但不允许对整个条目的 adddelete 操作。

警告

使用自助服务访问控制规则时要小心:不当配置访问控制规则可能会意外地提升实体的特权。

21.2. 使用 CLI 创建自助服务规则

按照以下流程,使用命令行界面(CLI)在 IdM 中创建自助服务访问规则。

先决条件

流程

  • 要添加自助服务规则,请使用 ipa selfservice-add 命令,并指定以下两个选项:

    --permissions
    设置访问控制指令(ACI)授予的 权限。
    --attrs
    设置此 ACI 授予权限的属性的完整列表。

例如,要创建一个自助服务规则,允许用户修改其自己的名称详情:

$ ipa selfservice-add "Users can manage their own name details" --permissions=write --attrs=givenname --attrs=displayname --attrs=title --attrs=initials
-----------------------------------------------------------
Added selfservice "Users can manage their own name details"
-----------------------------------------------------------
    Self-service name: Users can manage their own name details
    Permissions: write
    Attributes: givenname, displayname, title, initials

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

21.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 命令显示所有自助服务规则。您刚才删除的规则应该消失了。

第 22 章 使用 IdM Web UI 管理自助服务规则

了解身份管理(IdM)中的自助服务规则,以及如何在 Web 界面(IdM Web UI)中创建和编辑自助服务访问规则。

22.1. IdM 中的自助服务访问控制

自助服务访问控制规则定义 Identity Management (IdM) 实体可以在其 IdM 目录服务器条目上执行的操作:例如,IdM 用户能够更新自己的密码。

这种控制方法允许经过身份验证的 IdM 实体编辑其 LDAP 条目中的特定属性,但不允许对整个条目的 adddelete 操作。

警告

使用自助服务访问控制规则时要小心:不当配置访问控制规则可能会意外地提升实体的特权。

22.2. 使用 IdM Web UI 创建自助服务规则

按照以下流程,使用 Web 界面(IdM Web UI)在 IdM 中创建自助服务访问规则。

先决条件

流程

  1. IPA Server 选项卡中,打开 Role-Based Access Control 子菜单,然后选择 Self Service Permissions
  2. 点自助服务访问规则列表右上角的 Add

    Adding a self-service rule

  3. 此时将打开 Add Self Service Permission 窗口。在 Self-service name 字段中输入新自助服务规则的名称。允许空格:

    Form for adding a self-service rule

  4. 选中您希望用户能够编辑的属性旁边的复选框。
  5. 可选 :如果您要对其提供访问权限的属性没有列出,您可以为它添加一个列表:

    1. 点击 Add 按钮。
    2. 在以下 Add Custom Attribute 窗口的 Attribute 文本字段中输入属性名称。
    3. 单击 OK 按钮来添加该属性
    4. 验证是否已选中新属性
  6. 单击表单底部的 Add 按钮,来保存新的自助服务规则。
    或者,您可以通过单击 Add and Edit 按钮来保存并继续编辑自助服务规则,或者通过单击 Add and Add another 按钮来保存并添加其他规则。

22.3. 使用 IdM Web UI 编辑自助服务规则

按照以下流程,使用 Web 界面(IdM Web UI)编辑 IdM 中的自助服务访问规则。

先决条件

流程

  1. IPA Server 选项卡中,打开 Role-Based Access Control 子菜单,然后选择 Self Service Permissions
  2. 单击您要修改的自助服务规则的名称。

    Editing an existing self-service rule

  3. 编辑页面只允许您编辑您要添加或删除自助服务规则的属性列表。选择或取消选择合适的复选框。
  4. 单击 Save 按钮,将更改保存到自助服务规则。

22.4. 使用 IdM Web UI 删除自助服务规则

按照以下流程,使用 Web 界面(IdM Web UI)删除 IdM 中的自助服务访问规则。

先决条件

流程

  1. IPA Server 选项卡中,打开 Role-Based Access Control 子菜单,然后选择 Self Service Permissions
  2. 选中您要删除的规则旁边的复选框,然后单击列表右侧的 Delete 按钮。

    Deleting a self-service rule

  3. 此时会打开一个对话框,单击 Delete 进行确认。

第 23 章 使用 Ansible playbook 管理 IdM 中的自助服务规则

本节介绍 Identity Management (IdM) 中的自助服务规则,并介绍如何使用 Ansible playbook 创建和编辑自助服务访问规则。自助服务访问控制规则允许 IdM 实体在其 IdM 目录服务器条目上执行指定操作。

23.1. IdM 中的自助服务访问控制

自助服务访问控制规则定义 Identity Management (IdM) 实体可以在其 IdM 目录服务器条目上执行的操作:例如,IdM 用户能够更新自己的密码。

这种控制方法允许经过身份验证的 IdM 实体编辑其 LDAP 条目中的特定属性,但不允许对整个条目的 adddelete 操作。

警告

使用自助服务访问控制规则时要小心:不当配置访问控制规则可能会意外地提升实体的特权。

23.2. 使用 Ansible 确保存在自助服务规则

以下流程描述了如何使用 Ansible playbook 定义自助服务规则并确保它们在身份管理 (IdM) 服务器上存在。在本例中,新的 Users can manage their own name details 规则会授予用户更改其 givennamedisplaynametitleinitials 属性的权限。例如,这允许他们更改其显示名称或缩写(如果想更改)。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible 库存储了 ipaadmin_password

流程

  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 变量设置为新自助服务规则的名称。
    • permission 变量设置为以逗号分隔的权限列表,以授予:readwrite
    • attribute 变量设置为用户可以自己管理的属性列表:givennamedisplaynametitleinitials

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Self-service present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure self-service rule "Users can manage their own name details" is present
        ipaselfservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "Users can manage their own name details"
          permission: read, write
          attribute:
          - givenname
          - displayname
          - title
          - initials
  5. 保存该文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-present-copy.yml

其它资源

  • 请参阅 IdM 中的自助服务访问控制
  • 请参阅 /usr/share/doc/ansible-freeipa/ 目录中的 README-selfservice.md 文件。
  • 请参阅 /usr/share/doc/ansible-freeipa/playbooks/selfservice 目录。

23.3. 使用 Ansible 确保缺少自助服务规则

以下流程描述了如何使用 Ansible playbook 来确保 IdM 配置中没有指定的自助服务规则。以下示例描述了如何确保 Users can manage their own name details 自助服务规则在 IdM 中不存在。这将确保用户无法更改自己的显示名称或缩写。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible 库存储了 ipaadmin_password

流程

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 创建位于 /usr/share/doc/ansible-freeipa/playbooks/selfservice/ 目录中的 selfservice-absent.yml 文件的副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/selfservice/selfservice-absent.yml selfservice-absent-copy.yml
  3. 打开 selfservice-absent-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 ipaselfservice 任务部分设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为自助服务规则的名称。
    • state 变量设置为 absent

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Self-service absent
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure self-service rule "Users can manage their own name details" is absent
        ipaselfservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "Users can manage their own name details"
          state: absent
  5. 保存该文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-absent-copy.yml

其它资源

  • 请参阅 IdM 中的自助服务访问控制
  • 请参阅 /usr/share/doc/ansible-freeipa/ 目录中的 README-selfservice.md 文件。
  • 请参阅 /usr/share/doc/ansible-freeipa/playbooks/selfservice 目录中的 playbook 示例。

23.4. 使用 Ansible 确保自助服务规则具有特定属性

以下流程描述了如何使用 Ansible playbook 确保现有自助服务规则具有特定的设置。在示例中,您可以确认 Users can manage their own name details 自助服务规则也具有 surname 成员属性。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible 库存储了 ipaadmin_password
  • Users can manage their own name details 自助服务规则存在于 IdM 中。

流程

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 创建位于 /usr/share/doc/ansible-freeipa/playbooks/selfservice/ 目录中的 selfservice-member-present.yml 文件的副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/selfservice/selfservice-member-present.yml selfservice-member-present-copy.yml
  3. 打开 selfservice-member-present-copy.yml Ansible playbook 文件以进行编辑。
  4. 通过在 ipaselfservice 任务部分设置以下变量来调整文件:

    • ipaadmin_password 变量设置为 IdM 管理员的密码。
    • name 变量设置为要修改的自助服务规则的名称。
    • attribute 变量设置为 surname
    • action 变量设置为 member

    这是当前示例修改的 Ansible playbook 文件:

    ---
    - name: Self-service member present
      hosts: ipaserver
    
      vars_files:
      - /home/user_name/MyPlaybooks/secret.yml
      tasks:
      - name: Ensure selfservice "Users can manage their own name details" member attribute surname is present
        ipaselfservice:
          ipaadmin_password: "{{ ipaadmin_password }}"
          name: "Users can manage their own name details"
          attribute:
          - surname
          action: member
  5. 保存该文件。
  6. 运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:

    $ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-member-present-copy.yml

其它资源

  • 请参阅 IdM 中的自助服务访问控制
  • 请参阅 /usr/share/doc/ansible-freeipa/ 目录中提供的 README-selfservice.md 文件。
  • 请参阅 /usr/share/doc/ansible-freeipa/playbooks/selfservice 目录中的 playbook 示例。

23.5. 使用 Ansible 确保自助服务规则没有特定属性

以下流程描述了如何使用 Ansible playbook 来确保自助服务规则没有特定的设置。您可以使用此 playbook 确保自助服务规则没有授予不需要的访问权限。在示例中,您可以确定 Users can manage their own name details 自助服务规则没有包括 givennamesurname成员属性。

先决条件

  • 您知道 IdM 管理员密码。
  • 您已配置了 Ansible 控制节点以满足以下要求:

    • 您使用 Ansible 版本 2.14 或更高版本。
    • 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
    • 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件
    • 示例假定 secret.yml Ansible 库存储了 ipaadmin_password
  • Users can manage their own name details 自助服务规则存在于 IdM 中。

流程

  1. 进入 ~/MyPlaybooks/ 目录:

    $ cd ~/MyPlaybooks/
  2. 创建位于 /usr/share/doc/ansible-freeipa/playbooks/selfservice/ 目录中的 selfservice-member-absent.yml 文件的副本:

    $ cp /usr/share/doc/ansible-freeipa/playbooks/selfservice/selfservice-member-absent.yml selfservice-member-absent-copy.yml
  3. 打开 selfservice-member-absent-copy.yml Ansible playbook 文件进行编辑。
  4. 通过在 ipaselfservice 任务部分设置以下变量来调整文件: