配置和管理身份管理
登录到 IdM 并管理服务、用户、主机、组、访问控制规则和证书。
摘要
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们感谢您对我们文档的反馈。让我们了解如何改进它。
通过 Jira 提交反馈(需要帐户)
- 登录到 Jira 网站。
- 单击顶部导航栏中的 Create。
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入对改进的建议。包括文档相关部分的链接。
- 点对话框底部的 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 资源。
流程
要在当前登录到本地系统的用户的用户名下登录,请使用 kinit 而不指定用户名。例如,如果您以 身份登录
<example_user>到本地系统:kinit Password for example_user@EXAMPLE.COM:
[example_user@server ~]$ kinit Password for example_user@EXAMPLE.COM: [example_user@server ~]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果本地用户的用户名与 IdM 中的任何用户条目都不匹配,则身份验证尝试失败:
kinit kinit: Client 'example_user@EXAMPLE.COM' not found in Kerberos database while getting initial credentials
[example_user@server ~]$ kinit kinit: Client 'example_user@EXAMPLE.COM' not found in Kerberos database while getting initial credentialsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用与本地用户名不对应的 Kerberos 主体,请将所需的用户名传递给
kinit工具。例如,要以admin用户身份登录:kinit admin Password for admin@EXAMPLE.COM:
[example_user@server ~]$ kinit admin Password for admin@EXAMPLE.COM: [example_user@server ~]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 kinit -kt KDB 请求用户票据:user@EXAMPLE.COM 被禁用。如需更多信息,请参阅 为什么 kinit -kt KDB: user@EXAMPLE.COM 在 CVE-2024-3183 后不再正常工作 解决方案。
验证
要验证登录是否成功,请使用 klist 工具显示缓存的 TGT。在以下示例中,缓存包含了
example_user主体的票,这意味着在这个特定的主机上,当前只允许example_user访问 IdM 服务:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.2. 销毁用户的活动的 Kerberos 票 复制链接链接已复制到粘贴板!
按照以下流程清除包含用户的活跃 Kerberos 票据的凭证缓存。
流程
销毁您的 Kerberos 票:
kdestroy
[example_user@server ~]$ kdestroyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Verificiation
检查 Kerberos 票据是否已销毁:
klist klist: Credentials cache keyring 'persistent:0:0' not found
[example_user@server ~]$ klist klist: Credentials cache keyring 'persistent:0:0' not foundCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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
# yum list installed krb5-workstation Installed Packages krb5-workstation.x86_64 1.16.1-19.el8 @BaseOSCopy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
将
/etc/krb5.conf文件从 IdM 服务器复制到外部系统。例如:scp /etc/krb5.conf root@externalsystem.example.com:/etc/krb5_ipa.conf
# scp /etc/krb5.conf root@externalsystem.example.com:/etc/krb5_ipa.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 警告不要覆盖外部系统上现有的
krb5.conf文件。在外部系统上,将终端会话设置为使用复制的 IdM Kerberos 配置文件:
export KRB5_CONFIG=/etc/krb5_ipa.conf
$ export KRB5_CONFIG=/etc/krb5_ipa.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow KRB5_CONFIG变量仅在退出之前暂时存在。要防止其丢失,请使用其他文件名导出变量。-
将 Kerberos 配置代码段从
/etc/krb5.conf.d/目录复制到外部系统。
外部系统上的用户现在可以使用 kinit 工具对 IdM 服务器进行身份验证。
第 2 章 查看、启动和停止身份管理服务 复制链接链接已复制到粘贴板!
身份管理(IdM)服务器是作为域控制器(DC)的 Red Hat Enterprise Linux 系统。很多不同的服务在 IdM 服务器上运行,最重要的是目录服务器、证书颁发机构(CA)、DNS 和 Kerberos。
2.1. IdM 服务 复制链接链接已复制到粘贴板!
有许多不同服务可以在 IdM 服务器和客户端上安装并运行。
IdM 服务器托管的服务列表
以下大多数服务并没严格要求安装到 IdM 服务器上。例如,您可以在 IdM 域外的外部服务器上安装诸如证书颁发机构(CA)或 DNS 服务器等服务。
- Kerberos
-
krb5kdc和kadmin服务
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 服务器。
如需更多信息,请参阅 规划 DNS 服务和主机名。
- Apache HTTP 服务器
-
httpd服务
Apache HTTP Web 服务器 提供了 IdM Web UI,还管理证书颁发机构和其他 IdM 服务之间的通信。
- Samba/ Winbind
-
SMB和winbind服务
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 之间的同步。
DNSSEC 在 IdM 中仅作为技术预览提供。
IdM 客户端托管的服务列表
-
系统安全服务守护进程 :
sssd服务
系统安全服务守护进程 (SSSD)是客户端应用程序,其管理用户身份验证和缓存凭据。缓存可让本地系统在 IdM 服务器不可用或客户端离线时能够继续正常的身份验证操作。
如需更多信息,请参阅了解 SSSD 及其优势。
-
Certmonger :
certmonger服务
certmonger 服务监控并更新客户端上的证书。它可以为系统上的服务请求新的证书。
如需更多信息,请参阅 使用 certmonger 为服务获取 IdM 证书。
2.2. 查看 IdM 服务的状态 复制链接链接已复制到粘贴板!
要查看 IdM 服务器上配置的 IdM 服务的状态,请运行 ipactl status 命令:
服务器上 ipactl status 命令的结果取决于您的 IdM 配置。例如,如果 IdM 部署不包含 DNS 服务器,则 named 服务不会出现在列表中。
您不能使用 IdM Web UI 来查看在特定 IdM 服务器上运行的所有 IdM 服务的状态。可以在 IdM Web UI 的 Identity → Services 选项卡中查看在不同服务器上运行的 Kerberized 服务。
2.3. 启动和停止整个身份管理服务器 复制链接链接已复制到粘贴板!
使用 ipa systemd 服务停止、启动或重启整个 IdM 服务器以及所有安装的服务。使用 systemctl 工具控制 ipa systemd 服务,确保所有服务都以适当的顺序停止、启动或重启。ipa systemd 服务也会在启动 IdM 服务之前升级 RHEL IdM 配置,并在管理 IdM 服务时使用合适的 SELinux 上下文。您不需要有一个有效的 Kerberos 票据来运行 systemctl ipa 命令。
ipa systemd 服务命令
启动整个 IdM 服务器:
systemctl start ipa
# systemctl start ipa
停止整个 IdM 服务器:
systemctl stop ipa
# systemctl stop ipa
重启整个 IdM 服务器:
systemctl restart ipa
# systemctl restart ipa
要显示组成 IdM 的所有服务的状态,请使用 ipactl 工具:
ipactl status
# ipactl status
-
不要直接使用
ipactl工具来启动、停止或重启 IdM 服务。使用systemctl ipa命令,其在可预测的环境中调用ipactl工具。 -
您不能使用 IdM Web UI 来执行
ipactl命令。
2.4. 启动和停止单个身份管理服务 复制链接链接已复制到粘贴板!
通常不建议手动更改 IdM 配置文件。然而,在某些情况下,需要管理员来执行特定服务的手动配置。在这种情况下,使用 systemctl 工具来停止、启动或重启单个 IdM 服务。
例如,自定义目录服务器行为,而不修改其他 IdM 服务后使用 systemctl:
systemctl restart dirsrv@REALM-NAME.service
# systemctl restart dirsrv@REALM-NAME.service
另外,在最初使用活动目录部署 IdM 信任时,请修改 /etc/sssd/sssd.conf 文件,并添加:
- 在远程服务器有高延迟的环境中调整超时配置选项的特定参数
- 调整活动目录站点关联性的特定参数
- 覆盖某些不是由全局 IdM 设置提供的配置选项
要应用您在 /etc/sssd/sssd.conf 文件中所做的更改:
systemctl restart sssd.service
# systemctl restart sssd.service
需要运行 systemctl restart sssd.service,因为系统安全服务守护进程(SSSD)不会自动重新读取或重新应用其配置。
请注意,对于影响 IdM 身份范围的更改,建议完全重启服务器。
要重启多个 IdM 域服务,请始终使用 systemctl restart ipa。由于与 IdM 服务器一起安装的服务之间的依赖关系,这些服务启动和停止的顺序至关重要。ipa systemd 服务确保服务以适当的顺序启动和停止。
有用的 systemctl 命令
要启动特定的 IdM 服务:
systemctl start name.service
# systemctl start name.service
要停止特定的 IdM 服务:
systemctl stop name.service
# systemctl stop name.service
要重启特定的 IdM 服务:
systemctl restart name.service
# systemctl restart name.service
要查看特定的 IdM 服务的状态:
systemctl status name.service
# systemctl status name.service
您不能使用 IdM Web UI 来启动或停止在 IdM 服务器上运行的单个服务。您只能使用 Web UI 来修改 Kerberized 服务的设置,方法是导航到 Identity → Services ,并选择服务。
2.5. 显示 IdM 软件版本的方法 复制链接链接已复制到粘贴板!
您可以使用以下命令显示 IdM 版本号:
- The IdM WebUI
-
ipa命令 -
rpm命令
- 通过 WebUI 显示版本
在 IdM Web UI 中,可以通过从右上角的用户名菜单中选择
About来显示软件版本。- 使用
ipa命令显示版本 在命令行中使用
ipa --version命令。ipa --version VERSION: 4.8.0, API_VERSION: 2.233
[root@server ~]# ipa --version VERSION: 4.8.0, API_VERSION: 2.233Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用
rpm命令显示版本 如果 IdM 服务工作不正常,您可以使用
rpm工具来确定当前安装的ipa-server软件包的版本号。rpm -q ipa-server ipa-server-4.8.0-11.module+el8.1.0+4247+9f3fd721.x86_64
[root@server ~]# rpm -q ipa-server ipa-server-4.8.0-11.module+el8.1.0+4247+9f3fd721.x86_64Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 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 [TOPIC | COMMAND | topics | commands]
-
[]- 方括号表示所有参数都是可选的,您可以只写ipa help,命令就可执行。 |- 管道符表示 或 。因此,您可以使用基本的ipa help命令指定TOPIC、COMMAND或topics、commands:-
topics— 您可以运行命令ipa help topics来显示 IPA 帮助涵盖的主题列表,如user、cert、server等。 -
TOPIC— 大写字母的 TOPIC 是一个变量。因此,您可以指定一个特定的主题,例如ipa help user。 -
commands— 您可以输入命令ipa help commands来显示 IPA 帮助所涵盖的命令列表,如user-add、ca-enable、server-show等。 -
COMMAND— 大写字母的 COMMAND 是一个变量。因此,您可以指定一个的命令,例如ipa help user-add。
-
3.3. 使用 IPA 帮助主题 复制链接链接已复制到粘贴板!
以下流程描述了如何在命令行中使用 IPA 帮助。
流程
- 打开一个终端,接到 IdM 服务器。
输入
ipa help topics来显示帮助所涵盖的主题列表。ipa help topics
$ ipa help topicsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 选择其中一个主题,按照以下模式创建一个命令:
ipa help [topic_name]。添加在上一步中列出的主题之一,而不是topic_name字符串。在这个示例中,我们使用以下主题:
useripa help user
$ ipa help userCopy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)如果 IPA 帮助输出太长,且您无法看到整个文本,请使用以下语法:
ipa help user | less
$ ipa help user | lessCopy to Clipboard Copied! Toggle word wrap Toggle overflow 然后您可以向下滚动,并阅读全部帮助。
IPA CLI 显示 user 主题的帮助页。阅读完概述后,您可以看到许多使用主题命令的模式示例。
3.4. 使用 IPA help 命令 复制链接链接已复制到粘贴板!
以下流程描述了如何在命令行上创建 IPA help 命令。
流程
- 打开一个终端,接到 IdM 服务器。
输入
ipa help commands来显示 help 所涵盖的命令列表。ipa help commands
$ ipa help commandsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 选择一个命令,并按照下模式创建一个help 命令:
ipa help <COMMAND>。添加在上一步中列出的其中一个命令,而不是<COMMAND>字符串。ipa help user-add
$ ipa help user-addCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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 命令,脚本将逐个询问您详细信息。
请注意,[options] - raw 和- structured 是互斥的,不应一起运行。
要更改现有对象,您需要定义对象,因此命令还包括一个对象:ipa user-mod USER_NAME [options]。
3.6. 如何为 IdM 工具提供值列表 复制链接链接已复制到粘贴板!
身份管理(IdM)将多值属性的值存储在列表中。
IdM 支持以下提供多值列表的方法:
在同一命令调用中多次使用相同的命令行参数:
ipa permission-add --right=read --permissions=write --permissions=delete ...
$ ipa permission-add --right=read --permissions=write --permissions=delete ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,您可以将列表用大括号括起来,在这种情况下,shell 执行展开:
ipa permission-add --right={read,write,delete} ...$ ipa permission-add --right={read,write,delete} ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
上面的示例显示了命令 permission-add,它为对象添加权限。示例中没有提及对象。需要添加要为其添加权限的对象,而不是 …。
当您从命令行更新此类多值属性时,IdM 会使用新列表完全覆盖以前的值列表。因此,当更新多值属性时,您必须指定整个新列表,而不只是您要添加的单个值。
例如,在以上命令中,权限列表包括读、写和删除。当您决定使用 permission-mod 命令更新列表时,您必须添加所有的值,否则未提及的值将被删除。
示例 1: -ipa permission-mod 命令更新所有以前添加的权限。
ipa permission-mod --right=read --right=write --right=delete ...
$ ipa permission-mod --right=read --right=write --right=delete ...
或者
ipa permission-mod --right={read,write,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 --right=write ...
或者
ipa permission-mod --right={read,write} ...
$ ipa permission-mod --right={read,write} ...
3.7. 如何在 IdM 工具中使用特殊字符 复制链接链接已复制到粘贴板!
将包含特殊字符的命令行参数传递给 ipa 命令时,请使用反斜杠(\)转义这些字符。例如,常见的特殊字符包括尖括号(< 和 >)、and(&)、星号(*)或竖线(|)。
例如,要转义星号(*):
ipa certprofile-show certificate_profile --out=exported\*profile.cfg
$ 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
$ ipa help commands | grep find
您可能需要检查特定的用户是否包含在 IdM 数据库中。然后您可以使用以下命令列出所有用户:
ipa user-find
$ ipa user-find
要列出其指定属性包含关键字的用户组:
ipa group-find keyword
$ ipa group-find keyword
例如,ipa group-find admin 命令列出了其名称或描述包含字符串 admin 的所有组:
在搜索用户组时,您还可以将搜索结果限制为包含特定用户的组:
ipa group-find --user=user_name
$ ipa group-find --user=user_name
搜索不包含特定用户的组:
ipa group-find --no-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 ...
$ ipa host-show server.example.com Host name: server.example.com Principal name: host/server.example.com@EXAMPLE.COM ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3. 调整搜索大小和时间限制 复制链接链接已复制到粘贴板!
有些查询(比如请求 IdM 用户列表)可能会返回大量条目。通过调优这些搜索操作,您可以在运行 ipa *-find 命令时提高服务器的总体性能,例如 ipa user-find,并在 Web UI 中显示相应的列表。
- 搜索大小限制
定义从客户端 CLI 发送发送到服务器的请求或从访问 IdM Web UI 的浏览器返回的最大条目数。
默认: 100 条目。
- 搜索时间限制
定义服务器等待搜索运行的最长时间(以秒为单位)。搜索达到这个限制后,服务器将停止搜索并返回该时间里发现的条目。
默认: 2 秒。
如果您将值设为 -1,IdM 在搜索时不会应用任何限制。
如果设置的搜索大小或时间限制太大,则可能会对服务器性能造成负面影响。
4.3.1. 在命令行中调整搜索大小和时间限制 复制链接链接已复制到粘贴板!
您可以在全局范围内调整搜索大小和时间限制,或调整特定条目以优化搜索性能和响应速度。
流程
要在 CLI 中显示当前搜索时间和大小限制,请使用
ipa config-show命令:ipa config-show Search time limit: 2 Search size limit: 100
$ ipa config-show Search time limit: 2 Search size limit: 100Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要为所有查询调整 全局 限制,请使用
ipa config-mod命令,并添加--searchrecordslimit和--searchtimelimit选项。例如:ipa config-mod --searchrecordslimit=500 --searchtimelimit=5
$ ipa config-mod --searchrecordslimit=500 --searchtimelimit=5Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要仅为特定查询 暂时 调整限制,请在命令中添加
--sizelimit或--timelimit选项。例如:ipa user-find --sizelimit=200 --timelimit=120
$ ipa user-find --sizelimit=200 --timelimit=120Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.2. 在 Web UI 中调整搜索大小和时间限制 复制链接链接已复制到粘贴板!
您可以使用 IdM Web UI 调整全局搜索大小和时间限制,以优化搜索性能和响应速度。
流程
- 登录到 IdM Web UI。
- 点 IPA Server。
- 在 IPA Server 选项卡中点 Configuration。
在搜索选项区域中设置所需的值。
默认值为:
- 搜索大小限制: 100 个条目
- 搜索时间限值: 2 秒
- 点页面顶部的 Save。
第 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
[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:
-
在地址栏中输入
about:config以访问 Mozilla Firefox 首选项菜单。 -
在搜索栏中输入
security.tls.enable_post_handshake_auth。 - 点击切换按钮将参数设为 true。
要解决 Chrome (其目前不支持 PHA)的问题,请禁用 TLS v1.3:
-
打开
/etc/httpd/conf.d/ssl.conf配置文件。 将
-TLSv1.3添加到SSLProtocol选项中:SSLProtocol all -TLSv1 -TLSv1.1 -TLSv1.3
SSLProtocol all -TLSv1 -TLSv1.1 -TLSv1.3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
httpd服务:service httpd restart
service httpd restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
请注意,IdM 管理 ssl.conf 文件,并可能会在软件包更新过程中覆盖其内容。在更新 IdM 软件包后验证自定义设置。
5.3. 访问 Web UI 复制链接链接已复制到粘贴板!
以下流程描述了首次使用密码登录到 IdM(身份管理)Web UI。
第一次登录后,您可以将 IdM 服务器配置为使用以下方式进行身份验证:
Kerberos 票据
详情请查看 身份管理中的 Kerberos 验证。
智能卡
详情请参阅 为智能卡身份验证配置 IdM 服务器。
一次性密码(OTP) - 可将其与密码和 Kerberos 身份验证结合使用。
详情请参阅 身份管理中的一次性密码(OTP)身份验证。
步骤
在浏览器地址栏中输入 IdM 服务器 URL。名称类似以下示例:
https://server.example.com
https://server.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您只需要将
server.example.com更改为您 IdM 服务器的 DNS 名称。这会在您的浏览器中打开 IdM Web UI 登录屏幕。
- 如果服务器没有响应或者登录屏幕没有打开,请检查您要连接的 IdM 服务器上的 DNS 设置。
如果您使用自签名证书,浏览器会发出警告。检查证书并接受安全例外以进行登录。
为避免安全异常,请安装由证书颁发机构签名的证书。
在 Web UI 登录屏幕上,输入您在 IdM 服务器安装过程中添加的管理员帐户凭证。
详情请参阅 安装身份管理服务器:具有集成的 DNS,集成的 CA。
如果您已经进入到 IdM 服务器中,您还可以输入您的个人帐户凭证。
- 单击 。
登录成功后,您可以开始配置 IdM 服务器。
第 6 章 在 Web UI 中登录到 IdM: 使用 Kerberos 票据 复制链接链接已复制到粘贴板!
了解更多有关如何配置您的环境,以启用 Kerberos 登录到 IdM Web UI ,并使用 Kerberos 身份验证访问 IdM。
先决条件
在网络环境中已安装 IdM 服务器
6.1. 身份管理中的 Kerberos 身份验证 复制链接链接已复制到粘贴板!
身份管理(IdM)使用 Kerberos 协议来支持单点登录。单点登录身份验证允许您仅提供一次正确的用户名和密码,然后您就可以访问身份管理服务了,而系统不再提示输入凭据。
如果正确配置了 DNS 和证书设置,IdM 服务器会在安装后立即提供 Kerberos 身份验证。详情请参阅 安装身份管理。
要在主机上使用 Kerberos 身份验证,请安装:
IdM 客户端:
详情请参阅 为身份管理客户端安装准备系统。
-
krb5conf软件包。
6.2. 使用 kinit 手动登录到 IdM 复制链接链接已复制到粘贴板!
按照以下流程,使用 kinit 工具手动向身份管理(IdM)环境进行身份验证。kinit 工具代表 IdM 用户获取并缓存 Kerberos 票据授予票(TGT)。
只有在初始 Kerberos TGT 被销毁了或者过期了,才使用这个流程。作为 IdM 用户,当登录到本地机器时,您也会自动登录到 IdM。这意味着登录后,您不需要使用 kinit 工具来访问 IdM 资源。
流程
要在当前登录到本地系统的用户的用户名下登录,请使用 kinit 而不指定用户名。例如,如果您以 身份登录
<example_user>到本地系统:kinit Password for example_user@EXAMPLE.COM:
[example_user@server ~]$ kinit Password for example_user@EXAMPLE.COM: [example_user@server ~]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果本地用户的用户名与 IdM 中的任何用户条目都不匹配,则身份验证尝试失败:
kinit kinit: Client 'example_user@EXAMPLE.COM' not found in Kerberos database while getting initial credentials
[example_user@server ~]$ kinit kinit: Client 'example_user@EXAMPLE.COM' not found in Kerberos database while getting initial credentialsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用与本地用户名不对应的 Kerberos 主体,请将所需的用户名传递给
kinit工具。例如,要以admin用户身份登录:kinit admin Password for admin@EXAMPLE.COM:
[example_user@server ~]$ kinit admin Password for admin@EXAMPLE.COM: [example_user@server ~]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 kinit -kt KDB 请求用户票据:user@EXAMPLE.COM 被禁用。如需更多信息,请参阅 为什么 kinit -kt KDB: user@EXAMPLE.COM 在 CVE-2024-3183 后不再正常工作 解决方案。
验证
要验证登录是否成功,请使用 klist 工具显示缓存的 TGT。在以下示例中,缓存包含了
example_user主体的票,这意味着在这个特定的主机上,当前只允许example_user访问 IdM 服务:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3. 为 Kerberos 身份验证配置浏览器 复制链接链接已复制到粘贴板!
要使用 Kerberos 票据启用身份验证,您可能需要更改浏览器配置。
以下步骤可帮助您支持 Kerberos 协商以访问 IdM 域。
每个浏览器支持 Kerberos 的方式不同,需要不同的配置。IdM Web UI 包含对以下浏览器的指南:
- Firefox
- Chrome
步骤
- 在 Web 浏览器中打开 IdM Web UI 登录对话框。
在 Web UI 登录屏幕上,单击浏览器配置的链接。
按照配置页面中的步骤进行操作。
在设置后,返回到 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 身份验证配置浏览器。
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
# yum list installed krb5-workstation Installed Packages krb5-workstation.x86_64 1.16.1-19.el8 @BaseOSCopy to Clipboard Copied! Toggle word wrap Toggle overflow
步骤
将
/etc/krb5.conf文件从 IdM 服务器复制到外部系统。例如:scp /etc/krb5.conf root@externalsystem.example.com:/etc/krb5_ipa.conf
# scp /etc/krb5.conf root@externalsystem.example.com:/etc/krb5_ipa.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 警告不要覆盖外部系统上现有的
krb5.conf文件。在外部系统上,将终端会话设置为使用复制的 IdM Kerberos 配置文件:
export KRB5_CONFIG=/etc/krb5_ipa.conf
$ export KRB5_CONFIG=/etc/krb5_ipa.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow KRB5_CONFIG变量仅在退出之前暂时存在。要防止其丢失,请使用其他文件名导出变量。-
将 Kerberos 配置代码段从
/etc/krb5.conf.d/目录复制到外部系统。 - 在外部系统上配置浏览器,如 为 Kerberos 身份验证配置浏览器 中所述。
外部系统上的用户现在可以使用 kinit 工具对 IdM 服务器进行身份验证。
6.6. 为活动目录用户启用 Web UI 登录 复制链接链接已复制到粘贴板!
要为活动目录用户启用 Web UI 登录,请在 Default Trust View 中为每个活动目录用户定义一个 ID 覆盖。
流程
为
ad_user@ad.example.com定义 ID 覆盖:ipa idoverrideuser-add 'Default Trust View' ad_user@ad.example.com
[admin@server ~]$ ipa idoverrideuser-add 'Default Trust View' ad_user@ad.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 7 章 使用一次性密码登录到身份管理 Web UI 复制链接链接已复制到粘贴板!
可以通过多种方法保护对 IdM Web UI 的访问。最基本的一种是密码身份验证。
要提高密码身份验证的安全性,您可以添加第二个步骤,并需要自动生成的一次性密码(OTP)。最常见的用法是将与用户帐户连接的密码与由硬件或软件令牌生成的有时间限制的一次性密码结合起来。
以下章节可帮助到您:
- 了解 OTP 身份验证在 IdM 中的工作方式。
- 在 IdM 服务器上配置 OTP 身份验证。
- 在 IdM 中为 OTP 验证配置 RADIUS 服务器。
- 创建 OTP 令牌,并将它们与您电话中的 FreeOTP 应用程序同步。
- 使用用户密码和一次性密码的组合,向 IdM Web UI 进行身份验证。
- 在 Web UI 中重新同步令牌.
- 以 OTP 或 RADIUS 用户身份检索 IdM 票据授予票据
- 为所有 LDAP 客户端强制使用 OTP
7.1. 身份管理中的一次性密码(OTP)身份验证 复制链接链接已复制到粘贴板!
一次性密码可为您的身份验证安全性增加一步。身份验证使用您的密码,并自动生成一次性密码。
要生成一次性密码,您可以使用硬件或软件令牌。IdM 同时支持软件和硬件令牌。
身份管理支持以下标准的 OTP 机制:
- 基于 HMAC 的一次性密码(HOTP)算法是基于计数器的。HMAC 代表哈希消息身份验证代码。
- 基于时间的一次性密码(TOTP)算法是 HOTP 的扩展,来支持基于时间的移动因子。
IdM 不支持活动目录信任用户的 OTP 登录。
7.2. 在 Web UI 中启用一次性密码 复制链接链接已复制到粘贴板!
身份管理(IdM)管理员可以为 IdM 用户全局或单独启用双因素身份验证(2FA)。用户在命令行上的常规密码后或者 Web UI 登录对话框中的专用字段后输入一次性密码(OTP),这些密码之间没有空格。
启用 2FA 与强制使用它不同。如果您使用基于 LDAP-binds 的登录,IdM 用户仍可以通过只输入密码来进行身份验证。但是,如果您使用基于 krb5 的登录,则强制使用 2FA。
请注意,有一个可以通过对所有 LDAP 客户端强制使用 OTP 来为 LDAP-binds 强制使用 2FA 的选项。如需更多信息,请参阅 强制所有 LDAP 客户端使用 OTP。
完成此流程,以使用 IdM Web UI 来为单独的 example.user IdM 用户启用 2FA。
先决条件
- 管理员特权
流程
-
使用 IdM
admin特权登录到 IdM Web UI。 打开 Identity → Users → Active users 选项卡。
- 选择 example.user 以打开用户设置。
- 在 User authentication types 中,选择 Two factor authentication (password + OTP) 。
- 点击 Save。
此时,已为 IdM 用户启用了 OTP 身份验证。
现在,您或 example.user 必须向 example.user 帐户分配一个新的令牌 ID。
7.3. 在 IdM 中为 OTP 验证配置 RADIUS 服务器 复制链接链接已复制到粘贴板!
要启用从专用一次性密码(OTP)解决方案到身份管理(IdM)原生 OTP 解决方案的大型部署的迁移,IdM 提供了为用户子集将 OTP 验证卸载到的第三方 RADIUS 服务器的方法。管理员创建了一组 RADIUS 代理,其中每个代理只能引用一个 RADIUS 服务器。如果需要寻址多个服务器,建议创建一个指向多个 RADIUS 服务器的虚拟 IP 解决方案。
例如,此类解决方案必须在 RHEL IdM 外部构建,例如,在 keepalived 守护进程的帮助下。然后,管理员将这些代理集中的一个分配给用户。只要用户分配了 RADIUS 代理集,IdM 就会绕过所有其他身份验证机制。
IdM 不为第三方系统中的令牌提供任何令牌管理或同步支持。
完成流程,来为 OTP 验证配置 RADIUS 服务器,并将用户添加到代理服务器:
先决条件
- radius 用户验证方法已启用。详情请参阅 在 Web UI 中启用一次性密码。
流程
添加一个 RADIUS 代理:
ipa radiusproxy-add proxy_name --secret secret
$ ipa radiusproxy-add proxy_name --secret secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令提示您插入所需的信息。
RADIUS 代理的配置需要在客户端和服务器之间使用通用 secret 来包装凭证。在
--secret参数中指定此 secret。向添加的代理分配用户:
ipa user-mod radiususer --radius=proxy_name
ipa user-mod radiususer --radius=proxy_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果需要,配置要发送到 RADIUS 的用户名:
ipa user-mod radiususer --radius-username=radius_user
ipa user-mod radiususer --radius-username=radius_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow
因此,RADIUS 代理服务器开始处理用户 OTP 身份验证。
当用户准备好迁移到 IdM 原生 OTP 系统时,您可以简单地删除用户的 RADIUS 代理分配。
7.3.1. 在较慢的网络中运行 RADIUS 服务器时更改 KDC 的超时值 复制链接链接已复制到粘贴板!
在某些情况下,比如在较慢的网络中运行 RADIUS 代理,身份管理(IdM) Kerberos 分发中心(KDC)会在 RADIUS 服务器响应前关闭连接,因为在等待用户输入令牌过程中连接超时。
要更改 KDC 的超时设置:
更改
/var/kerberos/krb5kdc/kdc.conf文件中[otp]部分中timeout参数的值。例如,要将超时设置为120秒:[otp] DEFAULT = { timeout = 120 ... }[otp] DEFAULT = { timeout = 120 ... }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
krb5kdc服务:systemctl restart krb5kdc
# systemctl restart krb5kdcCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4. 在 Web UI 中添加 OTP 令牌 复制链接链接已复制到粘贴板!
下面的部分帮助您将令牌添加到 IdM Web UI 和软件令牌生成器中。
先决条件
- IdM 服务器上的活跃用户帐户。
- 管理员已在 IdM Web UI 中为特定用户帐户启用了 OTP。
- 生成 OTP 令牌的软件设备,如 FreeOTP。
流程
- 使用您的用户名和密码登录到 IdM Web UI。
- 要在您的手机中创建令牌,请打开 Authentication → OTP Tokens 选项卡。
点击 Add。
在 Add OTP 令牌 对话框中,保留所有内容未填充,并点击 Add。
在这个阶段,IdM 服务器在服务器上创建一个带有默认参数的令牌,并打开一个带有 QR 代码的页面。
- 将 QR 代码复制到您的手机。
- 单击 OK 来关闭 QR 代码。
现在,您可以生成一次性密码,并使用它们登录到 IdM Web UI。
7.5. 使用一次性密码登录到 Web UI 复制链接链接已复制到粘贴板!
按照以下流程,第一次使用一次性密码(OTP)登录到 IdM Web UI。
先决条件
OTP 配置在身份管理服务器上为用于 OTP 身份验证的用户帐户启用 OTP 配置。管理员和用户本身也可以启用 OTP。
要启用 OTP 配置,请参阅 在 Web UI 中启用一次性密码。
- 生成 OTP 令牌的硬件或软件设备已配置。
流程
- 在身份管理登录屏幕中,输入您的用户名或 IdM 服务器管理员帐户的用户名。
- 为上面输入的用户名添加密码。
- 在您的设备上生成一次性密码。
- 在密码后输入一次性密码,而无需空格。
点登录。
如果身份验证失败,请同步 OTP 令牌。
如果您的 CA 使用自签名证书,则浏览器会发出警告。检查证书并接受安全例外以进行登录。
如果 IdM Web UI 未打开,请验证您的身份管理服务器的 DNS 配置。
登录成功后,IdM Web UI 将打开。
7.6. 使用 Web UI 同步 OTP 令牌 复制链接链接已复制到粘贴板!
如果使用 OTP 登录(一次性密码)失败,OTP 令牌不会被正确同步。
以下文本描述了令牌重新同步。
先决条件
- 生成 OTP 令牌的设备。
流程
在 IdM Web UI 登录屏幕上,单击 Sync OTP Token。
- 在登录屏幕中,输入您的用户名和身份管理密码。
- 生成一次性密码,并将它输入到 First OTP 字段中。
- 再生成一次性密码,并将它输入到 Second OTP 字段中。
可选:输入令牌 ID。
- 单击 Sync OTP Token。
同步成功后,您可以登录到 IdM 服务器。
7.7. 更改过期的密码 复制链接链接已复制到粘贴板!
身份管理的管理员可以强制在下次登录时更改密码。在这种情况下,在更改密码之前,您无法成功登录到 IdM Web UI。
您第一次登录到 Web UI 时可能会出现密码过期。
如果出现密码过期对话框,请按照流程中的说明操作。
先决条件
- IdM 服务器上的活跃帐户。
流程
- 在密码过期登录屏幕中,输入用户名。
- 为上面输入的用户名添加密码。
- 在 OTP 字段中,如果使用一次性密码身份验证,请生成一次性密码。
- 输入两次新密码进行验证。
单击 Reset Password。
成功更改密码后,会显示常见的登录对话框。使用新密码登录。
7.8. 以 OTP 或 RADIUS 用户身份检索 IdM 票据授予票据 复制链接链接已复制到粘贴板!
要以 OTP 用户身份检索 Kerberos 票据授予票据(TGT),请请求一个匿名 Kerberos 票据,并通过 Secure Tunneling (FAST)通道启用 Flexible Authentication,以便在 Kerberos 客户端和 Kerberos 分发中心(KDC)之间提供一个安全连接。
先决条件
- 您的 IdM 客户端和服务器使用 RHEL 8.7 或更高版本。
- 您的 IdM 客户端和服务器使用 SSSD 2.7.0 或更高版本。
- 您已为所需用户帐户启用了 OTP。
流程
运行以下命令来初始化凭证缓存:
kinit -n @IDM.EXAMPLE.COM -c FILE:armor.ccache
[root@client ~]# kinit -n @IDM.EXAMPLE.COM -c FILE:armor.ccacheCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令会创建
armor.ccache文件,每当您请求新的 Kerberos 票据时,您都需要指向该文件。运行以下命令来请求一个 Kerberos 票据:
kinit -T FILE:armor.ccache <username>@IDM.EXAMPLE.COM Enter your OTP Token Value.
[root@client ~]# kinit -T FILE:armor.ccache <username>@IDM.EXAMPLE.COM Enter your OTP Token Value.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示您的 Kerberos 票据信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pa_type = 141表示 OTP/RADIUS 身份验证。
7.9. 为所有 LDAP 客户端强制使用 OTP 复制链接链接已复制到粘贴板!
在 RHEL IdM 中,您可以使用配置的双因素(OTP)身份验证为用户帐户的 LDAP 服务器身份验证设置默认行为。如果强制使用 OTP,LDAP 客户端无法对已关联 OTP 令牌的用户使用单因素身份验证(密码)向 LDAP 服务器进行身份验证。RHEL IdM 已经使用带有没有任何数据的 OID 2.16.840.1.113730.3.8.10.7 的特殊 LDAP 控制,通过 Kerberos 后端强制实施此方法。
流程
要为所有 LDAP 客户端强制使用 OTP ,请使用以下命令:
ipa config-mod --addattr ipaconfigstring=EnforceLDAPOTP
$ ipa config-mod --addattr ipaconfigstring=EnforceLDAPOTPCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要对所有 LDAP 客户端更改回以前的 OTP 行为,请使用以下命令:
ipa config-mod --delattr ipaconfigstring=EnforceLDAPOTP
$ ipa config-mod --delattr ipaconfigstring=EnforceLDAPOTPCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 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 服务器之间的信息流。
使用 getent passwd在 IdM 客户端和服务器之间用于用户信息检索的信息流
-
getent命令会触发来自libc库的getpwnam调用。 -
libc库引用/etc/nsswitch.conf配置文件来检查哪个服务负责提供用户信息,并发现SSSD服务的条目。 -
libc库打开ss_sss模块。 -
nss_sss 模块检查内存映射缓存以获取用户信息。如果缓存中存在数据,则
ss_sss模块会返回它。 -
如果用户信息不在内存映射缓存中,则会将请求传递给 SSSD
sssd_nss响应程序进程。 -
SSSD 服务检查其缓存。如果缓存中存在数据并有效,
sssd_nss响应程序会从缓存中读取数据并将其返回到应用。 -
如果缓存中没有数据或数据已过期,
sssd_nss响应器将查询相应的后端进程并等待回复。SSSD 服务在 IdM 环境中使用 IPA 后端,通过sssd.conf配置文件中的id_provider=ipa启用。 -
sssd_be后端进程连接到 IdM 服务器,并从 IdM LDAP 目录服务器请求信息。 - IdM 服务器上的 SSSD 后端响应 IdM 客户端上的 SSSD 后端进程。
- 客户端上的 SSSD 后端将生成的数据存储在 SSSD 缓存中,并提醒已更新缓存的响应程序进程。
-
sssd_nss前端响应器进程从 SSSD 缓存检索信息。 -
sssd_nss响应器将用户信息发送到ss_sss响应者,以完成请求。 -
libc库将用户信息返回到请求它的应用程序。
8.2. 使用 SSSD 获取 AD 用户信息时的数据流 复制链接链接已复制到粘贴板!
如果您在 IdM 环境和活动目录(AD)域之间建立了跨林信任,则检索 IdM 客户端 AD 用户信息时,信息流与检索 IdM 用户信息时的信息流非常相似,只是多了一个联系 AD 用户数据库的步骤。
下图是当用户使用 getent passwd <user_name@ad.example.com> 命令请求 AD 用户信息时,简化了 信息流。这个图并没有包括使用 SSSD 检索 IdM 用户信息时的数据流中讨论的内部详细信息。它侧重于 IdM 客户端上的 SSSD 服务、IdM 服务器上的 SSSD 服务和 AD 域控制器上的 LDAP 数据库之间的通信。
在 IdM 客户端、IdM 服务器和 AD 域控制器之间检索 AD 用户信息的信息流
- IdM 客户端为 AD 用户信息查找其本地 SSSD 缓存。
-
如果 IdM 客户端没有用户信息,或者信息是 stale,客户端上的 SSSD 服务会联系 IdM 服务器上的
extdom_extop插件来执行 LDAP 扩展操作并请求信息。 - IdM 服务器上的 SSSD 服务在其本地缓存中查找 AD 用户信息。
- 如果 IdM 服务器在其 SSSD 缓存中没有用户信息,或者其信息为过时,它将执行 LDAP 搜索,以从 AD 域控制器请求用户信息。
- IdM 服务器上的 SSSD 服务从 AD 域控制器接收 AD 用户信息,并将其存储在其缓存中。
-
extdom_extop插件从 IdM 服务器上的 SSSD 服务接收信息,该服务完成 LDAP 扩展操作。 - IdM 客户端上的 SSSD 服务从 LDAP 扩展操作接收 AD 用户信息。
- IdM 客户端将 AD 用户信息存储在其 SSSD 缓存中,并将信息返回给请求它的应用程序。
8.3. 以 IdM 中的 SSSD 用户身份进行身份验证时的数据流 复制链接链接已复制到粘贴板!
以 IdM 服务器或客户端中的用户身份进行身份验证涉及以下组件:
-
启动身份验证请求的服务,如
sshd服务。 - 可插拔验证模块 (PAM) 库及其模块。
- SSSD 服务、其响应者和后端。
- 智能卡读取器(如果配置了智能卡验证)。
身份验证服务器:
- IdM 用户通过 IdM Kerberos 密钥分发中心 (KDC) 进行身份验证。
- Active Directory (AD) 用户通过 AD 域控制器 (DC) 进行身份验证。
下图是用户在尝试通过命令行上的 SSH 服务在本地登录主机期间需要进行身份验证时的简化信息流。
在身份验证尝试过程中,IdM 客户端和 AD 域控制器之间的信息流
-
使用
ssh命令尝试身份验证会触发libpam库。 libpam库引用/etc/pam.d/目录中与请求身份验证尝试的服务对应的 PAM 文件。在本例中,libpam 库涉及通过本地主机上的 SSH 服务进行身份验证,libpam库检查/etc/pam.d/system-auth配置文件并发现 SSSD PAM 的pam_sss.so条目:auth sufficient pam_sss.so
auth sufficient pam_sss.soCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
要确定哪些身份验证方法可用,
libpam库会打开pam_sss模块,并将SSS_PAM_PREAUTH请求发送到 SSSD 服务的sssd_pamPAM 响应者。 -
如果配置了智能卡验证,SSSD 服务会生成一个临时
p11_child进程,以检查智能卡并从中检索证书。 -
如果为用户配置了智能卡验证,
sssd_pam响应程序会尝试将智能卡中的证书与用户匹配。sssd_pam响应器还搜索用户所属的组,因为组成员身份可能会影响访问控制。 -
sssd_pam响应程序将SSS_PAM_PREAUTH请求发送到sssd_be后端响应程序,以查看服务器支持的身份验证方法,如密码或双因素身份验证。在 IdM 环境中,SSSD 服务使用 IPA 响应器,默认的身份验证方法是 Kerberos。在本例中,用户使用简单的 Kerberos 密码进行身份验证。 -
sssd_be响应器生成一个临时krb5_child进程。 -
krb5_child进程联系 IdM 服务器上的 KDC,并检查可用的身份验证方法。 KDC 响应请求:
-
krb5_child进程评估回复,并将结果发回到sssd_be后端进程。 -
sssd_be后端进程会收到结果。 -
sssd_pam响应器会收到结果。 -
pam_sss模块会收到结果。
-
-
如果为用户配置了密码身份验证,
pam_sss模块将提示用户输入其密码。如果配置了智能卡验证,pam_sss模块会提示用户输入其智能卡 PIN。 模块会发送带有用户名和密码的
SSS_PAM_AUTHENTICATE请求,该请求经过以下操作:-
sssd_pam响应器。 -
sssd_be后端进程。
-
-
sssd_be进程生成一个临时krb5_child进程来联系 KDC。 -
krb5_child进程尝试使用用户提供的用户名和密码从 KDC 检索 Kerberos Ticket Granting Ticket (TGT)。 -
krb5_child进程接收身份验证尝试的结果。 krb5_child进程:- 将 TGT 存储到凭据缓存中。
-
将身份验证结果返回到
sssd_be后端进程。
身份验证结果从
sssd_be进程传输到:-
sssd_pam响应器。 -
pam_sss模块。
-
-
pam_sss模块使用用户 TGT 的位置设置环境变量,以便其他应用可以引用它。
8.4. 缩小身份验证问题的范围 复制链接链接已复制到粘贴板!
要成功验证用户,您必须能够使用 SSSD 服务从存储用户信息的数据库检索用户信息。以下流程描述了测试身份验证流程的不同组件的步骤,以便您可以在用户无法登录时缩小身份验证问题的范围。
流程
验证 SSSD 服务及其进程是否正在运行。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证客户端可以通过 IP 地址联系用户数据库服务器。
ping <IP_address_of_the_database_server>
[user@client ~]$ ping <IP_address_of_the_database_server>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果此步骤失败,请检查您的网络和防火墙设置是否允许 IdM 客户端和服务器之间进行直接通信。请参阅使用和配置 firewalld。
验证客户端可以通过完全限定的主机名发现并联系 IdM LDAP 服务器(适用于 IdM 用户)或 AD 域控制器( AD 用户)。
dig -t SRV ldap._tcp.<domain>@<server_name> ping <fully_qualified_host_name_of_the_server>
[user@client ~]$ dig -t SRV ldap._tcp.<domain>@<server_name> [user@client ~]$ ping <fully_qualified_host_name_of_the_server>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果此步骤失败,请检查您的 Dynamic Name Service (DNS) 设置,包括
/etc/resolv.conf文件。请参阅配置 DNS 服务器顺序。注意默认情况下,SSSD 服务会尝试通过 DNS 服务 (SRV) 记录自动发现 LDAP 服务器和 AD DC。要将 SSSD 限制到特定的服务器,请使用以下选项在
sssd.conf配置文件中定义它们:-
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>
如果使用这些选项,请验证您可以联系它们中列出的服务器。
-
验证客户端是否可以对 LDAP 服务器进行身份验证,并使用
ldapsearch命令检索用户信息。如果您的 LDAP 服务器是 IdM 服务器,如
server.example.com,检索主机的 Kerberos 票据,并使用主机 Kerberos 主体进行身份验证数据库搜索:kinit -k 'host/client.example.com@EXAMPLE.COM' ldapsearch -LLL -Y GSSAPI -h server.example.com -b “dc=example,dc=com” uid=<idm_user>
[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=<idm_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您的 LDAP 服务器是 Active Directory (AD) 域控制器 (DC),如
server.ad.example.com,请检索主机的 Kerberos 票据,并使用主机 Kerberos 主体执行数据库搜索:kinit -k 'CLIENT$@AD.EXAMPLE.COM' ldapsearch -LLL -Y GSSAPI -h server.ad.example.com -b “dc=example,dc=com” sAMAccountname=<idm_user>
[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=<idm_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您的 LDAP 服务器是普通 LDAP 服务器,且您在
sssd.conf文件中设置了ldap_default_bind_dn和ldap_default_authtok选项,请验证是同一个ldap_default_bind_dn帐户:ldapsearch -xLLL -D "cn=ldap_default_bind_dn_value" -W -h ldapserver.example.com -b “dc=example,dc=com” uid=<idm_user>
[user@client ~]$ ldapsearch -xLLL -D "cn=ldap_default_bind_dn_value" -W -h ldapserver.example.com -b “dc=example,dc=com” uid=<idm_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果此步骤失败,请验证您的数据库设置是否允许您的主机搜索 LDAP 服务器。
由于 SSSD 服务使用 Kerberos 加密,因此请以无法登录的用户身份获得 Kerberos 票据。
如果您的 LDAP 服务器是 IdM 服务器:
kinit <idm_user>
[user@client ~]$ kinit <idm_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 LDAP 服务器数据库是 AD 服务器:
kinit <ad_user@AD.EXAMPLE.COM>
[user@client ~]$ kinit <ad_user@AD.EXAMPLE.COM>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果此步骤失败,请验证您的 Kerberos 服务器是否正常运行,所有服务器都已同步其时间,并且用户帐户未被锁定。
验证您是否可以检索有关命令行的用户信息。
getent passwd <idm_user> id <idm_user>
[user@client ~]$ getent passwd <idm_user> [user@client ~]$ id <idm_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果这一步失败,请验证客户端上的 SSSD 服务是否可以接收用户数据库的信息:
-
查看
/var/log/messages日志文件中的错误。 - 在 SSSD 服务中启用详细的日志记录,收集调试日志,并查看日志以确定问题的根源。
- 可选:创建一个红帽技术支持问题单,并提供您收集的故障排除信息。
-
查看
如果主机上具有
sudo权限,请使用sssctl工具来验证该用户是否被允许登录。sudo sssctl user-checks -a auth -s ssh <idm_user>
[user@client ~]$ sudo sssctl user-checks -a auth -s ssh <idm_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果这一步失败,请验证您的授权设置,如 PAM 配置、IdM HBAC 规则和 IdM RBAC 规则:
-
确保用户的 UID 等于或大于
UID_MIN,它在/etc/login.defs文件中定义。 -
查看
/var/log/secure和/var/log/messages日志文件中的授权错误。 - 在 SSSD 服务中启用详细的日志记录,收集调试日志,并查看日志以确定问题的根源。
- 可选:创建一个红帽技术支持问题单,并提供您收集的故障排除信息。
-
确保用户的 UID 等于或大于
8.5. SSSD 日志文件和日志记录级别 复制链接链接已复制到粘贴板!
每个 SSSD 服务都记录到 /var/log/sssd/ 目录中自己的日志文件。对于 example.com IdM 域中的 IdM 服务器,其日志文件可能类似这样:
SSSD 日志文件用途
krb5_child.log- Kerberos 身份验证中涉及的短期帮助程序进程的日志文件。
ldap_child.log- 与 LDAP 服务器通信的简短帮助程序进程的日志文件,涉及获取 Kerberos 票据。
sssd_<domain_name>.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 响应器进程的日志文件。
SSSD 日志记录级别
设置一个 debug 级别后,也会启用它以下的所有 debug 级别。例如,把 debug 级别设置为 6 后,也会启用 debug 级别 0 到 5。
| 级别 | 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 服务。
流程
-
在文本编辑器中打开
/etc/sssd/sssd.conf文件。 将
debug_level选项添加到文件的每个部分,并将 debug 级别设置为您选择的详细程度。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存并关闭
sssd.conf文件。 重启 SSSD 服务以加载新的配置设置。
systemctl restart sssd
[root@server ~]# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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命令将 debug 级别设置为您所需的详细程度。例如:sssctl debug-level 6
[root@server ~]# sssctl debug-level 6Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.8. 从 SSSD 服务收集调试日志,对 IdM 服务器的身份验证问题进行故障排除 复制链接链接已复制到粘贴板!
如果您在尝试以 IdM 用户身份对 IdM 服务器进行身份验证时遇到问题,请在服务器上的 SSSD 服务中启用详细的调试日志,并收集尝试检索用户信息的日志。
先决条件
-
您有
root权限。
流程
在 IdM 服务器上启用详细的 SSSD 调试日志。
sssctl debug-level 6
[root@server ~]# sssctl debug-level 6Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于遇到身份验证问题的用户,在 SSSD 缓存中使相关的对象无效,这样使您不会绕过 LDAP 服务器来从缓存的 SSSD 中获取信息。
sssctl cache-expire -u <idm_user>
[root@server ~]# sssctl cache-expire -u <idm_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过删除旧的 SSSD 日志来最大程度减少数据集的故障排除。
sssctl logs-remove
[root@server ~]# sssctl logs-removeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 尝试切换至遇到身份验证问题的用户,同时在尝试前后收集时间戳。这些时间戳进一步缩小了数据集的范围。
date; su <idm_user>; date Mon Mar 29 15:33:48 EDT 2021 su: user idm_user does not exist Mon Mar 29 15:33:49 EDT 2021
[root@server sssd]# date; su <idm_user>; date Mon Mar 29 15:33:48 EDT 2021 su: user idm_user does not exist Mon Mar 29 15:33:49 EDT 2021Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果您不想继续收集详细的 SSSD 日志,请降低 debug 级别。
sssctl debug-level 2
[root@server ~]# sssctl debug-level 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看 SSSD 日志,了解失败请求的信息。例如,检查
/var/log/sssd/sssd_example.com.log文件表明 SSSD 服务没有在cn=accounts,dc=example,dc=comLDAP 子树中找到用户。这可能表示用户不存在,或者存在于其他位置。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您无法确定导致身份验证问题的原因:
收集您最近生成的 SSSD 日志。
sssctl logs-fetch sssd-logs-Mar29.tar
[root@server ~]# sssctl logs-fetch sssd-logs-Mar29.tarCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个红帽技术支持问题单并提供:
-
SSSD 日志:
sssd-logs-Mar29.tar 与日志对应的请求的控制台输出,包括时间戳和用户名:
date; id <idm_user>; date Mon Mar 29 15:33:48 EDT 2021 id: 'idm_user': no such user Mon Mar 29 15:33:49 EDT 2021
[root@server sssd]# date; id <idm_user>; date Mon Mar 29 15:33:48 EDT 2021 id: 'idm_user': no such user Mon Mar 29 15:33:49 EDT 2021Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
SSSD 日志:
8.9. 从 SSSD 服务收集调试日志,以对 IdM 客户端的身份验证问题进行故障排除 复制链接链接已复制到粘贴板!
如果您在尝试以 IdM 用户身份向 IdM 客户端进行身份验证时遇到问题,请验证您是否可以检索有关 IdM 服务器的用户信息。如果您无法检索有关 IdM 服务器的用户信息,您将无法在 IdM 客户端(其从 IdM 服务器检索信息)上检索它。
确认身份验证问题不源自 IdM 服务器后,从 IdM 服务器和 IdM 客户端收集 SSSD 调试日志。
先决条件
- 用户仅在 IdM 客户端而不是 IdM 服务器中存在身份验证问题。
-
您需要 root 密码来运行
sssctl命令并重新启动 SSSD 服务。
流程
-
在客户端上: 在文本编辑器中打开
/etc/sssd/sssd.conf文件。 在客户端: 将
ipa_server选项添加到文件的[domain]部分,并使用其完全限定域名(FQDN)将其设置为 IdM 服务器。这可避免 IdM 客户端自动发现其他 IdM 服务器,从而将此测试限制为一个客户端和一个服务器。[domain/<idm_domain_name>] ipa_server = <idm_server_fqdn> ...
[domain/<idm_domain_name>] ipa_server = <idm_server_fqdn> ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
在客户端上: 保存并关闭
sssd.conf文件。 在客户端上:重启 SSSD 服务以加载配置更改。
systemctl restart sssd
[root@client ~]# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在服务器和客户端上:启用详细的 SSSD 调试日志。
sssctl debug-level 6
[root@server ~]# sssctl debug-level 6Copy to Clipboard Copied! Toggle word wrap Toggle overflow sssctl debug-level 6
[root@client ~]# sssctl debug-level 6Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在服务器和客户端中:为遇到身份验证问题的用户验证 SSSD 缓存中的对象,因此您不用绕过 LDAP 数据库,并检索 SSSD 信息已经缓存。
sssctl cache-expire -u <idm_user>
[root@server ~]# sssctl cache-expire -u <idm_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow sssctl cache-expire -u <idm_user>
[root@client ~]# sssctl cache-expire -u <idm_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在服务器和客户端上:通过删除旧的 SSSD 日志来最小化 dataset 故障排除。
sssctl logs-remove
[root@server ~]# sssctl logs-removeCopy to Clipboard Copied! Toggle word wrap Toggle overflow sssctl logs-remove
[root@server ~]# sssctl logs-removeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在客户端上:尝试切换至遇到身份验证问题的用户,同时在尝试前后收集时间戳。这些时间戳进一步缩小了数据集的范围。
date; su <idm_user>; date Mon Mar 29 16:20:13 EDT 2021 su: user idm_user does not exist Mon Mar 29 16:20:14 EDT 2021
[root@client sssd]# date; su <idm_user>; date Mon Mar 29 16:20:13 EDT 2021 su: user idm_user does not exist Mon Mar 29 16:20:14 EDT 2021Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 在服务器和客户端上: 如果您不想继续收集详细的 SSSD 日志,请降低 debug 级别。
sssctl debug-level 0
[root@server ~]# sssctl debug-level 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow sssctl debug-level 0
[root@client ~]# sssctl debug-level 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 服务器和客户端:查看 SSSD 日志以获取有关失败请求的信息。
- 在客户端日志中查看来自客户端的请求。
- 在服务器日志中查看来自客户端的请求。
- 在服务器日志中检查请求的结果。
- 查看客户端收到来自服务器的请求结果的结果。
如果您无法确定导致身份验证问题的原因:
收集您最近在 IdM 服务器和 IdM 客户端中生成的 SSSD 日志。根据主机名或角色标记它们。
sssctl logs-fetch sssd-logs-server-Mar29.tar
[root@server ~]# sssctl logs-fetch sssd-logs-server-Mar29.tarCopy to Clipboard Copied! Toggle word wrap Toggle overflow sssctl logs-fetch sssd-logs-client-Mar29.tar
[root@client ~]# sssctl logs-fetch sssd-logs-client-Mar29.tarCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个红帽技术支持问题单并提供:
SSSD 调试日志:
-
来自服务器的
sssd-logs-server-Mar29.tar。 -
来自客户端的
sssd-logs-client-Mar29.tar
-
来自服务器的
与日志对应的请求的控制台输出,包括时间戳和用户名:
date; su <idm_user>; date Mon Mar 29 16:20:13 EDT 2021 su: user idm_user does not exist Mon Mar 29 16:20:14 EDT 2021
[root@client sssd]# date; su <idm_user>; date Mon Mar 29 16:20:13 EDT 2021 su: user idm_user does not exist Mon Mar 29 16:20:14 EDT 2021Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.10. 跟踪 SSSD 后端中的客户端请求 复制链接链接已复制到粘贴板!
SSSD 异步处理请求,并将来自不同请求的消息添加到同一日志文件中。要在后端日志中跟踪客户端请求,您可以使用唯一的请求标识符 RID" <integer> 和客户端 ID '[CID # <integer>]。这些标识符有助于隔离日志,以遵循跨多个 SSSD 组件的日志文件从头到尾的请求。
先决条件
- 您已启用了调试日志,并且已从 IdM 客户端提交了请求。
-
您有
root特权。
流程
要查看 SSSD 日志文件,请使用
less工具打开日志文件/var/log/sssd/sssd_<domain_name>.log。例如:less /var/log/sssd/sssd_example.com.log
[root@server ~]# less /var/log/sssd/sssd_example.com.logCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看 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
(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: 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow SSSD 日志文件中的这个示例输出显示了两个不同的请求的唯一标识符
RID#3和RID#4。
但是,对 SSSD 客户端接口的单一客户端请求通常会在后端触发多个请求,因此客户端请求和后端中的请求之间不是 1 到 1 的对应关系。虽然后端中的多个请求有不同的 RID 号,但每个初始后端请求都包括唯一的客户端 ID,以便管理员可以跟踪单个客户端请求的多个 RID 号。
以下示例显示了一个客户端请求 [sssd.nss CID #1] 和多个在后端生成的请求,[RID#5] 到 [RID#13]:
8.11. 使用日志分析器工具跟踪客户端请求 复制链接链接已复制到粘贴板!
系统安全服务守护进程(SSSD)包含一个日志解析工具,可用于跟踪跨多个 SSSD 组件的日志文件从头到尾的请求。
8.11.1. 日志分析器工具如何工作 复制链接链接已复制到粘贴板!
通过使用日志解析工具,您可以跟踪跨多个 SSSD 组件日志文件的从头到尾的请求。您可以使用 sssctl analyze 命令运行分析器工具。
日志分析器工具可帮助您对 SSSD 中的 NSS 和 PAM 问题进行故障排除,并更容易查看 SSSD 调试日志。您只能提取和打印跨 SSSD 进程的与某些客户端请求相关的 SSSD 日志。
SSSD 会分别跟踪用户和组身份信息(id,getent)和用户身份验证(su、ssh)信息。NSS 响应器中的客户端 ID(CID)与 PAM 响应者中的 CID 无关,在分析 NSS 和 PAM 请求时会看到重叠数字。使用 sssctl analyze 命令和 --pam 选项来查看 PAM 请求。
从 SSSD 内存缓存返回的请求不会被记录,且不能被日志分析器工具跟踪。
8.11.2. 运行日志分析器工具 复制链接链接已复制到粘贴板!
使用日志分析器工具跟踪和分析 SSSD 中的客户端请求。
先决条件
-
您必须在
[$responder]部分和/etc/sssd/sssd.conf文件的[domain/$domain]部分中至少将debug_level设置为至少 7,以启用日志解析功能。 -
分析的日志必须来自使用
libtevent链 ID 支持构建的 SSSD 的兼容版本,它是 RHEL 8.5 及之后版本中的 SSSD。
流程
在
list模式下运行日志分析器工具以确定您在跟踪的请求的客户端 ID,添加-v选项以显示详细输出:sssctl analyze request list -v
# sssctl analyze request list -vCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此时会显示最近发出的对 SSSD 的客户端请求的详细列表。
注意如果分析 PAM 请求,请使用
--pam选项运行ssssctl analyze request list命令。使用
show [unique client ID]选项运行日志分析器工具,以显示与指定客户端 ID 号相关的日志:sssctl analyze request show 20
# sssctl analyze request show 20Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果需要,您可以针对日志文件运行日志分析器工具,例如:
sssctl analyze --logdir=/tmp/var/log/sssd request list
# sssctl analyze --logdir=/tmp/var/log/sssd request listCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.12. 其他资源 复制链接链接已复制到粘贴板!
- 常规 SSSD 调试 过程(红帽知识库)
第 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。
您可以在受管节点上运行 ansible-freeipa playbook,而无需调用 root 特权。例外包括使用 ipaserver、ipareplica、ipaclient、ipasmartcard_server、ipasmartcard_client 和 ipabackup ansible-freeipa 角色的 playbook。这些角色需要具有目录和 dnf 软件包管理器的特权访问权限。
Red Hat Enterprise Linux IdM 文档中的 playbook 假设以下 安全配置 :
-
IdM
admin是受管节点上的远程 Ansible 用户。 -
您可以将 IdM
admin密码加密存储在 Ansible vault 中。 - 您已将保护 Ansible vault 的密码放置在密码文件中。
- 您阻止除本地 ansible 用户以外的任何人访问 vault 密码文件。
- 您定期删除并重新创建 vault 密码文件。
还要考虑 其他安全配置。
9.1. 使用 Ansible playbook 准备控制节点和受管节点以管理 IdM 复制链接链接已复制到粘贴板!
按照以下流程创建 ~/MyPlaybooks 目录并进行配置,以便您可以使用它来存储和运行 Ansible playbook。
先决条件
- 您已在受管节点上安装了 IdM 服务器 server.idm.example.com 和 replica.idm.example.com。
- 您已配置了 DNS 和网络,以便您可以直接从控制节点登录到受管节点 server.idm.example.com 和 replica.idm.example.com。
-
您需要知道 IdM
admin密码。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks
$ cd ~/MyPlaybooksCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下内容创建 ~/MyPlaybooks/ansible.cfg 文件:
[defaults] inventory = /home/your_username/MyPlaybooks/inventory remote_user = admin
[defaults] inventory = /home/your_username/MyPlaybooks/inventory remote_user = adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下内容创建 ~/MyPlaybooks/inventory 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此配置定义了两个主机组,即 eu 和 us,用于这些位置中的主机。此外,此配置定义了 ipaserver 主机组,它包含来自 eu 和 us 组的所有主机。
可选:创建一个 SSH 公钥和私钥。要在测试环境中简化访问,请不要在私钥中设置密码:
ssh-keygen
$ ssh-keygenCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 SSH 公钥复制到每个受管节点上的 IdM
admin帐户:ssh-copy-id admin@server.idm.example.com ssh-copy-id admin@replica.idm.example.com
$ ssh-copy-id admin@server.idm.example.com $ ssh-copy-id admin@replica.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这些命令要求您输入 IdM
admin密码。创建一个包含 vault 密码的 password_file 文件:
redhat
redhatCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更改权限以修改文件:
chmod 0600 password_file
$ chmod 0600 password_fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个 secret.yml Ansible vault 来存储 IdM
admin密码:配置 password_file 以存储 vault 密码:
ansible-vault create --vault-password-file=password_file secret.yml
$ ansible-vault create --vault-password-file=password_file secret.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出现提示时,输入 secret.yml 文件的内容:
ipaadmin_password: Secret123
ipaadmin_password: Secret123Copy to Clipboard Copied! Toggle word wrap Toggle overflow
要在 playbook 中使用加密的 ipaadmin_password,您必须使用 vars_file 指令。例如,一个删除 IdM 用户的简单 playbook 如下所示:
在执行 playbook 时,通过添加 --vault-password-file=password_file 选项来指示 Ansible 使用 vault 密码来解密 ipaadmin_password。例如:
ansible-playbook -i inventory --vault-password-file=password_file del-user.yml
ansible-playbook -i inventory --vault-password-file=password_file del-user.yml
为安全起见,在每次会话结束时删除 vault 密码文件,并在每个新会话开始时重复步骤 6-8。
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 配置的信息。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
打开
/usr/share/doc/ansible-freeipa/playbooks/config/retrieve-config.ymlAnsible playbook 文件进行编辑:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过更改以下内容来调整文件:
- IdM 管理员的密码。
- 其他值(如有必要)。
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.2. 使用 Ansible playbook 配置 IdM CA 续订服务器 复制链接链接已复制到粘贴板!
在使用嵌入式证书颁发机构 (CA) 的 Identity Management (IdM) 部署中,CA 续订服务器维护并更新 IdM 系统证书。它确保了强大的 IdM 部署。
有关 IdM CA 续订服务器角色的详情,请参阅 使用 IdM CA 续订服务器。
以下流程描述了如何使用 Ansible playbook 配置 IdM CA 续订服务器。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
可选:识别当前 IdM CA 续订服务器:
ipa config-show | grep 'CA renewal' IPA CA renewal master: server.idm.example.com
$ ipa config-show | grep 'CA renewal' IPA CA renewal master: server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个清单文件,如
inventory.file,并在该文件中定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开
/usr/share/doc/ansible-freeipa/playbooks/config/set-ca-renewal-master-server.ymlAnsible playbook 文件进行编辑:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过更改调整文件:
-
ipaadmin_password变量设置的 IdM 管理员密码。 -
ca_renewal_master_server变量所设置的 CA 续订服务器的名称。
-
- 保存该文件。
运行 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
$ 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.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以验证 CA 续订服务器是否已更改:
以 IdM 管理员身份登录到
ipaserver:ssh admin@server.idm.example.com Password: [admin@server /]$
$ ssh admin@server.idm.example.com Password: [admin@server /]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请求 IdM CA 续订服务器的身份:
ipa config-show | grep ‘CA renewal’ IPA CA renewal master: carenewal.idm.example.com
$ ipa config-show | grep ‘CA renewal’ IPA CA renewal master: carenewal.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示 watchnewal.idm.example.com 服务器是新的 CA 续订服务器。
10.3. 使用 Ansible playbook 为 IdM 用户配置默认 shell 复制链接链接已复制到粘贴板!
shell 是一个接受和解释命令的程序。Red Hat Enterprise Linux (RHEL) 中提供了多个 shell,如 bash、sh、ksh、zsh、fish 等。Bash 或 /bin/bash 是大多数 Linux 系统中常用的 shell,它通常是 RHEL 上用户帐户的默认 shell。
以下流程描述了如何使用 Ansible playbook 将 sh (替代 shell)配置为 IdM 用户的默认 shell。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
-
可选: 使用
retrieve-config.ymlAnsible playbook 来识别 IdM 用户的当前 shell。详情请参阅 使用 Ansible playbook 检索 IdM 配置。 创建一个清单文件,如
inventory.file,并在该文件中定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开
/usr/share/doc/ansible-freeipa/playbooks/config/ensure-config-options-are-set.ymlAnsible playbook 文件进行编辑:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过更改以下内容来调整文件:
-
ipaadmin_password变量设置的 IdM 管理员密码。 -
IdM 用户的默认 shell 由
/bin/sh中的defaultshell设置。
-
- 保存该文件。
运行 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
$ 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.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以通过在 IdM 中启动一个新会话来验证默认用户 shell 是否已更改:
以 IdM 管理员身份登录到
ipaserver:ssh admin@server.idm.example.com Password: [admin@server /]$
$ ssh admin@server.idm.example.com Password: [admin@server /]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示当前的 shell:
echo "$SHELL" /bin/sh
[admin@server /]$ echo "$SHELL" /bin/shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 登录用户正在使用
shshell。
10.4. 使用 Ansible 为 IdM 域配置 NetBIOS 名称 复制链接链接已复制到粘贴板!
NetBIOS 名称用于 Microsoft Windows (SMB)类型的共享和消息。您可以使用 NetBIOS 名称来映射驱动器或连接到打印机。
按照以下流程,使用 Ansible playbook 为您的身份管理(IdM)域配置 NetBIOS 名称。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
ansible-freeipa软件包已安装。
假设
- 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储您的
ipaadmin_password,并且您知道 vault 文件密码。
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 创建一个 netbios-domain-name-present.yml Ansible playbook 文件。
在文件中添加以下内容:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory netbios-domain-name-present.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory netbios-domain-name-present.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出现提示时,提供 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.13 或更高版本。
-
ansible-freeipa软件包已安装。
假设
- 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储您的
ipaadmin_password,并且您知道 vault 文件密码。
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 创建一个 sids-for-users-and-groups-present.yml Ansible playbook 文件。
在文件中添加以下内容:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow enable_sid变量为将来的 IdM 用户和组启用 SID 生成。add_sids变量为现有的 IdM 用户和组生成 SID。注意使用
add_sids: true时,您还必须将enable_sid变量设置为true。- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory sids-for-users-and-groups-present.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory sids-for-users-and-groups-present.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出现提示时,提供 vault 文件密码。
第 11 章 使用命令行管理用户帐户 复制链接链接已复制到粘贴板!
IdM (身份管理)的用户生命周期中有几个阶段,包括如下:
- 创建用户帐户
- 激活 stage 用户帐户
- 保留用户帐户
- 删除 active、stage 或 preserved 用户帐户
- 恢复 preserved 用户帐户
11.1. 用户生命周期 复制链接链接已复制到粘贴板!
身份管理(IdM)支持三个用户帐户状态:
- Stage(预发布) 用户不允许进行身份验证。这是初始状态。活动用户所需的一些用户帐户属性无法在这里设置,例如组成员资格。
- Active(活跃)用户被允许进行身份验证。所有必需的用户帐户属性都需要在这个阶段设置。
- Preserved(保留)用户是以前活跃的用户,但现在被视为不活跃且无法通过 IdM 进行身份验证。保留用户保留他们作为活跃用户的大多数帐户属性,但它们不属于任何用户组。
您可以从 IdM 数据库永久删除用户条目。
删除的用户帐户无法恢复。当您删除用户帐户时,与帐户相关的所有信息都将永久丢失。
只能由具备管理员权限的用户(如默认的 admin 用户)才能创建新的管理员。如果您意外删除所有管理员帐户,目录管理器必须在 Directory 服务器中手动创建新管理员。
不要删除 admin 用户。由于 admin 是 IdM 所需的预定义用户,因此此操作会导致某些命令出现问题。如果要定义和使用另外的 admin 用户,请先至少为一个其他用户授予 admin 权限,然后再使用 ipa user-disable admin 命令来禁用预定义的 admin 用户。
不要将本地用户添加到 IdM。NSS(Name Service Switch)在解析本地用户和组前,总会先解析 IdM 的用户和组。这意味着 IdM 组成员资格不适用于本地用户。
11.2. 使用命令行添加用户 复制链接链接已复制到粘贴板!
您可以将用户添加为:
- Active - 可以被他们的用户主动使用的用户账户。
- stage - 无法使用这些帐户。如果要准备新用户帐户,请创建 stage 用户。当用户准备好使用其帐户时,您可以激活他们。
以下流程描述了使用 ipa user-add 命令将活跃用户添加到 IdM 服务器中。
同样,您可以使用 ipa stageuser-add 命令创建stage 用户帐户。
IdM 自动为新用户帐户分配一个唯一的用户 ID (UID)。您可以通过使用 ipa user-add 命令和 --uid=INT 选项来手动分配 UID ,但服务器不会验证 UID 号是否是唯一的。因此,多个用户条目可能有相同的 UID 号。如果您使用 --gidnumber=INT 选项手动将 GID 分配给用户帐户,则用户私有组群 ID (GID)可能会出现类似的问题。要检查是否有多个用户条目具有相同的 ID ,请输入 ipa user-find --uid=<uid> 或 ipa user-find --gidnumber=<gidnumber>。
红帽建议您不要有具有相同 UID 或 GID 的多个条目。如果您有具有重复 ID 的对象,则安全标识符(SID)不会被正确生成。SID 对于 IdM 和活动目录之间的信任以及使 Kerberos 身份验证正常工作至关重要。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 获得 Kerberos ticket。详情请参阅 使用 kinit 手动登录到 IdM。
步骤
- 打开终端并连接到 IdM 服务器。
添加用户登录、用户名、姓氏以及可选,您也可以添加其电子邮件地址。
ipa user-add user_login --first=first_name --last=last_name --email=email_address
$ ipa user-add user_login --first=first_name --last=last_name --email=email_addressCopy to Clipboard Copied! Toggle word wrap Toggle overflow IdM 支持可通过以下正则表达式描述的用户名:
[a-zA-Z0-9_.][a-zA-Z0-9_.-]{0,252}[a-zA-Z0-9_.$-]?[a-zA-Z0-9_.][a-zA-Z0-9_.-]{0,252}[a-zA-Z0-9_.$-]?Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意支持以末尾的美元符号($)结尾的用户名,以启用 Samba 3.x 机器支持。
如果您添加了包含大写字符的用户名,IdM 会在保存名称时自动将其转换为小写。因此,IdM 总是需要在登录时以小写形式输入用户名。此外,不能添加仅在字母大小写上不同的用户名,比如 user 和 User。
用户名的默认最大长度为 32 个字符。要更改它,请使用
ipa config-mod --maxusername命令。例如,要将最大用户名长度增加到 64 个字符:ipa config-mod --maxusername=64 Maximum username length: 64 ...
$ ipa config-mod --maxusername=64 Maximum username length: 64 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipa user-add命令包含许多参数。要全部列出它们,请使用 ipa help 命令:ipa help user-add
$ ipa help user-addCopy to Clipboard Copied! Toggle word wrap Toggle overflow 有关
ipa help命令的详情,请查看 什么是 IPA help 。
您可以通过列出所有 IdM 用户帐户来验证新用户帐户是否已成功创建:
ipa user-find
$ ipa user-find
此命令列出所有用户帐户及详细信息。
11.3. 使用命令行激活用户 复制链接链接已复制到粘贴板!
要通过将用户帐户从 stage 移到 active 来激活它,,请使用 ipa stageuser-activate 命令。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 获得 Kerberos ticket。详情请参阅 使用 kinit 手动登录到 IdM。
步骤
- 打开终端并连接到 IdM 服务器。
使用以下命令激活用户帐户:
ipa stageuser-activate user_login ------------------------- Stage user user_login activated ------------------------- ...
$ ipa stageuser-activate user_login ------------------------- Stage user user_login activated ------------------------- ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以通过列出所有 IdM 用户帐户来验证新用户帐户是否已成功创建:
ipa user-find
$ ipa user-find
此命令列出所有用户帐户及详细信息。
11.4. 使用命令行保留用户 复制链接链接已复制到粘贴板!
如果要删除用户帐户,您可以保留该帐户,保留这个选项以便以后恢复。要保留用户帐户,请使用 ipa user-del 或 ipa stageuser-del 命令的 --preserve 选项。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 获得 Kerberos ticket。详情请参阅 使用 kinit 手动登录到 IdM。
步骤
- 打开终端并连接到 IdM 服务器。
使用以下命令保留用户帐户:
ipa user-del --preserve user_login -------------------- Deleted user "user_login" --------------------
$ ipa user-del --preserve user_login -------------------- Deleted user "user_login" --------------------Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意尽管输出说用户帐户已删除,但实际上是被保留了。
11.5. 使用命令行删除用户 复制链接链接已复制到粘贴板!
IdM(身份管理)可让您永久删除用户。您可以删除:
-
活动用户,使用以下命令:
ipa user-del -
Stage 用户,使用以下命令:
ipa stageuser-del -
Preserved 用户,使用以下命令:
ipa user-del
删除多个用户时,请使用 --continue 选项强制命令继续,而不论出现什么错误。命令完成后,会将成功和失败的操作摘要输出到 stdout 标准输出流。
ipa user-del --continue user1 user2 user3
$ ipa user-del --continue user1 user2 user3
如果不使用 --continue,命令会继续删除用户,直到它遇到错误,然后它会停止并退出。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 获得 Kerberos ticket。详情请参阅 使用 kinit 手动登录到 IdM。
步骤
- 打开终端并连接到 IdM 服务器。
使用以下命令删除用户帐户:
ipa user-del user_login -------------------- Deleted user "user_login" --------------------
$ ipa user-del user_login -------------------- Deleted user "user_login" --------------------Copy to Clipboard Copied! Toggle word wrap Toggle overflow
用户帐户从 IdM 永久删除。
11.6. 使用命令行恢复用户 复制链接链接已复制到粘贴板!
您可以将 preserved 用户恢复成:
-
Active 用户:
ipa user-undel -
Stage 用户:
ipa user-stage
恢复用户帐户不会恢复帐户之前的所有属性。例如,用户的密码不会被恢复,必须再次设置。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 获得 Kerberos ticket。详情请参阅 使用 kinit 手动登录到 IdM。
步骤
- 打开终端并连接到 IdM 服务器。
使用以下命令激活用户帐户:
ipa user-undel user_login ------------------------------ Undeleted user account "user_login" ------------------------------
$ ipa user-undel user_login ------------------------------ Undeleted user account "user_login" ------------------------------Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,您可以将用户帐户恢复为暂存的用户帐户:
ipa user-stage user_login ------------------------------ Staged user account "user_login" ------------------------------
$ ipa user-stage user_login ------------------------------ Staged user account "user_login" ------------------------------Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以通过列出所有 IdM 用户帐户来验证新用户帐户是否已成功创建:
ipa user-find
$ ipa user-findCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令列出所有用户帐户及详细信息。
第 12 章 使用 IdM Web UI 管理用户帐户 复制链接链接已复制到粘贴板!
身份管理(IdM)提供 多个阶段,可帮助您管理各种用户生命周期情况:
- 创建用户帐户
在员工在公司开始职业生涯之前 创建 stage 用户帐户,并提前在员工出现在办公室并想要激活客户的那天前做好准备。
您可以省略此步骤,并直接创建活动的用户帐户。这个流程与创建 stage 用户帐户的流程类似。
- 激活用户帐户
- 激活帐户 在员工的第一个工作日。
- 禁用用户帐户
- 如果用户要休几个月的产假,您需要 临时禁用该帐户。
- 启用用户帐户
- 用户返回时,您需要 重新启用该帐户。
- 保留用户帐户
- 如果用户想要离开公司,您需要删除该 帐户,并有可能恢复它, 因为人们可以在一段时间后回到公司。
- 恢复用户帐户
- 两年后,用户回来了,您需要 恢复保留的帐户。
- 删除用户帐户
- 如果员工离职,在不需要备份的情况下删除该帐户。
12.1. 用户生命周期 复制链接链接已复制到粘贴板!
身份管理(IdM)支持三个用户帐户状态:
- Stage(预发布) 用户不允许进行身份验证。这是初始状态。活动用户所需的一些用户帐户属性无法在这里设置,例如组成员资格。
- Active(活跃)用户被允许进行身份验证。所有必需的用户帐户属性都需要在这个阶段设置。
- Preserved(保留)用户是以前活跃的用户,但现在被视为不活跃且无法通过 IdM 进行身份验证。保留用户保留他们作为活跃用户的大多数帐户属性,但它们不属于任何用户组。
您可以从 IdM 数据库永久删除用户条目。
删除的用户帐户无法恢复。当您删除用户帐户时,与帐户相关的所有信息都将永久丢失。
只能由具备管理员权限的用户(如默认的 admin 用户)才能创建新的管理员。如果您意外删除所有管理员帐户,目录管理器必须在 Directory 服务器中手动创建新管理员。
不要删除 admin 用户。由于 admin 是 IdM 所需的预定义用户,因此此操作会导致某些命令出现问题。如果要定义和使用另外的 admin 用户,请先至少为一个其他用户授予 admin 权限,然后再使用 ipa user-disable admin 命令来禁用预定义的 admin 用户。
不要将本地用户添加到 IdM。NSS(Name Service Switch)在解析本地用户和组前,总会先解析 IdM 的用户和组。这意味着 IdM 组成员资格不适用于本地用户。
12.2. 在 Web UI 中添加用户 复制链接链接已复制到粘贴板!
通常,您需要在新员工开始工作前创建新的用户帐户。这样的 stage 帐户无法访问,您需要之后将其激活。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
步骤
登录到 IdM Web UI。
详情请参阅 在 Web 浏览器中访问 IdM Web UI。
进到 Users → Stage Users 选项卡。
另外,您可以在 Users → Active users 中添加用户帐户,但是您无法将用户组添加到帐户中。
- 单击 + Add 图标。
可选:在 User login 字段中,添加一个登录名称。
如果您将其留空,IdM 服务器将以以下形式创建登录名称:名字的第一个字母和姓氏。整个登录名最多可有 32 个字符。
- 输入新用户的 名字和姓氏。
可选:在 GID 下拉菜单中,选择应包含用户的组。
请注意,这个选项只在 Active Users 对话框中可用。
- 可选:在 Password 和 Verify password 字段中,输入密码并确认,确保它们匹配。
- 点击 Add 按钮。
此时,您可以在 Stage Users 或 Active Users 表中看到用户帐户。
如果点击用户名,您可以编辑高级设置,如添加电话号码、地址或职业。
IdM 自动为新用户帐户分配一个唯一的用户 ID (UID)。您可以手动分配 UID,甚至修改现有的 UID。但是,服务器不会验证新的 UID 号是否是唯一的。因此,多个用户条目可能被分配了相同的 UID 号。如果您手动为用户帐户分配 GID,则用户专用组 ID (GID)可能会出现类似的问题。您可以在 IdM CLI 上使用 ipa user-find --uid=<uid> 或 ipa user-find --gidnumber=<gidnumber> 命令检查您是否有具有相同 ID 的多个用户条目。
您不应该有多个具有相同 UID 或 GID 的条目。如果您有具有重复 ID 的对象,则安全标识符(SID)不会被正确生成。SID 对于 IdM 和活动目录之间的信任以及使 Kerberos 身份验证正常工作至关重要。
12.3. 在 IdM Web UI 中 stage 用户 复制链接链接已复制到粘贴板!
在用户可以登录到 IdM 和添加到 IdM 组中之前,必须按照以下步骤激活 stage 用户帐户。
先决条件
- 管理 IdM Web UI 或用户管理员角色的管理员特权。
- IdM 中至少有一个 stage 用户帐户。
步骤
登录到 IdM Web UI。
详情请参阅 在 Web 浏览器中访问 IdM Web UI。
- 进到 Users → Stage users 选项卡。
- 点击您要激活的用户帐户的复选框。
- 单击 Activate 按钮。
- 在 Confirmation 对话框中点 OK。
如果激活成功,IdM Web UI 会显示绿色的确认信息,表示用户已激活,并且用户帐户已移到 Active 用户。帐户处于活动状态,用户才可以向 IdM 域和 IdM Web UI 进行身份验证。在第一次登录时,系统将提示用户更改密码。
另外,在这个阶段,您可以将活跃用户帐户添加到用户组中。
12.4. 在 Web UI 中禁用用户帐户 复制链接链接已复制到粘贴板!
您可以禁用活动的用户帐户。禁用用户帐户会停用该帐户,因此用户帐户无法进行身份验证,并使用 IdM 服务,如 Kerberos 或执行任何任务。
禁用的用户帐户仍然在 IdM 中存在,所有相关信息保持不变。与保留的用户帐户不同,禁用的用户帐户保持活动状态,并且可以是用户组的成员。
禁用用户帐户后,任何现有的连接都会保持有效,直到用户的 Kerberos TGT 和其他票据过期为止。票据过期后,用户将无法续订。
先决条件
- 管理 IdM Web UI 或用户管理员角色的管理员特权。
步骤
登录到 IdM Web UI。
详情请参阅 在 Web 浏览器中访问 IdM Web UI。
- 进到 Users → Active users 选项卡。
- 点击您要禁用的用户帐户的复选框。
- 点 Disable 按钮。
- 单击 Confirmation 对话框中的 OK 按钮。
如果帐户被成功禁用,您可以在 Active users 表中的 Status 列中验证这一点。
12.5. 在 Web UI 中启用用户帐户 复制链接链接已复制到粘贴板!
通过 IdM,您可以启用禁用的活动用户帐户。启用用户帐户可激活禁用的帐户。
先决条件
- 管理 IdM Web UI 或用户管理员角色的管理员特权。
步骤
- 登录到 IdM Web UI。
- 进到 Users → Active users 选项卡。
- 点击您要启用的用户帐户的复选框。
- 单击 Enable 按钮。
- 单击 Confirmation 对话框中的 OK 按钮。
如果更改成功,您可以在 Active Users 表中的 Status 列中验证这一点。
12.6. 在 IdM Web UI 中保留活动的用户 复制链接链接已复制到粘贴板!
保留用户帐户可让您从 Active users 选项卡中删除帐户,而将这些帐户保留在 IdM 中。
如果员工离开了公司,请保留用户帐户。如果您要禁用用户帐户数周或数月(例如,产假),请禁用该帐户。详情请参阅 在 Web UI 中禁用用户帐户。保留的帐户不是活动的,用户无法使用它们访问内部网络,但该帐户及所有数据都保留在数据库中。
您可以将恢复的帐户移回到活动模式。
先决条件
- 管理 IdM(身份管理)Web UI 或用户管理员角色的管理员特权。
步骤
登录到 IdM Web UI。
详情请参阅 在 Web 浏览器中访问 IdM Web UI。
- 进到 Users → Active users 选项卡。
- 点击您要保留的用户帐户的复选框。
- 点击 Delete 按钮。
- 在 Remove users 对话框中,单击 preserve。
- 点击 Delete 按钮。
用户帐户移到 Preserved users。
如果需要恢复保留的用户,请参阅 在 IdM Web UI 中恢复用户。
12.7. 在 IdM Web UI 中恢复用户 复制链接链接已复制到粘贴板!
IdM (身份管理)可让您将保留的用户帐户恢复到活动状态。您可以将保留的用户恢复成活跃用户或 stage 用户。
先决条件
- 管理 IdM Web UI 或用户管理员角色的管理员特权。
步骤
登录到 IdM Web UI。
详情请参阅 在 Web 浏览器中访问 IdM Web UI。
- 进到 Users → Preserved users 选项卡。
- 点击您要恢复的用户帐户的复选框。
- 点 Restore 按钮。
- 在 Confirmation 对话框中,单击 OK 按钮。
IdM Web UI 显示一条绿色确认信息,并将用户帐户移到 Active users 选项卡中。
12.8. 在 IdM Web UI 中删除用户 复制链接链接已复制到粘贴板!
删除用户是一种不可逆的操作,导致用户帐户被从 IdM 数据库中永久删除,包括组成员资格和密码。任何对用户的外部配置,如系统帐户和主目录,都不会被删除,但无法通过 IdM 来访问。
您可以删除:
Active 用户 - IdM Web UI 为您提供了选项:
- 临时保留用户。详情请查看 在 IdM Web UI 中保留活动用户。
- 永久删除用户。
- Stage 用户 - 您可以永久删除 stage 用户。
- Preserved 用户 - 您可以永久删除 preserved 用户。
以下流程描述了删除活动用户。同样,您可以删除用户帐户,在:
- Stage users 选项卡
- Preserved users 选项卡
先决条件
- 管理 IdM Web UI 或用户管理员角色的管理员特权。
步骤
登录到 IdM Web UI。
详情请参阅 在 Web 浏览器中访问 IdM Web UI。
进到 Users → Active users 选项卡。
或者,您可以在 Users → Stage users 或 Users → Preserved users 删除用户账户。
- 点 Delete 图标。
- 在 Remove users 对话框中,单击 删除。
- 点击 Delete 按钮。
用户帐户从 IdM 永久删除。
第 13 章 使用 Ansible playbook 管理用户帐户 复制链接链接已复制到粘贴板!
您可以使用 Ansible playbook 管理 IdM 中的用户。在显示了 用户生命周期 后,了解如何使用 Ansible playbook 来确保直接在 YML 文件中直接列出的用户存在或不存在。
13.1. 用户生命周期 复制链接链接已复制到粘贴板!
身份管理(IdM)支持三个用户帐户状态:
- Stage(预发布) 用户不允许进行身份验证。这是初始状态。活动用户所需的一些用户帐户属性无法在这里设置,例如组成员资格。
- Active(活跃)用户被允许进行身份验证。所有必需的用户帐户属性都需要在这个阶段设置。
- Preserved(保留)用户是以前活跃的用户,但现在被视为不活跃且无法通过 IdM 进行身份验证。保留用户保留他们作为活跃用户的大多数帐户属性,但它们不属于任何用户组。
您可以从 IdM 数据库永久删除用户条目。
删除的用户帐户无法恢复。当您删除用户帐户时,与帐户相关的所有信息都将永久丢失。
只能由具备管理员权限的用户(如默认的 admin 用户)才能创建新的管理员。如果您意外删除所有管理员帐户,目录管理器必须在 Directory 服务器中手动创建新管理员。
不要删除 admin 用户。由于 admin 是 IdM 所需的预定义用户,因此此操作会导致某些命令出现问题。如果要定义和使用另外的 admin 用户,请先至少为一个其他用户授予 admin 权限,然后再使用 ipa user-disable admin 命令来禁用预定义的 admin 用户。
不要将本地用户添加到 IdM。NSS(Name Service Switch)在解析本地用户和组前,总会先解析 IdM 的用户和组。这意味着 IdM 组成员资格不适用于本地用户。
13.2. 使用 Ansible playbook 确保存在一个 IdM 用户 复制链接链接已复制到粘贴板!
以下流程描述了确保使用 Ansible playbook 在 IdM 中存在用户。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
创建一个清单文件,如
inventory.file,并在该文件中定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个 Ansible playbook 文件,其中包含您要确保的 IdM 中存在的用户数据。要简化此步骤,您可以复制并修改
/usr/share/doc/ansible-freeipa/playbooks/user/add-user.yml文件中的示例。例如,创建名为 idm_user 的用户并添加 Password123 作为用户密码:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您必须使用以下选项来添加用户:
- name:登录名称
- first:名(字符串)
- last:姓(字符串)
有关可用用户选项的完整列表,请参阅
/usr/share/doc/ansible-freeipa/README-user.mdMarkdown 文件。注意如果您使用
update_password: on_create选项,Ansible 仅在创建用户时创建用户密码。如果已使用密码创建了用户,Ansible 不会生成新的密码。运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-IdM-user.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-IdM-user.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以使用
ipa user-show命令验证 IdM 中是否存在新用户帐户:以 admin 用户身份登录
ipaserver:ssh admin@server.idm.example.com Password: [admin@server /]$
$ ssh admin@server.idm.example.com Password: [admin@server /]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 admin 请求一个 Kerberos ticket:
kinit admin Password for admin@IDM.EXAMPLE.COM:
$ kinit admin Password for admin@IDM.EXAMPLE.COM:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请求有关 idm_user 的信息:
ipa user-show idm_user User login: idm_user First name: Alice Last name: Acme ....
$ ipa user-show idm_user User login: idm_user First name: Alice Last name: Acme ....Copy to Clipboard Copied! Toggle word wrap Toggle overflow
IdM 中存在名为 idm_user 的用户。
13.3. 使用 Ansible playbook 确保存在多个 IdM 用户 复制链接链接已复制到粘贴板!
以下流程描述了使用 Ansible playbook 确定在 IdM 中存在多个用户。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
创建一个清单文件,如
inventory.file,并在该文件中定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个 Ansible playbook 文件,其中包含您要在 IdM 中确保存在的用户的数据。要简化此步骤,您可以复制并修改
/usr/share/doc/ansible-freeipa/playbooks/user/ensure-users-present.yml文件中的示例。例如,要创建用户 idm_user_1、idm_user_2 和 idm_user_3,并添加 Password123 作为密码 idm_user_1 :Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您没有指定 update_password: on_create 选项,Ansible 每次运行 playbook 时都会重置用户密码:如果用户自上次运行 playbook 起更改了密码,Ansible 会重置密码。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-users.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-users.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以使用
ipa user-show命令验证用户帐户是否存在于 IdM 中:以管理员身份登录到
ipaserver:ssh administrator@server.idm.example.com Password: [admin@server /]$
$ ssh administrator@server.idm.example.com Password: [admin@server /]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示有关 idm_user_1 的信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
IdM 中存在名为 idm_user_1 的用户。
13.4. 使用 Ansible playbook 确保存在 JSON 文件中的多个 IdM 用户 复制链接链接已复制到粘贴板!
以下流程描述了如何使用 Ansible playbook 确保在 IdM 中存在多个用户。用户存储在 JSON 文件中。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
创建一个清单文件,如
inventory.file,并在该文件中定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
创建包含必要任务的 Ansible playbook 文件。使用您要确保存在的用户数据引用
JSON文件。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/README-user.md文件中的示例:
创建
users.json文件,并将 IdM 用户添加到其中。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/README-user.md文件中的示例。例如,要创建用户 idm_user_1、idm_user_2 和 idm_user_3,并添加 Password123 作为密码 idm_user_1 :Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 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
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-users-present-jsonfile.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以使用
ipa user-show命令验证 IdM 中是否存在用户帐户:以管理员身份登录到
ipaserver:ssh administrator@server.idm.example.com Password: [admin@server /]$
$ ssh administrator@server.idm.example.com Password: [admin@server /]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示有关 idm_user_1 的信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
IdM 中存在名为 idm_user_1 的用户。
13.5. 确保没有用户使用 Ansible playbook 复制链接链接已复制到粘贴板!
以下流程描述了如何使用 Ansible playbook 来确保 IdM 中没有特定用户。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
创建一个清单文件,如
inventory.file,并在该文件中定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 Ansible playbook 文件,使其包含没有 IdM 的用户。要简化此步骤,您可以复制并修改
/usr/share/doc/ansible-freeipa/playbooks/user/ensure-users-present.yml文件中的示例。例如,要删除用户 idm_user_1、idm_user_2 和 idm_user_3 :Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 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
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/delete-users.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以使用 ipa user-show 命令验证 IdM 中是否不存在用户帐户:
以管理员身份登录到
ipaserver:ssh administrator@server.idm.example.com Password: [admin@server /]$
$ ssh administrator@server.idm.example.com Password: [admin@server /]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请求有关 idm_user_1 的信息:
ipa user-show idm_user_1 ipa: ERROR: idm_user_1: user not found
$ ipa user-show idm_user_1 ipa: ERROR: idm_user_1: user not foundCopy to Clipboard Copied! Toggle word wrap Toggle overflow IdM 中不存在名为 idm_user_1 的用户。
第 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。
| 组名称 | 默认组成员 |
|---|---|
|
| 所有 IdM 用户 |
|
|
具有管理特权的用户,包括默认的 |
|
| 这是一个旧的组,不再具有任何特殊权限 |
|
| 具有管理 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 设置密码策略,该策略也适用于用户组 B 中的所有用户。
14.3. 使用 IdM CLI 添加用户组 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM CLI 添加用户组。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
流程
使用
ipa group-add group_name命令添加用户组。例如,要创建group_a:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
默认情况下,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 中删除组成员。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
流程
使用
ipa group-del group_name命令删除用户组。例如,要删除 group_a:ipa group-del group_a -------------------------- Deleted group "group_a" --------------------------
$ ipa group-del group_a -------------------------- Deleted group "group_a" --------------------------Copy to Clipboard Copied! Toggle word wrap Toggle overflow
14.6. 使用 IdM CLI 将成员添加到用户组中 复制链接链接已复制到粘贴板!
您可以将用户和用户组添加为用户组的成员。如需更多信息,请参阅 IdM 中不同的组类型 以及 直接和间接组成员。按照以下流程,使用 IdM CLI 将成员添加到用户组中。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
流程
使用
ipa group-add-member命令向用户组添加成员。使用这些选项指定成员类型:
-
--users添加 IdM 用户 -
--external添加一个存在于 IdM 域外的用户,格式为DOMAIN\user_name或user_name@domain -
--groups添加 IdM 用户组
例如,将 group_b 添加为 group_a 的成员:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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。
您可以通过两种方式执行此操作:
- 添加没有 UPG 的新用户,而不全局禁用私有组。请参阅 全局启用私有组时添加没有用户私有组的用户 。
- 对所有用户全局禁用 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
$ ipa user-add jsmith --first=John --last=Smith --noprivate --gid 10000Copy to Clipboard Copied! Toggle word wrap Toggle overflow
14.7.3. 对所有用户全局禁用用户私有组 复制链接链接已复制到粘贴板!
您可以在全局范围内禁用用户私有组(UPG)。这样可防止为所有新用户创建 UPG。现有用户不会受到这一更改的影响。
流程
获取管理员权限:
kinit admin
$ kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow IdM 使用目录服务器管理的条目插件来管理 UPG。列出插件的实例:
ipa-managed-entries --list
$ ipa-managed-entries --listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要确保 IdM 不创建 UPG,请禁用负责管理用户私有组的插件实例:
ipa-managed-entries -e "UPG Definition" disable Disabling Plugin
$ ipa-managed-entries -e "UPG Definition" disable Disabling PluginCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要在稍后重新启用
UPG Definition实例,请使用ipa-managed-entries -e "UPG Definition" enable命令。重新启动目录服务器来加载新配置。
sudo systemctl restart dirsrv.target
$ sudo systemctl restart dirsrv.targetCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要在禁用 UPG 后添加用户,您需要指定 GID。如需更多信息,请参阅在用户私有组群全局禁用时添加用户
验证
要检查 UPG 是否全局禁用,请再次使用 disable 命令:
ipa-managed-entries -e "UPG Definition" disable Plugin already disabled
$ ipa-managed-entries -e "UPG Definition" disable Plugin already disabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow
14.7.4. 当全局禁用用户私有组时添加用户 复制链接链接已复制到粘贴板!
当全局禁用用户私有组(UPG)时,IdM 不会自动为新用户分配 GID。要成功添加用户,您必须手动分配 GID,或使用自动成员规则来分配 GID。有关为何需要此功能的详情,请查看 没有用户私有组的用户。
先决条件
- 必须对所有用户全局禁用 UPG。如需更多信息,请参阅对所有用户全局禁用用户私有组
流程
要确保在禁用创建 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的成员管理者:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 用户
test现在可以管理group_a的成员。使用
ipa group-add-member-manager命令,将组作为成员管理者添加到 IdM 用户组。例如,要将
group_admins添加为group_a的成员管理者:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 组
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-show group_a Group name: group_a GID: 1133400009 Membership managed by groups: group_admins Membership managed by users: testCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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
$ ipa group-show group_a ... Member users: user_a Member groups: group_b Indirect Member users: user_bCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意间接成员列表不包括来自可信活动目录域的外部用户。活动目录信任用户对象在身份管理界面中不可见,因为它们在身份管理中不作为 LDAP 对象存在。
14.10. 使用 IdM CLI 从用户组中删除成员 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM CLI 从用户组中删除成员。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
流程
-
可选: 使用
ipa group-show命令确认组是否包含您要删除的成员。 使用
ipa group-remove-member命令从用户组中删除成员。使用这些选项来指定要删除的成员:
-
--users删除 IdM 用户 -
--external删除存在于 IdM 域外的用户,格式为DOMAIN\user_name或user_name@domain -
--groups删除 IdM 用户组
例如,要从名为 group_name 的组中删除 user1、user2 和 group1:
ipa group-remove-member group_name --users=user1 --users=user2 --groups=group1
$ ipa group-remove-member group_name --users=user1 --users=user2 --groups=group1Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
14.11. 使用 IdM CLI 从 IdM 用户组中删除作为成员管理者的用户或组 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM CLI ,以成员管理者身份从 IdM 用户组中删除用户或组。成员管理者可以从 IdM 用户组中删除用户或组,但不能更改组的属性。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
- 您必须具有要删除的现有成员管理者用户或组的名称,以及它们要管理的组的名称。
流程
使用
ipa group-remove-member-manager命令,删除作为 IdM 用户组的成员管理者的用户。例如,要删除作为
group_a的成员管理者的用户test:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 用户
test不再管理group_a的成员。使用
ipa group-remove-member-manager命令,删除作为 IdM 用户组的成员管理者的组。例如,要删除作为
group_a的成员管理者的组group_admins:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 组
group_admins不再管理group_a的成员。
从用户组中删除成员管理者后,可能需要稍等片刻才能将更新传播到身份管理环境中的所有客户端。
验证
使用
ipa group-show命令来验证用户和组是否已作为成员管理者被删除。ipa group-show group_a Group name: group_a GID: 1133400009
$ ipa group-show group_a Group name: group_a GID: 1133400009Copy to Clipboard Copied! Toggle word wrap Toggle overflow
14.12. 为 IdM 中的本地和远程组启用组合并 复制链接链接已复制到粘贴板!
组可以是集中管理的,由域,如身份管理(IdM)或活动(AD)提供,或者它们在本地系统上的 etc/group 文件中管理。在大多数情况下,用户依赖于集中管理的存储。然而,在某些情况下,软件仍依赖于已知组中的成员资格来管理访问控制。
如果要管理域控制器和本地 etc/group 中的文件组,您可以启用组合并。您可以配置 nsswitch.conf 文件,来检查本地文件和远程服务。如果组在这两个地方都出现,则将合并成员用户列表,并在单个响应中返回。
以下步骤描述了如何为用户 idmuser 启用组合并。
在 RHEL 9.6 或更高版本中,如果您使用 authselect 工具,则不再需要手动编辑 nssswitch.conf 来启用组合并。它现已集成到 authselect 配置集中,无需手动更改。
流程
将
[SUCCESS=merge]添加到/etc/nsswitch.conf文件中:# Allow initgroups to default to the setting for group. initgroups: sss [SUCCESS=merge] files
# Allow initgroups to default to the setting for group. initgroups: sss [SUCCESS=merge] filesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 idmuser 添加到 IdM 中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证本地
audio组的 GID。getent group audio --------------------- audio:x:63
$ getent group audio --------------------- audio:x:63Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将组
audio添加到 IdM 中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您在将
audio组添加到 IdM 时定义的 GID 必须与本地audio组的 GID 相同。将 idmuser 用户添加到 IdM
audio组中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 以 idmuser 身份登录。
验证 idmuser 在其会话中是否有本地组:
id idmuser uid=1867800003(idmuser) gid=1867800003(idmuser) groups=1867800003(idmuser),63(audio),10(wheel)
$ id idmuser uid=1867800003(idmuser) gid=1867800003(idmuser) groups=1867800003(idmuser),63(audio),10(wheel)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
14.13. 使用 Ansible 为用户提供 ID 覆盖对 IdM 客户端上本地声音卡的访问权限 复制链接链接已复制到粘贴板!
您可以使用 ansible-freeipa 组和 idoverrideuser 模块在 IdM 客户端上使身份管理(IdM)或 Active Directory (AD)用户成员。这会授予 IdM 或 AD 用户对主机上声音卡的特权访问权限。
流程使用在第一个 playbook 任务中添加了 aduser@addomain.com ID 覆盖的 Default Trust View ID 视图的示例。在下一个 playbook 任务中,在 IdM 中创建了一个 GID 为 63 的 audio 组,它对应 RHEL 主机上本地 audio 组的 GID。同时,aduser@addomain.com ID 覆盖作为成员添加到 IdM audio 组中。
先决条件
-
您有访问要在其上执行流程第一部分的 IdM 客户端的
root访问权限。在示例中,这是 client.idm.example.com。 您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已在 Ansible 控制器上安装了
ansible-freeipa软件包。 - 您使用 RHEL 8.10 或更高版本。
- 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
AD 林与 IdM 信任。在示例中,AD 域的名称是 addomain.com,以及 AD 用户的完全限定域名(FQDN),其存在于本地
音频组中存在是 aduser@addomain.com。 -
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
在 client.idm.example.com 上,将
[SUCCESS=merge]添加到/etc/nsswitch.conf文件中:[...] # Allow initgroups to default to the setting for group. initgroups: sss [SUCCESS=merge] files
[...] # Allow initgroups to default to the setting for group. initgroups: sss [SUCCESS=merge] filesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确定本地
音频组的 GID:getent group audio --------------------- audio:x:63
$ getent group audio --------------------- audio:x:63Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Ansible 控制节点上,创建一个带有任务的 add-aduser-to-audio-group.yml playbook,将 aduser@addomain.com 用户覆盖添加到 Default Trust View 中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在同一 playbook 中使用另一个 playbook 任务,将组 音频 添加到 IdM 中,
GID为 63。将 aduser idoverrideuser 添加到组中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory add-aduser-to-audio-group.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory add-aduser-to-audio-group.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以 AD 用户身份登录 IdM 客户端:
ssh aduser@addomain.com@client.idm.example.com
$ ssh aduser@addomain.com@client.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 AD 用户的组成员资格:
id aduser@addomain.com uid=702801456(aduser@addomain.com) gid=63(audio) groups=63(audio)
$ id aduser@addomain.com uid=702801456(aduser@addomain.com) gid=63(audio) groups=63(audio)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 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。
| 组名称 | 默认组成员 |
|---|---|
|
| 所有 IdM 用户 |
|
|
具有管理特权的用户,包括默认的 |
|
| 这是一个旧的组,不再具有任何特殊权限 |
|
| 具有管理 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 设置密码策略,该策略也适用于用户组 B 中的所有用户。
15.3. 使用 IdM Web UI 添加用户组 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM Web UI 添加用户组。
先决条件
- 已登陆到 IdM Web UI。
步骤
- 点击 Identity → Groups,然后选择左侧栏中的 User Groups。
- 单击 Add 开始添加组。
填写有关组的信息。有关用户组类型的更多信息,请参阅 IdM 中不同的组类型。
您可以为组指定自定义的 GID。如果您这样做,请小心以避免 ID 冲突。如果没有指定自定义的 GID,IdM 会自动从可用的 ID 范围内分配一个 GID。
- 单击 Add 确认。
15.4. 使用 IdM Web UI 删除用户组 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM Web UI 删除用户组。请注意,删除组不会从 IdM 中删除组成员。
先决条件
- 已登陆到 IdM Web UI。
步骤
- 点击 Identity → Groups ,并选择 User Groups。
- 选择要删除的组。
- 单击 Delete。
- 单击 Delete 确认。
15.5. 使用 IdM Web UI 将成员添加到用户组中 复制链接链接已复制到粘贴板!
您可以将用户和用户组添加为用户组的成员。如需更多信息,请参阅 IdM 中不同的组类型 和 直接和间接组成员 。
先决条件
- 已登陆到 IdM Web UI。
步骤
- 单击 Identity → Groups ,并选择左侧栏中的 User Groups。
- 单击组的名称。
- 选择您要添加的组成员的类型: User、User Groups 或 External。
- 点击 Add。
- 选中您要添加的一个或多个成员旁边的复选框。
- 单击向右箭头,将所选成员移到组中。
- 单击 Add 确认。
15.6. 使用 Web UI 将用户或组作为成员管理者添加到 IdM 用户组中 复制链接链接已复制到粘贴板!
按照以下流程,使用 Web UI 将用户或组作为成员管理者添加到 IdM 用户组。成员管理者可以将用户或组添加到 IdM 用户组中,但不能更改组的属性。
先决条件
- 已登陆到 IdM Web UI。
- 您必须具有要添加为成员管理器的用户名以及您要管理的组的名称。
步骤
- 单击 Identity → Groups ,并选择左侧栏中的 User Groups。
- 单击组的名称。
- 选择您要添加的组成员管理者的类型:Users 或 User Groups。
- 点击 Add。
- 选中您要添加的一个或多个成员旁边的复选框。
- 单击向右箭头,将所选成员移到组中。
- 单击 Add 确认。
将成员管理者添加到用户组后,可能需要过些时间,才能将更新传播到身份管理环境中的所有客户端。
验证
验证新添加的用户或用户组是否已添加到用户或用户组的成员管理者列表中:
15.7. 使用 IdM Web UI 查看组成员 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM Web UI 查看组成员。您可以查看直接和间接组成员。如需更多信息,请参阅 直接和间接组成员。
先决条件
- 已登陆到 IdM Web UI。
步骤
- 选择 Identity → Groups。
- 在左侧栏中选择 User Groups 。
- 单击您要查看的组的名称。
- 在 Direct Membership 和 Indirect Membership 之间切换。
15.8. 使用 IdM Web UI 从用户组中删除成员 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM Web UI 从用户组中删除成员。
先决条件
- 已登陆到 IdM Web UI。
步骤
- 单击 Identity → Groups ,并选择左侧栏中的 User Groups。
- 单击组的名称。
- 选择要删除的组成员的类型: User、User Groups 或 External。
- 选中您要删除的成员旁边的复选框。
- 点击 Delete。
- 单击 Delete 确认。
15.9. 使用 Web UI 从 IdM 用户组中删除作为成员管理者的用户或组 复制链接链接已复制到粘贴板!
按照以下流程,使用 Web UI 从 IdM 用户组中删除作为成员管理者的用户或组。成员管理者可以从 IdM 用户组中删除用户或组,但不能更改组的属性。
先决条件
- 已登陆到 IdM Web UI。
- 您必须具有要删除的现有成员管理者用户或组的名称,以及它们要管理的组的名称。
步骤
- 单击 Identity → Groups ,并选择左侧栏中的 User Groups。
- 单击组的名称。
- 选择您要删除的成员管理者的类型: Users 或 User Groups。
- 选中您要删除的成员管理者旁边的复选框。
- 单击 Delete。
- 单击 Delete 确认。
从用户组中删除成员管理者后,可能需要稍等片刻才能将更新传播到身份管理环境中的所有客户端。
验证
验证用户或用户组是否已从用户或用户组的成员管理者列表中删除:
第 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。
| 组名称 | 默认组成员 |
|---|---|
|
| 所有 IdM 用户 |
|
|
具有管理特权的用户,包括默认的 |
|
| 这是一个旧的组,不再具有任何特殊权限 |
|
| 具有管理 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 设置密码策略,该策略也适用于用户组 B 中的所有用户。
16.3. 使用 Ansible playbook 确保存在 IdM 组和组成员 复制链接链接已复制到粘贴板!
以下流程描述了使用 Ansible playbook 确保存在 IdM 组和组成员(用户和用户组)。
先决条件
- 您知道 IdM 管理员密码。
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - IdM 中已存在您想要引用的用户。有关确保存在使用 Ansible 的用户的详细信息,请参阅使用 Ansible playbook 管理用户帐户。
流程
创建一个清单文件,如
inventory.file,并在该文件中定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用必要的用户和组信息创建一个 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-group-members.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-group-members.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以使用 ipa group-show 命令验证 ops 组是否包含 sysops 和 appops 作为直接成员,idm_user 作为间接成员:
以管理员身份登录到
ipaserver:ssh admin@server.idm.example.com Password: [admin@server /]$
$ ssh admin@server.idm.example.com Password: [admin@server /]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示关于 ops 的信息:
ipaserver]$ ipa group-show ops Group name: ops GID: 1234 Member groups: sysops, appops Indirect Member users: idm_user
ipaserver]$ ipa group-show ops Group name: ops GID: 1234 Member groups: sysops, appops Indirect Member users: idm_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow IdM 中已存在 appops 和 sysops 组,后者包括 idm_user 用户。
16.4. 使用 Ansible 在单个任务中添加多个 IdM 组 复制链接链接已复制到粘贴板!
您可以使用 ansible-freeipa ipagroup 模块,在单个 Ansible 任务中添加、修改和删除多个身份管理(IdM)用户组。为此,请使用 ipagroup 模块的 groups 选项。
使用 groups 选项,您还可以指定仅应用到特定组的多个组变量。根据 name 变量定义此组,这是 groups 选项的唯一强制变量。
完成此流程,以确保在单个任务中,在 IdM 中存在 sysops 和 appops 组。将 sysops 组定义为非 posix 组,将 appops 组定义为外部组。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 您已在 ~/MyPlaybooks/ 目录中创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
- 您正在使用 RHEL 8.9 及更新版本。
-
您已将
ipaadmin_password存储在 secret.yml Ansible vault 中。
流程
使用以下内容创建 Ansible playbook 文件 add-nonposix-and-external-groups.yml :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 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
$ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/add-nonposix-and-external-groups.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
16.5. 使用 Ansible 启用 AD 用户来管理 IdM 复制链接链接已复制到粘贴板!
您可以使用 ansible-freeipa idoverrideuser 和 group 模块从可信 AD 域中为活动目录(AD)用户创建一个用户 ID 覆盖,并授予该用户与 IdM 用户相同的权限。该流程使用 Default Trust View ID 视图的示例,其中存储在 AD 中的用户的 ad_user@ad.example.com ID 覆盖添加到第一个 playbook 任务中。在下一个 playbook 任务中,ad_user@ad.example.com ID 覆盖作为成员添加到 IdM admins 组中。因此,AD 管理员可以管理 IdM,而无需有两个不同的帐户和密码。
先决条件
-
您需要知道 IdM
admin密码。 - 安装了使用 AD 的信任。
- 您要向其添加用户 ID 覆盖的组在 IdM 中已存在。
-
您可以使用 IdM 的 4.8.7 版本或更高版本。要查看您在服务器上安装的 IdM 版本,请输入
ipa --version。 您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
- 您使用 RHEL 8.10 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
- AD 林与 IdM 信任。在示例中,AD 域的名称是 ad.example.com,AD 管理员的完全限定域名(FQDN)是 ad_user@ad.example.com。
-
清单文件中的
ipaserver主机被配置为信任控制器或信任代理。 -
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用任务创建一个 enable-ad-admin-to-administer-idm.yml playbook,将 ad_user@ad.example.com 用户覆盖添加到 Default Trust View 中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在示例中:
- ad_user@ad.example.com 是 AD 用户的用户 ID 覆盖,存储在已建立信任的 AD 域中。
在同一 playbook 中使用另一个 playbook 任务,将 AD 管理员用户 ID 覆盖添加到
admins组中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在示例中:
-
admins是您要添加 ad_user@ad.example.com ID 覆盖的 IdM POSIX 组的名称。此组成员具有全部的管理员特权。
-
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory enable-ad-admin-to-administer-idm.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory enable-ad-admin-to-administer-idm.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
16.6. 使用 Ansible playbook 确保 IdM 用户组中存在成员管理器 复制链接链接已复制到粘贴板!
以下流程描述了使用 Ansible playbook 确保存在 IdM 成员管理器(用户和用户组)。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您必须具有要添加为成员管理器的用户名以及您要管理的组的名称。
步骤
创建一个清单文件,如
inventory.file,并在该文件中定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用必要的用户和组成员管理信息创建一个 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 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
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-member-managers-user-groups.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以使用 ipa group-show 命令验证 group_a 组是否包含 test 作为成员管理者,以及 group_admins 为 group_a 的成员管理者:
以管理员身份登录到
ipaserver:ssh admin@server.idm.example.com Password: [admin@server /]$
$ ssh admin@server.idm.example.com Password: [admin@server /]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示 managergroup1 的信息:
ipaserver]$ ipa group-show group_a Group name: group_a GID: 1133400009 Membership managed by groups: group_admins Membership managed by users: test
ipaserver]$ ipa group-show group_a Group name: group_a GID: 1133400009 Membership managed by groups: group_admins Membership managed by users: testCopy to Clipboard Copied! Toggle word wrap Toggle overflow
16.7. 使用 Ansible playbook 确保 IdM 用户组中没有成员管理者 复制链接链接已复制到粘贴板!
以下流程描述了在使用 Ansible playbook 时确保 IdM 成员管理者(用户和用户组)不存在。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您必须具有要删除的现有成员管理者用户或组的名称,以及它们要管理的组的名称。
步骤
创建一个清单文件,如
inventory.file,并在该文件中定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用必要的用户和组成员管理信息创建一个 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 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
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-member-managers-are-absent.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以使用 ipa group-show 命令验证 group_a 组不包含 test 作为成员管理者,以及 group_admins 为 group_a 的成员管理者:
以管理员身份登录到
ipaserver:ssh admin@server.idm.example.com Password: [admin@server /]$
$ ssh admin@server.idm.example.com Password: [admin@server /]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示 group_a 的信息:
ipaserver]$ ipa group-show group_a Group name: group_a GID: 1133400009
ipaserver]$ ipa group-show group_a Group name: group_a GID: 1133400009Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 17 章 使用 IdM CLI 自动化组成员资格 复制链接链接已复制到粘贴板!
通过自动化组成员资格,您可以根据其属性自动将用户和主机分配到组。例如,您可以:
- 根据员工的经理、位置或任何其他属性,将员工的用户条目划分为组。
- 根据主机的类、位置或任何其他属性来划分主机。
- 将所有用户或全部主机添加到单个全局组。
17.1. 自动化组成员资格的好处 复制链接链接已复制到粘贴板!
对用户使用自动成员资格,允许您:
减少手动管理组成员资格的开销
您不再需要手动将每个用户和主机分配到组中。
提高用户和主机管理的一致性
用户和主机根据严格定义的和自动评估的标准被分配到组。
简化基于组的设置的管理
为组定义各种设置,然后应用到各个组成员,如
sudo规则、自动挂载或访问控制。将用户和主机添加到组中会自动使管理这些设置变得更加简单。
17.2. 自动成员规则 复制链接链接已复制到粘贴板!
在配置自动化组成员资格时,管理员定义自动成员规则。自动成员规则应用到特定的用户或主机目标组。它不能一次应用到多个组。
创建规则后,管理员会为其添加条件。它们指定将哪些用户或主机包含在目标组中,或从目标组中排除:
包含的条件
当用户或主机条目满足包含的条件时,它将包含在目标组中。
排他条件
当用户或主机条目满足排他条件时,它不会包含在目标组中。
条件被指定为 Perl 兼容的正则表达式(PCRE)格式的正则表达式。有关 PCRE 的详情,请查看您系统上的 pcresyntax (3) 手册页。
IdM 在包含条件之前评估排他条件。在发生冲突时,排他条件优先于包含条件。
自动成员规则适用于将来创建的每个条目。这些条目将自动添加到指定的目标组中。如果一个条目满足多个自动成员规则中指定的条件,它将被添加到所有对应的组中。
现有条目 不会受到 新规则的影响。如果要更改现有条目,请参阅使用 IdM CLI 将自动成员规则应用到现有条目。
17.3. 使用 IdM CLI 添加自动成员规则 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM CLI 添加自动成员规则。有关自动成员规则的信息,请参考 自动成员规则。
添加自动成员规则后,您可以在 向自动成员规则中添加条件 中所述的流程为其添加条件 。
现有条目 不会受到 新规则的影响。如果要更改现有条目,请参阅使用 IdM CLI 将自动成员规则应用到现有条目。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
- 新规则的目标组必须在 IdM 中存在。
步骤
-
输入
ipa automember-add命令,来添加自动成员规则。 在提示时,指定:
- 自动成员规则。这是目标组名称。
- 分组类型。这将指定规则以用户组还是主机组为目标。要以用户组为目标,请输入 group。要以主机组为目标,请输入 hostgroup。
例如,要为名为 user_group 的用户组添加自动成员规则:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 您可以使用 使用 IdM CLI 查看现有的自动成员规则,来显示 IdM 中现有的自动成员资格规则和条件。
17.4. 使用 IdM CLI 将条件添加到自动成员规则中 复制链接链接已复制到粘贴板!
配置自动成员规则后,您可以使用 IdM CLI 向该自动成员规则添加条件。有关自动成员规则的信息,请参考 自动成员规则。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
- 目标规则必须在 IdM 中存在。详情请参阅 使用 IdM CLI 添加自动成员规则。
步骤
-
使用
ipa automember-add-condition命令定义一个或多个包含或排他条件。 在提示时,指定:
- 自动成员规则。这是目标规则名称。详情请查看 自动成员规则。
- 属性键。这将指定过滤器将应用到的条目属性。例如,用户的 uid :
- 分组类型。这将指定规则以用户组还是主机组为目标。要以用户组为目标,请输入 group。要以主机组为目标,请输入 hostgroup。
- 包含正则表达式 和 排他正则表达式。它们将一个或多个条件指定为正则表达式。如果您只想指定一个条件,请在提示输入其它条件时按 Enter 键。
例如,以下条件针对用户登录属性(uid)中带有任何值(.*)的所有用户。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 再举一个例子,您可以使用自动成员资格规则以从活动目录(AD)中同步的所有 Windows 用户为目标。要达到此目的,请创建一个条件,该条件以其objectClass 属性中带有 ntUser 的用户为目标,该属性由所有 AD 用户共享:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 您可以使用 使用 IdM CLI 查看现有的自动成员规则,来显示 IdM 中现有的自动成员资格规则和条件。
17.5. 使用 IdM CLI 查看现有的自动成员规则 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM CLI 查看现有的自动成员规则。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
步骤
-
输入
ipa automember-find命令。 在提示时,指定 Grouping type :
- 要以用户组为目标,请输入 group。
要以主机组为目标,请输入 hostgroup。
例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
17.6. 使用 IdM CLI 删除自动成员规则 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM CLI 删除自动成员规则。
删除自动成员规则也会删除与规则相关的所有条件。要只从规则中删除特定条件,请参阅 使用 IdM CLI 从自动成员规则中删除条件。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
步骤
-
输入
ipa automember-del命令。 在提示时,指定:
- 自动成员规则。这是您要删除的规则。
- 分组规则。这将指定您要删除的规则是针对用户组的还是主机组的。输入 group 或 hostgroup 。
17.7. 使用 IdM CLI 从自动成员规则中删除条件 复制链接链接已复制到粘贴板!
按照以下流程,从自动成员规则中删除特定的条件。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
步骤
-
输入
ipa automember-remove-condition命令。 在提示时,指定:
- 自动成员规则。这是您要从中删除条件的规则的名称。
- 属性键。这是目标条目属性。例如,用户的 uid :
- 分组类型。这将指定您要删除的条件是针对用户组的还是主机组的。输入 group 或 hostgroup 。
包含正则表达式 和 排他正则表达式。它们指定您要删除的条件。如果您只想指定一个条件,请在提示输入其它条件时按 Enter 键。
例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
17.8. 使用 IdM CLI 将自动成员规则应用到现有条目 复制链接链接已复制到粘贴板!
自动成员规则在规则添加后,自动应用到所创建的用户和主机条目。它们不会追溯到在规则添加之前存在的条目。
要将自动成员规则应用到之前添加的条目,您必须手动重建自动成员资格。重建自动成员资格会重新评估所有现有的自动成员规则,并将其应用到所有用户或主机条目或特定的条目。
重建自动成员资格 不会 从组中删除用户或主机条目,即使条目不再与组的包含条件匹配。要手动删除它们,请参阅 使用 IdM CLI 从用户组中删除成员 或 使用 CLI 删除 IdM 主机组成员。
先决条件
- 您必须以管理员身份登录。详情请查看链接:使用 kinit 手动登录到 IdM。
流程
要重建自动成员资格,请输入
ipa automember-rebuild命令。使用以下选项指定要定为目标的条目:要为所有用户重建自动成员资格,请使用
--type=group选项:ipa automember-rebuild --type=group -------------------------------------------------------- Automember rebuild task finished. Processed (9) entries. --------------------------------------------------------
$ ipa automember-rebuild --type=group -------------------------------------------------------- Automember rebuild task finished. Processed (9) entries. --------------------------------------------------------Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
要为所有主机重建自动成员资格,请使用
--type=hostgroup选项。 要为指定的一个用户或多个用户重建自动成员资格,请使用
--users=target_user选项:ipa automember-rebuild --users=target_user1 --users=target_user2 -------------------------------------------------------- Automember rebuild task finished. Processed (2) entries. --------------------------------------------------------
$ ipa automember-rebuild --users=target_user1 --users=target_user2 -------------------------------------------------------- Automember rebuild task finished. Processed (2) entries. --------------------------------------------------------Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
要为指定一个主机或多个主机重建自动成员资格,请使用
--hosts=client.idm.example.com选项。
17.9. 使用 IdM CLI 配置默认的自动成员组 复制链接链接已复制到粘贴板!
当您配置默认的自动成员组时,与任何自动成员规则不匹配的新用户或主机条目将自动添加到此默认组中。
先决条件
- 您必须以管理员身份登录。详情请参阅 使用 kinit 手动登录到 IdM。
- 您要设置为默认的目标组在 IdM 中已存在。
步骤
-
输入
ipa automember-default-group-set命令,来配置默认的自动成员组。 在提示时,指定:
- Default (fallback) Group,指定目标组名称。
Grouping Type,指定目标是用户组还是主机组。要以用户组为目标,请输入 group。要以主机组为目标,请输入 hostgroup。
例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
注意要删除当前的默认自动成员组,请输入
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
$ ipa automember-default-group-show Grouping Type: group Default (fallback) Group: cn=default_user_group,cn=groups,cn=accounts,dc=example,dc=comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 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 中存在。
步骤
- 点击 Identity → Automember,然后选择 User group rules 或 Host group rules。
- 点击 Add。
- 在 Automember rule 字段中,选择规则要应用的组。这是目标组名称。
- 单击 Add 确认。
- 可选: 您可以使用在 使用 IdM Web UI 向自动成员规则中添加条件 中所述的步骤,向新规则添加条件。
18.4. 使用 IdM Web UI 向自动成员规则中添加条件 复制链接链接已复制到粘贴板!
配置自动成员规则后,您可以使用 IdM Web UI 向该自动成员规则中添加条件。有关自动成员规则的信息,请参考 自动成员规则。
先决条件
- 已登陆到 IdM Web UI。
-
您必须是
admins组的成员。 - 目标规则在 IdM 中存在。
步骤
- 点击 Identity → Automember,然后选择 User group rules 或 Host group rules。
- 点击您要向其添加条件的规则。
- 在 Inclusive 或 Exclusive 部分中,点 Add。
- 在 Attribute 字段中,选择需要的属性,如 uid。
- 在 Expression 字段中,定义正则表达式。
点击 Add。
例如,以下条件以用户 ID(uid)属性中带有任何值(.*)的所有用户为目标。
18.5. 使用 IdM Web UI 查看现有的自动成员规则和条件 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM Web UI 查看现有的自动成员规则和条件。
先决条件
- 已登陆到 IdM Web UI。
-
您必须是
admins组的成员。
步骤
- 点击 Identity → Automember,然后选择 User group rules 或 Host group rules 来查看对应的自动成员规则。
- 可选:点击规则,来查看 Inclusive 或 Exclusive 部分中规则的条件。
18.6. 使用 IdM Web UI 删除自动成员规则 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM Web UI 删除自动成员规则。
删除自动成员规则也会删除与规则相关的所有条件。要只从规则中删除特定条件,请参阅 使用 IdM Web UI 从自动成员规则中删除条件。
先决条件
- 已登陆到 IdM Web UI。
-
您必须是
admins组的成员。
步骤
- 点击 Identity → Automember,然后选择 User group rules 或 Host group rules 来查看对应的自动成员规则。
- 选中您要删除的规则旁边的复选框。
- 点击 Delete。
- 单击 Delete 确认。
18.7. 使用 IdM Web UI 从自动成员规则中删除条件 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM Web UI 从自动成员规则中删除特定的条件。
先决条件
- 已登陆到 IdM Web UI。
-
您必须是
admins组的成员。
步骤
- 点击 Identity → Automember,然后选择 User group rules 或 Host group rules 来查看对应的自动成员规则。
- 点击规则,来查看 Inclusive 或 Exclusive 部分中规则的条件。
- 选中您要删除的条件旁边的复选框。
- 点击 Delete。
- 单击 Delete 确认。
18.8. 使用 IdM Web UI 将自动成员规则应用到现有条目 复制链接链接已复制到粘贴板!
自动成员规则在规则添加后,自动应用到所创建的用户和主机条目。它们不会追溯到在规则添加之前存在的条目。
要将自动成员规则应用到之前添加的条目,您必须手动重建自动成员资格。重建自动成员资格会重新评估所有现有的自动成员规则,并将其应用到所有用户或主机条目或特定的条目。
重建自动成员资格 不会 从组中删除用户或主机条目,即使条目不再与组的包含条件匹配。要手动删除它们,请参阅 使用 IdM Web UI 从用户组中删除成员 或 在 IdM Web UI 中删除主机组成员。
18.8.1. 为所有用户或主机重建自动成员资格 复制链接链接已复制到粘贴板!
按照以下流程,为所有用户或主机条目重建自动成员资格。
先决条件
- 已登陆到 IdM Web UI。
-
您必须是
admins组的成员。
步骤
- 选择 Identity → Users 或 Hosts。
单击 Actions → Rebuild auto membership。
18.8.2. 只为单个用户或主机重建自动成员资格 复制链接链接已复制到粘贴板!
按照以下流程,为特定用户或主机条目重建自动成员资格。
先决条件
- 已登陆到 IdM Web UI。
-
您必须是
admins组的成员。
步骤
- 选择 Identity → Users 或 Hosts。
- 单击所需的用户或主机名。
单击 Actions → Rebuild auto membership。
18.9. 使用 IdM Web UI 配置默认的用户组 复制链接链接已复制到粘贴板!
当您配置默认用户组时,不与任何自动成员规则匹配的新用户条目将自动添加到此默认组中。
先决条件
- 已登陆到 IdM Web UI。
-
您必须是
admins组的成员。 - 您要设置为默认的目标用户组在 IdM 中存在。
步骤
- 点击 Identity → Automember,然后选择 User group rules。
- 在 Default user group 字段中,选择您要设置为默认用户组的组。
18.10. 使用 IdM Web UI 配置默认的主机组 复制链接链接已复制到粘贴板!
配置默认主机组时,不与任何自动成员规则匹配的新主机条目将自动添加到此默认组中。
先决条件
- 已登陆到 IdM Web UI。
-
您必须是
admins组的成员。 - 您要设置为默认的目标主机组在 IdM 中存在。
步骤
- 点击 Identity → Automember,然后选择 Host group rules。
- 在 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 权限来执行 ipaserver、ipareplica、ipaclient、ipabackup、ipasmartcard_server 和 ipasmartcard_client ansible-freeipa 角色。这些角色需要具有目录和 dnf 软件包管理器的特权访问权限。
按照以下流程创建 ~/MyPlaybooks 目录并进行配置,以便您可以使用它来存储和运行 Ansible playbook。
先决条件
- 您已在受管节点上安装了 IdM 服务器 server.idm.example.com 和 replica.idm.example.com。
- 您已配置了 DNS 和网络,以便您可以直接从控制节点登录到受管节点 server.idm.example.com 和 replica.idm.example.com。
-
您需要知道 IdM
admin密码。
流程
在主目录中为您的 Ansible 配置和 playbook 创建目录:
mkdir ~/MyPlaybooks/
$ mkdir ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks
$ cd ~/MyPlaybooksCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下内容创建 ~/MyPlaybooks/ansible.cfg 文件:
[defaults] inventory = /home/your_username/MyPlaybooks/inventory [privilege_escalation] become=True
[defaults] inventory = /home/your_username/MyPlaybooks/inventory [privilege_escalation] become=TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下内容创建 ~/MyPlaybooks/inventory 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此配置定义了两个主机组,即 eu 和 us,用于这些位置中的主机。此外,此配置定义了 ipaserver 主机组,它包含来自 eu 和 us 组的所有主机。
可选:创建一个 SSH 公钥和私钥。要在测试环境中简化访问,请不要在私钥中设置密码:
ssh-keygen
$ ssh-keygenCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 SSH 公钥复制到每个受管节点上的 IdM
admin帐户:ssh-copy-id admin@server.idm.example.com ssh-copy-id admin@replica.idm.example.com
$ ssh-copy-id admin@server.idm.example.com $ ssh-copy-id admin@replica.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入这些命令时,您必须输入 IdM
admin密码。
19.2. 使用 Ansible 确保 IdM 用户组的自动成员规则存在 复制链接链接已复制到粘贴板!
以下流程描述了如何使用 Ansible playbook 确保身份管理(IdM)组的 自动成员 规则存在。在示例中,确保 testing_group 用户组的 自动成员 规则存在。
先决条件
-
您需要知道 IdM
admin密码。 - IdM 中存在 testing_group 用户组。
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制位于
/usr/share/doc/ansible-freeipa/playbooks/automember/目录中的automember-group-present.ymlAnsible playbook 文件:cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-group-present.yml automember-group-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-group-present.yml automember-group-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
automember-group-present-copy.yml文件进行编辑。 通过在
ipaautomember任务部分中设置以下变量来调整该文件:-
将
ipaadmin_password变量设置为 IdMadmin的密码。 -
将
name变量设为 testing_group。 -
将
automember_type变量设为 group。 -
确保
state变量设置为present。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory automember-group-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory automember-group-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
19.3. 使用 Ansible 确保指定的条件在 IdM 用户组自动成员规则中存在 复制链接链接已复制到粘贴板!
以下流程描述了如何使用 Ansible playbook 来确保指定的条件在身份管理(IdM)组的 自动成员 规则中存在。在示例中,确保 testing_group 组的 自动成员 规则中存在与 UID 相关的条件。通过指定 .* 条件,您可以确保所有将来的 IdM 用户都自动成为 testing_group 的成员。
先决条件
-
您需要知道 IdM
admin密码。 - testing_group 用户组和自动成员用户组规则在 IdM 中存在。
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制位于
/usr/share/doc/ansible-freeipa/playbooks/automember/目录中的automember-hostgroup-rule-present.ymlAnsible playbook 文件,并将它命名为 automember-usergroup-rule-present.yml :cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-hostgroup-rule-present.yml automember-usergroup-rule-present.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-hostgroup-rule-present.yml automember-usergroup-rule-present.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
automember-usergroup-rule-present.yml文件进行编辑。 通过修改以下参数来调整文件:
- 重命名 playbook 以便对应于您的用例,例如:自动成员用户组规则成员存在。
- 重命名任务以便对应于您的用例,例如:确保用户组的自动成员条件存在。
在
ipaautomember任务部分中设置以下变量:-
将
ipaadmin_password变量设置为 IdMadmin的密码。 -
将
name变量设为 testing_group。 -
将
automember_type变量设为group。 -
确保
state变量设置为present。 -
确保
action变量设为member。 -
将
inclusivekey变量设为UID。 -
将
inclusiveexpression变量设为 .*
-
将
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory automember-usergroup-rule-present.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory automember-usergroup-rule-present.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以 IdM 管理员身份登录。
kinit admin
$ kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,添加用户:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
19.4. 使用 Ansible 确保条件在 IdM 用户组自动成员规则中不存在 复制链接链接已复制到粘贴板!
以下流程描述了如何使用 Ansible playbook 确保条件在身份管理(IdM)组的 自动成员 规则中不存在。在示例中,条件在 自动成员 规则中不存在确保了应包含指定 首字母 为 dp 的用户。将自动成员规则应用到 testing_group 组。通过应用条件,您可以确保将来首字母为 dp 的用户不会成为 testing_group 的成员。
先决条件
-
您需要知道 IdM
admin密码。 - testing_group 用户组和自动成员用户组规则在 IdM 中存在。
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制位于
/usr/share/doc/ansible-freeipa/playbooks/automember/目录中的automember-hostgroup-rule-absent.ymlAnsible playbook 文件,并将其命名为 automember-usergroup-rule-absent.yml :cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-hostgroup-rule-absent.yml automember-usergroup-rule-absent.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-hostgroup-rule-absent.yml automember-usergroup-rule-absent.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
automember-usergroup-rule-absent.yml文件进行编辑。 通过修改以下参数来调整文件:
- 重命名 playbook 以对应于您的用例,例如:自动成员用户组规则成员不存在。
- 重命名任务以对应于您的用例,例如:确保用户组的自动成员条件不存在。
在
ipaautomember任务部分中设置以下变量:-
将
ipaadmin_password变量设置为 IdMadmin的密码。 -
将
name变量设为 testing_group。 -
将
automember_type变量设为 group。 -
确保
state变量设置为absent。 -
确保
action变量设为member。 -
将
inclusivekey变量设为initials。 -
将
inclusiveexpression变量设为 dp。
-
将
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory automember-usergroup-rule-absent.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory automember-usergroup-rule-absent.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以 IdM 管理员身份登录。
kinit admin
$ kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看自动成员组:
ipa automember-show --type=group testing_group Automember Rule: testing_group
$ ipa automember-show --type=group testing_group Automember Rule: testing_groupCopy to Clipboard Copied! Toggle word wrap Toggle overflow
输出中没有 Inclusive Regex: initials=dp 条目确认 testing_group 自动成员规则不包含指定的条件。
19.5. 使用 Ansible 确保 IdM 用户组的自动成员规则不存在 复制链接链接已复制到粘贴板!
以下流程描述了如何使用 Ansible playbook 确保身份管理(IdM)组的 自动成员 规则不存在。在示例中,确保 testing_group 组的 automember 规则不存在。
删除自动成员规则也会删除与规则相关的所有条件。要从规则中只删除特定的条件,请参阅 使用 Ansible 确保条件在 IdM 用户组自动成员规则中不存在。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制位于
/usr/share/doc/ansible-freeipa/playbooks/automember/目录中的automember-group-absent.ymlAnsible playbook 文件:cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-group-absent.yml automember-group-absent-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-group-absent.yml automember-group-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
automember-group-absent-copy.yml文件进行编辑。 通过在
ipaautomember任务部分中设置以下变量来调整该文件:-
将
ipaadmin_password变量设置为 IdMadmin的密码。 -
将
name变量设为 testing_group。 -
将
automember_type变量设为 group。 -
确保
state变量设置为absent。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory automember-group-absent.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory automember-group-absent.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制位于
/usr/share/doc/ansible-freeipa/playbooks/automember/目录中的automember-hostgroup-rule-present.ymlAnsible playbook 文件:cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-hostgroup-rule-present.yml automember-hostgroup-rule-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-hostgroup-rule-present.yml automember-hostgroup-rule-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
automember-hostgroup-rule-present-copy.yml文件进行编辑。 通过在
ipaautomember任务部分中设置以下变量来调整该文件:-
将
ipaadmin_password变量设置为 IdMadmin的密码。 -
将
name变量设为 primary_dns_domain_hosts。 -
将
automember_type变量设为 hostgroup。 -
确保
state变量设置为present。 -
确保
action变量设为member。 -
确保
inclusivekey变量设为fqdn。 -
将对应的
inclusiveexpression变量设为 .*.idm.example.com。 -
将
exclusivekey变量设为fqdn。 -
将对应的
exclusiveexpression变量设为 .*.example.org。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory automember-hostgroup-rule-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory automember-hostgroup-rule-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 20 章 修改 IdM 中的用户和组属性 复制链接链接已复制到粘贴板!
在身份管理(IdM)中,信息存储为 LDAP 属性。当您在 IdM 中创建用户条目时,该条目会自动分配特定的 LDAP 对象类。这些对象类定义用户条目可以使用哪些属性。有关默认用户对象类以及如何组织它们的更多信息,请参见 下表。
| 对象类 | 描述 |
|---|---|
| ipaobject, ipasshuser | IdM 对象类 |
| person, organizationalperson, inetorgperson, inetuser, posixAccount | 人员对象类 |
| krbprincipalaux, krbticketpolicyaux | Kerberos 对象类 |
| mepOriginEntry | 受管条目(模板)对象类 |
作为管理员,您可以修改用户对象类列表以及属性的格式。例如,您可以指定用户名中允许多少个字符。
在 IdM 中组织用户和组对象类和属性的方式称为 IdM 用户和组模式。
20.1. 默认 IdM 用户属性 复制链接链接已复制到粘贴板!
用户条目包含属性。特定属性的值会根据默认值自动设置,除非您自己设置了特定值。对于其他属性,您必须手动设置值。某些属性(如 名字 )需要一个值,而其他属性(如 Street 地址 )不需要。作为管理员,您可以配置默认属性生成或使用的值。如需更多信息,请参阅下面的 默认 IdM 用户属性 表。
| Web UI 字段 | 命令行选项 | 必需、可选或默认 |
|---|---|---|
| 用户登录 | username | 必需 |
| 名 | --first | 必需 |
| 姓 | --last | 必需 |
| 全名 | --cn | 可选 |
| 显示名称 | --displayname | 可选 |
| 初始 | --initials | default |
| 主目录 | --homedir | default |
| GECOS 字段 | --gecos | default |
| shell | --shell | default |
| Kerberos 主体 | --principal | default |
| 电子邮件地址 | | 可选 |
| 密码 | --password | 可选。请注意,该脚本会提示输入新密码,而不是使用 参数接受值。 |
| 用户 ID 号 | --uid | default |
| 组 ID 号 | --gidnumber | default |
| Street 地址 | --street | 选填 |
| 城市 | --City | 选填 |
| state/Province | --state | 选填 |
| zip 代码 | --postalcode | 选填 |
| 电话号码 | --phone | 选填 |
| 移动电话号码 | --mobile | 选填 |
| pager 号 | --pager | 选填 |
| 传真号 | --fax | 选填 |
| 机构单元 | --orgunit | 选填 |
| 作业标题 | --title | 选填 |
| Manager(管理者) | --manager | 选填 |
| 汽车许可证 | --carlicense | 选填 |
| --noprivate | 选填 | |
| SSH 密钥 | --sshpubkey | 选填 |
| 其他属性 | --addattr | 选填 |
| 部门号 | --departmentnumber | 选填 |
| 员工号 | --employeenumber | 选填 |
| 员工类型 | --employeetype | 选填 |
| 首选语言 | --preferredlanguage | 选填 |
您还可以添加 Default IdM 用户对象类 中可用的任何属性,即使该属性没有 Web UI 或命令行参数。
20.2. 更改默认用户和组模式的注意事项 复制链接链接已复制到粘贴板!
创建用户和组帐户时,会应用一组预定义的 LDAP 对象类。虽然 标准的特定于 IdM 的 LDAP 对象类 和属性 涵盖了大多数部署场景,但您可以为用户和组条目创建自定义对象类。
当您修改对象类时,IdM 提供了以下验证:
- 所有对象类及其指定属性都必须对 LDAP 服务器知道。
- 为条目配置的所有默认属性都必须被配置的对象类支持。
IdM 模式验证存在限制,IdM 服务器不会检查定义的用户或组对象类是否包含 IdM 条目所需的所有对象类。例如,所有 IdM 条目都需要 ipaobject 对象类。但是,如果更改了用户或组模式,服务器不会检查是否包含此对象类。如果对象类被意外删除,然后尝试添加新用户,则尝试会失败。
所有对象类更改都是 atomic,而不是增量。每次发生更改时,您必须定义默认对象类的整个列表。例如,您可以决定创建自定义对象类来存储员工信息,如生日和雇佣开始日期。在这种情况下,您无法简单地将自定义对象类添加到列表中。相反,您必须设置当前默认对象类的整个 列表以及 新的对象类。如果在更新配置时没有包括 现有的 默认对象类,则当前设置会被覆盖。这会导致严重的性能问题。
修改默认对象类列表后,新的用户和组条目包含自定义对象类,但任何旧条目都不会被修改。
20.3. 在 IdM Web UI 中修改用户对象类 复制链接链接已复制到粘贴板!
此流程描述了如何使用 IdM Web UI 修改将来身份管理(IdM)用户条目的对象类。因此,这些条目的属性与当前用户条目不同。
先决条件
- 您以 IdM 管理员身份登录。
流程
-
打开
IPA Server选项卡。 -
选择
Configuration子选项卡。 滚动到
User Options区域。
- 重要
如果没有包含 IdM 所需的对象类,则后续尝试添加用户条目会失败,并显示对象类违反情况。
在用户区域的底部,单击
Addfor a new 字段。
- 输入您要添加的用户对象类的名称。
-
单击
Configuration页面顶部的Save。
20.4. 在 IdM CLI 中修改用户对象类 复制链接链接已复制到粘贴板!
此流程描述了如何使用身份管理(IdM) CLI 为将来的 IdM 用户条目修改用户对象类。因此,这些条目的属性与当前用户条目不同。
先决条件
您已启用了
大括号扩展功能:set -o braceexpand
# set -o braceexpandCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 您以 IdM 管理员身份登录。
流程
使用
ipa config-mod命令修改当前的模式。例如,要将top和mailRecipient对象类添加到未来的用户条目中:ipa config-mod --userobjectclasses={person,organizationalperson,inetorgperson,inetuser,posixaccount,krbprincipalaux,krbticketpolicyaux,ipaobject,ipasshuser,mepOriginEntry,top,mailRecipient}[bjensen@server ~]$ ipa config-mod --userobjectclasses={person,organizationalperson,inetorgperson,inetuser,posixaccount,krbprincipalaux,krbticketpolicyaux,ipaobject,ipasshuser,mepOriginEntry,top,mailRecipient}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令添加 IdM 原生的所有十个用户对象类,以及两个新类
top和mailRecipient。重要通过
config-mod命令传递的信息会覆盖之前的值。如果没有包含 IdM 所需的用户对象类,则后续尝试添加用户条目会失败,并显示对象类违反情况。
或者,您可以使用 ipa config-mod --addattr ipauserobjectclasses= <user object class> 命令添加用户对象类。这样,您不会面临在列表中忘记原生 IdM 类的风险。例如,要在不覆盖当前配置的情况下添加 mailRecipient user 对象类,请输入 ipa config-mod --addattr ipauserobjectclasses=mailRecipient。类似地,若要仅删除 mailRecipient 对象类,请输入 ipa config-mod --delattr ipauserobjectclasses=mailRecipient。
20.5. 在 IdM Web UI 中修改组对象类 复制链接链接已复制到粘贴板!
身份管理(IdM)具有以下默认组对象类:
- top
- groupOfNames
- nestedgroup
- ipausergroup
- ipaobject
此流程描述了如何使用 IdM Web UI 为将来的身份管理(IdM)用户组条目添加额外的组对象类。因此,这些条目的属性与组条目 do 的当前属性不同。
先决条件
- 您以 IdM 管理员身份登录。
流程
-
打开
IPA Server选项卡。 -
选择
Configuration子选项卡。 -
找到
Group Options区域。 保留默认的 IdM 组对象类。
重要如果没有包含 IdM 所需的组对象类,则后续尝试添加组条目将失败,因为对象类违反。
单击
Addfor a new 字段。
- 输入您要添加的组对象类的名称。
-
单击
Configuration页面顶部的Save。
20.6. 在 IdM CLI 中修改组对象类 复制链接链接已复制到粘贴板!
身份管理(IdM)具有以下默认组对象类:
- top
- groupOfNames
- nestedgroup
- ipausergroup
- ipaobject
此流程描述了如何使用 IdM Web UI 为将来的身份管理(IdM)用户组条目添加额外的组对象类。因此,这些条目的属性与组条目 do 的当前属性不同。
先决条件
您已启用了
大括号扩展功能:set -o braceexpand
# set -o braceexpandCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 您以 IdM 管理员身份登录。
流程
使用
ipa config-mod命令修改当前的模式。例如,将ipasshuser和employeegroup 对象类添加到未来的用户条目中:ipa config-mod --groupobjectclasses={top,groupofnames,nestedgroup,ipausergroup,ipaobject,ipasshuser,employeegroup}[bjensen@server ~]$ ipa config-mod --groupobjectclasses={top,groupofnames,nestedgroup,ipausergroup,ipaobject,ipasshuser,employeegroup}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令添加所有默认组对象类,以及两个新组
ipasshuser和employeegroup。重要如果没有包含 IdM 所需的组对象类,则后续尝试添加组条目将失败,因为对象类违反。
注意您可以重复使用上面示例中的空格,而不是大括号中用逗号分开的列表,您可以重复使用--
groupobjectclasses参数。
20.7. IdM 中的默认用户和组群属性 复制链接链接已复制到粘贴板!
身份管理(IdM)在创建新条目时使用模板。
用户的模板比组模板更具体。IdM 为 IdM 用户帐户使用多个核心属性的默认值。这些默认值可以定义用户帐户属性的实际值,如主目录位置,或者可以定义属性值的格式,如用户名长度。模板还定义分配给用户的对象类。
对于组,模板仅定义分配的对象类。
在 IdM LDAP 目录中,这些默认定义都包含在 IdM 服务器的单个配置条目中,即 cn=ipaconfig,cn=etc,dc=example,dc=com。
您可以使用 ipa config-mod 命令修改 IdM 中默认用户参数的配置。下表总结了一些关键参数、您可以使用 ipa config-mod 的命令行选项来修改它们,以及参数描述。
| Web UI 字段 | 命令行选项 | 描述 |
|---|---|---|
| 最大用户名长度 | --maxusername` | 设置用户名的最大字符数。默认:32。 |
| 主目录的根目录 |
|
设置用户主目录的默认目录。默认: |
| 默认 shell |
|
为用户设置默认 shell。默认: |
| 默认用户组 |
|
为新创建的帐户设置默认组。默认: |
| 默认电子邮件域 |
| 根据用户帐户设置用于创建地址的电子邮件域。默认:server domain。 |
| 搜索时间限制 |
| 在返回结果前设置搜索的最大时间(以秒为单位)。 |
| 搜索大小限制 |
| 设置搜索中要返回的最大记录数。 |
| 用户搜索字段 |
| 在用户条目中定义可搜索字段,如果设置了太多属性,会影响服务器性能。 |
| 组搜索字段 |
| 在组条目中定义可搜索字段。 |
| 证书主题基础 | 设置用于在设置过程中为客户端证书创建主题 DN 的基本 DN。 | |
| 默认用户对象类 |
| 定义用于创建用户帐户的对象类。必须提供一个完整的列表,因为它会覆盖现有列表。 |
| 默认组对象类 |
| 定义用于创建组帐户的对象类。必须提供完整的列表。 |
| 密码过期通知 |
| 定义密码过期前的天数以发送通知。 |
| 密码插件功能 | 为用户设置允许密码的格式。 |
20.8. 在 IdM Web UI 中查看和修改用户和组群配置 复制链接链接已复制到粘贴板!
您可以在 Identity Management (IdM) Web UI 中查看和修改默认用户和组属性的配置。
先决条件
-
您已以 IdM
admin身份登录。
流程
-
打开
IPA Server选项卡。 -
选择
Configuration子选项卡。 User Options部分有多个字段,您可以查看和编辑。
-
例如,要将将来 IdM 用户的默认 shell 从
/bin/sh更改为/bin/bash,找到Default shell字段,并将/bin/sh替换为/bin/bash。 在
Group Options部分中,您只能查看并编辑Group 搜索字段字段。
点屏幕顶部的
Save按钮。新保存的配置将应用到未来的 IdM 用户和组帐户。当前帐户保持不变。
20.9. 在 IdM CLI 中查看和修改用户和组群配置 复制链接链接已复制到粘贴板!
您可以在 Identity Management (IdM) CLI 中查看和修改当前或默认用户和组属性的配置。
先决条件
-
您有 IdM
admin凭证。
流程
ipa config-show命令显示最常见的属性设置。将--all 选项用于完整的列表:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ipa config-mod命令修改属性。例如,要将将来的 IdM 用户的默认 shell 从/bin/sh更改为/bin/bash,请输入:ipa config-mod --defaultshell "/bin/bash"
[bjensen@server ~]$ ipa config-mod --defaultshell "/bin/bash"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关更多
ipa config-mod选项,请参阅 Default user parameters 表。新配置将应用到将来的 IdM 用户和组帐户。当前帐户保持不变。
第 21 章 IdM 中的访问控制 复制链接链接已复制到粘贴板!
访问控制定义了授予用户对其他用户或对象(如主机或服务)执行操作的权利或权限。身份管理(IdM)提供了多个访问控制区,以明确授予了哪些类型的访问权限,以及权限被授予给了谁。因此,IdM 会区分了对域中资源的访问控制和对 IdM 配置本身的访问控制。
本章概述了 IdM 用户对域内资源以及对 IdM 配置本身的不同的内部访问控制机制。
21.1. IdM 中的访问控制指令 复制链接链接已复制到粘贴板!
身份管理(IdM)访问控制结构是基于 389 目录服务器访问控制的。通过使用访问控制指令(ACI),您可以授予或拒绝特定的 IdM 用户对其他条目的访问。所有条目(包括 IdM 用户)都存储在 LDAP 中。
ACI 有三个部分:
- 行动者
- 被授予权限可以做某事的实体。在 LDAP 访问控制模型中,您可以指定 ACI 规则只有在用户使用其可区分的名称(DN)绑定到目录时才应用。此类规格称为 绑定规则 :它会定义用户是谁,并可以选择要求对绑定尝试的其他限制,例如将尝试限制在一天的某段时间或某台机器上。
- 目标
- 允许行动者对其执行操作的条目。
- 操作类型
- 确定行动者可以执行哪种操作。最常见的操作有 add、delete、write、read 和 search。在 IdM 中,非管理员用户的读和搜索权限是有限制的,IdM Web UI 中的限制比 IdM CLI 中的限制更多。
当尝试 LDAP 操作时,会出现以下情况:
- IdM 客户端将用户凭证发送到 IdM 服务器,作为绑定 操作的一部分。
- IdM 服务器 DS 检查用户凭证。
- IdM 服务器 DS 检查用户帐户,以查看用户是否有执行所请求的操作的权限。
21.2. IdM 中的访问控制方法 复制链接链接已复制到粘贴板!
身份管理(IdM)将访问控制方法分为以下类别:
- 自助服务规则
- 定义用户对其自己的个人条目可以执行哪些操作。此访问控制类型仅允许对用户条目中的特定属性具有写权限。用户可以更新特定属性的值,但不能添加或删除这些属性。
- 委派规则
- 通过使用委派规则,您可以允许特定的用户组对另一个用户组中特定的用户属性执行写(也就是编辑)操作。与自助服务规则类似,这种形式的访问控制规则被限制为编辑特定属性的值。它不能授予添加或删除整个条目或控制未指定属性的权限。
- 基于角色的访问控制
创建特殊的访问控制组,然后对 IdM 域中的所有实体类型授予更大的权力。可以授予角色编辑、添加和删除的权限,即可以授予它们对整个条目的完整控制,而不仅仅是对所选择的属性。
默认情况下,IdM 中已经提供了某些角色,如
Enrollment Administrator、IT Security Specialist和IT Specialist。您可以创建额外的角色来管理任何类型的条目,如主机、自动挂载配置、网络组、DNS 设置和 IdM 配置。
第 22 章 使用 CLI 管理 IdM 中的自助服务规则 复制链接链接已复制到粘贴板!
了解身份管理(IdM)中的自助服务规则以及如何在命令行(CLI)上创建和编辑自助服务访问规则。
22.1. IdM 中的自助服务访问控制 复制链接链接已复制到粘贴板!
自助服务访问控制规则定义 Identity Management (IdM) 实体可以在其 IdM 目录服务器条目上执行的操作:例如,IdM 用户能够更新自己的密码。
这种控制方法允许经过身份验证的 IdM 实体编辑其 LDAP 条目中的特定属性,但不允许对整个条目的 add 或 delete 操作。
使用自助服务访问控制规则时要小心:不当配置访问控制规则可能会意外地提升实体的特权。
22.2. 使用 CLI 创建自助服务规则 复制链接链接已复制到粘贴板!
按照以下步骤,使用命令行(CLI)在 IdM 中创建自助服务访问规则。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 一个活跃的 Kerberos 票据。详情请参阅 使用 kinit 手动登录到 IdM。
流程
要添加自助服务规则,请使用
ipa selfservice-add命令,并指定以下两个选项:--permissions- 设置访问控制指令(ACI)授予的 读 和 写 权限。
--attrs- 设置此 ACI 授予权限的属性的完整列表。
例如,要创建一个自助服务规则,允许用户修改其自己的名称详情:
22.3. 使用 CLI 编辑自助服务规则 复制链接链接已复制到粘贴板!
按照以下步骤,使用命令行(CLI)编辑 IdM 中的自助服务访问规则。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 一个活跃的 Kerberos 票据。详情请参阅 使用 kinit 手动登录到 IdM。
流程
-
可选:使用
ipa selfservice-find命令显示现有的自助服务规则。 -
可选:使用
ipa selfservice-show命令显示您要修改的自助服务规则的详情。 -
使用
ipa selfservice-mod命令来编辑自助服务规则。
例如:
使用 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
$ 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
22.4. 使用 CLI 删除自助服务规则 复制链接链接已复制到粘贴板!
按照以下步骤,使用命令行(CLI)删除 IdM 中的自助服务访问规则。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 一个活跃的 Kerberos 票据。详情请参阅 使用 kinit 手动登录到 IdM。
流程
-
使用
ipa selfservice-del命令删除自助服务规则。
例如:
ipa selfservice-del "Users can manage their own name details" ----------------------------------------------------------- Deleted selfservice "Users can manage their own name details" -----------------------------------------------------------
$ ipa selfservice-del "Users can manage their own name details"
-----------------------------------------------------------
Deleted selfservice "Users can manage their own name details"
-----------------------------------------------------------
验证
-
使用
ipa selfservice-find命令显示所有自助服务规则。您刚才删除的规则应该消失了。
第 23 章 使用 IdM Web UI 管理自助服务规则 复制链接链接已复制到粘贴板!
了解身份管理(IdM)中的自助服务规则,以及如何在 Web 界面(IdM Web UI)中创建和编辑自助服务访问规则。
23.1. IdM 中的自助服务访问控制 复制链接链接已复制到粘贴板!
自助服务访问控制规则定义 Identity Management (IdM) 实体可以在其 IdM 目录服务器条目上执行的操作:例如,IdM 用户能够更新自己的密码。
这种控制方法允许经过身份验证的 IdM 实体编辑其 LDAP 条目中的特定属性,但不允许对整个条目的 add 或 delete 操作。
使用自助服务访问控制规则时要小心:不当配置访问控制规则可能会意外地提升实体的特权。
23.2. 使用 IdM Web UI 创建自助服务规则 复制链接链接已复制到粘贴板!
按照以下流程,使用 Web 界面(IdM Web UI)在 IdM 中创建自助服务访问规则。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 您已登录到 IdM Web UI。详情请参阅 在 Web 浏览器中访问 IdM Web UI。
流程
- 打开 IPA Server>Role-Based Access Control 菜单,再选择 Self Service Permissions。
- 单击自助服务访问规则列表右上角的 Add。
- 在 Add Self Service Permission 窗口中,在 Self-service name 字段中输入新自助服务规则的名称。允许空格。
- 选中您希望用户能够编辑的属性旁边的复选框。
可选: 如果没有列出您要提供访问权限的属性,您可以为其添加一个列表:
- 点击 Add 按钮。
- 在 Add Custom Attribute 窗口中,在 Attribute 文本字段中输入属性名称。
- 单击 OK 按钮以添加该属性。
- 验证是否选择了新属性。
单击表单底部的 Add 按钮,以保存新的自助服务规则。
或者,您可以通过单击 Add and Edit 按钮来保存并继续编辑自助服务规则,或者通过单击 Add and Add another 按钮来保存并添加其他规则。
23.3. 使用 IdM Web UI 编辑自助服务规则 复制链接链接已复制到粘贴板!
按照以下流程,使用 Web 界面(IdM Web UI)编辑 IdM 中的自助服务访问规则。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 您已登录到 IdM Web UI。详情请参阅 在 Web 浏览器中访问 IdM Web UI。
流程
- 打开 IPA Server>Role-Based Access Control 菜单,再选择 Self Service Permissions。
- 单击您要修改的自助服务规则的名称。
- 编辑页面只允许您编辑您要添加或删除自助服务规则的属性列表。选择或取消选择合适的复选框。
- 单击 Save 按钮,将更改保存到自助服务规则。
23.4. 使用 IdM Web UI 删除自助服务规则 复制链接链接已复制到粘贴板!
按照以下流程,使用 Web 界面(IdM Web UI)删除 IdM 中的自助服务访问规则。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 您已登录到 IdM Web UI。详情请参阅 在 Web 浏览器中访问 IdM Web UI。
流程
- 打开 IPA Server>Role-Based Access Control 菜单,再选择 Self Service Permissions。
- 选中您要删除的规则旁边的复选框,然后单击列表右侧的 Delete 按钮。
- 此时会打开一个对话框,单击 Delete 进行确认。
第 24 章 使用 Ansible playbook 管理 IdM 中的自助服务规则 复制链接链接已复制到粘贴板!
了解身份管理(IdM)中的自助服务规则,以及如何使用 Ansible playbook 创建和编辑自助服务访问规则。使用自助服务访问控制规则时,IdM 实体可以在其 IdM 目录服务器条目上执行指定的操作。
24.1. IdM 中的自助服务访问控制 复制链接链接已复制到粘贴板!
自助服务访问控制规则定义 Identity Management (IdM) 实体可以在其 IdM 目录服务器条目上执行的操作:例如,IdM 用户能够更新自己的密码。
这种控制方法允许经过身份验证的 IdM 实体编辑其 LDAP 条目中的特定属性,但不允许对整个条目的 add 或 delete 操作。
使用自助服务访问控制规则时要小心:不当配置访问控制规则可能会意外地提升实体的特权。
24.2. 使用 Ansible 确保存在自助服务规则 复制链接链接已复制到粘贴板!
以下流程描述了如何使用 Ansible playbook 定义自助服务规则并确保它们在身份管理 (IdM) 服务器上存在。在本例中,新的 Users can manage their own name details 规则会授予用户更改其 givenname、displayname、title 和 initials 属性的权限。例如,这允许他们更改其显示名称或缩写(如果想更改)。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制位于
/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
$ cp /usr/share/doc/ansible-freeipa/playbooks/selfservice/selfservice-present.yml selfservice-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
selfservice-present-copy.ymlAnsible playbook 文件以进行编辑。 通过在
ipaselfservice任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为新自助服务规则的名称。 -
将
permission变量设置为以逗号分隔的权限列表,以授予:read和write。 -
将
attribute变量设置为用户可以自己管理的属性列表:givenname、displayname、title和initials。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
24.3. 使用 Ansible 确保缺少自助服务规则 复制链接链接已复制到粘贴板!
以下流程描述了如何使用 Ansible playbook 来确保 IdM 配置中没有指定的自助服务规则。以下示例描述了如何确保 Users can manage their own name details 自助服务规则在 IdM 中不存在。这将确保用户无法更改自己的显示名称或缩写。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建位于
/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
$ cp /usr/share/doc/ansible-freeipa/playbooks/selfservice/selfservice-absent.yml selfservice-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
selfservice-absent-copy.ymlAnsible playbook 文件以进行编辑。 通过在
ipaselfservice任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为自助服务规则的名称。 -
将
state变量设置为absent。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-absent-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
24.4. 使用 Ansible 确保自助服务规则具有特定属性 复制链接链接已复制到粘贴板!
以下流程描述了如何使用 Ansible playbook 确保现有自助服务规则具有特定的设置。在示例中,您可以确认 Users can manage their own name details 自助服务规则也具有 surname 成员属性。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - Users can manage their own name details 自助服务规则存在于 IdM 中。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建位于
/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
$ cp /usr/share/doc/ansible-freeipa/playbooks/selfservice/selfservice-member-present.yml selfservice-member-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
selfservice-member-present-copy.ymlAnsible playbook 文件以进行编辑。 通过在
ipaselfservice任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为要修改的自助服务规则的名称。 -
将
attribute变量设置为surname。 -
将
action变量设置为member。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-member-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-member-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
24.5. 使用 Ansible 确保自助服务规则没有特定属性 复制链接链接已复制到粘贴板!
以下流程描述了如何使用 Ansible playbook 来确保自助服务规则没有特定的设置。您可以使用此 playbook 确保自助服务规则没有授予不需要的访问权限。在示例中,您可以确定 Users can manage their own name details 自助服务规则没有包括 givenname 和 surname成员属性。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - Users can manage their own name details 自助服务规则存在于 IdM 中。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建位于
/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
$ cp /usr/share/doc/ansible-freeipa/playbooks/selfservice/selfservice-member-absent.yml selfservice-member-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
selfservice-member-absent-copy.ymlAnsible playbook 文件进行编辑。 通过在
ipaselfservice任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为您要修改的自助服务规则的名称。 -
将
attribute变量设置为givenname和 topname。 -
将
action变量设置为member。 -
将
state变量设置为absent。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-member-absent-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-member-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 25 章 将权限委派给用户组,来使用 IdM CLI 管理用户 复制链接链接已复制到粘贴板!
委派是 IdM 中的访问控制方法之一,以及自助服务规则和基于角色的访问控制 (RBAC)。您可以使用委派(delegation)为一组用户分配权限,以管理另一组用户的条目。
25.1. 委派规则 复制链接链接已复制到粘贴板!
您可以通过创建委派规则,将权限委派给用户组来管理用户。
委派规则允许特定用户组对另一用户组中用户的特定属性执行写入(编辑)操作。这种形式的访问控制规则仅限于编辑您在委派规则中指定的属性子集的值;它不授予添加或删除整个条目或控制未指定属性的权限。
委派规则向 IdM 中的现有用户组授予权限。例如,您可以使用委派功能,允许 managers 用户组管理 employees 用户组中的选定用户属性。
25.2. 使用 IdM CLI 创建委派规则 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM CLI 创建一个委派规则。
先决条件
-
您已作为
admins组的成员登录。
流程
输入
ipa delegation-add命令。指定以下选项:-
--Group:被授予用户组中用户条目权限 的组。 -
--membergroup:其条目可以被委派组的成员编辑 的组。 -
--permissions:用户是否有权查看给定属性(读),并添加或更改给定属性(写)。如果没有指定权限,则仅添加 写 权限。 -
--attrs:允许成员组中的用户查看或编辑的属性。
例如:
-
25.3. 使用 IdM CLI 查看现有的委派规则 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM CLI 查看现有的委派规则。
先决条件
-
您已作为
admins组的成员登录。
流程
-
输入
ipa delegation-find命令:
25.4. 使用 IdM CLI 修改委派规则 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM CLI 修改现有的委派规则。
--attrs 选项覆盖先前支持的属性列表,因此始终包括属性的完整列表以及任何新属性。这也适用于 --permissions 选项。
先决条件
-
您已作为
admins组的成员登录。
流程
输入
ipa delegation-mod命令及所需的更改。例如,要将displayname属性添加到basic manager attributes示例规则中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
25.5. 使用 IdM CLI 删除委派规则 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM CLI 删除现有的委派规则。
先决条件
-
您已作为
admins组的成员登录。
流程
-
输入
ipa delegation-del命令。 提示时,输入您要删除的委派规则的名称:
ipa delegation-del Delegation name: basic manager attributes --------------------------------------------- Deleted delegation "basic manager attributes" ---------------------------------------------
$ ipa delegation-del Delegation name: basic manager attributes --------------------------------------------- Deleted delegation "basic manager attributes" ---------------------------------------------Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 26 章 将权限委派给用户组,来使用 IdM Web UI 管理用户 复制链接链接已复制到粘贴板!
委派是 IdM 中的访问控制方法之一,以及自助服务规则和基于角色的访问控制 (RBAC)。您可以使用委派(delegation)为一组用户分配权限,以管理另一组用户的条目。
26.1. 委派规则 复制链接链接已复制到粘贴板!
您可以通过创建委派规则,将权限委派给用户组来管理用户。
委派规则允许特定用户组对另一用户组中用户的特定属性执行写入(编辑)操作。这种形式的访问控制规则仅限于编辑您在委派规则中指定的属性子集的值;它不授予添加或删除整个条目或控制未指定属性的权限。
委派规则向 IdM 中的现有用户组授予权限。例如,您可以使用委派功能,允许 managers 用户组管理 employees 用户组中的选定用户属性。
26.2. 使用 IdM WebUI 创建委派规则 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM WebUI 创建一个委派规则。
先决条件
-
您已作为
admins组的成员登录到 IdM Web UI。
流程
- 从 IPA Server>Role-Based Access Control 菜单,点 Delegations。
- 点击 Add。
在 Add delegation 窗口中执行以下操作:
- 命名新的委派规则。
- 通过选择复选框来设置权限,指示用户是否有权查看给定的属性(读取),并添加或更改给定的属性(写入)。
- 在 User group 下拉菜单中选择 被授予权限的组,来查看或编辑成员组中的用户条目。
- 在 Member user group 下拉菜单中,选择 其条目可以被委派组的成员编辑 的组。
- 在属性框中,按您要授予权限的属性选择复选框。
- 单击 Add 按钮,以保存新的委派规则。
26.3. 使用 IdM WebUI 查看现有的委派规则 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM WebUI 查看现有的委派规则。
先决条件
-
您已作为
admins组的成员登录到 IdM Web UI。
流程
从 IPA Server>Role-Based Access Control 菜单,点 Delegations。
26.4. 使用 IdM WebUI 修改委派规则 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM Web UI 修改现有的委派规则。
先决条件
-
您已作为
admins组的成员登录到 IdM Web UI。
流程
- 从 IPA Server>Role-Based Access Control 菜单,点 Delegations。
- 点击您要修改的规则。
进行所需的更改:
- 更改规则的名称。
- 通过选择复选框来更改授予的权限,指示用户是否有权查看给定属性(读取),并添加或更改给定的属性(写)。
- 在"用户组"下拉菜单中,选择 被授予权限 来查看或编辑成员组中的用户条目的组。
- 在 Member user group 下拉菜单中,选择其条目可以被委派组的成员编辑 的组。
- 在属性框中,按您要授予权限的属性选择复选框。要删除对属性的权限,请取消选中相关复选框。
- 单击 Save 按钮来保存更改。
26.5. 使用 IdM WebUI 删除委派规则 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM Web UI 删除现有的委派规则。
先决条件
-
您已作为
admins组的成员登录到 IdM Web UI。
流程
- 从 IPA Server>Role-Based Access Control 菜单,点 Delegations。
- 选中您要删除的规则旁边的复选框。
- 单击 Delete。
- 单击 Delete 确认。
第 27 章 委派权限到用户组,以使用 Ansible playbook 管理用户 复制链接链接已复制到粘贴板!
委派是 IdM 中的访问控制方法之一,以及自助服务规则和基于角色的访问控制 (RBAC)。您可以使用委派(delegation)为一组用户分配权限,以管理另一组用户的条目。
27.1. 委派规则 复制链接链接已复制到粘贴板!
您可以通过创建委派规则,将权限委派给用户组来管理用户。
委派规则允许特定用户组对另一用户组中用户的特定属性执行写入(编辑)操作。这种形式的访问控制规则仅限于编辑您在委派规则中指定的属性子集的值;它不授予添加或删除整个条目或控制未指定属性的权限。
委派规则向 IdM 中的现有用户组授予权限。例如,您可以使用委派功能,允许 managers 用户组管理 employees 用户组中的选定用户属性。
27.2. 为 IdM 创建 Ansible 清单文件 复制链接链接已复制到粘贴板!
在使用 Ansible 时,最好在主目录中创建一个专用于 Ansible playbook 的子目录,您可复制 /usr/share/doc/ansible-freeipa/* 和 /usr/share/doc/rhel-system-roles/* 子目录并进行相应的调整。这种做法有以下优点:
- 您可以在一个位置找到所有 playbook。
-
您可以运行 playbook,而无需调用
root特权。
流程
在主目录中为您的 Ansible 配置和 playbook 创建目录:
mkdir ~/MyPlaybooks/
$ mkdir ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks
$ cd ~/MyPlaybooksCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下内容创建 ~/MyPlaybooks/ansible.cfg 文件:
[defaults] inventory = /home/<username>/MyPlaybooks/inventory [privilege_escalation] become=True
[defaults] inventory = /home/<username>/MyPlaybooks/inventory [privilege_escalation] become=TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下内容创建 ~/MyPlaybooks/inventory 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此配置定义了两个主机组,即 eu 和 us,用于这些位置中的主机。此外,此配置定义了 ipaserver 主机组,它包含来自 eu 和 us 组的所有主机。
27.3. 使用 Ansible 确保存在委派规则 复制链接链接已复制到粘贴板!
以下流程描述了如何使用 Ansible playbook 为新的 IdM 委派规则定义特权并确保其存在。在这个示例中,新的 basic manager attributes 委派规则授予 managers 组为 employees 组成员读取和写入以下属性的权限:
-
businesscategory -
departmentnumber -
employeenumber -
employeetype
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 制作位于
/usr/share/doc/ansible-freeipa/playbooks/delegation/目录中的delegation-present.yml文件的副本:cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-present.yml delegation-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-present.yml delegation-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
delegation-present-copy.ymlAnsible playbook 文件以进行编辑。 通过在
ipadelegation任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为新委派规则的名称。 -
将
permission变量设置为以逗号分隔的权限列表,以授予:read和write。 -
将
attribute变量设置为委派的用户组可以管理的属性列表:businesscategory、departmentnumber、employeenumber和employeetype。 -
将
group变量设置为被授予查看或修改属性访问权限的组名称。 -
将
membergroup变量设置为组的名称,其属性可以查看或修改。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
27.4. 使用 Ansible 确保没有委派规则 复制链接链接已复制到粘贴板!
以下流程描述了如何使用 Ansible playbook 来确保您的 IdM 配置中没有指定的委托规则。以下示例描述了如何确保 IdM 中没有存在自定义 basic manager attributes 委派规则。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks>/
$ cd ~/MyPlaybooks>/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 制作位于
/usr/share/doc/ansible-freeipa/playbooks/delegation/目录中的delegation-absent.yml文件的副本:cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-present.yml delegation-absent-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-present.yml delegation-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
delegation-absent-copy.ymlAnsible playbook 文件以进行编辑。 通过在
ipadelegation任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为委派规则的名称。 -
将
state变量设置为absent。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-absent-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
27.5. 使用 Ansible 确保委派规则具有特定属性 复制链接链接已复制到粘贴板!
以下流程描述了如何使用 Ansible playbook 确保委派规则具有特定的设置。您可以使用此 playbook 修改您之前创建的委派角色。在示例中,您可以确保 basic manager attributes 委派规则仅具有 departmentnumber 成员属性。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - IdM 中存在 basic manager attributes委派规则。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 制作位于
/usr/share/doc/ansible-freeipa/playbooks/delegation/目录中的delegation-member-present.yml文件的副本:cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-member-present.yml delegation-member-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-member-present.yml delegation-member-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
delegation-member-present-copy.ymlAnsible playbook 文件以进行编辑。 通过在
ipadelegation任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为要修改的委派规则的名称。 -
将
attribute变量设置为departmentnumber。 -
将
action变量设置为member。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-member-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-member-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
27.6. 使用 Ansible 确保委派规则没有特定属性 复制链接链接已复制到粘贴板!
以下流程描述了如何使用 Ansible playbook 来确保委派规则没有特定的设置。您可以使用此 playbook 确保委派角色不授予不需要的访问权限。在该示例中,您可以确保 basic manager attributes 委派规则没有 employeenumber 和 employeetype 成员属性。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - IdM 中存在 basic manager attributes委派规则。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 制作位于
/usr/share/doc/ansible-freeipa/playbooks/delegation/目录中的delegation-member-absent.yml文件的副本:cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-member-absent.yml delegation-member-absent-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-member-absent.yml delegation-member-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
delegation-member-absent-copy.ymlAnsible playbook 文件以进行编辑。 通过在
ipadelegation任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为要修改的委派规则的名称。 -
将
attribute变量设置为employeenumber和employeetype。 -
将
action变量设置为member。 -
将
state变量设置为absent。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-member-absent-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-member-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 28 章 使用 CLI 在 IdM 中管理基于角色的访问控制 复制链接链接已复制到粘贴板!
在身份管理(IdM)中了解更多有关基于角色的访问控制(RBAC)的信息。RBAC 是一个安全功能,限制对授权用户的访问。您可以使用特定权限定义角色,然后将这些角色分配给用户。
28.1. IdM 中的基于角色的访问控制 复制链接链接已复制到粘贴板!
与自助服务和委派访问控制相比,IdM 中的基于角色的访问控制(RBAC)向用户授予了完全不同的权限。
基于角色的访问控制由三个部分组成:
- Permissions 授予执行特定任务的权利,如添加或删除用户、修改组和启用读权限。
- Privileges(特权) 结合了权限,例如添加新用户所需的所有权限。
- Roles(角色) 向用户、用户组、主机或主机组授予一组特权。
28.1.1. IdM 中的权限 复制链接链接已复制到粘贴板!
权限是基于角色的访问控制的最低级别单元,它们定义这些操作所应用到的 LDAP 条目。与构建块类似,可以根据需要将权限分配给多个特权。
一个或多个权利定义了允许的操作 :
-
write -
读取 -
search -
compare -
add -
delete -
all
这些操作适用于三个基本目标:
-
subtree:域名 (DN);此 DN 下的子树 -
target filter:LDAP 过滤器 -
target:可以带有通配符的 DN 指定条目
此外,以下方便选项可设置对应的属性:
-
type:对象类型(用户、组等);设置subtree和target filter memberof:组成员;设置target filter注意如果目标 LDAP 条目不包含对组成员资格的任何引用,则不会应用
memberof属性权限。-
targetgroup:授予修改特定组的权限(如授予管理组成员资格的权限);设置target
使用 IdM 权限,您可以控制哪些用户有权访问哪些对象,甚至控制这些对象的属性。IdM 允许您允许或阻止单个属性,或更改特定 IdM 功能(如用户、组或 sudo)的完整可见性,适用于所有匿名用户、所有经过身份验证的用户或只是特定的特权用户。
例如,如果管理员只想将用户或组的访问权限限制到这些用户或组需要访问的特定部分,并且使其他部分完全隐藏于他们,此方法的灵活性对管理员很有用。
权限不能包含其他权限。
28.1.2. 默认管理的权限 复制链接链接已复制到粘贴板!
管理的权限是 IdM 默认附带的权限。它们的行为与用户创建的其他权限类似,但有以下区别:
- 您无法删除它们或修改其名称、位置和目标属性。
它们有三组属性:
- Default 属性,用户无法修改它们,因为它们由 IdM 管理
- Included 属性,它们是用户添加的额外属性
- Excluded 属性,这些属性由用户删除
管理的权限适用于 default 和 included 属性集中显示的所有属性,但不应用到排除集中的所有属性。
虽然您无法删除受管权限,但将其绑定类型设置为权限并从所有特权中删除托管权限会有效地禁用该权限。
所有受管权限的名称都以 System: 开头,例如 System: Add Sudo rule 或 System: Modify Services。IdM 的早期版本将不同的方案用于默认权限。例如,用户无法删除它们,而只能将它们分配到特权。这些默认权限大部分已转换为受管权限,但以下权限仍使用以前的方案:
- 添加自动成员重新构建成员身份任务
- 添加配置子条目
- 添加复制协议
- 证书删除冻结
- 从 CA 获取证书状态
- 读取 DNA 范围
- 修改 DNA 范围
- 读取 PassSync Manager 配置
- 修改 PassSync Manager 配置
- 阅读复制协议
- 修改复制协议
- 删除复制协议
- 读取 LDBM 数据库配置
- 请求证书
- 请求证书忽略 CA ACL
- 从不同主机请求证书
- 从 CA 检索证书
- 吊销证书
- 写入 IPA 配置
如果您试图通过命令行修改受管权限,系统不允许更改您无法修改的属性,命令会失败。如果您试图从 Web UI 修改受管权限,则无法修改的属性将被禁用。
28.1.3. IdM 中的特权 复制链接链接已复制到粘贴板!
特权是一组适用于角色的权限。虽然权限提供了执行单个操作的权限,但某些 IdM 任务需要多个权限才能成功。因此,特权组合了执行特定任务所需的不同权限。
例如,为新 IdM 用户设置帐户需要以下权限:
- 创建新用户条目
- 重置用户密码
- 将新用户添加到默认 IPA 用户组
将这三个低级别任务合并到一个更高级别的任务中,例如名为 Add User,可使系统管理员更加轻松地管理角色。IdM 已包含几个默认权限。除了用户和用户组外,还将特权分配到主机和主机组,以及网络服务。这种方法允许精细控制一组主机上使用特定网络服务的操作。
特权可能不包含其他特权。
28.1.4. IdM 中的角色 复制链接链接已复制到粘贴板!
角色是用户为角色指定的特权列表。
实际上,权限授予执行给定低级别任务(如创建用户条目和向组添加一个条目)的能力,特权将高级别任务所需的一个或多个这些权限(如在给定组中创建新用户)组合在一起。角色根据需要收集权限:例如,用户管理员角色能够添加、修改和删除用户。
角色用于对允许的操作进行分类。它们不用作实施特权升级或防止特权升级的工具。
角色不能包含其他角色。
28.1.5. Identity Management 中的预定义角色 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux Identity Management 提供了以下预定义角色的范围:
| 角色 | 特权 | 描述 |
|---|---|---|
| Enrollment Administrator | 主机注册 | 负责客户端或主机、注册 |
| helpdesk | 改用户和重置密码,修改组成员身份 | 负责执行简单的用户管理任务 |
| IT Security Specialist | Netgroups 管理员, HBAC 管理员, Sudo 管理员 | 负责管理安全策略,如基于主机的访问控制、sudo 规则 |
| IT Specialist | 主机管理员、主机组管理员、服务管理员、自动装载管理员 | 负责管理主机 |
| Security Architect | 委派管理员、复制管理员、写 IPA 配置、密码策略管理员 | 负责管理身份管理环境、创建信任、创建复制协议 |
| User Administrator | 用户管理员、组管理员、阶段用户管理员 | 负责创建用户和组 |
28.2. 在 CLI 中管理 IdM 权限 复制链接链接已复制到粘贴板!
按照以下步骤,使用命令行(CLI)管理身份管理(IdM)权限。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 一个活跃的 Kerberos 票据。详情请参阅 使用 kinit 手动登录到 IdM。
流程
使用
ipa permission-add命令创建新权限条目。例如,添加名为 dns admin 的权限:ipa permission-add "dns admin"
$ ipa permission-add "dns admin"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下选项指定权限的属性:
--bindtype指定绑定规则类型。此选项接受all、anonymous和permission参数。permissionbindtype 表示只有通过角色授予此权限的用户才能行行它。例如:
ipa permission-add "dns admin" --bindtype=all
$ ipa permission-add "dns admin" --bindtype=allCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有指定
--bindtype,则permission是默认值。注意不能对特权添加带有非默认绑定规则类型的权限。您也不能对非默认绑定规则类型设置特权中已存在的权限。
--right列出了权限授予的权力,它替换了已弃用的--permissions选项。可用的值有add、delete、read、search、compare、write、all。您可以使用多个
--right选项或使用大括号内以逗号分隔的列表来设置多个属性。例如:ipa permission-add "dns admin" --right=read --right=write ipa permission-add "dns admin" --right={read,write}$ ipa permission-add "dns admin" --right=read --right=write $ ipa permission-add "dns admin" --right={read,write}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意add和delete是入门级操作(例如,删除用户、添加组等),而read、search、compare和write是属性级别操作:您可以写入userCertificate而不是读userPassword。--attrs提供授予权限的属性列表。您可以使用多个
--attrs选项或通过在大括号内以逗号分隔的列表列出选项,来设置多个属性。例如:ipa permission-add "dns admin" --attrs=description --attrs=automountKey ipa permission-add "dns admin" --attrs={description,automountKey}$ ipa permission-add "dns admin" --attrs=description --attrs=automountKey $ ipa permission-add "dns admin" --attrs={description,automountKey}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
--attrs提供的属性必须存在,并且是给定对象类型的允许属性,否则命令会失败,并显示模式语法错误。--type定义对其应用权限的条目对象类型,如用户、主机或服务。每种类型都有其自己的一组允许的属性。
例如:ipa permission-add "manage service" --right=all --type=service --attrs=krbprincipalkey --attrs=krbprincipalname --attrs=managedby
$ ipa permission-add "manage service" --right=all --type=service --attrs=krbprincipalkey --attrs=krbprincipalname --attrs=managedbyCopy to Clipboard Copied! Toggle word wrap Toggle overflow --subtree提供子树条目;然后,过滤器以这个子树条目下的每个条目为目标。提供现有的子树条目;--subtree不接受通配符或不存在的域名(DN)。在目录中包括 DN。因为 IdM 使用简化的扁平目录树结构,所以
--subtree可用于将某些类型的条目作为目标,如自动挂载位置,它们是其他配置的容器或父条目。例如:ipa permission-add "manage automount locations" --subtree="ldap://ldap.example.com:389/cn=automount,dc=example,dc=com" --right=write --attrs=automountmapname --attrs=automountkey --attrs=automountInformation
$ ipa permission-add "manage automount locations" --subtree="ldap://ldap.example.com:389/cn=automount,dc=example,dc=com" --right=write --attrs=automountmapname --attrs=automountkey --attrs=automountInformationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意--type和--subtree选项是互斥的:您可以将--type包含的过滤器视为--subtree的简化,目的是使管理员的工作更为简单。--filter使用 LDAP 过滤器来识别权限应用到哪个条目。IdM 自动检查给定过滤器的有效性。过滤器可以是任何有效的 LDAP 过滤器,例如:
ipa permission-add "manage Windows groups" --filter="(!(objectclass=posixgroup))" --right=write --attrs=description
$ ipa permission-add "manage Windows groups" --filter="(!(objectclass=posixgroup))" --right=write --attrs=descriptionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查组是否存在后,
--memberof对给定组的成员设置目标过滤器。例如,要让拥有此权限的用户修改 engineers 组成员的登录 shell:ipa permission-add ManageShell --right="write" --type=user --attr=loginshell --memberof=engineers
$ ipa permission-add ManageShell --right="write" --type=user --attr=loginshell --memberof=engineersCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果目标 LDAP 条目不包含对组成员资格的任何引用,则不会应用
memberof属性权限。在检查组存在后,
--targetgroup对指定的用户组设置目标。例如,要让那些在 engineers 组中的人拥有写成员属性的权限(这样他们可以添加或删除成员):ipa permission-add ManageMembers --right="write" --subtree=cn=groups,cn=accounts,dc=example,dc=test --attr=member --targetgroup=engineers
$ ipa permission-add ManageMembers --right="write" --subtree=cn=groups,cn=accounts,dc=example,dc=test --attr=member --targetgroup=engineersCopy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,您可以指定目标域名(DN):
-
--target指定要对其应用权限的 DN。可接受通配符. -
--targetto指定条目可移动到的 DN 子树。 -
--targetfrom指定可从中移出条目的 DN 子树。
-
28.3. 现有权限的命令选项 复制链接链接已复制到粘贴板!
根据需要,使用以下变体修改现有权限:
-
要编辑现有权限,请使用
ipa permission-mod命令。您可以使用与添加权限相同的命令选项。 -
要查找现有权限,请使用
ipa permission-find命令。您可以使用与添加权限相同的命令选项。 要查看特定权限,请使用
ipa permission-show命令。--raw参数显示生成的原始 389-ds ACI。例如:ipa permission-show <permission> --raw
$ ipa permission-show <permission> --rawCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
ipa permissions-del命令完全删除权限。
28.4. 在 CLI 中管理 IdM 特权 复制链接链接已复制到粘贴板!
按照以下步骤,使用命令行(CLI)管理身份管理(IdM)特权。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 一个活跃的 Kerberos 票据。详情请查看 link: 使用 kinit 手动登录到 IdM。
- 现有权限。有关权限的详情,请参阅 在 CLI 中管理 IdM 权限。
流程
使用
ipa privilege-add命令添加特权条目例如,使用描述添加名为 managing filesystems 的权限:
ipa privilege-add "managing filesystems" --desc="for filesystems"
$ ipa privilege-add "managing filesystems" --desc="for filesystems"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 privilege-
add-permission 命令为特权组分配所需的权限例如,要将名为 managing automount 和 managing ftp services 的权限添加到 managing filesystems 特权中:
ipa privilege-add-permission "managing filesystems" --permissions="managing automount" --permissions="managing ftp services"
$ ipa privilege-add-permission "managing filesystems" --permissions="managing automount" --permissions="managing ftp services"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
28.5. 现有权限的命令选项 复制链接链接已复制到粘贴板!
根据需要,使用以下变体修改现有特权:
-
若要修改现有特权,可使用
ipa privilege-mod命令。 -
要查找现有特权,请使用
ipa privilege-find命令。 -
若要查看特定的特权,可使用
ipa privilege-show命令。 -
ipa privilege-remove-permission命令从特权中删除一个或多个权限。 -
ipa privilege-del命令完全删除特权。
28.6. 在 CLI 中管理 IdM 角色 复制链接链接已复制到粘贴板!
按照以下步骤,使用命令行(CLI)管理身份管理(IdM)角色。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 一个活跃的 Kerberos 票据。详情请参阅 使用 kinit 手动登录到 IdM。
- 现有特权。有关特权的详情,请参阅 在 CLI 中管理 IdM 特权。
流程
使用
ipa role-add命令添加新角色条目:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ipa role-add-privilege命令将所需的特权添加到角色中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ipa role-add-member命令将所需的成员添加到角色中。允许的成员类型有:users、groups、hosts hostgroups。
例如,将名为 useradmins 的组添加到之前创建的 useradmin 角色中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
28.7. 现有角色的命令选项 复制链接链接已复制到粘贴板!
根据需要,使用以下变体修改现有角色:
-
若要修改现有角色,请使用
ipa role-mod命令。 -
要查找现有角色,请使用
ipa role-find命令。 -
要查看特定的角色,请使用
ipa role-show命令。 -
若要从角色中删除成员,请使用
ipa role-remove-member命令。 -
ipa role-remove-privilege命令从角色中删除一个或多个特权。 -
ipa role-del命令将完全删除角色。
第 29 章 使用 IdM Web UI 管理基于角色的访问控制 复制链接链接已复制到粘贴板!
在身份管理(IdM)中了解更多有关基于角色的访问控制(RBAC)的信息。RBAC 是一个安全功能,限制对授权用户的访问。您可以使用特定权限定义角色,然后将这些角色分配给用户。
29.1. IdM 中的基于角色的访问控制 复制链接链接已复制到粘贴板!
与自助服务和委派访问控制相比,IdM 中的基于角色的访问控制(RBAC)向用户授予了完全不同的权限。
基于角色的访问控制由三个部分组成:
- Permissions 授予执行特定任务的权利,如添加或删除用户、修改组和启用读权限。
- Privileges(特权) 结合了权限,例如添加新用户所需的所有权限。
- Roles(角色) 向用户、用户组、主机或主机组授予一组特权。
29.1.1. IdM 中的权限 复制链接链接已复制到粘贴板!
权限是基于角色的访问控制的最低级别单元,它们定义这些操作所应用到的 LDAP 条目。与构建块类似,可以根据需要将权限分配给多个特权。
一个或多个权利定义了允许的操作 :
-
write -
读取 -
search -
compare -
add -
delete -
all
这些操作适用于三个基本目标:
-
subtree:域名 (DN);此 DN 下的子树 -
target filter:LDAP 过滤器 -
target:可以带有通配符的 DN 指定条目
此外,以下方便选项可设置对应的属性:
-
type:对象类型(用户、组等);设置subtree和target filter memberof:组成员;设置target filter注意如果目标 LDAP 条目不包含对组成员资格的任何引用,则不会应用
memberof属性权限。-
targetgroup:授予修改特定组的权限(如授予管理组成员资格的权限);设置target
使用 IdM 权限,您可以控制哪些用户有权访问哪些对象,甚至控制这些对象的属性。IdM 允许您允许或阻止单个属性,或更改特定 IdM 功能(如用户、组或 sudo)的完整可见性,适用于所有匿名用户、所有经过身份验证的用户或只是特定的特权用户。
例如,如果管理员只想将用户或组的访问权限限制到这些用户或组需要访问的特定部分,并且使其他部分完全隐藏于他们,此方法的灵活性对管理员很有用。
权限不能包含其他权限。
29.1.2. 默认管理的权限 复制链接链接已复制到粘贴板!
管理的权限是 IdM 默认附带的权限。它们的行为与用户创建的其他权限类似,但有以下区别:
- 您无法删除它们或修改其名称、位置和目标属性。
它们有三组属性:
- Default 属性,用户无法修改它们,因为它们由 IdM 管理
- Included 属性,它们是用户添加的额外属性
- Excluded 属性,这些属性由用户删除
管理的权限适用于 default 和 included 属性集中显示的所有属性,但不应用到排除集中的所有属性。
虽然您无法删除受管权限,但将其绑定类型设置为权限并从所有特权中删除托管权限会有效地禁用该权限。
所有受管权限的名称都以 System: 开头,例如 System: Add Sudo rule 或 System: Modify Services。IdM 的早期版本将不同的方案用于默认权限。例如,用户无法删除它们,而只能将它们分配到特权。这些默认权限大部分已转换为受管权限,但以下权限仍使用以前的方案:
- 添加自动成员重新构建成员身份任务
- 添加配置子条目
- 添加复制协议
- 证书删除冻结
- 从 CA 获取证书状态
- 读取 DNA 范围
- 修改 DNA 范围
- 读取 PassSync Manager 配置
- 修改 PassSync Manager 配置
- 阅读复制协议
- 修改复制协议
- 删除复制协议
- 读取 LDBM 数据库配置
- 请求证书
- 请求证书忽略 CA ACL
- 从不同主机请求证书
- 从 CA 检索证书
- 吊销证书
- 写入 IPA 配置
如果您试图通过命令行修改受管权限,系统不允许更改您无法修改的属性,命令会失败。如果您试图从 Web UI 修改受管权限,则无法修改的属性将被禁用。
29.1.3. IdM 中的特权 复制链接链接已复制到粘贴板!
特权是一组适用于角色的权限。虽然权限提供了执行单个操作的权限,但某些 IdM 任务需要多个权限才能成功。因此,特权组合了执行特定任务所需的不同权限。
例如,为新 IdM 用户设置帐户需要以下权限:
- 创建新用户条目
- 重置用户密码
- 将新用户添加到默认 IPA 用户组
将这三个低级别任务合并到一个更高级别的任务中,例如名为 Add User,可使系统管理员更加轻松地管理角色。IdM 已包含几个默认权限。除了用户和用户组外,还将特权分配到主机和主机组,以及网络服务。这种方法允许精细控制一组主机上使用特定网络服务的操作。
特权可能不包含其他特权。
29.1.4. IdM 中的角色 复制链接链接已复制到粘贴板!
角色是用户为角色指定的特权列表。
实际上,权限授予执行给定低级别任务(如创建用户条目和向组添加一个条目)的能力,特权将高级别任务所需的一个或多个这些权限(如在给定组中创建新用户)组合在一起。角色根据需要收集权限:例如,用户管理员角色能够添加、修改和删除用户。
角色用于对允许的操作进行分类。它们不用作实施特权升级或防止特权升级的工具。
角色不能包含其他角色。
29.1.5. Identity Management 中的预定义角色 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux Identity Management 提供了以下预定义角色的范围:
| 角色 | 特权 | 描述 |
|---|---|---|
| Enrollment Administrator | 主机注册 | 负责客户端或主机、注册 |
| helpdesk | 改用户和重置密码,修改组成员身份 | 负责执行简单的用户管理任务 |
| IT Security Specialist | Netgroups 管理员, HBAC 管理员, Sudo 管理员 | 负责管理安全策略,如基于主机的访问控制、sudo 规则 |
| IT Specialist | 主机管理员、主机组管理员、服务管理员、自动装载管理员 | 负责管理主机 |
| Security Architect | 委派管理员、复制管理员、写 IPA 配置、密码策略管理员 | 负责管理身份管理环境、创建信任、创建复制协议 |
| User Administrator | 用户管理员、组管理员、阶段用户管理员 | 负责创建用户和组 |
29.2. 在 IdM Web UI 中管理权限 复制链接链接已复制到粘贴板!
按照以下流程,使用 Web 界面(IdM Web UI)在身份管理(IdM)中管理权限。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 您已登录到 IdM Web UI。详情请参阅 在 Web 浏览器中访问 IdM Web UI。
流程
- 要添加新权限,请打开 IPA Server>Role-Based Access Control 子菜单,然后选择 Permissions :
- 此时会打开权限列表:点击权限列表顶部的 Add 按钮:
- 此时会打开 Add Permission 表单。指定新权限的名称并定义其属性。
选择适当的绑定规则类型:
- permission 是默认的权限类型,通过特权和角色授予访问权限
- all 指定权限适用于所有经过身份验证的用户
anonymous 指定权限适用于所有用户,包括未经身份验证的用户
注意不能对特权添加带有非默认绑定规则类型的权限。您也不能对非默认绑定规则类型设置特权中已存在的权限。
- 选择在 Granted rights 中使用此权限授予权限的权限。
定义方法来标别权限的目标条目:
- Type 指定条目类型,如 user、host 或 service。如果您为 Type 设置选择了一个值,则可通过该 ACI 访问该条目类型的所有可能属性的列表将出现在 Effective Attributes 下。定义 Type 会将 Subtree 和 Target DN 设置为其中一个预定义的值。
-
Subtree (必需的)指定一个子树条目;然后这个子树条目下的每个条目都成为目标。提供现有的子树条目,因为 Subtree 不接受通配符或不存在的域名(DN)。例如:
cn=automount,dc=example,dc=com 额外目标过滤器 使用 LDAP 过滤器来识别权限将应用到哪个条目。过滤器可以是任何有效的 LDAP 过滤器,例如:
(! (objectclass=posixgroup))IdM 自动检查给定过滤器的有效性。如果您输入无效的过滤器,IdM 会在您尝试保存权限时给您发出警告。
-
目标 DN 指定域名(DN),并接受通配符。例如:
uid=*,cn=users,cn=accounts,dc=com 组成员 对给定组的成员设置目标过滤器。指定过滤器设置并点击 Add 后,IdM 会验证过滤器。如果所有权限设置都正确,IdM 将执行搜索。如果某些权限设置不正确,IdM 将显示一条消息,通知您哪个设置不正确。
注意如果目标 LDAP 条目不包含对组成员资格的任何引用,则不会应用
memberof属性权限。
向权限添加属性:
- 如果设置了 Type,请从可用的 ACI 属性列表中选择 Effective attributes。
如果您没有使用 Type,通过将属性写入Effective attributes 字段来手动添加属性。一次添加一个属性;若要添加多个属性,可单击 Add 来添加另一个输入字段。
重要如果您没有为权限设置任何属性,则权限默认包含所有属性。
使用表单底部的 Add 按钮完成添加权限:
- 单击 Add 按钮来保存权限,并回到权限列表。
- 要保存权限并继续在同一形式添加额外权限,请点 Add and Add another 按钮。
- Add and Edit 按钮使您可以保存并继续编辑新创建的权限。
- 可选: 您还可以通过点击权限列表中的 name 来显示 Permission settings 页面来编辑现有权限的属性。
可选:如果您需要删除现有权限,请在列表中选择其名称旁边的复选框,然后点击 Delete 按钮来显示 Remove permissions 对话框。点击 Delete。
注意对默认受管权限的操作受限:您无法修改的属性在 IdM Web UI 中被禁用,您无法完全删除受管权限。
但是,您可以通过从所有特权中删除受管权限,可以有效禁用设置了绑定类型权限的受管权限。
例如,下面显示了如何配置 engineers 组中的 member 属性的权限 写入 (因此他们可以添加或删除成员):
+
29.3. 在 IdM Web UI 中管理特权 复制链接链接已复制到粘贴板!
按照以下流程,使用 Web 界面(IdM Web UI)在 IdM 中管理特权。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 您已登录到 IdM Web UI。详情请参阅 在 Web 浏览器中访问 IdM Web UI。
- 现有权限。有关权限的详情,请参阅 在 IdM Web UI 中管理权限。
流程
- 要添加新的特权,请打开 IPA Server>Role-Based Access Control 子菜单,然后选择 Privileges :
- 此时会打开权限列表。单击特权列表顶部的 Add 按钮。
- 此时会打开 Add Privilege 表单。输入特权的名称和描述。
- 单击 Add and Edit 按钮,以保存新特权,并继续特权配置页面来添加权限。
- 单击 Permissions 选项卡,以显示所选特权中包含的权限列表。点击列表顶部的 Add 按钮向特权添加权限:
- 选中要添加的每个权限名称旁边的复选框,并使用 > 按钮将 权限移到 Prospective 列中。
- 单击 Add 按钮进行确认。
- 可选:如果您需要删除权限,请选择相关权限旁边的复选框,然后点击 Delete 按钮来显示 Remove privileges from permissions 对话框。点击 Delete。
- 可选:如果您需要删除现有特权,请在列表中选中其名称旁边的复选框,然后单击 Delete 按钮以打开 Remove privileges 对话框。点击 Delete。
29.4. 在 IdM Web UI 中管理角色 复制链接链接已复制到粘贴板!
按照以下流程,使用 Web 界面(IdM Web UI)管理身份管理(IdM)中的角色。
先决条件
- 管理 IdM 或 用户管理员 角色的管理员特权。
- 您已登录到 IdM Web UI。详情请参阅 在 Web 浏览器中访问 IdM Web UI。
- 现有特权。有关特权的详情,请参阅 在 IdM Web UI 中管理特权。
流程
- 要添加新角色,请打开 IPA Server>Role-Based Access Control 子菜单,然后选择 Roles :
- 角色列表会打开。单击角色列表顶部的 Add 按钮。
- 此时会打开 Add Role 表单。输入角色名称和描述:
- 单击 Add and Edit 按钮,以保存新角色,并继续到角色配置页面来添加特权和用户。
- 单击相关列表顶部的 Add 按钮,使用 Users 、Users Groups、Hosts、Host Groups 或 Services 选项卡来添加成员。
- 在打开的窗口中,选择左侧的成员,并使用 > 按钮将它们移到 Prospective 列中。
- 选择 Privileges 选项卡,再单击 Add。
- 选择左侧的特权,并使用 > 按钮将它们移到 Prospective 列中。
- 单击 Add 按钮保存。
- 可选:如果您需要从角色中删除特权或成员,请选择您要删除的实体名称旁边的复选框,然后点 Delete 按钮。此时会打开一个对话框。点击 Delete。
- 可选:如果您需要删除现有角色,请在列表中选中其名称旁边的复选框,然后单击 Delete 按钮以显示 Remove roles 对话框。点击 Delete。
第 30 章 在 IdM 中使用 Ansible playbook 管理基于角色的访问控制 复制链接链接已复制到粘贴板!
基于角色的访问控制 (RBAC) 是一种基于角色和特权定义的策略中立访问控制机制。在 Identity Management (IdM) 中的 RBAC 组件是角色、权限和权限:
- Permissions 授予执行特定任务的权利,如添加或删除用户、修改组和启用读权限。
- Privileges(特权) 结合了权限,例如添加新用户所需的所有权限。
- Roles(角色) 向用户、用户组、主机或主机组授予一组特权。
尤其是在大型公司,使用 RBAC 可以帮助创建具有各个职责领域的管理员分层系统。
了解在使用 Ansible playbook 管理 RBAC 时您可以执行的操作。
30.1. IdM 中的权限 复制链接链接已复制到粘贴板!
权限是基于角色的访问控制的最低级别单元,它们定义这些操作所应用到的 LDAP 条目。与构建块类似,可以根据需要将权限分配给多个特权。
一个或多个权利定义了允许的操作 :
-
write -
读取 -
search -
compare -
add -
delete -
all
这些操作适用于三个基本目标:
-
subtree:域名 (DN);此 DN 下的子树 -
target filter:LDAP 过滤器 -
target:可以带有通配符的 DN 指定条目
此外,以下方便选项可设置对应的属性:
-
type:对象类型(用户、组等);设置subtree和target filter memberof:组成员;设置target filter注意如果目标 LDAP 条目不包含对组成员资格的任何引用,则不会应用
memberof属性权限。-
targetgroup:授予修改特定组的权限(如授予管理组成员资格的权限);设置target
使用 IdM 权限,您可以控制哪些用户有权访问哪些对象,甚至控制这些对象的属性。IdM 允许您允许或阻止单个属性,或更改特定 IdM 功能(如用户、组或 sudo)的完整可见性,适用于所有匿名用户、所有经过身份验证的用户或只是特定的特权用户。
例如,如果管理员只想将用户或组的访问权限限制到这些用户或组需要访问的特定部分,并且使其他部分完全隐藏于他们,此方法的灵活性对管理员很有用。
权限不能包含其他权限。
30.2. 默认管理的权限 复制链接链接已复制到粘贴板!
管理的权限是 IdM 默认附带的权限。它们的行为与用户创建的其他权限类似,但有以下区别:
- 您无法删除它们或修改其名称、位置和目标属性。
它们有三组属性:
- Default 属性,用户无法修改它们,因为它们由 IdM 管理
- Included 属性,它们是用户添加的额外属性
- Excluded 属性,这些属性由用户删除
管理的权限适用于 default 和 included 属性集中显示的所有属性,但不应用到排除集中的所有属性。
虽然您无法删除受管权限,但将其绑定类型设置为权限并从所有特权中删除托管权限会有效地禁用该权限。
所有受管权限的名称都以 System: 开头,例如 System: Add Sudo rule 或 System: Modify Services。IdM 的早期版本将不同的方案用于默认权限。例如,用户无法删除它们,而只能将它们分配到特权。这些默认权限大部分已转换为受管权限,但以下权限仍使用以前的方案:
- 添加自动成员重新构建成员身份任务
- 添加配置子条目
- 添加复制协议
- 证书删除冻结
- 从 CA 获取证书状态
- 读取 DNA 范围
- 修改 DNA 范围
- 读取 PassSync Manager 配置
- 修改 PassSync Manager 配置
- 阅读复制协议
- 修改复制协议
- 删除复制协议
- 读取 LDBM 数据库配置
- 请求证书
- 请求证书忽略 CA ACL
- 从不同主机请求证书
- 从 CA 检索证书
- 吊销证书
- 写入 IPA 配置
如果您试图通过命令行修改受管权限,系统不允许更改您无法修改的属性,命令会失败。如果您试图从 Web UI 修改受管权限,则无法修改的属性将被禁用。
30.3. IdM 中的特权 复制链接链接已复制到粘贴板!
特权是一组适用于角色的权限。虽然权限提供了执行单个操作的权限,但某些 IdM 任务需要多个权限才能成功。因此,特权组合了执行特定任务所需的不同权限。
例如,为新 IdM 用户设置帐户需要以下权限:
- 创建新用户条目
- 重置用户密码
- 将新用户添加到默认 IPA 用户组
将这三个低级别任务合并到一个更高级别的任务中,例如名为 Add User,可使系统管理员更加轻松地管理角色。IdM 已包含几个默认权限。除了用户和用户组外,还将特权分配到主机和主机组,以及网络服务。这种方法允许精细控制一组主机上使用特定网络服务的操作。
特权可能不包含其他特权。
30.4. IdM 中的角色 复制链接链接已复制到粘贴板!
角色是用户为角色指定的特权列表。
实际上,权限授予执行给定低级别任务(如创建用户条目和向组添加一个条目)的能力,特权将高级别任务所需的一个或多个这些权限(如在给定组中创建新用户)组合在一起。角色根据需要收集权限:例如,用户管理员角色能够添加、修改和删除用户。
角色用于对允许的操作进行分类。它们不用作实施特权升级或防止特权升级的工具。
角色不能包含其他角色。
30.5. Identity Management 中的预定义角色 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux Identity Management 提供了以下预定义角色的范围:
| 角色 | 特权 | 描述 |
|---|---|---|
| Enrollment Administrator | 主机注册 | 负责客户端或主机、注册 |
| helpdesk | 改用户和重置密码,修改组成员身份 | 负责执行简单的用户管理任务 |
| IT Security Specialist | Netgroups 管理员, HBAC 管理员, Sudo 管理员 | 负责管理安全策略,如基于主机的访问控制、sudo 规则 |
| IT Specialist | 主机管理员、主机组管理员、服务管理员、自动装载管理员 | 负责管理主机 |
| Security Architect | 委派管理员、复制管理员、写 IPA 配置、密码策略管理员 | 负责管理身份管理环境、创建信任、创建复制协议 |
| User Administrator | 用户管理员、组管理员、阶段用户管理员 | 负责创建用户和组 |
30.6. 使用 Ansible 确保存在带有特权的 IdM RBAC 角色 复制链接链接已复制到粘贴板!
要对身份管理 (IdM) 中的资源 (IdM) 中的资源进行更加精细的控制,请创建自定义角色。
以下流程描述了如何使用 Ansible playbook 为新的 IdM 自定义角色定义特权并确保其存在。在这个示例中,新的 user_and_host_administrator 角色默认包含 IdM 中的以下权限的唯一组合:
-
Group Administrators -
User Administrators -
Stage User Administrators -
Group Administrators
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/<MyPlaybooks>/ 目录:
cd ~/<MyPlaybooks>/
$ cd ~/<MyPlaybooks>/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/目录的role-member-user-present.yml文件的副本:cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-user-present.yml role-member-user-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-user-present.yml role-member-user-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
role-member-user-present-copy.ymlAnsible playbook 文件以进行编辑。 通过在
iparole任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为新角色的名称。 -
将
privilege列表设置为您要包含在新角色中的 IdM 权限的名称。 -
(可选)将
user变量设置为您要授予新角色的用户名称。 -
(可选)将
group变量设置为要授予新角色的组的名称。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-user-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-user-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
30.7. 使用 Ansible 确保缺少 IdM RBAC 角色 复制链接链接已复制到粘贴板!
作为管理身份管理 (IdM) 中基于角色的访问控制 (RBAC) 的系统管理员,您可能希望确保没有过时的角色,以便任何管理员不会意外将它分配给任何用户。
以下流程描述了如何使用 Ansible playbook 来确保缺少角色。以下示例描述了如何确保 IdM 中不存在自定义 user_and_host_administrator 角色。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/<MyPlaybooks>/ 目录:
cd ~/<MyPlaybooks>/
$ cd ~/<MyPlaybooks>/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/目录的role-is-absent.yml文件的副本:cp /usr/share/doc/ansible-freeipa/playbooks/role/role-is-absent.yml role-is-absent-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-is-absent.yml role-is-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
role-is-absent-copy.ymlAnsible playbook 文件以进行编辑。 通过在
iparole任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为角色的名称。 -
确保
state变量设置为absent。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-is-absent-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-is-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
30.8. 使用 Ansible 确保为一组用户分配 IdM RBAC 角色 复制链接链接已复制到粘贴板!
作为管理身份管理 (IdM) 中基于角色的访问控制 (RBAC) 的系统管理员,您可能希望为一组特定的用户(如初级管理员)分配角色。
以下示例描述了如何使用 Ansible playbook 来确保为 junior_sysadmins 分配内置 IdM RBAC helpdesk 角色。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/<MyPlaybooks>/ 目录:
cd ~/<MyPlaybooks>/
$ cd ~/<MyPlaybooks>/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/目录的role-member-group-present.yml文件的副本:cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-group-present.yml role-member-group-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-group-present.yml role-member-group-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
role-member-group-present-copy.ymlAnsible playbook 文件以进行编辑。 通过在
iparole任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为您要分配的角色的名称。 -
将
group变量设置为组的名称。 -
将
action变量设置为member。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-group-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-group-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
30.9. 使用 Ansible 确保没有将特定用户分配给 IdM RBAC 角色 复制链接链接已复制到粘贴板!
作为系统管理员,在身份管理 (IdM) 中管理基于角色的访问控制 (RBAC),您可能需要确保在特定用户已移至公司内的不同位置后,不会为其分配 RBAC 角色。
以下流程描述了如何使用 Ansible playbook 来确保没有将名为 user_01 和 user_02 的用户分配到 helpdesk 角色。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/<MyPlaybooks>/ 目录:
cd ~/<MyPlaybooks>/
$ cd ~/<MyPlaybooks>/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/目录的role-member-user-absent.yml文件的副本:cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-user-absent.yml role-member-user-absent-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-user-absent.yml role-member-user-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
role-member-user-absent-copy.ymlAnsible playbook 文件以进行编辑。 通过在
iparole任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为您要分配的角色的名称。 -
将
user列表设置为用户的名称。 -
将
action变量设置为member。 -
将
state变量设置为absent。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-user-absent-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-user-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
30.10. 使用 Ansible 确保服务是 IdM RBAC 角色的成员 复制链接链接已复制到粘贴板!
作为管理身份管理 (IdM) 中基于角色的访问控制 (RBAC) 的系统管理员,您可能希望确保注册 IdM 的特定服务是特定角色的成员。以下示例描述了如何确保自定义 web_administrator 角色可以管理 client01.idm.example.com 服务器上运行的 HTTP 服务。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - web_administrator 角色存在于 IdM 中。
- IdM 中存在 HTTP/client01.idm.example.com@IDM.EXAMPLE.COM 服务。
流程
进入 ~/<MyPlaybooks>/ 目录:
cd ~/<MyPlaybooks>/
$ cd ~/<MyPlaybooks>/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/目录的role-member-service-present.yml文件的副本:cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-service-present-absent.yml role-member-service-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-service-present-absent.yml role-member-service-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
role-member-service-present-copy.ymlAnsible playbook 文件以进行编辑。 通过在
iparole任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为您要分配的角色的名称。 -
将
service列表设置为服务的名称。 -
将
action变量设置为member。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-service-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-service-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
30.11. 使用 Ansible 确保主机是 IdM RBAC 角色的成员 复制链接链接已复制到粘贴板!
作为在身份管理 (IdM) 中管理基于角色的访问控制的系统管理员,您可能希望确保特定的主机或主机组与特定角色关联。以下示例描述了如何确保自定义 web_administrator 角色可以管理运行 HTTP 服务的 client01.idm.example.com IdM 主机。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - web_administrator 角色存在于 IdM 中。
- client01.idm.example.com 主机存在于 IdM 中。
流程
进入 ~/<MyPlaybooks>/ 目录:
cd ~/<MyPlaybooks>/
$ cd ~/<MyPlaybooks>/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/目录的role-member-host-present.yml文件的副本:cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-host-present.yml role-member-host-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-host-present.yml role-member-host-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
role-member-host-present-copy.ymlAnsible playbook 文件以进行编辑。 通过在
iparole任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为您要分配的角色的名称。 -
将
host列表设置为主机的名称。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-host-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-host-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
30.12. 使用 Ansible 确保主机组是 IdM RBAC 角色的成员 复制链接链接已复制到粘贴板!
作为在身份管理 (IdM) 中管理基于角色的访问控制的系统管理员,您可能希望确保特定的主机或主机组与特定角色关联。以下示例描述了如何确保自定义 web_administrator 角色可以管理运行 HTTP 服务的 IdM 主机组的 web_servers 组。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - web_administrator 角色存在于 IdM 中。
- web_servers 主机组存在于 IdM 中。
流程
进入 ~/<MyPlaybooks>/ 目录:
cd ~/<MyPlaybooks>/
$ cd ~/<MyPlaybooks>/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/目录的role-member-hostgroup-present.yml文件的副本:cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-hostgroup-present.yml role-member-hostgroup-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-hostgroup-present.yml role-member-hostgroup-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
role-member-hostgroup-present-copy.ymlAnsible playbook 文件以进行编辑。 通过在
iparole任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为您要分配的角色的名称。 -
将
hostgroup列表设置为 hostgroup 的名称。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-hostgroup-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-hostgroup-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 31 章 使用 Ansible playbook 管理 RBAC 特权 复制链接链接已复制到粘贴板!
基于角色的访问控制 (RBAC) 是一种基于角色、特权和权限定义的策略中立访问控制机制。尤其是在大型公司,使用 RBAC 可以帮助创建具有各个职责领域的管理员分层系统。
了解如何使用 Ansible playbook 在身份管理(IdM)中管理 RBAC 特权。
先决条件
- 您已了解 RBAC 的概念和原则。
31.1. 使用 Ansible 确保存在自定义 IdM RBAC 特权 复制链接链接已复制到粘贴板!
要在 Identity Management (IdM) 基于角色的访问控制 (RBAC) 中有一个完全设计的自定义权限,您需要逐步进行:
- 创建没有附加权限的特权。
- 将您选择的权限添加到特权。
以下流程描述了如何使用 Ansible playbook 创建空特权,以便稍后您可以向它添加权限。这个示例描述了如何创建名为 full_host_administration 的特权,它旨在组合与主机管理相关的所有 IdM 权限。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成位于
/usr/share/doc/ansible-freeipa/playbooks/privilege/目录中的privilege-present.yml文件副本:cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-present.yml privilege-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-present.yml privilege-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
privilege-present-copy.ymlAnsible playbook 文件以进行编辑。 通过在
ipaprivilege任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为新特权 full_host_administration 的名称。 -
(可选)利用
description变量描述特权。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory privilege-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory privilege-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
31.2. 使用 Ansible 确保自定义 IdM RBAC 特权中存在成员权限 复制链接链接已复制到粘贴板!
要在 Identity Management (IdM) 基于角色的访问控制 (RBAC) 中有一个完全设计的自定义权限,您需要逐步进行:
- 创建没有附加权限的特权。
- 将您选择的权限添加到特权。
以下流程描述了如何使用 Ansible playbook 向上一步中创建的特权添加权限。这个示例描述了如何将与主机管理相关的所有 IdM 权限添加到名为 full_host_administration 的特权中。默认情况下,权限在 Host Enrollment、Host Administrators 和 Host Group Administrator 特权之间分发。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - full_host_administration 特权存在。有关如何使用 Ansible 创建特权的详情,请参阅 使用 Ansible 确保自定义 IdM RBAC 特权存在。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成位于
/usr/share/doc/ansible-freeipa/playbooks/privilege/目录中的privilege-member-present.yml文件副本:cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-member-present.yml privilege-member-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-member-present.yml privilege-member-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
privilege-member-present-copy.ymlAnsible playbook 文件以进行编辑。 通过在
ipaprivilege任务部分设置以下变量来调整文件:-
调整任务的
name,使其与您的用例对应。 -
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为特权的名称。 -
将
permission列表设置为您要包含在权限中的权限名称。 -
确保
action变量设置为member。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
调整任务的
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory privilege-member-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory privilege-member-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
31.3. 使用 Ansible 确保 IdM RBAC 特权不包括权限 复制链接链接已复制到粘贴板!
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制。
以下流程描述了如何使用 Ansible playbook 从特权中删除权限。示例描述了如何从默认 Certificate Administrators 特权中删除 Request Certificates ignoring CA ACLs 权限,例如,管理员认为它存在安全风险。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成位于
/usr/share/doc/ansible-freeipa/playbooks/privilege/目录中的privilege-member-present.yml文件副本:cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-member-absent.yml privilege-member-absent-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-member-absent.yml privilege-member-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
privilege-member-absent-copy.ymlAnsible playbook 文件以进行编辑。 通过在
ipaprivilege任务部分设置以下变量来调整文件:-
调整任务的
name,使其与您的用例对应。 -
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为特权的名称。 -
将
permission列表设置为您要从特权中删除的权限名称。 -
确保
action变量设置为member。 -
确保
state变量设置为absent。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
调整任务的
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory privilege-member-absent-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory privilege-member-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
31.4. 使用 Ansible 重命名自定义 IdM RBAC 特权 复制链接链接已复制到粘贴板!
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制。
以下流程描述了如何重命名权限,例如,您已从其中删除了一些权限。因此,特权的名称不再准确。在示例中,管理员将 full_host_administration 特权重命名为 limited_host_administration。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - full_host_administration 特权存在。有关如何添加特权的更多信息,请参阅 使用 Ansible 确保自定义 IdM RBAC 特权存在。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成位于
/usr/share/doc/ansible-freeipa/playbooks/privilege/目录中的privilege-present.yml文件副本:cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-present.yml rename-privilege.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-present.yml rename-privilege.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
rename-privilege.ymlAnsible playbook 文件以进行编辑。 通过在
ipaprivilege任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为特权的当前名称。 -
添加
rename变量,并将它设置为特权的新名称。 -
添加
state变量,并将它设置为重命名。
-
将
重新命名 playbook 本身,例如:
--- - name: Rename a privilege hosts: ipaserver
--- - name: Rename a privilege hosts: ipaserverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 playbook 中重命名任务,例如:
[...] tasks: - name: Ensure the full_host_administration privilege is renamed to limited_host_administration ipaprivilege: [...]
[...] tasks: - name: Ensure the full_host_administration privilege is renamed to limited_host_administration ipaprivilege: [...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory rename-privilege.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory rename-privilege.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
31.5. 使用 Ansible 确保缺少 IdM RBAC 特权 复制链接链接已复制到粘贴板!
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制。以下流程描述了如何使用 Ansible playbook 来确保缺少 RBAC 特权。这个示例描述了如何确保缺少 CA administrator 特权。因此,admin 成为在 IdM 中管理证书颁发机构的唯一用户。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成位于
/usr/share/doc/ansible-freeipa/playbooks/privilege/目录中的privilege-absent.yml文件副本:cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-absent.yml privilege-absent-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-absent.yml privilege-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
privilege-absent-copy.ymlAnsible playbook 文件以进行编辑。 通过在
ipaprivilege任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为您要删除的特权的名称。 -
确保
state变量设置为absent。
-
将
在 playbook 中重命名任务,例如:
[...] tasks: - name: Ensure privilege "CA administrator" is absent ipaprivilege: [...]
[...] tasks: - name: Ensure privilege "CA administrator" is absent ipaprivilege: [...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory privilege-absent-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory privilege-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 32 章 使用 Ansible playbook 在 IdM 中管理 RBAC 权限 复制链接链接已复制到粘贴板!
基于角色的访问控制 (RBAC) 是一种基于角色、特权和权限定义的策略中立访问控制机制。尤其是在大型公司,使用 RBAC 可以帮助创建具有各个职责领域的管理员分层系统。
了解在使用 Ansible playbook 在身份管理(IdM)中管理 RBAC 权限时您可以执行的操作:
先决条件
- 您已了解 RBAC 的概念和原则。
32.1. 使用 Ansible 确保存在 RBAC 权限 复制链接链接已复制到粘贴板!
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制 (RBAC)。
以下流程描述了如何使用 Ansible playbook 确保 IdM 中存在权限,以便它可以添加到特权中。这个示例描述了如何确保以下目标状态:
-
MyPermission权限存在。 -
MyPermission权限只能应用到主机。 授予了包含权限的用户可以对条目执行以下所有可能的操作:
- 写
- 读
- 搜索
- 比较
- 添加
- 删除
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 制作位于
/usr/share/doc/ansible-freeipa/playbooks/permission/目录中的permission-present.yml文件的副本:cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-present.yml permission-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-present.yml permission-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
permission-present-copy.ymlAnsible playbook 文件进行编辑。 通过在
ipapermission任务部分中设置以下变量来调整文件:-
调整任务的
name,使其与您的用例对应。 -
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为权限的名称。 -
将
object_type变量设置为host。 -
将
right变量设置为all。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
调整任务的
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory permission-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory permission-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
32.2. 使用 Ansible 确保存在带有属性的 RBAC 权限 复制链接链接已复制到粘贴板!
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制 (RBAC)。
以下流程描述了如何使用 Ansible playbook 确保 IdM 中存在权限,以便它可以添加到特权中。这个示例描述了如何确保以下目标状态:
- MyPermission 权限存在。
- MyPermission 权限只能用于添加主机。
获得了包含权限的用户可以在主机条目上执行以下所有可能的操作:
- 写
- 读
- 搜索
- 比较
- 添加
- 删除
-
被授予特权的用户创建的主机条目包含 MyPermission 权限,可以具有
description值。
创建或修改权限时可以指定的属性类型不受 IdM LDAP 模式的限制。但是,当 object_type 是 host 时指定 attrs: car_licence,会导致在使用权限并为一个主机添加特定的 car 许可证时出现 ipa: ERROR: attribute "car-license" not allowed 错误。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 制作位于
/usr/share/doc/ansible-freeipa/playbooks/permission/目录中的permission-present.yml文件的副本:cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-present.yml permission-present-with-attribute.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-present.yml permission-present-with-attribute.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
permission-present-with-attribute.ymlAnsible playbook 文件进行编辑。 通过在
ipapermission任务部分中设置以下变量来调整文件:-
调整任务的
name,使其与您的用例对应。 -
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为权限的名称。 -
将
object_type变量设置为host。 -
将
right变量设置为all。 -
将
attrs变量设置为description。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
调整任务的
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory permission-present-with-attribute.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory permission-present-with-attribute.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
32.3. 使用 Ansible 确保缺少 RBAC 权限 复制链接链接已复制到粘贴板!
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制 (RBAC)。
以下流程描述了如何使用 Ansible playbook 确保 IdM 中缺少权限,因此无法将其添加到特权中。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 制作位于
/usr/share/doc/ansible-freeipa/playbooks/permission/目录中的permission-present.yml文件的副本:cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-absent.yml permission-absent-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-absent.yml permission-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
permission-absent-copy.ymlAnsible playbook 文件进行编辑。 通过在
ipapermission任务部分中设置以下变量来调整文件:-
调整任务的
name,使其与您的用例对应。 -
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为权限的名称。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
调整任务的
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory permission-absent-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory permission-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
32.4. 使用 Ansible 确保属性是 IdM RBAC 权限的成员 复制链接链接已复制到粘贴板!
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制 (RBAC)。
以下流程描述了如何使用 Ansible playbook 确保属性是 IdM 中 RBAC 权限的成员。因此,拥有权限的用户可以创建具有属性的条目。
示例描述了如何确保特权包含 MyPermission 权限的用户创建的主机条目可以具有 gecos 和 description 值。
创建或修改权限时可以指定的属性类型不受 IdM LDAP 模式的限制。但是,当 object_type 是 host 时指定 attrs: car_licence,会导致在使用权限并为一个主机添加特定的 car 许可证时出现 ipa: ERROR: attribute "car-license" not allowed 错误。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - MyPermission 权限存在。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 制作位于
/usr/share/doc/ansible-freeipa/playbooks/permission/目录中的permission-member-present.yml文件的副本:cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-member-present.yml permission-member-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-member-present.yml permission-member-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
permission-member-present-copy.ymlAnsible playbook 文件以进行编辑。 通过在
ipapermission任务部分中设置以下变量来调整文件:-
调整任务的
name,使其与您的用例对应。 -
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为权限的名称。 -
将
attrs列表设置为description和gecos变量。 -
确保
action变量设置为member。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
调整任务的
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory permission-member-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory permission-member-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
32.5. 使用 Ansible 确保属性不是 IdM RBAC 权限的成员 复制链接链接已复制到粘贴板!
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制 (RBAC)。
以下流程描述了如何使用 Ansible playbook 确保属性不是 IdM 中 RBAC 权限的成员。因此,当拥有权限的用户在 IdM LDAP 中创建条目时,该条目不能具有与属性关联的值。
这个示例描述了如何确保以下目标状态:
- MyPermission 权限存在。
-
具有特权的用户创建的主机条目包含 MyPermission 权限,不能具有
description属性。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - MyPermission 权限存在。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 制作位于
/usr/share/doc/ansible-freeipa/playbooks/permission/目录中的permission-member-absent.yml文件的副本:cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-member-absent.yml permission-member-absent-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-member-absent.yml permission-member-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
permission-member-absent-copy.ymlAnsible playbook 文件进行编辑。 通过在
ipapermission任务部分中设置以下变量来调整文件:-
调整任务的
name,使其与您的用例对应。 -
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为权限的名称。 -
将
attrs变量设置为description。 -
将
action变量设置为member。 -
确保
state变量设置为absent
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
调整任务的
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory permission-member-absent-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory permission-member-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
32.6. 使用 Ansible 重命名 IdM RBAC 权限 复制链接链接已复制到粘贴板!
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制。
以下流程描述了如何使用 Ansible playbook 重新命名权限。这个示例描述了如何将 MyPermission 重命名为 MyNewPermission。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - MyPermission 存在于 IdM 中。
- IdM 中不存在 MyNewPermission。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 制作位于
/usr/share/doc/ansible-freeipa/playbooks/permission/目录中的permission-renamed.yml文件的副本:cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-renamed.yml permission-renamed-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-renamed.yml permission-renamed-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
permission-renamed-copy.ymlAnsible playbook 文件进行编辑。 通过在
ipapermission任务部分中设置以下变量来调整文件:-
调整任务的
name,使其与您的用例对应。 -
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为权限的名称。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
调整任务的
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory permission-renamed-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory permission-renamed-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 33 章 在 IdM 中管理用户密码 复制链接链接已复制到粘贴板!
33.1. 谁可以更改 IdM 用户密码以及如何去做 复制链接链接已复制到粘贴板!
没有权限更改其他用户密码的普通用户只能更改他们自己的个人密码。新密码必须满足适用于用户所属的组的 IdM 密码策略。有关配置密码策略的详情,请参考 定义 IdM 密码策略。
具有密码更改权限的管理员和用户可为新用户设置初始密码,并为现有用户重置密码。这些密码:
- 不必满足 IdM 密码策略。
- 在第一次成功登录后过期。当发生这种情况时,IdM 会提示用户立即更改过期的密码。要禁用此行为,请参阅 在 IdM 中启用密码重置,而不会在下一次登录时提示用户更改密码。
请注意,LDAP 目录管理器(DM)用户可以使用 LDAP 工具更改用户密码。新密码可覆盖任何 IdM 密码策略。DM 设置的密码不会在第一次登录后过期。
33.2. 在 IdM Web UI 中更改用户密码 复制链接链接已复制到粘贴板!
作为身份管理(IdM)用户,您可以在 IdM Web UI 中更改用户密码。
先决条件
- 已登陆到 IdM Web UI。
流程
- 在右上角,点登录到 IdM Web UI 的用户的名称。
- 选择 "更改密码 "。
- 输入当前密码。
- 在 New Password 字段中输入新密码。
- 通过在 Verify Password 字段中输入新密码。
- 单击 Reset Password。
33.3. 在 IdM Web UI 中重置另一个用户的密码 复制链接链接已复制到粘贴板!
作为身份管理(IdM)的管理员用户,您可以在 IdM Web UI 中更改其他用户的密码。
先决条件
- 您以管理员用户身份登录到 IdM Web UI。
流程
- 选择 Identity>Users。
- 单击要编辑的用户的名称。
- 单击 Actions,再选择 Reset password。
- 在 New Password 字段中输入新密码。
- 通过在 Verify Password 字段中输入新密码。
- 单击 Reset Password。
33.4. 重置目录管理器用户密码 复制链接链接已复制到粘贴板!
如果您丢失了身份管理(IdM)目录管理器密码,您可以重置它。
先决条件
-
您有 IdM 服务器的
root访问权限。
流程
使用
pwdhash命令生成新的密码哈希。例如:pwdhash -D /etc/dirsrv/slapd-IDM-EXAMPLE-COM password {PBKDF2_SHA256}AAAgABU0bKhyjY53NcxY33ueoPjOUWtl4iyYN5uW...# pwdhash -D /etc/dirsrv/slapd-IDM-EXAMPLE-COM password {PBKDF2_SHA256}AAAgABU0bKhyjY53NcxY33ueoPjOUWtl4iyYN5uW...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过指定目录服务器配置的路径,您可以自动使用
nsslapd-rootpwstoragescheme属性中设置的密码存储模式来加密新密码。在拓扑中的每个 IdM 服务器上执行以下步骤:
停止服务器上安装的所有 IdM 服务:
ipactl stop
# ipactl stopCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
/etc/dirsrv/IDM-EXAMPLE-COM/dse.ldif文件,并将nsslapd-rootpw属性设为pwdhash命令所生成的值:nsslapd-rootpw: {PBKDF2_SHA256}AAAgABU0bKhyjY53NcxY33ueoPjOUWtl4iyYN5uW...nsslapd-rootpw: {PBKDF2_SHA256}AAAgABU0bKhyjY53NcxY33ueoPjOUWtl4iyYN5uW...Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 启动服务器上安装的所有 IdM 服务:
ipactl start
# ipactl startCopy to Clipboard Copied! Toggle word wrap Toggle overflow
33.5. 在 IdM CLI 中更改您的用户密码或重置另一个用户的密码 复制链接链接已复制到粘贴板!
您可以使用身份管理(IdM)命令行界面(CLI)更改用户密码。如果您是管理用户,您可以使用 CLI 重置另一个用户的密码。
先决条件
- 您已获得了 IdM 用户的票据授予票(TGT)。
- 如果要重置另一个用户的密码,您必须获得 IdM 中管理用户的 TGT。
流程
输入
ipa user-mod命令,以及用户名和--password选项。命令将提示您输入新密码。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
请注意,您也可以使用 ipa passwd idm_user 命令而不是 ipa user-mod。
33.6. 在 IdM 中启用密码重置,而不会在下一次登录时提示用户更改密码 复制链接链接已复制到粘贴板!
默认情况下,当管理员重置了另一个用户的密码后,密码会在第一次成功登录后过期。
作为 IdM 目录管理者,您可以为单个的 IdM 管理员指定以下权限:
- 它们可以执行密码更改操作,而无需用户在第一次登录时更改其密码。
- 它们可以绕过密码策略,从而不会应用强度或历史记录强制。
绕过密码策略可能会构成安全威胁。当您选择要授予这些额外特权的用户时要谨慎。
先决条件
- 您知道目录管理者密码。
流程
在域中的每个身份管理(IdM)服务器上进行以下更改:
输入
ldapmodify命令来修改 LDAP 条目。指定 IdM 服务器的名称和 389 端口,然后按回车:ldapmodify -x -D "cn=Directory Manager" -W -h server.idm.example.com -p 389 Enter LDAP Password:
$ ldapmodify -x -D "cn=Directory Manager" -W -h server.idm.example.com -p 389 Enter LDAP Password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 输入 Directory Manager 密码。
输入
ipa_pwd_extop密码同步条目的可区别的名称,然后按回车dn: cn=ipa_pwd_extop,cn=plugins,cn=config
dn: cn=ipa_pwd_extop,cn=plugins,cn=configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 指定更改的
modify类型,并按回车:changetype: modify
changetype: modifyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 指定您希望 LDAP 执行哪种类型的修改,以及指定对哪个属性的修改。按回车:
add: passSyncManagersDNs
add: passSyncManagersDNsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
passSyncManagersDNs属性中指定管理用户帐户。属性是多值的。例如,要授予admin用户目录管理者重置密码的权力:passSyncManagersDNs: \ uid=admin,cn=users,cn=accounts,dc=example,dc=com
passSyncManagersDNs: \ uid=admin,cn=users,cn=accounts,dc=example,dc=comCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 按回车两次以停止编辑条目。
在 passSyncManagerDNs 下列出的 admin 用户现在具有额外的特权。
33.7. 检查 IdM 用户帐户是否已被锁住 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以检查 IdM 用户帐户是否已被锁住。为此,您必须将用户的最大允许失败的登录次数与用户实际失败的登录次数进行比较。
先决条件
- 您已在 IdM 中获得了管理用户的票据授予票(TGT)。
流程
显示用户帐户的状态,来查看失败的登录次数:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示特定用户允许的登录尝试次数:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
ipa user-status命令的输出中显示的失败登录数量与ipa pwpolicy-show命令的输出中显示的 Max failures number 进行比较。如果失败的登录次数等于最大允许登录尝试次数,则用户帐户被锁住。
33.8. 在 IdM 中密码失败后解锁用户帐户 复制链接链接已复制到粘贴板!
如果用户尝试使用不正确的密码进行一定次数的登录,则身份管理(IdM)会锁住用户帐户,从而阻止用户登录。出于安全考虑,IdM 不会显示用户帐户已被锁住的任何警告信息。相反,CLI 提示可能会一直要求用户输入密码。
IdM 在过了指定的时间后会自动解锁用户帐户。另外,您可以按照以下流程手动解锁用户帐户。
先决条件
- 您已获得 IdM 管理用户的票据授予票。
流程
要解锁用户帐户,请使用
ipa user-unlock命令。ipa user-unlock idm_user ----------------------- Unlocked account "idm_user" -----------------------
$ ipa user-unlock idm_user ----------------------- Unlocked account "idm_user" -----------------------Copy to Clipboard Copied! Toggle word wrap Toggle overflow 之后,用户可以再次登录。
33.9. 为 IdM 中的用户启用最后一次成功 Kerberos 验证的跟踪 复制链接链接已复制到粘贴板!
出于性能方面的考虑,在 Red Hat Enterprise Linux 8 中运行的身份管理(IdM)不会存储用户最后一次成功的 Kerberos 验证的时间戳。因此,某些命令(如 ipa user-status )不会显示时间戳。
先决条件
- 您已在 IdM 中获得了管理用户的票据授予票(TGT)。
-
您在执行该流程的 IdM 服务器上有
root访问权限。
流程
显示当前启用的密码插件功能:
ipa config-show | grep "Password plugin features" Password plugin features: AllowNThash, KDC:Disable Last Success
# ipa config-show | grep "Password plugin features" Password plugin features: AllowNThash, KDC:Disable Last SuccessCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示
KDC:Disable Last Success插件已启用。插件隐藏了最后一次成功的 Kerberos 身份验证,以防在 ipa user-status 输出中可见。将每个功能的
--ipaconfigstring=feature参数添加到当前启用的ipa config-mod命令中,KDC:Disable Last Success除外:ipa config-mod --ipaconfigstring='AllowNThash'
# ipa config-mod --ipaconfigstring='AllowNThash'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个命令只启用
AllowNThash插件。要启用多个功能,请为每个功能单独指定--ipaconfigstring=feature参数。重启 IdM:
ipactl restart
# ipactl restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 34 章 定义 IdM 密码策略 复制链接链接已复制到粘贴板!
密码策略有助于降低某人发现和滥用用户密码的风险。您可以在 IdM Web UI 或 CLI 中添加身份管理(IdM)密码策略。另外,您可以使用 Ansible playbook 在 IdM 中添加新密码策略。
34.1. 什么是密码策略 复制链接链接已复制到粘贴板!
密码策略是密码必须满足的一组规则。例如,password 策略可以定义最小密码长度和最大密码生命周期。受此策略影响的所有用户都必须设置足够长的密码,并经常更改密码以满足指定条件。这样,密码策略有助于降低某人发现和滥用用户密码的风险。
34.2. IdM 中的密码策略 复制链接链接已复制到粘贴板!
密码是 Identity Management (IdM) 用户对 IdM Kerberos 域进行身份验证的最常用方式。密码策略定义了这些 IdM 用户密码必须满足的要求。IdM 密码策略在底层 LDAP 目录中设置,但 Kerberos 密钥分发中心 (KDC) 强制执行密码策略。
密码策略属性列出了您可以在 IdM 中定义密码策略的属性。
| 属性 | 介绍 | 示例 |
|---|---|---|
| Max lifetime | 密码在必须重置密码之前有效的最长时间(以天为单位)。默认值为 90 天。 请注意,如果该属性被设为 0,则密码永远不会过期。 | Max lifetime = 180 用户密码仅有效 180 天。之后,IdM 会提示用户更改它们。 |
| Min lifetime | 两个密码更改操作之间必须经过的最短时间(以小时为单位)。 | Min Life = 1 用户更改密码后,他们必须至少等待 1 小时后再重新更改密码。 |
| History size | 保存的之前密码的数量。用户无法重复使用其密码历史记录中的密码,但可以重复利用未存储的旧密码。 | History size = 0 在这种情况下,密码历史记录为空,用户可以重复使用他们之前的任何密码。 |
| Character classes | 用户必须在密码中使用的不同字符类别的数量。字符类为: * 大写字符 * 小写字符 * 数字 * 特殊字符,如逗号(,)、句点(.)、星号(*) * 其他 UTF-8 字符 当一个字符连续使用三次或更多次时,会将该字符类减一。例如:
*
* | 字符类 = 0
需要的默认类数为 0。要配置数字,请使用 另请参阅此表下的 重要 备注。 |
| Min length | 密码中的最少字符数. 如果设置了任何 其他密码策略选项,则密码的最小长度为 6 个字符。 | Min length = 8 用户不能使用少于 8 个字符的密码。 |
| Max failures | IdM 锁定用户帐户前允许的失败登录的最多次数。 | Max failures = 6 当用户连续 7 次输入了错误的密码时,IdM 会锁定用户帐户。 |
| Failure reset interval | 在这个间隔后 IdM 重置当前失败登录尝试次数(以秒为单位)。 | Failure reset interval = 60
如果用户在 |
| 锁定持续时间 |
在 | Lockout duration = 600 锁定帐户的用户在 10 分钟内无法登录。 |
如果您一组不同的硬件可能不能使用国际字符和符号,则字符类要求应为英语字母和常用符号。有关密码中的字符类策略的更多信息,请参阅红帽知识库解决方案在 密码中哪些字符是有效的?
34.3. IdM 中的密码策略优先级 复制链接链接已复制到粘贴板!
密码策略帮助降低某人发现并滥用用户密码的风险。默认密码策略是 全局密码策略。您还可以创建其他组密码策略。全局策略规则适用于所有没有组密码策略的用户。组密码策略适用于相应用户组的所有成员。
请注意,对于任何用户,一次只能有一个密码策略有效。如果用户分配了多个密码策略,则根据以下规则,按照优先级来优先使用:
-
每个组密码策略都设置了优先级。值越低,策略的优先级越高。最低支持的值是
0。 - 如果多个密码策略适用于用户,则具有最低优先级值的策略优先。其他策略中定义的所有规则都会被忽略。
- 优先级值最低的密码策略适用于所有密码策略属性,即使属性没有在策略中定义。
全局密码策略没有设置优先级值。当没有为用户设置组策略时,它充当回退策略。全局策略永远不会优先于组策略。
您可以使用 ipa pwpolicy-show --user=user_name 命令检查特定用户当前生效的策略。
34.4. 使用 Ansible playbook 在 IdM 中存在密码策略 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保密码策略在身份管理(IdM)中存在。
在 IdM 中的默认 global_policy 密码策略中,密码中不同字符类的数量设置为 0。历史记录大小也设置为 0。
完成此步骤,以使用 Ansible playbook 为 IdM 组强制执行更强大的密码策略。
您无法为单个用户定义密码策略。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
- 正在确保 IdM 中存在密码策略的组。
步骤
创建一个清单文件,如
inventory.file,并在[ipaserver]部分中定义 IdM 服务器的FQDN:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 Ansible playbook 文件,以定义您要确保的密码策略。要简化此步骤,请复制并修改
/usr/share/doc/ansible-freeipa/playbooks/pwpolicy/pwpolicy_present.yml文件中的示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关单个变量含义的详情,请参阅密码策略属性。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/new_pwpolicy_present.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/new_pwpolicy_present.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
您已成功使用 Ansible playbook 确保 IdM 中存在 ops 组的密码策略。
ops 密码策略的优先级设置为 1,而 global_policy 密码策略没有设置优先级。因此,ops 策略会自动取代 ops 组的 global_policy,并立即强制执行。
当没有为用户设置任何组策略时,global_policy 充当备份策略,并且永远不会优先于组策略。
34.5. 使用 WebUI 或 CLI 在 IdM 中添加新密码策略 复制链接链接已复制到粘贴板!
密码策略帮助降低某人发现并滥用用户密码的风险。默认密码策略是 全局密码策略。您还可以创建其他组密码策略。
34.5.1. 在 IdM WebUI 中添加新密码策略 复制链接链接已复制到粘贴板!
密码策略帮助降低某人发现并滥用用户密码的风险。默认密码策略是 全局密码策略。您还可以创建其他组密码策略。
先决条件
- 应用策略的用户组。
- 分配给策略的优先级
流程
登录到 IdM Web UI。
详情请参阅 在 Web 浏览器中访问 IdM Web UI。
- 选择 Policy>Password Policies。
- 点击 Add。
- 定义用户组和优先级。
- 单击 Add 确认。
要配置新密码策略的属性,请参阅 IdM 中的 密码策略。
34.5.2. 在 IdM CLI 中添加新密码策略 复制链接链接已复制到粘贴板!
密码策略帮助降低某人发现并滥用用户密码的风险。默认密码策略是 全局密码策略。您还可以创建其他组密码策略。
先决条件
- 应用策略的用户组。
- 分配给策略的优先级
流程
- 打开终端并连接到 IdM 服务器。
使用 ipa pwpolicy-add 命令。指定用户组和优先级:
ipa pwpolicy-add Group: group_name Priority: priority_level
$ ipa pwpolicy-add Group: group_name Priority: priority_levelCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 使用 ipa pwpolicy-find 命令来验证策略是否已成功添加:
ipa pwpolicy-find
$ ipa pwpolicy-findCopy to Clipboard Copied! Toggle word wrap Toggle overflow
要配置新密码策略的属性,请参阅 IdM 中的 密码策略。
34.6. IdM 中的附加密码策略选项 复制链接链接已复制到粘贴板!
作为身份管理 (IdM) 管理员,您可以通过启用基于 libpwquality 功能集的额外密码策略选项来增强默认密码要求。额外的密码策略选项包括:
--maxrepeat- 指定新密码中相同连续字符的最大可接受数。
--maxsequence- 指定新密码中单例字符序列的最大长度。此类序列的示例为 12345 或 fedcb。此类密码多数都不会通过简单检查。
--dictcheck-
如果非零,则检查密码是否与字典中的词语匹配(如果可能修改)。目前,
libpwquality使用cracklib库执行字典检查。 --usercheck- 如果非零,请检查密码是否以某种形式包含用户名,并可能进行修改。它不适用于少于 3 个字符的用户名。
您不能将额外的密码策略选项应用到现有密码。如果您应用了任何附加选项,IdM 会自动将 --minlength 选项(密码中的最少字符数)设置为 6 个字符。
在使用 RHEL 7 和 RHEL 8 服务器的混合环境中,您只能在在 RHEL 8.4 及更新版本上运行的服务器中强制实施额外的密码策略设置。如果用户登录到 IdM 客户端,并且 IdM 客户端与运行在 RHEL 8.3 或更早版本上的 IdM 服务器通信,则系统管理员设置的新密码策略要求不会被应用。为确保行为的一致,请将所有服务器升级或更新至 RHEL 8.4 或更新的版本。
34.7. 将其他密码策略选项应用到 IdM 组 复制链接链接已复制到粘贴板!
按照以下流程,在身份管理(IdM)中应用额外的密码策略选项。这个示例描述了如何通过确保新密码不包含用户相应的用户名以及密码不包含两个以上相同的字符来增强 managers 组的密码策略。
先决条件
- 您以 IdM 管理员身份登录。
- managers 组存在于 IdM 中。
- IdM 中存在 managers 密码策略。
步骤
将用户名检查应用到 managers 组中用户建议的所有新密码:
ipa pwpolicy-mod --usercheck=True managers
$ ipa pwpolicy-mod --usercheck=True managersCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果没有指定密码策略的名称,则会修改默认的
global_policy。在 manager 密码策略中,将相同连续字符的最大数量设置为 2:
ipa pwpolicy-mod --maxrepeat=2 managers
$ ipa pwpolicy-mod --maxrepeat=2 managersCopy to Clipboard Copied! Toggle word wrap Toggle overflow 现在不接受包含连续两个以上相同字符的密码。例如,eR873mUi111YJQ 组合是不可接受的,因为它包含三个连续的 1。
验证
添加名为 test_user 的测试用户:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 test 用户添加到 managers 组:
- 在 IdM Web UI 中,点 Identity>Groups>User Groups。
- 单击 managers 组名称。
- 点 Add。
- 在 Add users into user group 'managers' 页面上,检查 test_user。
- 点击 > 箭头将用户移到 Prospect ive 列中。
- 点 Add。
重置测试用户的密码:
- 前往 Identity>Users。
- 单击 test_user。
- 在 Actions 菜单中,单击 Reset Password。
- 输入用户的临时密码。
尝试获取 test_user 的 Kerberos 票据授予票据(TGT):
在命令行中运行以下命令:
kinit test_user
$ kinit test_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 输入临时密码。
系统会通知您必须更改密码。输入包含用户名 test_user 的密码:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 系统通知您输入的密码被拒绝。输入包含连续三个或多个相同字符的密码:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 系统通知您输入的密码被拒绝。输入满足 managers 密码策略条件的密码:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
查看获取的 TGT:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
managers 密码策略现在可以为 managers 组中的用户正常工作。
34.8. 使用 Ansible playbook 将额外的密码策略选项应用到 IdM 组 复制链接链接已复制到粘贴板!
您可以使用 Ansible playbook 应用额外的密码策略选项,来为特定的 IdM 组增强密码策略要求。为此,您可以使用 maxrepeat、maxsequence、dictcheck 和 usercheck 密码策略选项。这个示例描述了如何为 managers 组设置以下要求:
- 用户新密码不包含对应用户名的用户。
- 密码连续不包含两个以上相同字符。
- 密码中的任何单调字符序列都不能超过 3 个字符。这意味着系统不接受如 1234 或 abcd 这样序列的密码。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已在 Ansible 控制器上安装了
ansible-freeipa软件包。 - 您已在 ~/MyPlaybooks/ 目录中创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
您已将
ipaadmin_password存储在 secret.yml Ansible vault 中。
- 正在确保 IdM 中存在密码策略的组。
步骤
创建 Ansible playbook 文件 manager_pwpolicy_present.yml,其定义了您要确保其存在的密码策略。要简化此步骤,请复制并修改以下示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/manager_pwpolicy_present.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/manager_pwpolicy_present.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
添加名为 test_user 的测试用户:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 test 用户添加到 managers 组:
- 在 IdM Web UI 中,点 Identity>Groups>User Groups。
- 点 managers。
- 点 Add。
- 在 Add users into user group 'managers' 页面上,检查 test_user。
- 点击 > 箭头将用户移到 Prospect ive 列中。
- 点 Add。
重置测试用户的密码:
- 前往 Identity>Users。
- 单击 test_user。
- 在 Actions 菜单中,单击 Reset Password。
- 输入用户的临时密码。
尝试获取 test_user 的 Kerberos 票据授予票据(TGT):
在命令行中输入以下命令:
kinit test_user
$ kinit test_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 输入临时密码。
系统会通知您必须更改密码。输入包含用户名 test_user 的密码:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 系统通知您输入的密码被拒绝。输入包含连续三个或多个相同字符的密码:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 系统通知您输入的密码被拒绝。输入一个包含 3 个以上字符的单调字符序列的密码。此类序列的示例包括 1234 和 fedc :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 系统通知您输入的密码被拒绝。输入满足 managers 密码策略条件的密码:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证您是否已获得 TGT,这只有在输入了有效密码后才有可能:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 35 章 管理过期密码通知 复制链接链接已复制到粘贴板!
您可以使用 ipa-client-epn 软件包提供的过期密码通知(EPN)工具来构建一个身份管理(IdM)用户列表,这些用户的密码在配置的时间内即将过期。要安装、配置和使用 EPN 工具,请参阅相关章节。
35.1. 什么是过期的密码通知工具 复制链接链接已复制到粘贴板!
过期密码通知(EPN)工具是一个独立的工具,可用于构建一个身份管理(IdM)用户列表,这些用户的密码在配置的时间内即将过期。
IdM 管理员可以使用 EPN 进行以下操作:
- 以 JSON 格式显示受影响的用户的列表,该列表是在dry-run 模式下运行时创建的。
- 计算在给定日期或日期范围内发送多少封电子邮件.
- 向用户发送密码过期电子邮件通知.
-
将
ipa-epn.timer配置为每天运行 EPN 工具,并向密码在定义的未来日期范围内即将过期的用户发送电子邮件。 - 自定义要发送给用户的电子邮件通知。
如果用户帐户被禁用,则不会发送电子邮件通知(如果密码即将过期)。
35.2. 安装过期的密码通知工具 复制链接链接已复制到粘贴板!
按照以下流程安装过期密码通知(EPN)工具。
先决条件
- 在身份管理(IdM)副本或配置为智能主机的本地 Postfix SMTP 服务器的 IdM 客户端上安装 EPN 工具。
流程
安装 EPN 工具:
yum install ipa-client-epn
# yum install ipa-client-epnCopy to Clipboard Copied! Toggle word wrap Toggle overflow
35.3. 运行 EPN 工具,向密码即将过期的用户发送电子邮件 复制链接链接已复制到粘贴板!
您可以使用过期密码通知(EPN)工具向密码即将过期的身份管理(IdM)用户发送电子邮件。您可以选择以下任一方法:
-
更新
epn.conf配置文件 并启用 ipa-epn.timer 工具。 -
更新
epn.conf配置文件,并直接在命令行中运行 EPN 工具。
EPN 工具是无状态的。如果 EPN 工具未能向密码即将在给定日期过期的任何用户发送邮件,则 EPN 工具不会保存这些用户的列表。
先决条件
-
ipa-client-epn软件包已安装。请参阅 安装过期密码通知工具。 -
如果需要,自定义
ipa-epn电子邮件模板。请参阅 修改过期密码通知电子邮件模板。
流程
打开
epn.conf配置文件。vi /etc/ipa/epn.conf
# vi /etc/ipa/epn.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 根据需要更新
notify_ttls选项。默认是通知用户其密码将在 28、14、7、3 和 1 天后过期。notify_ttls = 28, 14, 7, 3, 1
notify_ttls = 28, 14, 7, 3, 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您还必须 激活
ipa-epn.timer工具,以确保发送电子邮件。配置 SMTP 服务器和端口:
smtp_server = localhost smtp_port = 25
smtp_server = localhost smtp_port = 25Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定发送电子邮件过期通知的电子邮件地址。任何未成功发送的电子邮件都将返回到此地址。
mail_from = admin-email@example.com
mail_from = admin-email@example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果要使用加密通信频道,请指定要使用的凭证:
指定 PEM 格式的单个文件的路径,其中包含 EPN 使用的证书与 SMTP 服务器进行身份验证:
smtp_client_cert = /etc/pki/tls/certs/client.pem
smtp_client_cert = /etc/pki/tls/certs/client.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意EPN 是 SMTP 客户端。证书的目的是客户端身份验证,而不是安全 SMTP 传输。
您可以指定包含私钥的文件的路径。如果未指定,则会从证书文件获取私钥。
smtp_client_key = /etc/pki/tls/certs/client.key
smtp_client_key = /etc/pki/tls/certs/client.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果私钥加密,请指定解密的密码。
smtp_client_key_pass = Secret123!
smtp_client_key_pass = Secret123!Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
保存
/etc/ipa/epn.conf文件。 以 dry-run 模式运行 EPN 工具,来生成一个用户列表,如果您不使用
--dry-run选项来运行工具,则密码过期电子邮件通知将发送给这些用户。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果返回的用户列表非常大,并且运行工具时没有
--dry-run选项,这可能会导致您的电子邮件服务器出现问题。不使用
--dry-run选项运行 EPN 工具,来将到期电子邮件发送给当您在 dry-run 模式下运行 EPN 工具时返回的所有用户的列表:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以将 EPN 添加到任何监控系统,并使用
--from-nbdays和--to-nbdays选项调用它,以确定在特定时间范围内将有多少个用户的密码即将过期:ipa-epn --from-nbdays 8 --to-nbdays 12
# ipa-epn --from-nbdays 8 --to-nbdays 12Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您使用
--from-nbdays和--to-nbdays选项调用 EPN 工具,它将自动在 dry-run 模式下执行。
验证
- 运行 EPN 工具,并验证是否已发送电子邮件通知。
35.4. 启用 ipa-epn.timer ,向密码即将过期的所有用户发送电子邮件 复制链接链接已复制到粘贴板!
按照以下流程,使用 ipa-epn.timer 运行过期密码通知(EPN)工具,向密码即将过期的用户发送电子邮件。ipa-epn.timer 解析 epn.conf 文件,并向在该文件中配置的定义的未来日期范围内密码即将过期的用户发送电子邮件。
先决条件
-
ipa-client-epn软件包已安装。请参阅 安装过期密码通知工具 -
如果需要,自定义
ipa-epn电子邮件模板。请参阅 修改过期密码通知电子邮件模板
流程
启动
ipa-epn.timer:systemctl start ipa-epn.timer
systemctl start ipa-epn.timerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
启动计时器后,默认情况下 EPN 工具会在每天早晨 1 点运行。
35.5. 修改过期密码通知电子邮件模板 复制链接链接已复制到粘贴板!
按照以下流程自定义过期密码通知(EPN)电子邮件消息模板。
先决条件
-
ipa-client-epn软件包已安装。
流程
打开 EPN 消息模板:
vi /etc/ipa/epn/expire_msg.template
# vi /etc/ipa/epn/expire_msg.templateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 根据需要更新模板文本。
Hi {{ fullname }}, Your password will expire on {{ expiration }}. Please change it as soon as possible.Hi {{ fullname }}, Your password will expire on {{ expiration }}. Please change it as soon as possible.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以在模板中使用以下变量:
- 用户 ID:uid
- 全名:fullname
- 名字:first
- 姓氏:last
- 密码过期日期:过期
- 保存消息模板文件。
验证
- 运行 EPN 工具,并验证电子邮件通知包含更新的文本。
第 36 章 使用 ID 视图来覆盖 IdM 客户端上的用户属性值 复制链接链接已复制到粘贴板!
如果身份管理(IdM)用户想覆盖存储在 IdM LDAP 服务器中的某些用户或组属性,如登录名称、主目录、用于身份验证的证书或 SSH 密钥,则您作为 IdM 管理员可使用 IdM ID 视图重新定义特定 IdM 客户端上的这些值。例如,您可以为用户最常用于登录 IdM 的 IdM 客户端上为用户指定不同的主目录。
了解如何在作为客户端注册到 IdM 的主机上重新定义与 IdM 用户关联的 POSIX 属性值。
36.1. ID 视图 复制链接链接已复制到粘贴板!
身份管理(IdM)中的 ID 视图是一个指定以下信息的 IdM 客户端视图:
- 集中定义的 POSIX 用户或组属性的新值
- 应用新值的客户端主机或主机。
ID 视图包含一个或多个覆盖。覆盖是集中定义的 POSIX 属性值的特定替换。
您只能为集中在 IdM 服务器上的 IdM 客户端定义 ID 视图。您无法为本地 IdM 客户端配置客户端覆盖。
例如,您可以使用 ID 视图来实现以下目标:
-
为不同的环境定义不同的属性值。例如,您可以允许 IdM 管理员或其他 IdM 用户在不同的 IdM 客户端上拥有不同的主目录:您可以将
/home/crypt/username配置为此用户在一个 IdM 客户端上的主目录,将/dropbox/username配置为此用户在另一个客户端上的主目录。在这种情况下使用 ID 视图非常方便,例如,更改客户端/etc/sssd/sssd.conf文件中的fallback_homedir、overwrite_homedir或其他主目录变量将影响所有用户。有关示例过程,请参阅 添加 ID 视图来覆盖 IdM 客户端上的 IdM 用户主目录。 - 将之前生成的属性值替换为其他值,例如覆盖用户的 UID。当您要实现系统范围的更改时,此功能非常有用,否则在 LDAP 端很难实现,例如将 1009 设为 IdM 用户的 UID。用于生成 IdM 用户 UID 的 IdM ID 范围一开始不要低于 1000 甚至 10000。如果 IdM 用户在所有 IdM 客户端上模拟 UID 为1009 的本地用户是有原因的,那么您可以使用 ID 视图覆盖在 IdM 中创建用户时生成的 IdM 用户的 UID。
您只能将 ID 视图应用于 IdM 客户端,不能应用于 IdM 服务器。
36.2. ID 视图对 SSSD 性能的潜在负面影响 复制链接链接已复制到粘贴板!
当您定义 ID 视图时,IdM 会将所需的覆盖值放在 IdM 服务器的系统安全服务守护进程(SSSD)缓存中。在 IdM 客户端上运行的 SSSD 然后从服务器缓存中检索覆盖值。
应用 ID 视图可能会对系统安全服务守护进程(SSSD)的性能造成负面影响,因为某些优化和 ID 视图无法同时运行。例如,ID 视图会防止 SSSD 优化在服务器上查找组的过程:
- 使用 ID 视图时,如果组名称已被覆盖,SSSD 必须检查返回的组成员名称列表中的每个成员。
- 如果没有 ID 视图,SSSD 只能从组对象的成员属性收集用户名。
当 SSSD 缓存为空或清除缓存后,这种负面影响变得非常明显,使得所有条目都无效。
36.3. ID 视图可以覆盖的属性 复制链接链接已复制到粘贴板!
ID 视图由用户和组 ID 覆盖组成。覆盖定义新的 POSIX 属性值。
用户和组 ID 覆盖可以为以下 POSIX 属性定义新值:
- 用户属性
-
登录名(
uid) -
GECOS 条目(
gecos) -
UID 号(
uidNumber) -
GID 号(
gidNumber) -
登录 shell(
loginShell) -
主目录(
homeDirectory) -
SSH 公钥(
ipaSshPubkey) -
证书(
userCertificate)
-
登录名(
- 组属性
-
组名(
cn) -
组 GID 号(
gidNumber)
-
组名(
36.4. 获取 ID 视图命令的帮助信息 复制链接链接已复制到粘贴板!
您可以获得 IdM 命令行界面(CLI)上涉及身份管理(IdM)ID 视图的命令的帮助。
先决条件
- 您已获得了 IdM 用户的 Kerberos 票据。
流程
要显示用于管理 ID 视图和覆盖的所有命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要显示特定命令的详细帮助信息,请在命令中添加
--help选项:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.5. 使用 ID 视图来覆盖特定主机上 IdM 用户的登录名称 复制链接链接已复制到粘贴板!
按照以下流程,为特定的 IdM 客户端创建 ID 视图,该视图覆盖与特定 IdM 用户关联的 POSIX 属性值。该流程使用 ID 视图示例,它可让名为 idm_user 的 IdM 用户使用 user_1234 登录名称登录到名为 host1 的 IdM 客户端。
先决条件
- 以 IdM 管理员身份登录。
流程
创建新的 ID 视图。例如,创建名为
example_for_host1的 ID 视图:ipa idview-add example_for_host1 --------------------------- Added ID View "example_for_host1" --------------------------- ID View Name: example_for_host1
$ ipa idview-add example_for_host1 --------------------------- Added ID View "example_for_host1" --------------------------- ID View Name: example_for_host1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将用户覆盖添加到 example_for_host1 ID 视图。覆盖用户登录:
-
输入
ipa idoverrideuser-add命令 - 添加 ID 视图的名称
- 添加用户名,也称为锚
添加
--login选项:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要获得可用选项列表,请运行 ipa idoverrideuser-add --help。
注意ipa idoverrideuser-add --certificate命令替换指定 ID 视图中帐户的所有现有证书。要附加额外的证书,请使用ipa idoverrideuser-add-cert命令:ipa idoverrideuser-add-cert example_for_host1 user --certificate="MIIEATCC..."
$ ipa idoverrideuser-add-cert example_for_host1 user --certificate="MIIEATCC..."Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
输入
-
可选:使用
ipa idoverrideuser-mod命令,您可以为现有用户覆盖指定新的属性值。 将
example_for_host1应用到host1.idm.example.com主机:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意ipa idview-apply命令也接受--hostgroups选项。选项将 ID 视图应用到属于指定主机组的主机,但不会将 ID 视图与主机组本身相关联。相反,--hostgroups选项会展开指定主机组的成员,并将--hosts选项分别应用到其中的每一个成员。这意味着,如果以后将主机添加到主机组中,则 ID 视图不会应用到新主机。
要将新配置立即应用到 host1.idm.example.com 系统:
以 root 身份通过 SSH 连接到系统:
ssh root@host1 Password:
$ ssh root@host1 Password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 清除 SSSD 缓存:
root@host1 ~]# sss_cache -E
root@host1 ~]# sss_cache -ECopy to Clipboard Copied! Toggle word wrap Toggle overflow - 重启 SSSD 守护进程:
root@host1 ~]# systemctl restart sssd
root@host1 ~]# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
如果您有 user_1234 的凭证,您可以使用它们登录到 host1 上的 IdM:
使用 user_1234 作为登录名称,通过 SSH 连接到 host1 :
ssh user_1234@host1.idm.example.com Password: Last login: Sun Jun 21 22:34:25 2020 from 192.168.122.229
[root@r8server ~]# ssh user_1234@host1.idm.example.com Password: Last login: Sun Jun 21 22:34:25 2020 from 192.168.122.229 [user_1234@host1 ~]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示工作目录:
pwd /home/idm_user/
[user_1234@host1 ~]$ pwd /home/idm_user/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
或者,如果您在 host1 上有 root 凭证,您可以使用它们来检查 idm_user 和 user_1234 的
id命令的输出:id idm_user uid=779800003(user_1234) gid=779800003(idm_user) groups=779800003(idm_user) user_1234 uid=779800003(user_1234) gid=779800003(idm_user) groups=779800003(idm_user)
[root@host1 ~]# id idm_user uid=779800003(user_1234) gid=779800003(idm_user) groups=779800003(idm_user) [root@host1 ~]# user_1234 uid=779800003(user_1234) gid=779800003(idm_user) groups=779800003(idm_user)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.6. 修改 IdM ID 视图 复制链接链接已复制到粘贴板!
身份管理(IdM)中的 ID 视图覆盖与特定 IdM 用户关联的 POSIX 属性值。按照以下步流程修改现有的 ID 视图。具体来说,它描述了如何修改 ID 视图以使名为 idm_user 的用户使用 /home/user_1234/ 目录作为用户主目录,而不是使用 host1.idm.example.com IdM 客户端上的 /home/idm_user/。
先决条件
- 具有对 host1.idm.example.com 的 root 访问权限。
- 您已以具有所需特权的用户身份登录,如 admin。
- 您为 idm_user 配置了一个 ID 视图,它适用于 host1 IdM 客户端。
流程
以 root 用户身份,创建您希望 idm_user 在 host1.idm.example.com 上作为用户主目录使用的目录:
mkdir /home/user_1234/
[root@host1 /]# mkdir /home/user_1234/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更改目录的所有权:
chown idm_user:idm_user /home/user_1234/
[root@host1 /]# chown idm_user:idm_user /home/user_1234/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示 ID 视图,包括当前要应用 ID 视图的主机。显示名为
example_for_host1的 ID 视图:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示 ID 视图当前应用于 host1.idm.example.com。
修改 example_for_host1 ID 视图的用户覆盖。覆盖用户主目录:
-
输入
ipa idoverrideuser-add命令 - 添加 ID 视图的名称
- 添加用户名,也称为锚
添加
--homedir选项:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
要获得可用选项的列表,请运行
ipa idoverrideuser-mod --help。-
输入
要将新配置立即应用到 host1.idm.example.com 系统:
以 root 身份通过 SSH 连接到系统:
ssh root@host1 Password:
$ ssh root@host1 Password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 清除 SSSD 缓存:
root@host1 ~]# sss_cache -E
root@host1 ~]# sss_cache -ECopy to Clipboard Copied! Toggle word wrap Toggle overflow - 重启 SSSD 守护进程:
root@host1 ~]# systemctl restart sssd
root@host1 ~]# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以 idm_user用户身份,通过
SSH连接到 host1:ssh idm_user@host1.idm.example.com Password: Last login: Sun Jun 21 22:34:25 2020 from 192.168.122.229
[root@r8server ~]# ssh idm_user@host1.idm.example.com Password: Last login: Sun Jun 21 22:34:25 2020 from 192.168.122.229 [user_1234@host1 ~]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 打印工作目录:
pwd /home/user_1234/
[user_1234@host1 ~]$ pwd /home/user_1234/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.7. 添加 ID 视图来覆盖 IdM 客户端上的 IdM 用户主目录 复制链接链接已复制到粘贴板!
身份管理(IdM)中的 ID 视图覆盖与特定 IdM 用户关联的 POSIX 属性值。按照以下流程,在名为 host1 的 IdM 客户端上创建一个应用到 idm_user 的 ID 视图,以允许用户将 /home/user_1234/ 目录用作用户主目录,而不是 /home/idm_user/。
先决条件
- 具有对 host1.idm.example.com 的 root 访问权限。
- 您已以具有所需特权的用户身份登录,如 admin。
流程
以 root 用户身份,创建您希望 idm_user 在 host1.idm.example.com 上作为用户主目录使用的目录:
mkdir /home/user_1234/
[root@host1 /]# mkdir /home/user_1234/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更改目录的所有权:
chown idm_user:idm_user /home/user_1234/
[root@host1 /]# chown idm_user:idm_user /home/user_1234/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 ID 视图。例如,创建名为 example_for_host1 的 ID 视图:
ipa idview-add example_for_host1 --------------------------- Added ID View "example_for_host1" --------------------------- ID View Name: example_for_host1
$ ipa idview-add example_for_host1 --------------------------- Added ID View "example_for_host1" --------------------------- ID View Name: example_for_host1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将用户覆盖添加到 example_for_host1 ID 视图。覆盖用户主目录:
-
输入
ipa idoverrideuser-add命令 - 添加 ID 视图的名称
- 添加用户名,也称为锚
-
添加
--homedir选项:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
输入
将
example_for_host1应用到host1.idm.example.com主机:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意ipa idview-apply命令也接受--hostgroups选项。选项将 ID 视图应用到属于指定主机组的主机,但不会将 ID 视图与主机组本身相关联。相反,--hostgroups选项会展开指定主机组的成员,并将--hosts选项分别应用到其中的每一个成员。这意味着,如果以后将主机添加到主机组中,则 ID 视图不会应用到新主机。
要将新配置立即应用到 host1.idm.example.com 系统:
以 root 身份通过 SSH 连接到系统:
ssh root@host1 Password:
$ ssh root@host1 Password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 清除 SSSD 缓存:
root@host1 ~]# sss_cache -E
root@host1 ~]# sss_cache -ECopy to Clipboard Copied! Toggle word wrap Toggle overflow - 重启 SSSD 守护进程:
root@host1 ~]# systemctl restart sssd
root@host1 ~]# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以 idm_user用户身份,通过
SSH连接到 host1:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 打印工作目录:
pwd /home/user_1234/
[idm_user@host1 /]$ pwd /home/user_1234/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.8. 将 ID 视图应用到 IdM 主机组 复制链接链接已复制到粘贴板!
ipa idview-apply 命令接受 --hostgroups 选项。不过,选项充当一次性操作,它将 ID 视图应用到当前属于指定主机组的主机,但不动态地将 ID 视图与主机组本身关联。--hostgroups 选项将展开指定主机组的成员,并将 --hosts 选项分别应用到其中的每一个成员。
如果稍后向主机组添加新主机,您必须使用 ipa idview-apply 命令及 --hosts 选项,手动将 ID 视图应用到新主机。
类似地,如果您从主机组中删除主机,则移除后 ID 视图仍会分配给该主机。要从删除的主机中取消 ID 视图应用,您必须运行 ipa idview-unapply id_view_name --hosts=name_of_the_removed_host 命令。
按照以下流程实现以下目标:
- 如何创建主机组并向其添加主机。
- 如何将 ID 视图应用到主机组。
- 如何向主机组添加新主机,并将 ID 视图应用到新主机。
先决条件
- 确保 IdM 中存在您要应用到主机组的 ID 视图。例如:要创建一个 ID 视图来覆盖特定 IdM 客户端上的 IdM 用户登录名称,请参阅 使用 ID 视图覆盖特定主机上 IdM 用户的登录名称。
流程
创建主机组并为其添加主机:
创建主机组.例如,创建名为 baltimore 的主机组:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将主机添加到主机组。例如,将 host102 和 host103 添加到 baltimore 主机组:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将 ID 视图应用到主机组中的主机。例如,要将 example_for_host1 ID 视图应用到 baltimore 主机组:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将新主机添加到主机组,并将 ID 视图应用到新主机:
将新主机添加到主机组。例如,要将 somehost.idm.example.com 主机添加到 baltimore 主机组:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:显示 ID 视图信息。例如,要显示 example_for_host1 ID 视图的详情:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示 ID 视图没有应用到 somehost.idm.example.com(在 baltimore 主机组中新添加的主机)。
将 ID 视图应用到新主机。例如,要将 example_for_host1 ID 视图应用到 somehost.idm.example.com :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
再次显示 ID 视图信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示 ID 视图现在已应用到 somehost.idm.example.com(在 baltimore 主机组中新添加的主机)。
36.9. 使用 Ansible 覆盖特定主机上 IdM 用户的登录名称和主目录 复制链接链接已复制到粘贴板!
完成此流程,以使用 idoverrideuser ansible-freeipa 模块为特定身份管理(IdM)客户端创建一个 ID 视图,该视图覆盖与特定 IdM 用户关联的 POSIX 属性值。流程使用 ID 视图的示例,使名为 idm_user 的 IdM 用户使用 user_1234 登录名称登录到名为 host1.idm.example.com 的 IdM 客户端。此外,ID 视图修改 idm_user 的主目录,以便登录到 host1 后,用户主目录为 /home/user_1234/。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 您已在 ~/MyPlaybooks/ 目录中创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
- 您使用 RHEL 8.10 或更高版本。
-
您已将
ipaadmin_password存储在 secret.yml Ansible vault 中。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
使用以下内容创建 Ansible playbook 文件 add-idoverrideuser-with-name-and-homedir.yml :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook。指定 playbook 文件,存储保护 secret.yml 文件的密码的文件,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/inventory <path_to_playbooks_directory>/add-idoverrideuser-with-name-and-homedir.yml
$ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/inventory <path_to_playbooks_directory>/add-idoverrideuser-with-name-and-homedir.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果您有
root凭证,您可以立即将新配置应用到 host1.idm.example.com 系统:以
root身份 SSH 到系统:ssh root@host1 Password:
$ ssh root@host1 Password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 清除 SSSD 缓存:
root@host1 ~]# sss_cache -E
root@host1 ~]# sss_cache -ECopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 SSSD 守护进程:
root@host1 ~]# systemctl restart sssd
root@host1 ~]# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以 idm_user用户身份,通过
SSH连接到 host1:ssh idm_user@host1.idm.example.com Password: Last login: Sun Jun 21 22:34:25 2020 from 192.168.122.229
[root@r8server ~]# ssh idm_user@host1.idm.example.com Password: Last login: Sun Jun 21 22:34:25 2020 from 192.168.122.229 [user_1234@host1 ~]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 打印工作目录:
pwd /home/user_1234/
[user_1234@host1 ~]$ pwd /home/user_1234/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.10. 使用 Ansible 配置在 IdM 客户端上启用 SSH 密钥登录的 ID 视图 复制链接链接已复制到粘贴板!
完成此流程,以使用 idoverrideuser ansible-freeipa 模块,来确保 IdM 用户可以使用特定的 SSH 密钥登录到特定的 IdM 客户端。流程使用 ID 视图的示例,使名为 idm_user 的 IdM 用户使用 SSH 密钥登录到名为 host1.idm.example.com 的 IdM 客户端。
此 ID 视图可用于增强特定的 HBAC 规则。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 您已在 ~/MyPlaybooks/ 目录中创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
- 您使用 RHEL 8.10 或更高版本。
-
您已将
ipaadmin_password存储在 secret.yml Ansible vault 中。
- 您可以访问 idm_user 的 SSH 公钥。
- idview_for_host1 ID 视图存在。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
使用以下内容创建 Ansible playbook 文件 ensure-idoverrideuser-can-login-with-sshkey.yml :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/inventory <path_to_playbooks_directory>/ensure-idoverrideuser-can-login-with-sshkey.yml
$ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/inventory <path_to_playbooks_directory>/ensure-idoverrideuser-can-login-with-sshkey.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果您有
root凭证,您可以立即将新配置应用到 host1.idm.example.com 系统:以
root身份 SSH 到系统:ssh root@host1 Password:
$ ssh root@host1 Password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 清除 SSSD 缓存:
root@host1 ~]# sss_cache -E
root@host1 ~]# sss_cache -ECopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 SSSD 守护进程:
root@host1 ~]# systemctl restart sssd
root@host1 ~]# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用公钥
SSH到 host1:ssh -i ~/.ssh/id_rsa.pub idm_user@host1.idm.example.com Last login: Sun Jun 21 22:34:25 2023 from 192.168.122.229
[root@r8server ~]# ssh -i ~/.ssh/id_rsa.pub idm_user@host1.idm.example.com Last login: Sun Jun 21 22:34:25 2023 from 192.168.122.229 [idm_user@host1 ~]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow
输出确认您已成功登录。
36.11. 使用 Ansible 为用户 ID 提供对 IdM 客户端上本地声卡的覆盖访问 复制链接链接已复制到粘贴板!
您可以使用 ansible-freeipa group 和 idoverrideuser 模块,使身份管理(IdM)或活动目录(AD)用户成员成为 IdM 客户端上本地 audio 组的成员。这授予 IdM 或 AD 用户对主机上声卡的特权访问。
流程使用在第一个 playbook 任务中添加了 aduser@addomain.com ID 覆盖的 Default Trust View ID 视图的示例。在下一个 playbook 任务中,在 IdM 中创建了一个 GID 为 63 的 audio 组,它对应 RHEL 主机上本地 audio 组的 GID。同时,aduser@addomain.com ID 覆盖作为成员添加到 IdM audio 组中。
先决条件
-
您有访问要在其上执行流程第一部分的 IdM 客户端的
root访问权限。在示例中,这是 client.idm.example.com。 您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已在 Ansible 控制器上安装了
ansible-freeipa软件包。 - 您使用 RHEL 8.10 或更高版本。
- 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
AD 林信任 IdM 。在示例中,AD 域的名称是 addomain.com,出现在本地
audio组中的 AD 用户的完全限定域名(FQDN)是 aduser@addomain.com。 -
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
在 client.idm.example.com 上,将
[SUCCESS=merge]添加到/etc/nsswitch.conf文件中:[...] # Allow initgroups to default to the setting for group. initgroups: sss [SUCCESS=merge] files
[...] # Allow initgroups to default to the setting for group. initgroups: sss [SUCCESS=merge] filesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确定本地
audio组的 GID:getent group audio --------------------- audio:x:63
$ getent group audio --------------------- audio:x:63Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Ansible 控制节点上,创建一个带有一个任务的 add-aduser-to-audio-group.yml playbook,来将 aduser@addomain.com 用户覆盖添加到 Default Trust View 中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在同一 playbook 中使用另一个 playbook 任务,将
GID为 63 的组 audio 添加到 IdM 中。将 aduser idoverrideuser 添加到组中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory add-aduser-to-audio-group.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory add-aduser-to-audio-group.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以 AD 用户身份登录到 IdM 客户端:
ssh aduser@addomain.com@client.idm.example.com
$ ssh aduser@addomain.com@client.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 AD 用户的组成员资格:
id aduser@addomain.com uid=702801456(aduser@addomain.com) gid=63(audio) groups=63(audio)
$ id aduser@addomain.com uid=702801456(aduser@addomain.com) gid=63(audio) groups=63(audio)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.12. 使用 Ansible 确保具有特定 UID 的 IdM 用户 在 ID 视图中存在 复制链接链接已复制到粘贴板!
如果您在一个实验室工作,其中您有自己的计算机,但您的 /home/ 目录位于服务器导出的共享驱动器中,则您可以有两个用户:
- 一个是系统范围的用户,集中存储在身份管理(IdM)中。
- 一个其帐户是本地的,存储在相关系统上。
如果您需要对您的文件具有完全访问,无论您是以 IdM 用户还是以本地用户登录,您都可以通过给这两个用户相同的 UID 来实现。
完成此流程,以使用 ansible-freeipa idoverrideuser 模块,来:
- 将 ID 视图应用到名为 idview_for_host01 的 host01。
-
确保在 idview_for_host01 中,对
UID为 20001 的 idm_user 的用户 ID 覆盖存在。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已在 Ansible 控制器上安装了
ansible-freeipa软件包。 - 您使用 RHEL 8.10 或更高版本。
- 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
- idview_for_host1 ID 视图存在。
流程
在 Ansible 控制节点上,使用以下内容创建一个 ensure-idmuser-and-local-user-have-access-to-same-files.yml playbook:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件。
运行 playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory ensure-idmuser-and-local-user-have-access-to-same-files.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory ensure-idmuser-and-local-user-have-access-to-same-files.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
36.13. 使用 Ansible 确保 IdM 用户可以使用两个证书登录到 IdM 客户端 复制链接链接已复制到粘贴板!
如果您希望一个通常使用密码登录到 IdM 身份管理(IdM)的用户只使用智能卡验证到一个特定的 IdM 客户端,则您可以创建一个 ID 视图,该视图要求对该客户端上的用户进行认证。
完成此流程,以使用 ansible-freeipa idoverrideuser 模块,来:
- 将 ID 视图应用到名为 idview_for_host01 的 host01。
- 确保在 idview_for_host01 中,对带有两个证书的 idm_user 的用户 ID 覆盖存在。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已在 Ansible 控制器上安装了
ansible-freeipa软件包。 - 您使用 RHEL 8.10 或更高版本。
- 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。 - 示例假定 cert1.b64 和 cert2.b64 证书位于您要执行 playbook 的同一目录中。
- idview_for_host01 ID 视图存在。
流程
在 Ansible 控制节点上,使用以下内容创建一个 ensure-idmuser-present-in-idview-with-certificates.yml playbook:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rstrip=False指令空格导致没有从查找文件的末尾删除。- 保存该文件。
运行 playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory ensure-idmuser-present-in-idview-with-certificates.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory ensure-idmuser-present-in-idview-with-certificates.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
36.14. 使用 Ansible 授予 IdM 组访问 IdM 客户端上声卡的权限 复制链接链接已复制到粘贴板!
您可以使用 ansible-freeipa idview 和 idoverridegroup 模块,使身份管理(IdM)或活动目录(AD)用户成为 IdM 客户端上本地 audio 组的成员。这授予 IdM 或 AD 用户对主机上声卡的特权访问。
流程使用 idview_for_host01 ID 视图的示例,其中 audio 组 ID 覆盖是使用 GID 63 添加的,该 GID 对应于 RHEL 主机上本地 audio 组的 GID。idview_for_host01 ID 视图被应用到名为 host01.idm.example.com 的 IdM 客户端。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已在 Ansible 控制器上安装了
ansible-freeipa软件包。 - 您使用 RHEL 8.10 或更高版本。
- 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
流程
可选:识别 RHEL 主机上本地
audio组的 GID:getent group audio --------------------- audio:x:63
$ getent group audio --------------------- audio:x:63Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Ansible 控制节点上,使用以下任务创建一个 give-idm-group-access-to-sound-card-on-idm-client.yml playbook:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory give-idm-group-access-to-sound-card-on-idm-client.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory give-idm-group-access-to-sound-card-on-idm-client.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在 IdM 客户端上,获取 IdM 管理员的凭证:
kinit admin Password:
$ kinit admin Password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个 test IdM 用户:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将用户添加到 IdM audio 组中:
ipa group-add-member --tuser audio
$ ipa group-add-member --tuser audioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以 tuser 用户身份登录到 host01.idm.example.com:
ssh tuser@host01.idm.example.com
$ ssh tuser@host01.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证用户的组成员资格:
id tuser uid=702801456(tuser) gid=63(audio) groups=63(audio)
$ id tuser uid=702801456(tuser) gid=63(audio) groups=63(audio)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
36.15. 将 NIS 域迁移到身份管理 复制链接链接已复制到粘贴板!
您可以使用 ID 视图为现有主机设置主机特定的 UID 和 GID,以防止在将 NIS 域迁移到 IdM 时更改文件和目录的权限。
先决条件
-
使用
kinit admin命令,将自己认证为 admin 。
流程
在 IdM 域中添加用户和组。
-
使用
ipa user-add命令创建用户。如需更多信息,请参阅: 将用户添加到 IdM。 -
使用
ipa group-add命令创建组。如需更多信息,请参阅:将组添加到 IdM。
-
使用
覆盖在用户创建过程中 Idm 生成的 ID:
-
使用
ipa idview-add命令创建一个新的 ID 视图。如需更多信息,请参阅:获取 ID 视图命令的帮助。 -
使用
ipa idoverrideuser-add和idoverridegroup-add将用户和组的 ID 覆盖分别添加到 ID 视图。
-
使用
-
使用
ipa idview-apply命令将 ID 视图分配给特定的主机。 - 停用 NIS 域。
验证
要检查所有用户和组是否已正确添加到 ID 视图中,请使用
ipa idview-show命令。ipa idview-show example-view ID View Name: example-view User object overrides: example-user1 Group object overrides: example-group
$ ipa idview-show example-view ID View Name: example-view User object overrides: example-user1 Group object overrides: example-groupCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 37 章 为活动目录用户使用 ID 视图 复制链接链接已复制到粘贴板!
您可以使用 ID 视图为 IdM-AD Trust 环境中活动目录(AD)用户的 POSIX 属性指定新值。
默认情况下,IdM 对所有 AD 用户应用 Default Trust View 。您可以在单个 IdM 客户端上配置其它 ID 视图,以进一步调整特定用户所收到的 POSIX 属性。
37.1. Default Trust View 是如何工作的 复制链接链接已复制到粘贴板!
Default Trust View 是默认的 ID 视图,其总是在基于信任的设置被应用于到 AD 用户和组。当您使用 ipa-adtrust-install 命令建立信任时,它会被自动创建,且不能被删除。
Default Trust View 仅接受对 AD 用户和组的覆盖,不接受对 IdM 用户和组的覆盖。
使用 Default Trust View,您可以为 AD 用户和组定义自定义 POSIX 属性,从而覆盖 AD 中定义的值。
| AD 中的值 | 默认信任视图 | 结果 | |
|---|---|---|---|
| 登录 | ad_user | ad_user | ad_user |
| UID | 111 | 222 | 222 |
| GID | 111 | (无值) | 111 |
您还可以配置其它 ID 视图来覆盖 IdM 客户端上的 Default Trust View。IdM 在 Default Trust View 顶部应用特定于主机的 ID 视图中的值:
- 如果特定于主机的 ID 视图中定义了一个属性,则 IdM 会应用此 ID 视图中的值。
- 如果在特定于主机的 ID 视图中未定义一个属性,则 IdM 会应用 Default Trust View 中的值。
| AD 中的值 | 默认信任视图 | 特定主机的 ID 视图 | 结果 | |
|---|---|---|---|---|
| 登录 | ad_user | ad_user | (无值) | ad_user |
| UID | 111 | 222 | 333 | 333 |
| GID | 111 | (无值) | 333 | 333 |
您只能应用特定于主机的 ID 视图来覆盖 IdM 客户端上的 Default Trust View。IdM 服务器和副本总是应用 Default Trust View 中的值。
37.2. 通过修改 Default Trust View 为 AD 用户定义全局属性 复制链接链接已复制到粘贴板!
如果要在整个 IdM 部署中覆盖活动目录(AD)用户的 POSIX 属性,请在 Default Trust View 中修改该用户的条目。这个过程将 AD 用户 ad_user@ad.example.com 的 GID 设为 732000006。
先决条件
- 您已作为 IdM 管理员进行了身份验证。
- 具有 GID 的组必须存在,否则您必须在组的 ID 覆盖中设置 GID。
流程
作为 IdM 管理员,在 Default Trust View 中为 AD 用户创建一个 ID 覆盖,其将 GID 号更改为 732000006:
ipa idoverrideuser-add 'Default Trust View' ad_user@ad.example.com --gidnumber=732000006
# ipa idoverrideuser-add 'Default Trust View' ad_user@ad.example.com --gidnumber=732000006Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从所有 IdM 服务器和客户端上的 SSSD 缓存中清除
ad_user@ad.example.com用户的条目。这会删除过时的数据,并允许应用新的覆盖值。sssctl cache-expire -u ad_user@ad.example.com
# sssctl cache-expire -u ad_user@ad.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检索
ad_user@ad.example.com用户的信息以验证 GID 是否反映了更新的值。id ad_user@ad.example.com uid=702801456(ad_user@ad.example.com) gid=732000006(ad_admins) groups=732000006(ad_admins),702800513(domain users@ad.example.com)
# id ad_user@ad.example.com uid=702801456(ad_user@ad.example.com) gid=732000006(ad_admins) groups=732000006(ad_admins),702800513(domain users@ad.example.com)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
37.3. 对带有 ID 视图的 IdM 客户端上的 AD 用户覆盖 Default Trust View 属性 复制链接链接已复制到粘贴板!
您可能希望为活动目录(AD)用户覆盖 Default Trust View 中的一些 POSIX 属性。例如,您可能需要在一个特定的 IdM 客户端上给 AD 用户赋予一个不同的 GID。对 AD 用户,您可以使用一个 ID 视图覆盖 Default Trust View 中的一个值,并将其应用到单个主机。此流程解释了如何将 host1.idm.example.com IdM 客户端上的 ad_user@ad.example.com AD 用户的 GID 设为 732001337。
先决条件
-
您有访问
host1.idm.example.comIdM 客户端的 root 权限。 -
您已作为具有所需权限的用户登录了,如
admin用户。
流程
创建 ID 视图。例如,创建名为 example_for_host1 的 ID 视图:
ipa idview-add example_for_host1 --------------------------- Added ID View "example_for_host1" --------------------------- ID View Name: example_for_host1
$ ipa idview-add example_for_host1 --------------------------- Added ID View "example_for_host1" --------------------------- ID View Name: example_for_host1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将用户覆盖添加到 example_for_host1 ID 视图。要覆盖用户的 GID:
-
输入
ipa idoverrideuser-add命令 - 添加 ID 视图的名称
- 添加用户名,也称为锚
-
添加
--gidnumber=选项:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
输入
将
example_for_host1应用到host1.idm.example.comIdM 客户端:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意ipa idview-apply命令也接受--hostgroups选项。选项将 ID 视图应用到属于指定主机组的主机,但不会将 ID 视图与主机组本身相关联。相反,--hostgroups选项会展开指定主机组的成员,并将--hosts选项分别应用到其中的每一个成员。这意味着,如果以后将主机添加到主机组中,则 ID 视图不会应用到新主机。
从
host1.idm.example.comIdM 客户端上的 SSSD 缓存中清除掉ad_user@ad.example.com用户的条目。这会删除过时的数据,并允许应用新的覆盖值。sssctl cache-expire -u ad_user@ad.example.com
[root@host1 ~]# sssctl cache-expire -u ad_user@ad.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以 ad_user@ad.example.com 身份
SSH到 host1 :ssh ad_user@ad.example.com@host1.idm.example.com
[root@r8server ~]# ssh ad_user@ad.example.com@host1.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检索
ad_user@ad.example.com用户的信息以验证 GID 是否反映了更新的值。[ad_user@ad.example.com@host1 ~]$ id ad_user@ad.example.com uid=702801456(ad_user@ad.example.com) gid=732001337(admins2) groups=732001337(admins2),702800513(domain users@ad.example.com)
[ad_user@ad.example.com@host1 ~]$ id ad_user@ad.example.com uid=702801456(ad_user@ad.example.com) gid=732001337(admins2) groups=732001337(admins2),702800513(domain users@ad.example.com)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
37.4. 将 ID 视图应用到 IdM 主机组 复制链接链接已复制到粘贴板!
ipa idview-apply 命令接受 --hostgroups 选项。不过,选项充当一次性操作,它将 ID 视图应用到当前属于指定主机组的主机,但不动态地将 ID 视图与主机组本身关联。--hostgroups 选项将展开指定主机组的成员,并将 --hosts 选项分别应用到其中的每一个成员。
如果稍后向主机组添加新主机,您必须使用 ipa idview-apply 命令及 --hosts 选项,手动将 ID 视图应用到新主机。
类似地,如果您从主机组中删除主机,则移除后 ID 视图仍会分配给该主机。要从删除的主机中取消 ID 视图应用,您必须运行 ipa idview-unapply id_view_name --hosts=name_of_the_removed_host 命令。
按照以下流程实现以下目标:
- 如何创建主机组并向其添加主机。
- 如何将 ID 视图应用到主机组。
- 如何向主机组添加新主机,并将 ID 视图应用到新主机。
先决条件
- 确保 IdM 中存在您要应用到主机组的 ID 视图。例如:要创建一个 ID 视图来覆盖特定 IdM 客户端上的 IdM 用户登录名称,请参阅 使用 ID 视图覆盖特定主机上 IdM 用户的登录名称。
流程
创建主机组并为其添加主机:
创建主机组.例如,创建名为 baltimore 的主机组:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将主机添加到主机组。例如,将 host102 和 host103 添加到 baltimore 主机组:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将 ID 视图应用到主机组中的主机。例如,要将 example_for_host1 ID 视图应用到 baltimore 主机组:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将新主机添加到主机组,并将 ID 视图应用到新主机:
将新主机添加到主机组。例如,要将 somehost.idm.example.com 主机添加到 baltimore 主机组:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:显示 ID 视图信息。例如,要显示 example_for_host1 ID 视图的详情:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示 ID 视图没有应用到 somehost.idm.example.com(在 baltimore 主机组中新添加的主机)。
将 ID 视图应用到新主机。例如,要将 example_for_host1 ID 视图应用到 somehost.idm.example.com :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
再次显示 ID 视图信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示 ID 视图现在已应用到 somehost.idm.example.com(在 baltimore 主机组中新添加的主机)。
第 38 章 手动调整 ID 范围 复制链接链接已复制到粘贴板!
IdM 服务器生成唯一用户 ID(UID)和组 ID(GID)号。通过为副本创建和分配不同的 ID 范围,还确保它们永远不会生成相同的 ID 号。默认情况下,此过程是自动的。但是,您可以在 IdM 服务器安装过程中手动调整 IdM ID 范围,或者手动定义副本的 DNA ID 范围。
38.1. ID 范围 复制链接链接已复制到粘贴板!
ID 号被划分为 ID 范围。为各个服务器和副本保持单独的数字范围可避免为某个条目发布的 ID 号已在其他服务器或副本上的另一个条目使用的几率。
请注意,有两种不同的 ID 范围:
- IdM ID 范围,是在安装第一个服务器时分配的。此范围在创建后不可修改。但是,除了新的 IdM ID 范围外,您还可以创建新的 IdM ID 范围。如需更多信息,请参阅 自动 ID 范围分配 和 添加一个新的 IdM ID 范围。
分布式数字分配(DNA)ID 范围,可由用户修改。它们必须适合现有的 IdM ID 范围。如需更多信息,请参阅 手动分配 DNA ID 范围。
也可以给副本分配 下一个 DNA ID 范围。当副本当前范围内的 ID 不足时,副本会使用其下一个范围。当一个副本被删除时,下一个范围不会被 自动分配,因此您必须手动分配它们。
作为域的后端 389 目录服务器实例的一部分,范围是通过 DNA 插件在服务器和副本之间更新和共享的。
DNA 范围定义由两个属性设置:
- 服务器的下一个可用数字: DNA 范围的低端
- 范围大小:ID 在 DNA 范围内的数量
初始底部范围是在插件实例配置期间设置的。之后,插件会更新底部值。通过将可用号划分成范围,服务器可以持续分配号,而不会相互重叠。
38.2. 自动 ID 范围分配 复制链接链接已复制到粘贴板!
IdM ID 范围
默认情况下,在 IdM 服务器安装过程中自动分配本地域 IdM ID 范围(ipa-local)。ipa-server-install 命令会从总共 10,000 个可能的范围中随机选择并分配 200,000 个 ID。当您决定以后合并两个独立的 IdM 域时,以这种方法选择一个随机范围可显著降低冲突 ID 的可能性。
避免在创建后修改此 IdM ID 范围。您可以使用 手动分配 DNA ID 范围 中描述的命令来手动调整分布式数字分配( DNA) ID 范围。与 IdM ID 范围匹配的 DNA 范围是在安装过程中自动创建的。
DNA ID 范围
如果您安装了一个 IdM 服务器,它会控制整个 DNA ID 范围。当您安装了新副本,并且副本请求它自己的 DNA ID 范围时,服务器的初始 ID 范围将被拆分,并分布在服务器和副本之间:副本接收初始服务器上可用的剩余 DNA ID 范围的一半。服务器和副本随后将原始 ID 范围的各自部分用于新用户或组条目。另外,如果副本即将耗尽其分配的 ID 范围,且剩余的ID 少于 100 个,则副本会联系其他可用的服务器来请求新的 DNA ID 范围。
安装副本时,它不会 立即收到一个 ID 范围。副本在首次使用 DNA 插件时收到一个 ID 范围,例如首次添加用户时。
如果初始服务器在副本向其请求 DNA ID 范围之前停止工作,则副本无法与服务器联系来请求 ID 范围。尝试在副本上添加新用户会失败。在这种情况下,您可以找出分配给禁用的服务器的 ID 范围,并 手动为副本分配一个 ID 范围。
38.3. 在服务器安装过程中手动分配 IdM ID 范围 复制链接链接已复制到粘贴板!
您可以覆盖默认行为,并手动设置 IdM ID 范围,而不是随机分配。
不要设置 UID 值为 1000 或更低的 ID 范围;这些值是保留给系统使用的。另外,不要设置包含 0 值的 ID 范围;SSSD 服务不处理 ID 为 0 的值。
流程
您可以在服务器安装过程中使用
ipa-server-install及以下两个选项来手动定义 IdM ID 范围:-
--idstart给出 UID 和 GID 号的起始值。 -
--idmax给出 UID 和 GID 号的最大值;默认情况下,值为--idstart起始值加上 199,999。
-
验证
要检查 ID 范围是否已正确分配,您可以使用
ipa idrange-find命令显示已分配的 IdM ID 范围:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
38.4. 添加新的 IdM ID 范围 复制链接链接已复制到粘贴板!
在某些情况下,除了原始的 ID 范围,您可能想要创建新的 IdM ID 范围;例如,当副本的 ID 用完,且原始的 IdM ID 范围耗尽时。
添加新 IdM ID 范围不会自动创建新的 DNA ID 范围。您必须根据需要手动将新的 DNA ID 范围分配给副本。有关如何进行此操作的更多信息,请参阅 手动分配 DNA ID 范围。
流程
要创建新的 IdM ID 范围,请使用
ipa idrange-add命令。您必须指定新范围名称、范围的第一个 ID 号、范围大小以及主和辅助 RID 范围的第一个 RID 号:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在部署中的 所有 IdM 服务器 上重启 Directory Server 服务:
systemctl restart dirsrv@IDM-EXAMPLE-COM.service
# systemctl restart dirsrv@IDM-EXAMPLE-COM.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这确保当您使用新范围中的 UID 创建用户时,它们分配了安全标识符(SID)。
可选:立即更新 ID 范围:
清除系统安全服务守护进程(SSSD)缓存:
sss_cache -E
# sss_cache -ECopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 SSSD 守护进程:
systemctl restart sssd
# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您没有清除 SSSD 缓存并重新启动服务,SSSD 仅在更新域列表和其他存储在 IdM 服务器上的其他配置数据时检测到新的 ID 范围。
验证
您可以使用
ipa idrange-find命令检查新范围是否设置正确:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
38.5. IdM ID 范围中的安全性和相对标识符的角色 复制链接链接已复制到粘贴板!
身份管理 (IdM) ID 范围由几个参数定义:
- 范围名称
- 范围的第一个 POSIX ID
- 范围大小: 范围内的 ID 数量
- 对应的 RID range 的第一个 相对标识符 (RID)
- 二级 RID 范围的第一个 RID
您可以使用 ipa idrange-show 命令查看这些值:
安全识别符
IdM 服务器在内部使用本地域的 ID 范围中的数据,来将唯一的 安全标识符 (SIDs)分配给 IdM 用户和组。SID 存储在用户和组对象中。用户的 SID 由以下内容组成:
- 域 SID
- 用户的相对标识符 (RID),它是附加到域 SID 的四位 32 位值
例如,如果域 SID 是 S-1-5-21-123-456-789,并且来自此域中的用户的 RID 是 1008,则用户的 SID 为 S-1-5-21-123-456-789-1008。
相对标识符
RID 本身以以下方式计算:
从用户的 POSIX UID 中减去范围的第一个 POSIX ID,并将相应 RID 范围的第一个 RID 添加到结果中。例如,如果 idmuser 的 UID 是 196600008,则第一个 POSIX ID 为 196600000,第一个 RID 为 1000,则 idmuser 的 RID 为 1008。
该算法计算用户的 RID 会检查给定 POSIX ID 是否属于分配的 ID 范围,然后再计算对应的 RID。例如,如果第一个 ID 是 196600000,并且范围大小为 200000,那么 POSIX ID 为 1600000,则算法不会为其计算 RID。
二级相对标识符
在 IdM 中,POSIX UID 可以与 POSIX GID 相同。这意味着,如果 idmuser 已存在 UID 196600008,您仍然可以创建一个新的 idmgroup 组,GID 为 196600008。
但是,一个 SID 只能定义一个对象,一个用户或一个组。为 idmuser 创建的 S-1-5-21-123-456-789-1008 的 SID 无法与 idmgroup 共享。必须为 idmgroup 生成一个替代 SID。
IdM 使用 二级相对标识符二级 RID,以避免出现冲突的 SID。这个二级 RID 由以下内容组成:
- 二级 RID 基础
- 范围大小;默认情况下与基本范围大小相同
在上例中,二级 RID 基础被设置为 1000000。要计算新创建的 idmgroup 的 RID:减少用户 POSIX UID 范围内的第一个 POSIX ID,并将二级 RID 范围的第一个 RID 添加到结果中。因此,idmgroup 被分配 1000008 的 RID。因此,idmgroup 的 SID 是 S-1-5-21-123-456-789-1000008。
只有当之前使用手动设置 POSIX ID 创建用户或组对象时,IdM 使用二级 RID 来计算 SID。否则,自动分配会防止分配相同的 ID 两次。
38.6. 自动检测和修复 ID 范围问题 复制链接链接已复制到粘贴板!
身份管理(IdM)中的 Kerberos 使用 Privilege Attribute 证书(PAC)进行授权。要使用户和组正常工作,用户和组必须分配有安全标识符(SID)。只能为位于有效 ipa-local ID 范围内的实体生成 SID。
如果在定义的 ipa-local 范围之外创建用户或组,或者现有范围配置错误,则 SID 生成任务可能会失败。这可以防止用户进行身份验证并获取 Kerberos 票据。
您可以使用 ipa-idrange-fix 命令行工具分析和修复这些不一致的情况。工具标识有效范围之外的用户和组,提出创建新范围以覆盖它们,并在确认时应用更改。
先决条件
您有运行该工具的 IdM 服务器的
root访问权限。重要红帽强烈建议在应用
ipa-idrange-fix工具推荐的任何更改前创建系统的完整备份。- 服务器正在运行 RHEL 8.10 或更新版本。
流程
运行
ipa-idrange-fix以分析当前的 ID 范围。您可以使用各种选项自定义此功能,例如:ipa-idrange-fix --rangegap 300000 --minrange 20 --ridoffset 200000
# ipa-idrange-fix --rangegap 300000 --minrange 20 --ridoffset 200000Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
--rangegap <value>: 指定要包含在单个建议范围内的 ID 的最大差距。默认值为200000。 -
--minrange <value> : 设置形成有效新范围所需的最少 ID 数量。小于这个值的任何 ID 组将被列为手动解析的外部。默认值为10。 --ridoffset <value> : 为新的 RID 基础设置一个偏移值,以便以后扩展现有范围。默认值为100000。注意默认情况下,
ipa-idrange-fix工具会忽略 ID低于 1000 的用户和组,因为它们通常为系统帐户保留。要在分析中包含这些实体(不推荐),请使用--allowunder1000选项。
-
工具显示提议的更改,如创建新 ID 范围。仔细检查提议的更改。
注意ipa-idrange-fix不会为没有它们的用户和组创建新的 SID。要创建缺少的 SID,请参阅在 IdM 中启用安全标识符(SID)。输入
yes以应用更改。重要不要使用-
unattended选项运行ipa-idrange-fix,除非您确定要自动应用所有提议的更改。
验证
查看日志文件以查看应用的更改:
cat /var/log/ipa/ipa-idrange-fix.log
# cat /var/log/ipa/ipa-idrange-fix.logCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ipa idrange-find --all命令来验证新 ID 范围是否已正确创建:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
38.7. 使用 Ansible 添加新的本地 IdM ID 范围 复制链接链接已复制到粘贴板!
在某些情况下,您可能需要创建新的 Identity Management (IdM) ID 范围以及原始的 ID 范围;例如,当副本退出 ID 且原始 IdM ID 范围相同时,原始 IdM ID 范围会被处理。以下示例演示了如何使用 Ansible playbook 创建新 IdM ID 范围。
添加新 IdM ID 范围不会自动创建新的 DNA ID 范围。您需要根据需要手动分配新的 DNA ID 范围。有关如何进行此操作的更多信息,请参阅 手动分配 DNA ID 范围。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下内容创建
idrange-present.ymlplaybook:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory idrange-present.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory idrange-present.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow SSH到ipaserver,并重启 Directory 服务器:systemctl restart dirsrv@IDM.EXAMPLE.COM.service
# systemctl restart dirsrv@IDM.EXAMPLE.COM.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这确保当您使用新范围中的 UID 创建用户时,它们分配了安全标识符(SID)。
可选:立即更新 ID 范围:
在
ipaserver上,清除系统安全服务守护进程(SSSD)缓存:sss_cache -E
# sss_cache -ECopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
ipaserver上,重启 SSSD 守护进程:systemctl restart sssd
# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您没有清除 SSSD 缓存并重新启动服务,SSSD 仅在更新域列表和其他存储在 IdM 服务器上的其他配置数据时检测到新的 ID 范围。
验证
-
您可以使用
ipa idrange-find命令检查新范围是否设置正确:
38.8. 删除对 AD 的信任后删除 ID 范围 复制链接链接已复制到粘贴板!
如果您已删除了 IdM 和活动目录(AD)环境之间的信任,则您可能想要删除与其关联的 ID 范围。
分配给与可信域相关联的 ID 范围的 ID ,可能仍然用于注册到 IdM 的系统上的文件和目录的所有权。
如果您删除了与已删除的 AD 信任对应的 ID 范围,则您将无法解析 AD 用户所拥有的任何文件和目录的所有权。
先决条件
- 您已删除了对 AD 环境的信任。
流程
显示所有当前正在使用的 ID 范围:
ipa idrange-find
[root@server ~]# ipa idrange-findCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
识别与您删除的信任相关联的 ID 范围的名称。ID 范围名称的第一部分是信任的名称,如
AD.EXAMPLE.COM_id_range。 删除范围:
ipa idrange-del AD.EXAMPLE.COM_id_range
[root@server ~]# ipa idrange-del AD.EXAMPLE.COM_id_rangeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 SSSD 服务,来删除对您已删除的 ID 范围的引用。
systemctl restart sssd
[root@server ~]# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
38.9. 显示当前分配的 DNA ID 范围 复制链接链接已复制到粘贴板!
您可以显示服务器上当前活跃的分布式数字分配(DNA)ID 范围,以及它的下一个 DNA 范围(如果已经分配了一个)。
流程
要显示拓扑中为服务器配置了哪些 DNA ID 范围,请使用以下命令:
ipa-replica-manage dnarange-show显示当前在所有服务器上设置的 DNA ID 范围;或者,如果您指定了一个服务器,则仅显示指定服务器上的 DNA ID 范围,例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipa-replica-manage dnanextrange-show显示当前在所有服务器上设置的下一个 DNA ID 范围;或者,如果您指定了一个服务器,则仅显示指定服务器上的下一个 DNA ID 范围,例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
38.10. 手动 ID 范围分配 复制链接链接已复制到粘贴板!
在某些情况下,需要手动分配分布式数字分配(DNA)ID 范围,例如:
副本的 ID 不足,并且 IdM ID 范围已耗尽
副本已耗尽为其分配的 DNA ID 范围,并且请求额外 ID 失败,因为 IdM 范围内没有更多可用的 ID。
要解决这种情况,请扩展分配给副本的 DNA ID 范围。您可以通过两种方式执行此操作:
- 缩短分配给不同副本的 DNA ID 范围,然后将新的可用值分配给已耗尽的副本。
创建新的 IdM ID 范围,然后在这个创建的 IdM 范围内为副本设置一个新的 DNA ID 范围。
有关如何创建新 IdM ID 范围的详情,请参考 添加新的 IdM ID 范围。
副本停止工作
当副本停止正常工作且必须被删除时,不会自动检索副本的 DNA ID 范围,这意味着之前分配给副本的 DNA ID 范围变得不可用。您要恢复 DNA ID 范围,并使其可用于其他副本。
为此,请在手动将该范围分配给其他服务器之前找出 ID 范围值是什么。此外,为了避免重复的 UID 或 GID,请确保恢复范围内的 ID 值之前没有分配给用户或组;您可以通过检查现有用户和组的 UID 和 GID 来完成此操作。
您可以使用 手动分配 DNA ID 范围 中的命令来手动分配 DNA ID 。
如果您分配了新的 DNA ID 范围,则服务器或副本上已存在条目的 UID 保持不变。这不会造成问题,因为即使您更改了当前的 DNA ID 范围,IdM 也会保留过去分配的范围的记录。
38.11. 手动分配 DNA ID 范围 复制链接链接已复制到粘贴板!
在某些情况下,您可能需要为现有副本手动分配分布式 数字分配(DNA)ID 范围,例如将分配给不工作副本的 DNA ID 范围重新分配。如需更多信息,请参阅手动 ID 范围分配。
在手动调整 DNA ID 范围时,请确保新调整的范围包含在 IdM ID 范围内;您可以使用 ipa idrange-find 命令对此进行检查。否则,命令会失败。
注意不要创建重叠的 ID 范围。如果您分配给服务器或副本的任何 ID 范围重叠了,可能会导致两个不同的服务器给不同的条目分配了相同的 ID 值。
先决条件
- 可选: 如果您要从不工作的副本恢复 DNA ID 范围,首先使用 显示当前分配的 DNA ID 范围 中描述的命令来查找 ID 范围。
流程
要为指定服务器定义当前的 DNA ID 范围,请使用
ipa-replica-manage dnarange-set:ipa-replica-manage dnarange-set serverA.example.com 1250-1499
# ipa-replica-manage dnarange-set serverA.example.com 1250-1499Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要为指定服务器定义下一个 DNA ID 范围,请使用
ipa-replica-manage dnanextrange-set:ipa-replica-manage dnanextrange-set serverB.example.com 1500-5000
# ipa-replica-manage dnanextrange-set serverB.example.com 1500-5000Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 您可以使用 显示当前分配的 DNA ID 范围 中描述的命令来检查新的 DNA 范围是否设置正确。
第 39 章 手动管理 subID 范围 复制链接链接已复制到粘贴板!
在容器化环境中,有时 IdM 用户需要手动分配 subID 范围。以下说明描述了如何管理 subID 范围。
39.1. 使用 IdM CLI 生成子 subID 范围 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以生成一个 subID 范围,并将其分配给 IdM 用户。
先决条件
- IdM 用户存在。
-
您已获得 IdM
admin票据授予票(TGT)。如需了解更多详细信息,请参阅 使用 kinit 手动登录到 IdM。 -
您有访问您要执行流程的 IdM 主机的
root访问权限。
流程
可选:检查现有的 subID 范围:
ipa subid-find
# ipa subid-findCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 subID 范围不存在,请选择以下选项之一:
生成并将 subID 范围分配给一个 IdM 用户:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成并将 subID 范围分配给所有 IdM 用户:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
可选:默认将 subID 范围分配给新的 IdM 用户:
ipa config-mod --user-default-subid=True
# ipa config-mod --user-default-subid=TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证用户是否已分配了 subID 范围:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
39.2. 使用 IdM WebUI 接口生成 subID 范围 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以生成一个 subID 范围,并在 IdM WebUI 界面中将其分配给一个用户。
先决条件
- IdM 用户存在。
-
您已获得 IdM
adminKerberos 票据(TGT)。请参阅 在 Web UI 中登录到 IdM:使用 Kerberos 票据 以了解更多详细信息。 -
您有访问您要执行流程的 IdM 主机的
root访问权限。
流程
- 在 IdM WebUI 界面中,展开 Subordinate ID 选项卡,并选择 Subordinate IDs 选项。
- 当出现 Subordinate IDs 接口时,点界面右上角的 Add 按钮。此时出现 Add subid 窗口。
- 在 Add subid 窗口中,选择一个所有者,这是您要为其分配 subID 范围的用户。
- 点击 Add 按钮。
验证
- 查看 Subordinate IDs 选项卡下的表。表中显示了一条新记录。所有者是您为其分配 subID 范围的用户。
39.3. 使用 IdM CLI 查看有关 IdM 用户的 subID 信息 复制链接链接已复制到粘贴板!
作为身份管理(IdM)用户,您可以搜索 IdM 用户 subID 范围,并查看相关的信息。
先决条件
- 您已在 IdM 客户端上配置了 subID 范围。如需更多信息,请参阅使用 IdM CLI 生成 subID 范围。
- 您已获得了一个 IdM 用户票据授予票据(TGT)。如需了解更多详细信息,请参阅 使用 kinit 手动登录到 IdM。
流程
要查看 subID 范围的详情:
如果您知道是范围所有者的身份管理(IdM)用户的唯一 ID 哈希:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您知道该范围内的特定 subID:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
39.4. 使用 getsubid 命令列出 subID 范围 复制链接链接已复制到粘贴板!
作为系统管理员,您可以使用命令行列出身份管理(IdM)或本地用户的 subID 范围。
先决条件
- idmuser 用户在 IdM 中存在。
-
shadow-utils-subid软件包已安装。 -
您可以编辑
/etc/nsswitch.conf文件。
流程
打开
/etc/nsswitch.conf文件,并通过将subid变量设置为sss值,来将shadow-utils工具配置为使用 IdM subID 范围:[...] subid: sss
[...] subid: sssCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您只能为
subid字段提供一个值。将subid字段设置为file值或 no 值,而不是sss将shadow-utils工具配置为使用/etc/subuid和/etc/subgid文件中的 subID 范围。列出 IdM 用户的 subID 范围:
getsubids idmuser 0: idmuser 2147483648 65536
$ getsubids idmuser 0: idmuser 2147483648 65536Copy to Clipboard Copied! Toggle word wrap Toggle overflow 第一个值 2147483648 表示 subID 范围的开始。第二个值 65536 表示范围的大小。
第 40 章 使用 Ansible 管理 IdM 中的复制拓扑 复制链接链接已复制到粘贴板!
您可以维护多个身份管理 (IdM) 服务器,并使它们相互复制,以实现冗余目的,以减少或防止服务器丢失。例如,如果一个服务器失败,其他服务器就会为域提供服务。您还可以根据剩余的服务器创建新副本来恢复丢失的服务器。
存储在 IdM 服务器上的数据会根据复制协议复制:当两台服务器配置了复制协议时,它们将共享其数据。复制的数据存储在拓扑后缀中。当两个副本在其后缀之间具有复制协议时,后缀组成一个拓扑片段(segment)。
本章论述了如何使用 Ansible 管理 IdM 复制协议、拓扑段和拓扑后缀。
40.1. 使用 Ansible 确保 IdM 中存在复制协议 复制链接链接已复制到粘贴板!
存储在身份管理 (IdM) 服务器上的数据存储基于复制协议:配置了两个服务器时,它们共享其数据。复制协议始终为现实:数据从第一个副本复制到另一个副本,另一个副本复制到第一个副本。
按照以下流程,使用 Ansible playbook 确保 server.idm.example.com 和 replica.idm.example.com 之间的 domain 类型的复制协议存在。
先决条件
- 确保您了解设计 连接拓扑中 IdM 副本的指南 中列出的IdM 拓扑的建议。
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了您的
ipaadmin_password,并且您可以访问存储了保护 secret.yml 文件的密码的文件。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制
ansible-freeipa软件包提供的add-topologysegment.ymlAnsible playbook 文件:cp /usr/share/doc/ansible-freeipa/playbooks/topology/add-topologysegment.yml add-topologysegment-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/topology/add-topologysegment.yml add-topologysegment-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
add-topologysegment-copy.yml文件进行编辑。 通过在
ipatopologysegment任务部分设置以下变量来调整文件:-
表示
ipaadmin_password变量的值已在 secret.yml Ansible vault 文件中定义。 -
根据您要添加的分段类型,将
suffix变量设置为domain或ca。 -
将
left变量设置为您要作为复制协议左侧节点的 IdM 服务器的名称。 -
将
right变量设置为您要作为复制协议正确节点的 IdM 服务器的名称。 -
确保
state变量设置为present。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
表示
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory add-topologysegment-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory add-topologysegment-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
40.2. 使用 Ansible 确保多个 IdM 副本之间存在复制协议 复制链接链接已复制到粘贴板!
存储在身份管理 (IdM) 服务器上的数据存储基于复制协议:配置了两个服务器时,它们共享其数据。复制协议始终为现实:数据从第一个副本复制到另一个副本,另一个副本复制到第一个副本。
按照以下流程,确保 IdM 中的多个副本对之间存在复制协议。
先决条件
- 确保您了解设计 在拓扑中连接副本 中列出的 IdM 拓扑的建议。
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了您的
ipaadmin_password,并且您可以访问存储了保护 secret.yml 文件的密码的文件。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制
ansible-freeipa软件包提供的add-topologysegments.ymlAnsible playbook 文件:cp /usr/share/doc/ansible-freeipa/playbooks/topology/add-topologysegments.yml add-topologysegments-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/topology/add-topologysegments.yml add-topologysegments-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
add-topologysegments-copy.yml文件进行编辑。 通过在
vars部分中设置以下变量来调整文件:-
表示
ipaadmin_password变量的值已在 secret.yml Ansible vault 文件中定义。 对于每个拓扑片段,在
ipatopology_segments部分添加一个行并设置以下变量:-
根据您要添加的分段类型,将
suffix变量设置为domain或ca。 -
将
left变量设置为您要作为复制协议左侧节点的 IdM 服务器的名称。 -
将
right变量设置为您要作为复制协议正确节点的 IdM 服务器的名称。
-
根据您要添加的分段类型,将
-
表示
在
add-topologysegments-copy.yml文件的tasks部分中,确保state变量设置为present。这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory add-topologysegments-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory add-topologysegments-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
40.3. 使用 Ansible 检查两个副本之间是否存在复制协议 复制链接链接已复制到粘贴板!
存储在身份管理 (IdM) 服务器上的数据存储基于复制协议:配置了两个服务器时,它们共享其数据。复制协议始终为现实:数据从第一个副本复制到另一个副本,另一个副本复制到第一个副本。
按照以下流程验证 IdM 中多个副本对之间是否存在复制协议。与 使用 Ansible 确保复制协议在 IdM 中存在 不同,这个过程不会修改现有的配置。
先决条件
- 确保您了解拓扑中连接副本中列出的 IdM 拓扑的建议。
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了您的
ipaadmin_password,并且您可以访问存储了保护 secret.yml 文件的密码的文件。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制
ansible-freeipa软件包提供的check-topologysegments.ymlAnsible playbook 文件:cp /usr/share/doc/ansible-freeipa/playbooks/topology/check-topologysegments.yml check-topologysegments-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/topology/check-topologysegments.yml check-topologysegments-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
check-topologysegments-copy.yml文件进行编辑。 通过在
vars部分中设置以下变量来调整文件:-
表示
ipaadmin_password变量的值已在 secret.yml Ansible vault 文件中定义。 对于每个拓扑片段,在
ipatopology_segments部分添加一个行并设置以下变量:-
根据您要添加的分段类型,将
suffix变量设置为domain或ca。 -
将
left变量设置为您要作为复制协议左侧节点的 IdM 服务器的名称。 -
将
right变量设置为您要作为复制协议正确节点的 IdM 服务器的名称。
-
根据您要添加的分段类型,将
-
表示
在
check-topologysegments-copy.yml文件的tasks部分中,确保state变量设置为present。这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory check-topologysegments-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory check-topologysegments-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
40.4. 使用 Ansible 验证 IdM 中是否存在拓扑后缀 复制链接链接已复制到粘贴板!
在身份管理 (IdM) 中的复制协议中,拓扑后缀存储要复制的数据。IdM 支持两种类型的拓扑后缀:domain 和 ca。每个后缀代表一个单独的后端,即一个单独的复制拓扑。配置复制协议时,它会在两个不同的服务器上加入同一类型的两个拓扑后缀。
domain 后缀包含所有与域相关的数据,如有关用户、组和策略的数据。ca 后缀包含证书系统组件的数据。它仅存在于安装有证书颁发机构 (CA) 的服务器上。
按照以下流程,使用 Ansible playbook 确保拓扑后缀在 IdM 中存在。这个示例描述了如何确保 IdM 中存在 domain 后缀。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了您的
ipaadmin_password,并且您可以访问存储了保护 secret.yml 文件的密码的文件。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制
ansible-freeipa软件包提供的verify-topologysuffix.ymlAnsible playbook 文件:cp /usr/share/doc/ansible-freeipa/playbooks/topology/ verify-topologysuffix.yml verify-topologysuffix-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/topology/ verify-topologysuffix.yml verify-topologysuffix-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
verify-topologysuffix-copy.ymlAnsible playbook 文件进行编辑。 通过在
ipatopologysuffix部分中设置以下变量来调整文件:-
表示
ipaadmin_password变量的值已在 secret.yml Ansible vault 文件中定义。 -
将
suffix变量设置为domain。如果您要验证ca后缀是否存在,请将 变量设置为ca。 -
确保
state变量设置为verify。不允许使用其他选项。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
表示
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory verify-topologysuffix-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory verify-topologysuffix-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
40.5. 使用 Ansible 重新初始化 IdM 副本 复制链接链接已复制到粘贴板!
如果副本离线很长时间或者其数据库已损坏,您可以重新初始化它。重新初始化会使用更新的一组数据刷新副本。例如,如果需要从备份进行权威恢复,可以使用重新初始化。
与复制更新不同,副本仅互相发送更改的条目,重新初始化会刷新整个数据库。
运行命令的本地主机是重新初始化的副本。要指定从中获取数据的副本,请使用 direction 选项。
按照以下流程,使用 Ansible playbook 从 server.idm.example.com 重新初始化 replica.idm.example.com 上的 domain 数据。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了您的
ipaadmin_password,并且您可以访问存储了保护 secret.yml 文件的密码的文件。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制
ansible-freeipa软件包提供的reinitialize-topologysegment.ymlAnsible playbook 文件:cp /usr/share/doc/ansible-freeipa/playbooks/topology/reinitialize-topologysegment.yml reinitialize-topologysegment-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/topology/reinitialize-topologysegment.yml reinitialize-topologysegment-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
reinitialize-topologysegment-copy.yml文件进行编辑。 通过在
ipatopologysegment部分中设置以下变量来调整文件:-
表示
ipaadmin_password变量的值已在 secret.yml Ansible vault 文件中定义。 -
将
suffix变量设置为domain。如果您要重新初始化ca数据,请将变量设置为ca。 -
将
left变量设置为复制协议的左侧节点。 -
将
right变量设置为复制协议的右节点。 -
将
direction变量设置为重新初始化数据的方向。left-to-right方向表示数据从左侧节点流到右侧节点。 确保将
state变量设置为reinitialized。这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
表示
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory reinitialize-topologysegment-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory reinitialize-topologysegment-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
40.6. 使用 Ansible 确保 IdM 中没有复制协议 复制链接链接已复制到粘贴板!
存储在身份管理 (IdM) 服务器上的数据存储基于复制协议:配置了两个服务器时,它们共享其数据。复制协议始终为现实:数据从第一个副本复制到另一个副本,另一个副本复制到第一个副本。
按照以下流程,确保两个副本之间的复制协议在 IdM 中不存在。这个示例描述了如何确保在 replica01.idm.example.com 和 replica02.idm.example.com IdM 服务器之间不存在 domain 类型的复制协议。
先决条件
- 您了解 在拓扑中连接副本中列出的 IdM 拓扑 的建议。
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了您的
ipaadmin_password,并且您可以访问存储了保护 secret.yml 文件的密码的文件。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制
ansible-freeipa软件包提供的delete-topologysegment.ymlAnsible playbook 文件:cp /usr/share/doc/ansible-freeipa/playbooks/topology/delete-topologysegment.yml delete-topologysegment-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/topology/delete-topologysegment.yml delete-topologysegment-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
delete-topologysegment-copy.yml文件进行编辑。 通过在
ipatopologysegment任务部分设置以下变量来调整文件:-
表示
ipaadmin_password变量的值已在 secret.yml Ansible vault 文件中定义。 -
将
suffix变量设置为domain。或者,如果您确保ca数据不在左侧和右侧节点之间复制,请将变量设置为ca。 -
将
left变量设置为您要作为复制协议左侧节点的 IdM 服务器的名称。 -
将
right变量设置为 IdM 服务器的名称,该服务器是复制协议的右节点。 -
确保
state变量设置为absent。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
表示
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory delete-topologysegment-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory delete-topologysegment-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 41 章 为用户的外部调配配置 IdM 复制链接链接已复制到粘贴板!
作为系统管理员,您可以配置身份管理(IdM),来通过管理身份的外部解决方案支持用户的调配。
外部调配系统的管理员不必使用 ipa 工具,而是使用 ldapmodify 工具来访问 IdM LDAP。管理员可以 使用 ldapmodify 从 CLI 或 使用 LDIF 文件 来添加单个 stage 用户。
假设您作为 IdM 管理员完全信任外部调配系统,来仅添加经过验证的用户。但是,您不想为外部调配系统的管理员分配 用户管理员 的 IdM 角色,以便他们能够直接添加新的活动用户。
您可以 配置一个脚本,来自动将外部调配系统创建的 stage 用户移到活动用户。
41.1. 为 stage 用户帐户的自动激活准备 IdM 帐户 复制链接链接已复制到粘贴板!
此流程演示了如何配置供外部调配系统使用的两个 IdM 用户帐户。通过使用合适的密码策略将帐户添加到组中,您可以使外部调配系统来管理 IdM 中的用户调配。在以下部分中,外部系统用来添加 stage 用户的用户帐户命名为 provisionator。用来自动激活 stage 用户的用户帐户命名为 activator。
先决条件
- 您在其上执行该步骤的主机已注册到 IdM 中。
流程
以 IdM 管理员身份登录:
kinit admin
$ kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为 provisionator 的用户,其具有用于添加 stage 用户的特权。
添加 provisionator 用户帐户:
ipa user-add provisionator --first=provisioning --last=account --password
$ ipa user-add provisionator --first=provisioning --last=account --passwordCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为 provisionator 用户授予所需的特权。
创建一个自定义角色
System Provisioning,来管理添加 stage 用户:ipa role-add --desc "Responsible for provisioning stage users" "System Provisioning"
$ ipa role-add --desc "Responsible for provisioning stage users" "System Provisioning"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
Stage User Provisioning特权添加到该角色。这个特权提供了添加 stage 用户的能力:ipa role-add-privilege "System Provisioning" --privileges="Stage User Provisioning"
$ ipa role-add-privilege "System Provisioning" --privileges="Stage User Provisioning"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 provisionator 用户添加到角色中:
ipa role-add-member --users=provisionator "System Provisioning"
$ ipa role-add-member --users=provisionator "System Provisioning"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 provisionator 在 IdM 中是否存在:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建用户 activator,其具有管理用户帐户的特权。
添加 activator 用户帐户:
ipa user-add activator --first=activation --last=account --password
$ ipa user-add activator --first=activation --last=account --passwordCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过将用户添加到默认的
User Administrator角色来授予 activator 用户所需的特权:ipa role-add-member --users=activator "User Administrator"
$ ipa role-add-member --users=activator "User Administrator"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
为应用程序帐户创建用户组:
ipa group-add application-accounts
$ ipa group-add application-accountsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更新组的密码策略。以下策略可防止帐户的密码过期和锁住,但通过要求复杂的密码来弥补潜在的风险:
ipa pwpolicy-add application-accounts --maxlife=10000 --minlife=0 --history=0 --minclasses=4 --minlength=8 --priority=1 --maxfail=0 --failinterval=1 --lockouttime=0
$ ipa pwpolicy-add application-accounts --maxlife=10000 --minlife=0 --history=0 --minclasses=4 --minlength=8 --priority=1 --maxfail=0 --failinterval=1 --lockouttime=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:验证 IdM 中是否存在密码策略:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将调配和激活帐户添加到应用程序帐户的组中:
ipa group-add-member application-accounts --users={provisionator,activator}$ ipa group-add-member application-accounts --users={provisionator,activator}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更改用户帐户的密码:
kpasswd provisionator kpasswd activator
$ kpasswd provisionator $ kpasswd activatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更改密码是必需的,因为新的 IdM 用户密码会立即过期。
41.2. 配置 IdM stage用户帐户的自动激活 复制链接链接已复制到粘贴板!
您可以创建一个脚本来激活 stage 用户。系统在指定的时间间隔自动运行脚本。这样可确保新用户帐户被自动激活,并在创建后很快可用。
假设外部调配系统的所有者已经验证了用户,并且在脚本将它们添加到 IdM 之前,它们不需要在 IdM 端进行额外的验证。
这对于仅在一个 IdM 服务器上启用激活过程足够了。
先决条件
- provisionator 和 activator 帐户在 IdM 中存在。详情请参阅 为 stage 用户帐户的自动激活准备 IdM 帐户。
- 在运行该流程的 IdM 服务器上您需要有 root 权限。
- 以 IdM 管理员身份登录。
- 您信任外部调配系统。
流程
为激活帐户生成 keytab 文件:
ipa-getkeytab -s server.idm.example.com -p "activator" -k /etc/krb5.ipa-activation.keytab
# ipa-getkeytab -s server.idm.example.com -p "activator" -k /etc/krb5.ipa-activation.keytabCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您要在多个 IdM 服务器上启用激活过程,请仅在一个服务器上生成 keytab 文件。然后,将 keytab 文件复制到其他服务器上。
创建一个包含以下内容的
/usr/local/sbin/ipa-activate-all脚本来激活所有用户:#!/bin/bash kinit -k -i activator ipa stageuser-find --all --raw | grep " uid:" | cut -d ":" -f 2 | while read uid; do ipa stageuser-activate ${uid}; done#!/bin/bash kinit -k -i activator ipa stageuser-find --all --raw | grep " uid:" | cut -d ":" -f 2 | while read uid; do ipa stageuser-activate ${uid}; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
ipa-activate-all脚本的权限和所有权来使其可执行:chmod 755 /usr/local/sbin/ipa-activate-all chown root:root /usr/local/sbin/ipa-activate-all
# chmod 755 /usr/local/sbin/ipa-activate-all # chown root:root /usr/local/sbin/ipa-activate-allCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个 systemd 单元文件
/etc/systemd/system/ipa-activate-all.service,内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个 systemd 计时器
/etc/systemd/system/ipa-activate-all.timer,内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新载入新配置:
systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启用
ipa-activate-all.timer:systemctl enable ipa-activate-all.timer
# systemctl enable ipa-activate-all.timerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
ipa-activate-all.timer:systemctl start ipa-activate-all.timer
# systemctl start ipa-activate-all.timerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:验证
ipa-activate-all.timer守护进程是否正在运行:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
41.3. 添加 LDIF 文件中定义的 IdM stage 用户 复制链接链接已复制到粘贴板!
按照以下流程访问 IdM LDAP ,并使用 LDIF 文件添加 stage 用户。虽然下例中演示了添加一个单独的用户,但可以以批量模式在一个文件中添加多个用户。
先决条件
- IdM 管理员已为其创建了 provisionator 帐户及密码。详情请参阅 为 stage 用户帐户的自动激活准备 IdM 帐户。
- 作为外部管理员,您知道 provisionator 帐户的密码。
- 您可以从 LDAP 服务器通过 SSH 连接到 IdM 服务器。
您可以提供 IdM stage 用户必须有的最小的属性集来允许正确处理用户生命周期,即:
-
可区分的名称(dn) -
通用名称(cn) -
姓氏(sn) -
uid
-
流程
在外部服务器上,创建一个包含有关新用户信息的 LDIF 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 LDIF 文件从外部服务器传到 IdM 服务器:
scp add-stageidmuser.ldif provisionator@server.idm.example.com:/provisionator/ Password: add-stageidmuser.ldif 100% 364 217.6KB/s 00:00
$ scp add-stageidmuser.ldif provisionator@server.idm.example.com:/provisionator/ Password: add-stageidmuser.ldif 100% 364 217.6KB/s 00:00Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
SSH协议,以 provisionator 身份连接到 IdM 服务器:ssh provisionator@server.idm.example.com Password: [provisionator@server ~]$
$ ssh provisionator@server.idm.example.com Password: [provisionator@server ~]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 IdM 服务器上,获取 provisionator 帐户的 Kerberos 票据授予票(TGT):
kinit provisionator
[provisionator@server ~]$ kinit provisionatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入
ldapadd命令,以及 -f 选项和 LDIF 文件的名称。指定 IdM 服务器的名称和端口号:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
41.4. 使用 ldapmodify 直接从 CLI 添加 IdM stage 用户 复制链接链接已复制到粘贴板!
按照以下流程访问身份管理(IdM) LDAP,并使用 ldapmodify 工具添加 stage 用户。
先决条件
- IdM 管理员已为其创建了 provisionator 帐户和密码。详情请参阅 为 stage 用户帐户的自动激活准备 IdM 帐户。
- 作为外部管理员,您知道 provisionator 帐户的密码。
- 您可以从 LDAP 服务器通过 SSH 连接到 IdM 服务器。
您可以提供 IdM stage 用户必须有的最小的属性集来允许正确处理用户生命周期,即:
-
可区分的名称(dn) -
通用名称(cn) -
姓氏(sn) -
uid
-
流程
使用您的 IdM 身份和凭证,通过
SSH协议连接到 IdM 服务器:ssh provisionator@server.idm.example.com Password: [provisionator@server ~]$
$ ssh provisionator@server.idm.example.com Password: [provisionator@server ~]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取 provisionator 帐户的 TGT,这是具有添加新 stage 用户角色的 IdM 用户:
kinit provisionator
$ kinit provisionatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入
ldapmodify命令,并将通用安全服务 API(GSSAPI)指定为用于身份验证的简单身份验证和安全层(SASL)机制。指定 IdM 服务器的名称和端口:ldapmodify -h server.idm.example.com -p 389 -Y GSSAPI SASL/GSSAPI authentication started SASL username: provisionator@IDM.EXAMPLE.COM SASL SSF: 56 SASL data security layer installed.
# ldapmodify -h server.idm.example.com -p 389 -Y GSSAPI SASL/GSSAPI authentication started SASL username: provisionator@IDM.EXAMPLE.COM SASL SSF: 56 SASL data security layer installed.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入您要添加的用户的
dn:dn: uid=stageuser,cn=staged users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com
dn: uid=stageuser,cn=staged users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入 add 作为您要执行的更改的类型:
changetype: add
changetype: addCopy to Clipboard Copied! Toggle word wrap Toggle overflow 指定允许正确处理用户生命周期所需的 LDAP 对象类类别:
objectClass: top objectClass: inetorgperson
objectClass: top objectClass: inetorgpersonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以指定其他对象类。
输入用户的
uid:uid: stageuser
uid: stageuserCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入用户的
cn:cn: Babs Jensen
cn: Babs JensenCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入用户的姓氏:
sn: Jensen
sn: JensenCopy to Clipboard Copied! Toggle word wrap Toggle overflow 再次按
Enter键确认输入结束:[Enter] adding new entry "uid=stageuser,cn=staged users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com"
[Enter] adding new entry "uid=stageuser,cn=staged users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用 Ctrl + C 退出连接。
验证
验证 stage 条目的内容,以确保您的调配系统添加了所有必需的 POSIX 属性,并且 stage 条目已准备好被激活。
要显示新 stage 用户的 LDAP 属性,请输入
ipa stageuser-show --all --raw命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,通过
saccountlock属性,用户被显式禁用了。
第 42 章 使用 ldapmodify 在外部管理 IdM 用户 复制链接链接已复制到粘贴板!
作为 IdM 管理员,您可以使用 ipa 命令管理您的目录内容。另外,您可以使用 ldapmodify 命令来实现类似的目标。您可以以交互方式使用这个命令,并直接在命令行中提供所有数据。您也可以在 LDAP 数据交换格式(LDIF)的 文件中提供数据到 ldapmodify 命令。
42.1. 在外部管理 IdM 用户帐户的模板 复制链接链接已复制到粘贴板!
以下模板可用于 IdM 中的各种用户管理操作。模板显示您必须使用 ldapmodify 修改哪些属性才能实现以下目标:
- 添加新的 stage 用户
- 修改用户属性
- 启用用户
- 禁用用户
- 保留用户
模板的格式为 LDAP 数据交换格式(LDIF)。LDIF 是一种标准的纯文本数据交换格式,用来表示 LDAP 目录内容和更新请求。
使用模板,您可以配置调配系统的 LDAP 提供者来管理 IdM 用户帐户。
如需详细的示例流程,请参阅以下部分:
用于添加新 stage 用户的模板
用于添加 自动分配了 UID 和 GID 的用户的模板。所创建的条目的可区别的名称(DN)必须以
uid=user_login开头:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 用于添加 静态分配了 UID 和 GID 的用户的模板:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在添加 stage 用户时,您不需要指定任何 IdM 对象类。在激活用户后,IdM 自动添加这些类。
用于修改现有用户的模板
修改用户的属性 :
dn: distinguished_name changetype: modify replace: attribute_to_modify attribute_to_modify: new_value
dn: distinguished_name changetype: modify replace: attribute_to_modify attribute_to_modify: new_valueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 禁用用户 :
dn: distinguished_name changetype: modify replace: nsAccountLock nsAccountLock: TRUE
dn: distinguished_name changetype: modify replace: nsAccountLock nsAccountLock: TRUECopy to Clipboard Copied! Toggle word wrap Toggle overflow 启用用户 :
dn: distinguished_name changetype: modify replace: nsAccountLock nsAccountLock: FALSE
dn: distinguished_name changetype: modify replace: nsAccountLock nsAccountLock: FALSECopy to Clipboard Copied! Toggle word wrap Toggle overflow 更新
nssAccountLock属性不会对 stage 和preserved 用户造成影响。虽然更新操作成功完成,属性值也会保持nssAccountLock:TRUE。保留用户 :
dn: distinguished_name changetype: modrdn newrdn: uid=user_login deleteoldrdn: 0 newsuperior: cn=deleted users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com
dn: distinguished_name changetype: modrdn newrdn: uid=user_login deleteoldrdn: 0 newsuperior: cn=deleted users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在修改用户之前,使用用户的登录名进行搜索来获取用户的可区别名称(DN)。在以下示例中,user_allowed_to_modify_user_entries 用户是允许修改用户和组信息的用户,如 activator 或 IdM 管理员。示例中的密码是这个用户的密码:
[...] # ldapsearch -LLL -x -D "uid=user_allowed_to_modify_user_entries,cn=users,cn=accounts,dc=idm,dc=example,dc=com" -w "Secret123" -H ldap://r8server.idm.example.com -b "cn=users,cn=accounts,dc=idm,dc=example,dc=com" uid=test_user dn: uid=test_user,cn=users,cn=accounts,dc=idm,dc=example,dc=com memberOf: cn=ipausers,cn=groups,cn=accounts,dc=idm,dc=example,dc=com
[...]
# ldapsearch -LLL -x -D "uid=user_allowed_to_modify_user_entries,cn=users,cn=accounts,dc=idm,dc=example,dc=com" -w "Secret123" -H ldap://r8server.idm.example.com -b "cn=users,cn=accounts,dc=idm,dc=example,dc=com" uid=test_user
dn: uid=test_user,cn=users,cn=accounts,dc=idm,dc=example,dc=com
memberOf: cn=ipausers,cn=groups,cn=accounts,dc=idm,dc=example,dc=com
42.2. 在外部管理 IdM 组帐户的模板 复制链接链接已复制到粘贴板!
以下模板可用于 IdM 中的各种用户组管理操作。模板显示您必须使用 ldapmodify 修改哪些属性来实现以下目标:
- 创建新组
- 删除现有组
- 将成员添加到组中
- 从组中删除成员
模板的格式为 LDAP 数据交换格式(LDIF)。LDIF 是一种标准的纯文本数据交换格式,用来表示 LDAP 目录内容和更新请求。
通过使用模板,您可以配置调配系统的 LDAP 提供者来管理 IdM 组帐户。
创建新组
修改组
删除现有组 :
dn: group_distinguished_name changetype: delete
dn: group_distinguished_name changetype: deleteCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将成员添加到组中 :
dn: group_distinguished_name changetype: modify add: member member: uid=user_login,cn=users,cn=accounts,dc=idm,dc=example,dc=com
dn: group_distinguished_name changetype: modify add: member member: uid=user_login,cn=users,cn=accounts,dc=idm,dc=example,dc=comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 不要向组中添加 stage 或 preserved 的用户。即使更新操作成功完成,也不会作为组的成员更新用户。只有活动的用户才能属于组。
从组中删除成员 :
dn: distinguished_name changetype: modify delete: member member: uid=user_login,cn=users,cn=accounts,dc=idm,dc=example,dc=com
dn: distinguished_name changetype: modify delete: member member: uid=user_login,cn=users,cn=accounts,dc=idm,dc=example,dc=comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在修改组之前,使用组的名称进行搜索来获取组的可区别名称(DN)。
42.3. 以互动方式使用 ldapmodify 命令 复制链接链接已复制到粘贴板!
您可以在交互模式中修改轻量级目录访问协议(LDAP)条目。
流程
在命令行中,在
ldapmodify命令后输入 LDAP Data Interchange Format (LDIF)语句。例 42.1. 更改 testuser的电话号码
ldapmodify -Y GSSAPI -H ldap://server.example.com dn: uid=testuser,cn=users,cn=accounts,dc=example,dc=com changetype: modify replace: telephoneNumber telephonenumber: 88888888
# ldapmodify -Y GSSAPI -H ldap://server.example.com dn: uid=testuser,cn=users,cn=accounts,dc=example,dc=com changetype: modify replace: telephoneNumber telephonenumber: 88888888Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,您需要使用
-Y选项获取 Kerberos ticket。-
按
Ctlr+D退出交互模式。 或者,在
ldapmodify命令后提供 LDIF 文件:例 42.2.
ldapmodify命令从 LDIF 文件中读取修改数据ldapmodify -Y GSSAPI -H ldap://server.example.com -f ~/example.ldif
# ldapmodify -Y GSSAPI -H ldap://server.example.com -f ~/example.ldifCopy to Clipboard Copied! Toggle word wrap Toggle overflow
42.4. 使用 ldapmodify 保留 IdM 用户 复制链接链接已复制到粘贴板!
您可以使用 ldapmodify 来保留 IdM 用户;即,如何在员工离开公司后停用用户帐户。
先决条件
- 您可以作为具有角色的 IdM 用户进行身份验证,来保留用户。
流程
以具有角色的 IdM 用户身份登录,来保留用户:
kinit admin
$ kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入
ldapmodify命令,并指定通用安全服务API(GSSAPI)作为用于身份验证的简单身份验证和安全层(SASL)机制:ldapmodify -Y GSSAPI SASL/GSSAPI authentication started SASL username: admin@IDM.EXAMPLE.COM SASL SSF: 256 SASL data security layer installed.
# ldapmodify -Y GSSAPI SASL/GSSAPI authentication started SASL username: admin@IDM.EXAMPLE.COM SASL SSF: 256 SASL data security layer installed.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入您要保留的用户的
dn:dn: uid=user1,cn=users,cn=accounts,dc=idm,dc=example,dc=com
dn: uid=user1,cn=users,cn=accounts,dc=idm,dc=example,dc=comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入 modrdn 作为您要执行的更改的类型:
changetype: modrdn
changetype: modrdnCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为用户指定 newrdn :
newrdn: uid=user1
newrdn: uid=user1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 表示您要保留用户:
deleteoldrdn: 0
deleteoldrdn: 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定 新的高级 DN:
newsuperior: cn=deleted users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=com
newsuperior: cn=deleted users,cn=accounts,cn=provisioning,dc=idm,dc=example,dc=comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 保存用户会将条目移到目录信息树(DIT)中的新位置。因此,您必须将新父条目的 DN 指定为新的高级 DN。
再次按
Enter键确认输入结束:[Enter] modifying rdn of entry "uid=user1,cn=users,cn=accounts,dc=idm,dc=example,dc=com"
[Enter] modifying rdn of entry "uid=user1,cn=users,cn=accounts,dc=idm,dc=example,dc=com"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用 Ctrl + C 退出连接。
验证
通过列出所有 preserved 用户来验证用户是否已保留:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 43 章 在 IdM CLI 中管理主机 复制链接链接已复制到粘贴板!
了解身份管理(IdM) 中的主机 和 主机条目,以及在 IdM CLI 中管理主机和主机条目时执行的操作。
43.1. IdM 中的主机 复制链接链接已复制到粘贴板!
Identity Management (IdM) 管理这些身份:
- 用户
- 服务
- 主机
一个主机表示了一个计算机。作为 IdM 身份,主机在 IdM LDAP 中有一个条目,即 IdM 服务器的 389 Directory Server 实例。
IdM LDAP 中的主机条目用于在域中的其他主机甚至服务之间建立关系。这些关系是为域中的主机委派授权和控制的一部分。任何主机都可以在基于主机的访问控制 (HBAC) 规则中使用。
IdM 域在计算机之间建立一个通用性,具有通用身份信息、通用策略和共享服务。属于域的任何计算机充当域的客户端,这意味着它使用域所提供的服务。IdM 域为机器提供三个主要服务:
- DNS
- Kerberos
- 证书管理
IdM 中的主机与在其中运行的服务紧密相连:
- 服务条目与主机关联。
- 主机同时存储主机和服务 Kerberos 主体。
43.2. 主机注册 复制链接链接已复制到粘贴板!
本节论述了将主机注册为 IdM 客户端以及注册期间和之后发生的情况。部分比较 IdM 主机和 IdM 用户的注册。部分还概述了可供主机使用的其他身份验证类型。
注册主机包括:
-
在 IdM LDAP 中创建主机条目:可以在 IdM CLI 中使用
ipa host-add命令,或者等同的 IdM Web UI 操作。 - 在主机上配置 IdM 服务,如系统安全服务守护进程(SSSD)、Kerberos 和 certmonger,并将主机加入 IdM 域。
这两个操作可以单独或一起执行。
如果单独执行,它们允许在具有不同特权级别的两个用户之间划分这两个任务。这对批量部署非常有用。
ipa-client-install 命令可以一起执行两个操作。如果该条目尚不存在,该命令会在 IdM LDAP 中创建主机条目,并为主机配置 Kerberos 和 SSSD 服务。命令将主机引入 IdM 域,并允许它识别它将连接的 IdM 服务器。如果主机属于 IdM 管理的 DNS 区域,ipa-client-install 也为主机添加 DNS 记录。命令必须在客户端上运行。
43.3. 主机注册所需的用户权限 复制链接链接已复制到粘贴板!
主机注册操作需要进行身份验证,以防止非特权用户将不需要的计算机添加到 IdM 域。所需的权限取决于几个因素,例如:
-
创建主机条目与运行
ipa-client-install是分开的 - 使用一次性密码 (OTP) 进行注册
在 IdM LDAP 中手动创建主机条目的用户权限
使用 ipa host-add CLI 命令或 IdM Web UI 在 IdM LDAP 中创建主机条目所需的用户权限是 Host Administrators。Host Administrators 特权可通过 IT Specialist 角色获得。
将客户端加入 IdM 域的用户特权
在执行 ipa-client-install 命令期间,主机被配置为 IdM 客户端。执行 ipa-client-install 命令所需的凭证级别取决于您发现的以下注册场景:
-
IdM LDAP 中的主机条目不存在。在这种情况下,您需要完整的管理员凭据或
Host Administrators角色。完整的管理员是admins组的成员。Host Administrators角色提供添加主机和注册主机的特权。有关此场景的详情,请参阅 使用用户凭证安装客户端:交互式安装。 -
IdM LDAP 中的主机条目存在。在这种情况下,您需要有限的管理员凭证才能成功执行
ipa-client-install。本例中的有限管理员具有Enrollment Administrator角色,该角色提供Host Enrollment。详情请参阅 使用用户凭证安装客户端:交互式安装。 -
IdM LDAP 中的主机条目存在,并且由完整或有限的管理员为主机生成了一个 OTP。在这种情况下,如果您使用
--password选项运行ipa-client-install命令,并提供正确的 OTP,则可以普通用户安装 IdM 客户端。详情请参阅 使用一次性密码安装客户端:交互式安装。
注册后,IdM 主机验证每个新会话,以便能访问 IdM 资源。IdM 服务器需要机器身份验证才能信任机器并接受来自该机器上安装的客户端软件的 IdM 连接。验证客户端后,IdM 服务器可以响应其请求。
43.4. IdM 主机和用户的注册和身份验证:比较 复制链接链接已复制到粘贴板!
IdM 中的用户和主机之间有许多相似之处,其中一些可以在注册阶段观察到,也可以在部署阶段观察到与身份验证有关的相似之处。
注册阶段(用户和主机注册):
-
管理员可以在用户或主机实际加入 IdM 之前为用户和主机创建 LDAP 条:对于预发布(stage)用户,命令是
ipa stageuser-add;对于主机,命令是ipa host-add。
-
管理员可以在用户或主机实际加入 IdM 之前为用户和主机创建 LDAP 条:对于预发布(stage)用户,命令是
-
在主机上执行
ipa-client-install命令时会创建一个包含 密钥表(key table,简称为 keytab)和对称密钥(在一定程度上与用户密码相同)的文件,从而使主机可以加入 IdM 域。在逻辑上,用户在激活其帐户时被要求创建密码,因此加入 IdM 域。 虽然用户密码是用户的默认身份验证方法,但 keytab 是主机的默认身份验证方法。keytab 存储在主机上的文件中。
Expand 表 43.1. 用户和主机注册 操作
用户
主机
预注册
$ ipa stageuser-add user_name [--password]
$ ipa host-add host_name [--random]
激活帐户
$ ipa stageuser-activate user_name
$ ipa-client install [--password] (必需在主机本身上运行)
- 部署阶段(用户和主机会话身份验证):
- 当用户启动新会话时,用户使用密码进行身份验证;类似地,在开机时,主机会通过其 keytab 文件进行身份验证。系统安全服务守护进程 (SSSD) 在后台管理此过程。
- 如果身份验证成功,用户或主机会获得 Kerberos 票据授予票(TGT)。
然后,使用 TGT 获取特定服务的特定票据。
Expand 表 43.2. 用户和主机会话身份验证 用户
主机
默认身份验证方式
密码
keytabs
启动会话(普通用户)
$ kinit user_name
[switch on the host]
身份验证成功的结果
用于获取特定服务访问权限的 TGT
用于获取特定服务访问权限的 TGT
TGT 和其他 Kerberos 票据作为服务器定义的 Kerberos 服务和策略的一部分生成。IdM 服务会自动授予 Kerberos ticket、更新 Kerberos 凭证甚至销毁 Kerberos 会话。
IdM 主机的替代身份验证选项
除了 keytabs 外,IdM 还支持两种其他类型的机器验证:
- SSH 密钥。主机的 SSH 公钥已创建并上传到主机条目。从那里,系统安全服务守护进程 (SSSD) 使用 IdM 作为身份提供程序,并可与 OpenSSH 和其他服务一起引用位于 IdM 中的公钥。
- 计算机证书。在这种情况下,计算机使用由 IdM 服务器的证书认证机构签发的 SSL 证书,然后存储在 IdM 的目录服务器中。证书然后发送到计算机,当它向服务器进行身份验证时会存在该证书。在客户端上,证书由名为 certmonger 的服务管理。
43.5. 主机操作 复制链接链接已复制到粘贴板!
以下部分概述了与主机注册和启用相关的最常见的操作,先决条件、上下文以及执行这些操作的结果。
| 操作 | 操作的先决条件是什么? | 什么时候运行命令有意义? | 系统管理员是如何执行操作的?他运行什么命令? |
|---|---|---|---|
|
| 请参阅 安装身份管理 中的 为身份管理客户端安装准备系统 | 当您希望主机加入 IdM 域时。 |
将机器注册为 IdM 域中的客户端是一个两部分的过程。运行 |
|
| 主机必须在 IdM 中有一个条目。主机需要有一个活动的 keytab。 | 可能出于维护目的,您想从 IdM 域临时删除主机。 |
|
|
| 主机必须在 IdM 中有一个条目。 | 当您希望临时禁用的主机再次激活时。 |
|
|
| 主机必须在 IdM 中有一个条目。 | 当原始主机丢失,但您已安装了具有相同主机名的主机时。 |
|
|
| 主机必须在 IdM 中有一个条目。 | 当您要从 IdM 域永久删除主机时: |
|
| 操作 | 管理员可以在哪一台机器上运行命令? | 执行该操作时会发生什么情况?主机在 IdM 中正常工作的结果是什么?引入了/删除了哪些限制? |
|---|---|---|
|
|
对于两步注册: | 默认情况下,这会将 SSSD 配置为连接到 IdM 服务器来进行身份验证和授权。另外,也可以将可插拔验证模块(PAM)和名称交换服务(NSS)配置为通过 Kerberos 和 LDAP 与 IdM 服务器一起工作。 |
|
| IdM 中的任何机器,即使主机本身 | 主机的 Kerberos 密钥和 SSL 证书无效,运行在该主机上的所有服务都被禁用。 |
|
| IdM 中的任何机器。如果在禁用的主机上运行,则需要提供 LDAP 凭据。 | 主机的 Kerberos 密钥和 SSL 证书将再次有效,所有运行在主机上的 IdM 服务都被重新启用。 |
|
| 重新注册的主机。需要提供 LDAP 凭据。 | 为主机生成一个新的 Kerberos 密钥,替换之前的密钥。 |
|
| 要取消注册的主机。 |
命令取消配置 IdM,并尝试将机器返回到之前的状态。此过程的一部分是从 IdM 服务器取消注册主机。取消注册包括在 IdM 服务器上禁用主密钥。 |
43.6. IdM LDAP 中的主机条目 复制链接链接已复制到粘贴板!
身份管理(IdM)主机条目包含有关主机的信息及其可以包含哪些属性。
LDAP 主机条目包含 IdM 中关于客户端的所有相关信息:
- 与主机关联的服务条目
- 主机和服务主体
- 访问控制规则
- 机器信息,如物理位置和操作系统
请注意,IdM Web UI Identity → Hosts 选项卡不会显示有关存储在 IdM LDAP 中的特定主机的所有信息。
主机条目配置属性
主机条目可以包含其系统配置之外的主机的信息,如其物理位置、MAC 地址、密钥和证书。
如果主机条目是手动创建的,则可在创建主机条目时设置此信息。另外,大多数此类信息可以在主机注册到域后添加到主机条目中。
| UI 字段 | 命令行选项 | 描述 |
|---|---|---|
| 描述 |
| 主机的描述。 |
| 地点 |
| 主机的地理位置。 |
| 位置 |
| 主机的物理位置,如其数据中心机架。 |
| 平台 |
| 主机硬件或架构. |
| 操作系统 |
| 主机的操作系统和版本。 |
| MAC 地址 |
|
主机的 MAC 地址。这是一个多值属性。NIS 插件使用 MAC 地址为主机创建 NIS |
| SSH 公钥 |
| 主机的完整 SSH 公钥。这是一个多值属性,因此可以设置多个键。 |
| 主体名称(不可编辑) |
|
主机的 Kerberos 主体名称。除非在 |
| 设置一次性密码 |
| 此选项为可用于批量注册的主机设置密码。 |
| - |
| 此选项生成一个用于批量注册的随机密码。 |
| - |
| 主机的证书 blob。 |
| - |
| 这会设置主机在其 IP 地址更改时是否可以动态更新其 DNS 条目。 |
43.7. 从 IdM CLI 添加 IdM 主机条目 复制链接链接已复制到粘贴板!
按照以下步骤,使用命令行(CLI)在身份管理(IdM)中添加主机条目。
主机条目使用 host-add 命令来创建。此命令将主机条目添加到 IdM 目录服务器中。通过在 CLI 中输入 ipa help host 来查阅 ipa host 手册页,以获取 host-add 可用选项的完整列表。
向 IdM 添加主机时有几个不同的场景:
最基本的场景,仅指定客户端主机名来将客户端添加到 Kerberos 域,并在 IdM LDAP 服务器中创建一个条目:
ipa host-add client1.example.com
$ ipa host-add client1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 IdM 服务器被配置为管理 DNS,则使用
-ip-address选项将主机添加到 DNS 资源记录中,以创建具有静态 IP 地址的主机条目。ipa host-add --ip-address=192.168.166.31 client1.example.com
$ ipa host-add --ip-address=192.168.166.31 client1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果要添加的主机没有静态 IP 地址,或者在配置客户端时不知道 IP 地址,请使用
ipa host-add命令的-force选项创建带有 DHCP 的主机条目。ipa host-add --force client1.example.com
$ ipa host-add --force client1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,笔记本电脑可能预配置为 IdM 客户端,但它们在配置时没有 IP 地址。使用
--force实际上是在 IdM DNS 服务中创建一个占位符条目。当 DNS 服务动态更新其记录时,将检测主机的当前 IP 地址,并更新其 DNS 记录。
43.8. 从 IdM CLI 删除主机条目 复制链接链接已复制到粘贴板!
使用 host-del 命令删除主机记录。如果您的 IdM 域已集成了 DNS,请使用 --updatedns 选项从 DNS 中删除主机任何类型的关联记录:
ipa host-del --updatedns client1.example.com
$ ipa host-del --updatedns client1.example.com
43.9. 禁用和重新启用主机条目 复制链接链接已复制到粘贴板!
本节介绍了如何在身份管理(IdM)中禁用和重新启用主机。
43.9.1. 禁用主机 复制链接链接已复制到粘贴板!
完成这个流程来禁用 IdM 中的主机条目。
域服务、主机和用户可以访问活动的主机。某些情况下,出于维护原因需要临时删除活动的主机。在这种情况下,不需要删除主机,因为它会永久删除主机条目和所有关联的配置。相反,可选择禁用该主机的选项。
禁用主机可防止域用户访问它,而不必将其从域中永久删除。
流程
使用
host-disable命令禁用主机。禁用主机将终止主机当前活动的 keytab。例如:kinit admin ipa host-disable client.example.com
$ kinit admin $ ipa host-disable client.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
禁用主机后,主机将对所有 IdM 用户、主机和服务都不可用。
禁用主机条目不仅会禁用该主机。它还会禁用该主机上每个配置的服务。
43.9.2. 重新启用主机 复制链接链接已复制到粘贴板!
按照以下流程重新启用禁用的 IdM 主机。
禁用主机会终止其活动的 keytab,这会从 IdM 域中删除主机,而不影响其配置条目。
流程
要重新启用主机,请使用
ipa-getkeytab命令,添加:-
-s选项来指定要从哪个 IdM 服务器请求 keytab -
-p选项来指定主体名称 -
k选项来指定保存 keytab 的文件。
-
例如,要为 client.example.com 从 server.example.com 请求新的主机 keytab,并将 keytab 存储在 /etc/krb5.keytab 文件中:
ipa-getkeytab -s server.example.com -p host/client.example.com -k /etc/krb5.keytab -D "cn=directory manager" -w password
$ ipa-getkeytab -s server.example.com -p host/client.example.com -k /etc/krb5.keytab -D "cn=directory manager" -w password
您还可以使用管理员的凭据,指定 -D "uid=admin,cn=users,cn=accounts,dc=example,dc=com"。重要的是,凭据对应于允许为主机创建 keytab 的用户。
如果 ipa-getkeytab 命令在活动的 IdM 客户端或服务器上运行,那么如果用户具有例如通过kinit admin 获取的 TGT,则可以在没有 LDAP 凭据(-D 和 -w )的情况下运行该命令。若要在禁用的主机上直接运行命令,请提供 LDAP 凭据来向 IdM 服务器进行身份验证。
43.10. 委托对主机和服务的访问 复制链接链接已复制到粘贴板!
通过委托对 IdM 域中主机和服务的访问权限,您可以为另一个主机或服务检索 keytab 和证书。
每个主机和服务都有一个 managedby 条目,其列出了哪些主机和服务可以管理它。默认情况下,主机可以管理自身及其所有服务。您可以配置一个主机来管理其他主机,或者管理 IdM 域中其他主机上的服务。
通过 managedby 条目将主机的授权委托给其他主机时,它不会自动为该主机上的所有服务授予管理权限。您必须独立执行每个委托。
主机和服务委托
43.10.1. 委托服务管理 复制链接链接已复制到粘贴板!
您可以将权限委托给主机,以管理域中其他主机上的服务。
当您将权限委托给主机来管理其他主机时,它不会自动包含管理其服务的权限。您必须单独委托服务管理。
流程
使用
service-add-host命令将服务管理委托给特定的主机:ipa service-add-host principal --hosts=<hostname>
ipa service-add-host principal --hosts=<hostname>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您必须使用
principal参数指定服务主体,使用--hosts选项指定带有控制的主机。例如:
ipa service-add HTTP/web.example.com ipa service-add-host HTTP/web.example.com --hosts=client1.example.com
[root@server ~]# ipa service-add HTTP/web.example.com [root@server ~]# ipa service-add-host HTTP/web.example.com --hosts=client1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 主机委托授权后,主机主体可用于管理服务:
kinit -kt /etc/krb5.keytab host/client1.example.com ipa-getkeytab -s server.example.com -k /tmp/test.keytab -p HTTP/web.example.com Keytab successfully retrieved and stored in: /tmp/test.keytab
[root@client1 ~]# kinit -kt /etc/krb5.keytab host/client1.example.com [root@client1 ~]# ipa-getkeytab -s server.example.com -k /tmp/test.keytab -p HTTP/web.example.com Keytab successfully retrieved and stored in: /tmp/test.keytabCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要为委托的服务生成证书,请使用委托的颁发机构在主机上创建一个证书请求:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
cert-request工具来提交证书请求,并加载认证信息:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
43.10.2. 委托主机管理 复制链接链接已复制到粘贴板!
您可以使用 host-add-managedby 工具为主机委托授权,来管理其他主机。这会创建一个 managedby 条目。创建 managedby 条目后,管理主机可以检索它管理的主机的 keytab。
流程
以 admin 用户身份登录:
kinit admin
[root@server ~]# kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 添加
managedby条目。例如,这会通过 client2 将授权委托给 client1 :ipa host-add-managedby client2.example.com --hosts=client1.example.com
[root@server ~]# ipa host-add-managedby client2.example.com --hosts=client1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 获取作为主机 client1 的票据:
kinit -kt /etc/krb5.keytab host/client1.example.com
[root@client1 ~]# kinit -kt /etc/krb5.keytab host/client1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检索 client2 的 keytab:
ipa-getkeytab -s server.example.com -k /tmp/client2.keytab -p host/client2.example.com Keytab successfully retrieved and stored in: /tmp/client2.keytab
[root@client1 ~]# ipa-getkeytab -s server.example.com -k /tmp/client2.keytab -p host/client2.example.com Keytab successfully retrieved and stored in: /tmp/client2.keytabCopy to Clipboard Copied! Toggle word wrap Toggle overflow
43.10.3. 访问委派的服务 复制链接链接已复制到粘贴板!
当客户端委托授权时,可以为服务和主机的本地计算机上的主体获取 keytab。
使用 kinit 命令,使用 -k 选项来加载 keytab 和 a -t 选项来指定 keytab。主体格式为 < principal>/hostname@REALM。对于服务,将 & lt;principal > 替换为服务名称,如 HTTP。对于主机,使用 host 作为主体。
流程
访问主机:
kinit -kt /etc/krb5.keytab host/ipa.example.com@EXAMPLE.COM
[root@server ~]# kinit -kt /etc/krb5.keytab host/ipa.example.com@EXAMPLE.COMCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要访问服务:
kinit -kt /etc/httpd/conf/krb5.keytab HTTP/ipa.example.com@EXAMPLE.COM
[root@server ~]# kinit -kt /etc/httpd/conf/krb5.keytab HTTP/ipa.example.com@EXAMPLE.COMCopy to Clipboard Copied! Toggle word wrap Toggle overflow
43.11. 其它资源 复制链接链接已复制到粘贴板!
第 44 章 从 IdM Web UI 添加主机条目 复制链接链接已复制到粘贴板!
本章介绍了身份管理(IdM)中的主机,以及在 IdM Web UI 中添加主机条目的操作。
44.1. IdM 中的主机 复制链接链接已复制到粘贴板!
Identity Management (IdM) 管理这些身份:
- 用户
- 服务
- 主机
一个主机表示了一个计算机。作为 IdM 身份,主机在 IdM LDAP 中有一个条目,即 IdM 服务器的 389 Directory Server 实例。
IdM LDAP 中的主机条目用于在域中的其他主机甚至服务之间建立关系。这些关系是为域中的主机委派授权和控制的一部分。任何主机都可以在基于主机的访问控制 (HBAC) 规则中使用。
IdM 域在计算机之间建立一个通用性,具有通用身份信息、通用策略和共享服务。属于域的任何计算机充当域的客户端,这意味着它使用域所提供的服务。IdM 域为机器提供三个主要服务:
- DNS
- Kerberos
- 证书管理
IdM 中的主机与在其中运行的服务紧密相连:
- 服务条目与主机关联。
- 主机同时存储主机和服务 Kerberos 主体。
44.2. 主机注册 复制链接链接已复制到粘贴板!
本节论述了将主机注册为 IdM 客户端以及注册期间和之后发生的情况。部分比较 IdM 主机和 IdM 用户的注册。部分还概述了可供主机使用的其他身份验证类型。
注册主机包括:
-
在 IdM LDAP 中创建主机条目:可以在 IdM CLI 中使用
ipa host-add命令,或者等同的 IdM Web UI 操作。 - 在主机上配置 IdM 服务,如系统安全服务守护进程(SSSD)、Kerberos 和 certmonger,并将主机加入 IdM 域。
这两个操作可以单独或一起执行。
如果单独执行,它们允许在具有不同特权级别的两个用户之间划分这两个任务。这对批量部署非常有用。
ipa-client-install 命令可以一起执行两个操作。如果该条目尚不存在,该命令会在 IdM LDAP 中创建主机条目,并为主机配置 Kerberos 和 SSSD 服务。命令将主机引入 IdM 域,并允许它识别它将连接的 IdM 服务器。如果主机属于 IdM 管理的 DNS 区域,ipa-client-install 也为主机添加 DNS 记录。命令必须在客户端上运行。
44.3. 主机注册所需的用户权限 复制链接链接已复制到粘贴板!
主机注册操作需要进行身份验证,以防止非特权用户将不需要的计算机添加到 IdM 域。所需的权限取决于几个因素,例如:
-
创建主机条目与运行
ipa-client-install是分开的 - 使用一次性密码 (OTP) 进行注册
在 IdM LDAP 中手动创建主机条目的用户权限
使用 ipa host-add CLI 命令或 IdM Web UI 在 IdM LDAP 中创建主机条目所需的用户权限是 Host Administrators。Host Administrators 特权可通过 IT Specialist 角色获得。
将客户端加入 IdM 域的用户特权
在执行 ipa-client-install 命令期间,主机被配置为 IdM 客户端。执行 ipa-client-install 命令所需的凭证级别取决于您发现的以下注册场景:
-
IdM LDAP 中的主机条目不存在。在这种情况下,您需要完整的管理员凭据或
Host Administrators角色。完整的管理员是admins组的成员。Host Administrators角色提供添加主机和注册主机的特权。有关此场景的详情,请参阅 使用用户凭证安装客户端:交互式安装。 -
IdM LDAP 中的主机条目存在。在这种情况下,您需要有限的管理员凭证才能成功执行
ipa-client-install。本例中的有限管理员具有Enrollment Administrator角色,该角色提供Host Enrollment。详情请参阅 使用用户凭证安装客户端:交互式安装。 -
IdM LDAP 中的主机条目存在,并且由完整或有限的管理员为主机生成了一个 OTP。在这种情况下,如果您使用
--password选项运行ipa-client-install命令,并提供正确的 OTP,则可以普通用户安装 IdM 客户端。详情请参阅 使用一次性密码安装客户端:交互式安装。
注册后,IdM 主机验证每个新会话,以便能访问 IdM 资源。IdM 服务器需要机器身份验证才能信任机器并接受来自该机器上安装的客户端软件的 IdM 连接。验证客户端后,IdM 服务器可以响应其请求。
44.4. IdM 主机和用户的注册和身份验证:比较 复制链接链接已复制到粘贴板!
IdM 中的用户和主机之间有许多相似之处,其中一些可以在注册阶段观察到,也可以在部署阶段观察到与身份验证有关的相似之处。
注册阶段(用户和主机注册):
-
管理员可以在用户或主机实际加入 IdM 之前为用户和主机创建 LDAP 条:对于预发布(stage)用户,命令是
ipa stageuser-add;对于主机,命令是ipa host-add。
-
管理员可以在用户或主机实际加入 IdM 之前为用户和主机创建 LDAP 条:对于预发布(stage)用户,命令是
-
在主机上执行
ipa-client-install命令时会创建一个包含 密钥表(key table,简称为 keytab)和对称密钥(在一定程度上与用户密码相同)的文件,从而使主机可以加入 IdM 域。在逻辑上,用户在激活其帐户时被要求创建密码,因此加入 IdM 域。 虽然用户密码是用户的默认身份验证方法,但 keytab 是主机的默认身份验证方法。keytab 存储在主机上的文件中。
Expand 表 44.1. 用户和主机注册 操作
用户
主机
预注册
$ ipa stageuser-add user_name [--password]
$ ipa host-add host_name [--random]
激活帐户
$ ipa stageuser-activate user_name
$ ipa-client install [--password] (必需在主机本身上运行)
- 部署阶段(用户和主机会话身份验证):
- 当用户启动新会话时,用户使用密码进行身份验证;类似地,在开机时,主机会通过其 keytab 文件进行身份验证。系统安全服务守护进程 (SSSD) 在后台管理此过程。
- 如果身份验证成功,用户或主机会获得 Kerberos 票据授予票(TGT)。
然后,使用 TGT 获取特定服务的特定票据。
Expand 表 44.2. 用户和主机会话身份验证 用户
主机
默认身份验证方式
密码
keytabs
启动会话(普通用户)
$ kinit user_name
[switch on the host]
身份验证成功的结果
用于获取特定服务访问权限的 TGT
用于获取特定服务访问权限的 TGT
TGT 和其他 Kerberos 票据作为服务器定义的 Kerberos 服务和策略的一部分生成。IdM 服务会自动授予 Kerberos ticket、更新 Kerberos 凭证甚至销毁 Kerberos 会话。
IdM 主机的替代身份验证选项
除了 keytabs 外,IdM 还支持两种其他类型的机器验证:
- SSH 密钥。主机的 SSH 公钥已创建并上传到主机条目。从那里,系统安全服务守护进程 (SSSD) 使用 IdM 作为身份提供程序,并可与 OpenSSH 和其他服务一起引用位于 IdM 中的公钥。
- 计算机证书。在这种情况下,计算机使用由 IdM 服务器的证书认证机构签发的 SSL 证书,然后存储在 IdM 的目录服务器中。证书然后发送到计算机,当它向服务器进行身份验证时会存在该证书。在客户端上,证书由名为 certmonger 的服务管理。
44.5. IdM LDAP 中的主机条目 复制链接链接已复制到粘贴板!
身份管理(IdM)主机条目包含有关主机的信息及其可以包含哪些属性。
LDAP 主机条目包含 IdM 中关于客户端的所有相关信息:
- 与主机关联的服务条目
- 主机和服务主体
- 访问控制规则
- 机器信息,如物理位置和操作系统
请注意,IdM Web UI Identity → Hosts 选项卡不会显示有关存储在 IdM LDAP 中的特定主机的所有信息。
主机条目配置属性
主机条目可以包含其系统配置之外的主机的信息,如其物理位置、MAC 地址、密钥和证书。
如果主机条目是手动创建的,则可在创建主机条目时设置此信息。另外,大多数此类信息可以在主机注册到域后添加到主机条目中。
| UI 字段 | 命令行选项 | 描述 |
|---|---|---|
| 描述 |
| 主机的描述。 |
| 地点 |
| 主机的地理位置。 |
| 位置 |
| 主机的物理位置,如其数据中心机架。 |
| 平台 |
| 主机硬件或架构. |
| 操作系统 |
| 主机的操作系统和版本。 |
| MAC 地址 |
|
主机的 MAC 地址。这是一个多值属性。NIS 插件使用 MAC 地址为主机创建 NIS |
| SSH 公钥 |
| 主机的完整 SSH 公钥。这是一个多值属性,因此可以设置多个键。 |
| 主体名称(不可编辑) |
|
主机的 Kerberos 主体名称。除非在 |
| 设置一次性密码 |
| 此选项为可用于批量注册的主机设置密码。 |
| - |
| 此选项生成一个用于批量注册的随机密码。 |
| - |
| 主机的证书 blob。 |
| - |
| 这会设置主机在其 IP 地址更改时是否可以动态更新其 DNS 条目。 |
44.6. 从 Web UI 添加主机条目 复制链接链接已复制到粘贴板!
- 打开 Identity 选项卡,然后选择 Hosts 子选项卡。
- 单击主机列表顶部的 Add。
输入机器名称,并在下拉列表中配置的区中选择域。如果已经为主机分配了静态 IP 地址,则将它与主机条目一起包含,以便完全创建 DNS 条目。
Class字段目前没有特定的目的。图 44.1. 添加主机向导
可以在 IdM 中创建 DNS 区。如果 IdM 服务器不管理 DNS 服务器,则可以在菜单区域中手动输入区,如常规文本字段。
注意如果要跳过检查主机是否可以通过 DNS 解析,请选择 Force 复选框。
- 单击 Add and Edit 按钮,直接进入到扩展的条目页面,输入更多的属性信息。有关主机硬件和物理位置的信息可以包含在主机条目中。
第 45 章 使用 Ansible playbook 管理主机 复制链接链接已复制到粘贴板!
Ansible 是一个自动化工具,用于配置系统、部署软件和执行滚动更新。Ansible 包含对身份管理 (IdM) 的支持,您可以使用 Ansible 模块自动执行主机管理。
45.1. 使用 Ansible playbook 确保存在带有 FQDN 的 IdM 主机条目 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保主机条目在身份管理(IdM)中存在。主机条目仅通过其 完全限定域名 (FQDN) 定义。
如果至少适用以下条件之一,则指定主机的 FQDN 名称就足够:
- IdM 服务器没有配置为管理 DNS。
-
主机没有静态 IP 地址,或者在配置主机时不知道该 IP 地址。添加仅由
FQDN定义的主机实质上会在 IdM DNS 服务中创建占位符条目。例如,笔记本电脑可能预配置为 IdM 客户端,但它们在配置时没有 IP 地址。当 DNS 服务动态更新其记录时,将检测主机的当前 IP 地址,并更新其 DNS 记录。
如果没有 Ansible,则使用 ipa host-add 命令在 IdM 中创建主机条目。将主机添加到 IdM 的结果是 IdM 中存在的主机状态。由于 Ansible 依赖于 idempotence,要使用 Ansible 将主机添加到 IdM,您必须创建一个 playbook,将主机的状态定义为 present: state: present。
先决条件
- 您知道 IdM 管理员密码。
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
创建一个清单文件,如
inventory.file,并在该文件中定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个 Ansible playbook 文件,其中包含您要确保的 IdM 中的
FQDN。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/host/add-host.yml文件中的示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-host-is-present.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-host-is-present.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
这个过程会导致在 IdM LDAP 服务器中创建主机条目,但不将主机注册到 IdM Kerberos 域。为此,您必须将主机部署为 IdM 客户端。详情请参阅使用 Ansible playbook 安装身份管理客户端。
验证
以 admin 用户身份登录您的 IdM 服务器:
ssh admin@server.idm.example.com Password:
$ ssh admin@server.idm.example.com Password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入
ipa host-show命令并指定主机名称:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
输出确认 IdM 中存在 host01.idm.example.com。
45.2. 使用 Ansible playbook 确保存在含有 DNS 信息的 IdM 主机条目 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保主机条目在身份管理(IdM)中存在。主机条目通过其 完全限定域名 (FQDN)及其 IP 地址定义。
如果没有 Ansible,则使用 ipa host-add 命令在 IdM 中创建主机条目。将主机添加到 IdM 的结果是 IdM 中存在的主机状态。由于 Ansible 依赖于 idempotence,要使用 Ansible 将主机添加到 IdM,您必须创建一个 playbook,将主机的状态定义为 present: state: present。
先决条件
- 您知道 IdM 管理员密码。
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
创建一个清单文件,如
inventory.file,并在该文件中定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个 Ansible playbook 文件,其中包含您要确保的 IdM 中的
完全限定域名(FQDN)。另外,如果 IdM 服务器配置为管理 DNS,并且您知道主机的 IP 地址,请为ip_address参数指定一个值。主机需要 IP 地址才能存在于 DNS 资源记录中。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/host/host-present.yml文件中的示例。您还可以包含其他附加信息:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-host-is-present.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-host-is-present.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
这个过程会导致在 IdM LDAP 服务器中创建主机条目,但不将主机注册到 IdM Kerberos 域。为此,您必须将主机部署为 IdM 客户端。详情请参阅使用 Ansible playbook 安装身份管理客户端。
验证
以 admin 用户身份登录您的 IdM 服务器:
ssh admin@server.idm.example.com Password:
$ ssh admin@server.idm.example.com Password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入
ipa host-show命令并指定主机名称:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
输出确认 IdM 中存在 host01.idm.example.com。
45.3. 使用 Ansible playbook 确保存在带有随机密码的多个 IdM 主机条目 复制链接链接已复制到粘贴板!
ipahost 模块允许系统管理员使用一个 Ansible 任务来确保 IdM 中存在或不存在多个主机条目。按照以下流程,确保仅由 完全限定域名 (FQDN)定义的多个主机条目存在。运行 Ansible playbook 会为主机生成随机密码。
如果没有 Ansible,则使用 ipa host-add 命令在 IdM 中创建主机条目。将主机添加到 IdM 的结果是 IdM 中存在的主机状态。由于 Ansible 依赖于 idempotence,要使用 Ansible 将主机添加到 IdM,您必须创建一个 playbook,将主机的状态定义为 present: state: present。
先决条件
- 您知道 IdM 管理员密码。
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
创建一个清单文件,如
inventory.file,并在该文件中定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个 Ansible playbook 文件,其中包含您要确保的 IdM 中的
完全限定域名(FQDN)。要使 Ansible playbook 为每个主机生成随机密码,即使主机已存在于 IdM 中,并且update_password仅限于on_create,请添加random: true和force: true选项。要简化此步骤,您可以复制/usr/share/doc/ansible-freeipa/README-host.mdMarkdown 文件并对其进行相应的修改:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hosts-are-present.yml [...] TASK [Hosts host01.idm.example.com and host02.idm.example.com present with random passwords] changed: [r8server.idm.example.com] => {"changed": true, "host": {"host01.idm.example.com": {"randompassword": "0HoIRvjUdH0Ycbf6uYdWTxH"}, "host02.idm.example.com": {"randompassword": "5VdLgrf3wvojmACdHC3uA3s"}}}$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hosts-are-present.yml [...] TASK [Hosts host01.idm.example.com and host02.idm.example.com present with random passwords] changed: [r8server.idm.example.com] => {"changed": true, "host": {"host01.idm.example.com": {"randompassword": "0HoIRvjUdH0Ycbf6uYdWTxH"}, "host02.idm.example.com": {"randompassword": "5VdLgrf3wvojmACdHC3uA3s"}}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
要使用随机、一次性密码(OTP)将主机部署为 IdM 客户端,请参阅使用 Ansible playbook 进行 IdM 客户端注册 ,或使用一次性密码安装客户端: 交互式安装。
验证
以 admin 用户身份登录您的 IdM 服务器:
ssh admin@server.idm.example.com Password:
$ ssh admin@server.idm.example.com Password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入
ipa host-show命令并指定其中一个主机的名称:ipa host-show host01.idm.example.com Host name: host01.idm.example.com Password: True Keytab: False Managed by: host01.idm.example.com
$ ipa host-show host01.idm.example.com Host name: host01.idm.example.com Password: True Keytab: False Managed by: host01.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
输出确认 IdM 中存在 host01.idm.example.com,并带有随机密码。
45.4. 使用 Ansible playbook 确保存在具有多个 IP 地址的 IdM 主机条目 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保主机条目在身份管理(IdM)中存在。主机条目通过其 完全限定域名 (FQDN)及其多个 IP 地址来定义。
与 ipa host 实用程序相比,Ansible ipahost 模块可以确保主机存在或不存在多个 IPv4 和 IPv6 地址。ipa host-mod 命令无法处理 IP 地址。
先决条件
- 您知道 IdM 管理员密码。
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
创建一个清单文件,如
inventory.file,并在该文件中定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 Ansible playbook 文件。将主机的
完全限定域名(FQDN) 指定为ipahost变量的name,用于确保主机的 IdM 中存在。使用ip_address语法,在单独的行上指定多个 IPv4 和 IPv6 ip_address 值。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/host/host-member-ipaddresses-present.yml文件中的示例。您还可以包含附加信息:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-host-with-multiple-IP-addreses-is-present.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-host-with-multiple-IP-addreses-is-present.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
这个过程在 IdM LDAP 服务器中创建主机条目,但不将主机注册到 IdM Kerberos 域。为此,您必须将主机部署为 IdM 客户端。详情请参阅使用 Ansible playbook 安装身份管理客户端。
验证
以 admin 用户身份登录您的 IdM 服务器:
ssh admin@server.idm.example.com Password:
$ ssh admin@server.idm.example.com Password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入
ipa host-show命令并指定主机名称:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出确认 IdM 中存在 host01.idm.example.com。
要验证 IdM DNS 记录中是否存在主机的多个 IP 地址,请输入
ipa dnsrecord-show命令并指定以下信息:- IdM 域的名称
主机的名称
ipa dnsrecord-show idm.example.com host01 [...] Record name: host01 A record: 192.168.0.123, 192.168.0.124 AAAA record: fe80::20c:29ff:fe02:a1b3, fe80::20c:29ff:fe02:a1b4
$ ipa dnsrecord-show idm.example.com host01 [...] Record name: host01 A record: 192.168.0.123, 192.168.0.124 AAAA record: fe80::20c:29ff:fe02:a1b3, fe80::20c:29ff:fe02:a1b4Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出确认 playbook 中指定的所有 IPv4 和 IPv6 地址都已与 host01.idm.example.com 主机条目正确关联。
45.5. 使用 Ansible playbook 确保没有 IdM 主机条目 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保主机条目在身份管理(IdM)中不存在。
先决条件
- IdM 管理员凭证
流程
创建一个清单文件,如
inventory.file,并在该文件中定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 Ansible playbook 文件,使其包含没有存在于 IdM 中的主机的
完全限定域名(FQDN)。如果您的 IdM 域有集成的 DNS,请使用updatedns: true选项从 DNS 中删除主机的任何类型的关联记录。要简化此步骤,您可以复制并修改
/usr/share/doc/ansible-freeipa/playbooks/host/delete-host.yml文件中的示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-host-absent.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-host-absent.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
这个过程会产生:
- IdM Kerberos 域中没有的主机。
- IdM LDAP 服务器中不存在主机条目。
要从客户端主机本身中删除系统服务的特定 IdM 配置,如系统安全服务守护进程 (SSSD),您必须在客户端上运行 ipa-client-install --uninstall 命令。详情请参阅卸载 IdM 客户端。
验证
以 admin 用户身份登录
ipaserver:ssh admin@server.idm.example.com Password: [admin@server /]$
$ ssh admin@server.idm.example.com Password: [admin@server /]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示 host01.idm.example.com 的信息:
ipa host-show host01.idm.example.com ipa: ERROR: host01.idm.example.com: host not found
$ ipa host-show host01.idm.example.com ipa: ERROR: host01.idm.example.com: host not foundCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出确认 IdM 中不存在该主机。
第 46 章 使用 IdM CLI 管理主机组 复制链接链接已复制到粘贴板!
通过以下操作,了解如何在命令行(CLI)上管理主机组及其成员:
- 查看主机组及其成员
- 创建主机组
- 删除主机组
- 添加主机组成员
- 删除主机组成员
- 添加主机组成员管理者
- 删除主机组成员管理者
46.1. IdM 中的主机组 复制链接链接已复制到粘贴板!
IdM 主机组可用于集中控制重要管理任务,特别是访问控制。
主机组的定义
主机组是包含一组具有通用访问控制规则和其他特征的 IdM 主机的实体。例如,您可以根据公司部门、物理位置或访问控制要求来定义主机组。
IdM 中的主机组可以包括:
- IdM 服务器和客户端
- 其他 IdM 主机组
默认创建的主机组
默认情况下,IdM 服务器为所有 IdM 服务器主机创建主机组 ipaservers。
直接和间接组成员
IdM 中的组属性同时适用于直接和间接成员:当主机组 B 是主机组 A 的成员时,主机组 B 的所有成员都被视为主机组 A 的间接成员。
46.2. 使用 CLI 查看 IdM 主机组 复制链接链接已复制到粘贴板!
按照以下步骤,使用命令行(CLI)查看 IdM 主机组。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 一个活跃的 Kerberos 票据。详情请参阅 使用 kinit 手动登录到 IdM。
流程
使用
ipa hostgroup-find命令查找所有主机组。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要显示主机组的所有属性,请添加
--all选项。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
46.3. 使用 CLI 创建 IdM 主机组 复制链接链接已复制到粘贴板!
按照以下步骤,使用命令行(CLI)创建 IdM 主机组。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 一个活跃的 Kerberos 票据。详情请参阅 使用 kinit 手动登录到 IdM。
流程
使用
ipa hostgroup-add命令添加主机组。例如,要创建名为 group_name 的 IdM 主机组,并为其提供描述:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
46.4. 使用 CLI 删除 IdM 主机组 复制链接链接已复制到粘贴板!
按照以下步骤,使用命令行(CLI)删除 IdM 主机组。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 一个活跃的 Kerberos 票据。详情请参阅 使用 kinit 手动登录到 IdM。
流程
使用
ipa hostgroup-del命令删除主机组。例如,要删除名为 group_name 的 IdM 主机组:
ipa hostgroup-del group_name -------------------------- Deleted hostgroup "group_name" --------------------------
$ ipa hostgroup-del group_name -------------------------- Deleted hostgroup "group_name" --------------------------Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除组不会从 IdM 中删除组成员。
46.5. 使用 CLI 添加 IdM 主机组成员 复制链接链接已复制到粘贴板!
您可以使用单个命令,将主机和主机组作为成员添加到 IdM 主机组中。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 一个活跃的 Kerberos 票据。详情请参阅 使用 kinit 手动登录到 IdM。
-
可选:使用
ipa hostgroup-find命令查找主机和主机组。
流程
要将成员添加到主机组,请使用
ipa hostgroup-add-member命令并提供相关信息。您可以使用这些选项指定要添加的成员类型:使用
--hosts选项,将一个或多个主机添加到 IdM 主机组中。例如,要将名为 example_member 的主机添加到名为 group_name 的组中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
--hostgroups选项,将一个或多个主机组添加到 IdM 主机组中。例如,将名为 nested_group 的主机组添加到名为 group_name 的组中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用以下语法在一个命令中将多个主机和多个主机组添加到 IdM 主机组中:
ipa hostgroup-add-member group_name --hosts={host1,host2} --hostgroups={group1,group2}$ ipa hostgroup-add-member group_name --hosts={host1,host2} --hostgroups={group1,group2}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将主机组添加为另一个主机组的成员时,请勿创建递归组。例如,如果组 A 是组 B 的成员,则不要将组 B 添加为组 A 的成员。递归组可能会导致无法预料的行为。
46.6. 使用 CLI 删除 IdM 主机组成员 复制链接链接已复制到粘贴板!
您可以使用单个命令从 IdM 主机组中删除主机和主机组。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 一个活跃的 Kerberos 票据。详情请参阅 使用 kinit 手动登录到 IdM。
-
可选。使用
ipa hostgroup-find命令,确认该组中包含您要删除的成员。
流程
要删除主机组成员,请使用
ipa hostgroup-remove-member命令,并提供相关信息。您可以使用这些选项指定要删除的成员类型:使用
--hosts 选项从 IdM 主机组中删除一个或多个主机。例如,要从名为 group_name 的组中删除名为 example_member 的主机:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
--hostgroups选项从 IdM 主机组中删除一个或多个主机组。例如,要从名为 group_name 的组中删除名为 nested_group 的主机组:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意删除组不会从 IdM 中删除组成员。
您可以使用以下语法在一个命令中从 IdM 主机组中删除多个主机和多个主机组:
ipa hostgroup-remove-member group_name --hosts={host1,host2} --hostgroups={group1,group2}$ ipa hostgroup-remove-member group_name --hosts={host1,host2} --hostgroups={group1,group2}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
46.7. 使用 CLI 添加 IdM 主机组成员管理者 复制链接链接已复制到粘贴板!
您可以使用单个命令,将主机和主机组作为成员管理者添加到 IdM 主机组中。成员管理者可以将主机或主机组添加到 IdM 主机组,但不能更改主机组的属性。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 一个活跃的 Kerberos 票据。详情请参阅 使用 kinit 手动登录到 IdM。
- 您必须具有要添加为成员管理器的主机或主机组的名称,以及您要管理的主机组的名称。
流程
-
可选:使用
ipa hostgroup-find命令查找主机和主机组。 要将成员管理者添加到主机组,请使用
ipa hostgroup-add-member-manager。例如,将名为 example_member 的用户作为成员管理者添加到名为 group_name 的组中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
--groups选项,将一个或多个主机组作为成员管理者添加到 IdM 主机组中。例如,将名为 admin_group 的主机组作为成员管理者添加到名为 group_name 的组中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将成员管理者添加到主机组后,可能需要过些时间,才能将更新传播到身份管理环境中的所有客户端。
验证
使用
ipa group-show命令来验证主机用户和主机组被添加为成员管理者。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
46.8. 使用 CLI 删除 IdM 主机组成员管理者 复制链接链接已复制到粘贴板!
您可以使用单个 命令,将主机和主机组作为成员管理者从 IdM 主机组中删除。成员管理者可以从 IdM 主机组中删除主机组成员管理者,但不能更改主机组的属性。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 一个活跃的 Kerberos 票据。详情请参阅 使用 kinit 手动登录到 IdM。
- 您必须具有要删除的现有成员管理者主机组的名称,以及它们正在管理的主机组的名称。
流程
-
可选:使用
ipa hostgroup-find命令查找主机和主机组。 要从主机组中删除成员管理者,请使用
ipa hostgroup-remove-member-manager命令。例如,要从名为 group_name 的组中删除作为成员管理者的名为 example_member 的用户:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
--groups选项,将一个或多个主机组作为成员管理者从 IdM 主机组中删除。例如,要从名为 group_name 的组中删除作为成员管理者的名为 nested_group 的主机组:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
从主机组中删除成员管理者后,可能需要过些时间,才能将更新传播到身份管理环境中的所有客户端。
验证
使用
ipa group-show命令来验证主机用户和主机组已作为成员管理者被删除。ipa hostgroup-show group_name Host-group: group_name Member hosts: server.idm.example.com Member host-groups: project_admins
$ ipa hostgroup-show group_name Host-group: group_name Member hosts: server.idm.example.com Member host-groups: project_adminsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 47 章 使用 IdM Web UI 管理主机组 复制链接链接已复制到粘贴板!
了解如何使用以下操作在 Web 界面(Web UI)中管理主机组及其成员:
- 查看主机组及其成员
- 创建主机组
- 删除主机组
- 添加主机组成员
- 删除主机组成员
- 添加主机组成员管理者
- 删除主机组成员管理者
47.1. IdM 中的主机组 复制链接链接已复制到粘贴板!
IdM 主机组可用于集中控制重要管理任务,特别是访问控制。
主机组的定义
主机组是包含一组具有通用访问控制规则和其他特征的 IdM 主机的实体。例如,您可以根据公司部门、物理位置或访问控制要求来定义主机组。
IdM 中的主机组可以包括:
- IdM 服务器和客户端
- 其他 IdM 主机组
默认创建的主机组
默认情况下,IdM 服务器为所有 IdM 服务器主机创建主机组 ipaservers。
直接和间接组成员
IdM 中的组属性同时适用于直接和间接成员:当主机组 B 是主机组 A 的成员时,主机组 B 的所有成员都被视为主机组 A 的间接成员。
47.2. 在 IdM Web UI 中查看主机组 复制链接链接已复制到粘贴板!
按照以下流程,使用 Web 界面(Web UI)查看 IdM 主机组。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 您已登录到 IdM Web UI。详情请参阅 在 Web 浏览器中访问 IdM Web UI。
流程
- 点 Identity>Groups,然后选择 Host Groups 选项卡。Host Groups 页面列出了现有的主机组及其描述。您还可以搜索特定的主机组。
- 单击列表中的组,来显示属于此组的主机。您可以将结果限制为直接或间接的成员。
- 选择 Host Groups 选项卡,来显示属于此组的主机组(嵌套主机组)。您可以将结果限制为直接或间接的成员。
47.3. 在 IdM Web UI 中创建主机组 复制链接链接已复制到粘贴板!
按照以下流程,使用 Web 界面(Web UI)创建 IdM 主机组。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 您已登录到 IdM Web UI。详情请参阅 在 Web 浏览器中访问 IdM Web UI。
流程
- 点击 Identity → Groups,然后选择 Host Groups 选项卡。
- 点击 Add。此时出现 Add host grou 对话框。
- 提供有关组的信息:name(必需的)和 description(可选的)。
- 单击 Add 确认。
47.4. 在 IdM Web UI 中删除主机组 复制链接链接已复制到粘贴板!
按照以下流程,使用 Web 界面(Web UI)删除 IdM 主机组。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 您已登录到 IdM Web UI。详情请参阅 在 Web 浏览器中访问 IdM Web UI。
流程
- 点 Identity>Groups 并选择 Host Groups 选项卡。
- 选择要删除的 IdM 主机组,单击 Delete。此时会出现确认对话框。
- 单击 Delete 确认
删除主机组不会从 IdM 中删除组成员。
47.5. 在 IdM Web UI 中添加主机组成员 复制链接链接已复制到粘贴板!
按照以下流程,使用 Web 界面(Web UI)在 IdM 中添加主机组成员。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 您已登录到 IdM Web UI。详情请参阅 在 Web 浏览器中访问 IdM Web UI。
流程
- 点击 Identity → Groups ,并选择 Host Groups 选项卡。
- 单击您要添加成员的组的名称。
- 单击 Hosts 或 Host groups 选项卡,具体取决于您要添加的成员的类型。此时会出现相应的对话框。
- 选择要添加的主机或主机组,然后点击 > 箭头按钮将它们移到 Prospective 列中。
- 单击 Add 确认。
47.6. 在 IdM Web UI 中删除主机组成员 复制链接链接已复制到粘贴板!
按照以下流程,使用 Web 界面(Web UI)删除 IdM 中的主机组成员。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 您已登录到 IdM Web UI。详情请参阅 在 Web 浏览器中访问 IdM Web UI。
流程
- 点击 Identity → Groups ,并选择 Host Groups 选项卡。
- 单击您要从中删除成员的组的名称。
- 单击 Hosts 或 Host groups 选项卡,具体取决于您要删除的成员的类型。
- 选中您要删除的成员旁边的复选框。
- 单击 Delete。此时会出现确认对话框。
- 单击 Delete 确认。已选择的成员被删除。
47.7. 使用 Web UI 添加 IdM 主机组成员管理者 复制链接链接已复制到粘贴板!
按照以下流程,使用 Web 界面(Web UI)将用户或用户组作为主机组成员管理者添加到 IdM 中。成员管理者可以将主机组成员管理者添加到 IdM 主机组中,但不能更改主机组的属性。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 您已登录到 IdM Web UI。详情请参阅 在 Web 浏览器中访问 IdM Web UI。
- 您必须有要添加为成员管理者的主机组的名称,以及您要管理的主机组的名称。
流程
- 点 Identity>Groups 并选择 Host Groups 选项卡。
- 单击要添加成员管理者的组的名称。
- 单击 member managers 选项卡 User Groups or Users,具体取决于您要添加的成员管理者的类型。此时会出现相应的对话框。
- 点击 Add。
- 选择要添加的用户或用户组,然后点击 > 箭头按钮,将它们移到 Prospective 列中。
- 单击 Add 确认。
将成员管理者添加到主机组后,可能需要过些时间,才能将更新传播到身份管理环境中的所有客户端。
验证
在主机组对话框中,验证用户组或用户已被添加到组或用户的成员管理者列表中。
47.8. 使用 Web UI 删除 IdM 主机组成员管理者 复制链接链接已复制到粘贴板!
按照以下流程,使用 Web 界面(Web UI)删除 IdM 中作为主机组成员管理者的用户或用户组。成员管理者可以从 IdM 主机组中删除主机组成员管理者,但不能更改主机组的属性。
先决条件
- 管理 IdM 或用户管理员角色的管理员特权。
- 您已登录到 IdM Web UI。详情请参阅 在 Web 浏览器中访问 IdM Web UI。
- 您必须具有要删除的现有成员管理者主机组的名称,以及它们正在管理的主机组的名称。
流程
- 点 Identity>Groups 并选择 Host Groups 选项卡。
- 单击您要从中删除成员管理者的组的名称。
- 单击 member managers 选项卡 User Groups 或Users,具体取决于您要删除的成员管理者的类型。此时会出现相应的对话框。
- 选择要删除的用户或用户组,然后单击 Delete。
- 单击 Delete 确认。
从主机组中删除成员管理者后,可能需要过些时间,才能将更新传播到身份管理环境中的所有客户端。
验证
在主机组对话框中,验证用户组或用户已从组或用户的成员管理者列表中删除。
第 48 章 使用 Ansible playbook 管理主机组 复制链接链接已复制到粘贴板!
了解更多有关 身份管理(IdM)中的主机组,以及使用 Ansible 执行涉及身份管理(IdM)中的主机组的操作。
48.1. IdM 中的主机组 复制链接链接已复制到粘贴板!
IdM 主机组可用于集中控制重要管理任务,特别是访问控制。
主机组的定义
主机组是包含一组具有通用访问控制规则和其他特征的 IdM 主机的实体。例如,您可以根据公司部门、物理位置或访问控制要求来定义主机组。
IdM 中的主机组可以包括:
- IdM 服务器和客户端
- 其他 IdM 主机组
默认创建的主机组
默认情况下,IdM 服务器为所有 IdM 服务器主机创建主机组 ipaservers。
直接和间接组成员
IdM 中的组属性同时适用于直接和间接成员:当主机组 B 是主机组 A 的成员时,主机组 B 的所有成员都被视为主机组 A 的间接成员。
48.2. 使用 Ansible playbook 确保存在 IdM 主机组 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保主机组在身份管理(IdM)中存在。
如果没有 Ansible,则使用 ipa hostgroup-add 命令在 IdM 中创建主机组条目。将主机组添加到 IdM 的结果是 IdM 中存在主机组的状态。由于 Ansible 依赖幂等性,要使用 Ansible 将主机组添加到 IdM,您必须创建一个 playbook,其中将主机组的状态定义为 present: state: present。
先决条件
- 您知道 IdM 管理员密码。
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
创建一个清单文件,如
inventory.file,并使用目标 IdM 服务器列表定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用必要的主机组信息,创建 Ansible playbook 文件。例如,若要确保存在名为 databases 的主机组,可在
- ipahostgroup任务中指定name: databases。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/user/ensure-hostgroup-is-present.yml文件中的示例。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 playbook 中,state: present 表示将主机组添加到 IdM 的请求,除非该主机组在那里已存在。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hostgroup-is-present.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hostgroup-is-present.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以 admin 用户身份登录
ipaserver:ssh admin@server.idm.example.com Password: [admin@server /]$
$ ssh admin@server.idm.example.com Password: [admin@server /]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 admin 请求一个 Kerberos ticket:
kinit admin Password for admin@IDM.EXAMPLE.COM:
$ kinit admin Password for admin@IDM.EXAMPLE.COM:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示在 IdM 中存在的主机组的信息,以确保:
ipa hostgroup-show databases Host-group: databases
$ ipa hostgroup-show databases Host-group: databasesCopy to Clipboard Copied! Toggle word wrap Toggle overflow IdM 中存在 databases 主机组。
48.3. 确保使用 Ansible playbook 在 IdM 主机组中存在主机 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保主机组中的主机在身份管理(IdM)中存在。
先决条件
- 您知道 IdM 管理员密码。
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - IdM 中已存在您要引用的主机。详情请参阅使用 Ansible playbook 确保存在 IdM 主机条目。
- 您从 Ansible playbook 文件中引用的主机组已添加到 IdM 中。详情请参阅确保使用 Ansible playbook 确保 IdM 主机组存在。
流程
创建一个清单文件,如
inventory.file,并使用目标 IdM 服务器列表定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用必要的主机信息,创建 Ansible playbook 文件。使用
ipahostgroup变量的name参数,指定主机组的名称。使用ipahostgroup变量的host参数指定主机名称。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/hostgroup/ensure-hosts-and-hostgroups-are-present-in-hostgroup.yml文件中的示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此 playbook 将 db.idm.example.com 主机添加到 databases 主机组。
action: member行表示在 playbook 运行时,不会尝试添加 databases 组本身。相反,只尝试将 db.idm.example.com 添加到数据库。运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hosts-or-hostgroups-are-present-in-hostgroup.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hosts-or-hostgroups-are-present-in-hostgroup.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以 admin 用户身份登录
ipaserver:ssh admin@server.idm.example.com Password: [admin@server /]$
$ ssh admin@server.idm.example.com Password: [admin@server /]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 admin 请求一个 Kerberos ticket:
kinit admin Password for admin@IDM.EXAMPLE.COM:
$ kinit admin Password for admin@IDM.EXAMPLE.COM:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示主机组的信息以查看其中存在哪些主机:
ipa hostgroup-show databases Host-group: databases Member hosts: db.idm.example.com
$ ipa hostgroup-show databases Host-group: databases Member hosts: db.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow db.idm.example.com 主机显示为 databases 主机组的成员。
48.4. 使用 Ansible playbook 嵌套 IdM 主机组 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保嵌套的主机组在身份管理(IdM)主机组中存在。
先决条件
- 您知道 IdM 管理员密码。
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - IdM 中已存在您从 Ansible playbook 文件中引用的主机组。详情请参阅确保使用 Ansible playbook 确保 IdM 主机组存在。
流程
创建一个清单文件,如
inventory.file,并使用目标 IdM 服务器列表定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用必要的主机组信息,创建 Ansible playbook 文件。为确保嵌套的主机组 A 存在于主机组 B 中:在 Ansible playbook 的
- ipahostgroup变量中使用name变量指定主机组 B 的名称。使用hostgroup变量指定嵌套主机组 A 的名称。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/hostgroup/ensure-hosts-and-hostgroups-are-present-in-hostgroup.yml文件中的示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此 Ansible playbook 确保在 databases 主机组中存在 myqsl-server 和 oracle-server 主机组。
action: member行表示在 playbook 运行时,不会尝试将 databases 组本身添加到 IdM。运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hosts-or-hostgroups-are-present-in-hostgroup.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hosts-or-hostgroups-are-present-in-hostgroup.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以 admin 用户身份登录
ipaserver:ssh admin@server.idm.example.com Password: [admin@server /]$
$ ssh admin@server.idm.example.com Password: [admin@server /]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 admin 请求一个 Kerberos ticket:
kinit admin Password for admin@IDM.EXAMPLE.COM:
$ kinit admin Password for admin@IDM.EXAMPLE.COM:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示有关存在嵌套主机组的主机组的信息:
ipa hostgroup-show databases Host-group: databases Member hosts: db.idm.example.com Member host-groups: mysql-server, oracle-server
$ ipa hostgroup-show databases Host-group: databases Member hosts: db.idm.example.com Member host-groups: mysql-server, oracle-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow mysql-server 和 oracle-server 主机组存在于 databases 主机组中。
48.5. 使用 Ansible Playbook 在 IDM 主机组中存在成员管理器 复制链接链接已复制到粘贴板!
以下流程描述了确保使用 Ansible playbook 在 IdM 主机和主机组中存在成员管理器。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - 您必须具有要添加为成员管理器的主机或主机组的名称,以及您要管理的主机组的名称。
流程
创建一个清单文件,如
inventory.file,并在该文件中定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用必要的主机和主机组成员管理信息创建一个 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-member-managers-host-groups.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-member-managers-host-groups.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以使用 ipa group-show 命令验证 group_name 组是否包含 example_member 和project_admins 作为成员管理者:
以管理员身份登录到
ipaserver:ssh admin@server.idm.example.com Password: [admin@server /]$
$ ssh admin@server.idm.example.com Password: [admin@server /]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示有关 testhostgroup 的信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
48.6. 使用 Ansible playbook 确保 IdM 主机组中没有主机 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保主机组中的主机在身份管理(IdM)中不存在。
先决条件
- 您知道 IdM 管理员密码。
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - IdM 中已存在您要引用的主机。详情请参阅使用 Ansible playbook 确保存在 IdM 主机条目。
- IdM 中已存在您从 Ansible playbook 文件中引用的主机组。详情请参阅确保使用 Ansible playbook 确保 IdM 主机组存在。
流程
创建一个清单文件,如
inventory.file,并使用目标 IdM 服务器列表定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建含有必要的主机和主机组信息的 Ansible playbook 文件。使用
ipahostgroup变量的name参数,指定主机组的名称。使用ipahostgroup变量的host参数指定要确保其不存在于主机组中的主机名称。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/hostgroup/ensure-hosts-and-hostgroups-are-absent-in-hostgroup.yml文件中的示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此 playbook 确保 db.idm.example.com 主机没有存在于 databases 主机组中。action: member 行表示在 playbook 运行时,不会尝试删除 databases 组本身。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hosts-or-hostgroups-are-absent-in-hostgroup.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hosts-or-hostgroups-are-absent-in-hostgroup.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以 admin 用户身份登录
ipaserver:ssh admin@server.idm.example.com Password: [admin@server /]$
$ ssh admin@server.idm.example.com Password: [admin@server /]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 admin 请求一个 Kerberos ticket:
kinit admin Password for admin@IDM.EXAMPLE.COM:
$ kinit admin Password for admin@IDM.EXAMPLE.COM:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示主机组及其包含的主机的信息:
ipa hostgroup-show databases Host-group: databases Member host-groups: mysql-server, oracle-server
$ ipa hostgroup-show databases Host-group: databases Member host-groups: mysql-server, oracle-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 databases 主机组中不存在 db.idm.example.com 主机。
48.7. 使用 Ansible playbook 确保 IdM 主机组没有嵌套的主机组 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保来自外部主机组的嵌套的主机组在身份管理(IdM)中不存在。
先决条件
- 您知道 IdM 管理员密码。
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - IdM 中已存在您从 Ansible playbook 文件中引用的主机组。详情请参阅确保使用 Ansible playbook 确保 IdM 主机组存在。
流程
创建一个清单文件,如
inventory.file,并使用目标 IdM 服务器列表定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用必要的主机组信息,创建 Ansible playbook 文件。在
- ipahostgroup变量中使用name变量指定外部主机组的名称。使用hostgroup变量指定嵌套主机组的名称。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/hostgroup/ensure-hosts-and-hostgroups-are-absent-in-hostgroup.yml文件中的示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此 playbook 确保 mysql-server 和 oracle-server 主机组没有存在于 databases 主机组中。
action: member行表示,在 playbook 运行时,不会尝试确保从 IdM 中删除 databases 组本身。运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hosts-or-hostgroups-are-absent-in-hostgroup.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hosts-or-hostgroups-are-absent-in-hostgroup.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以 admin 用户身份登录
ipaserver:ssh admin@server.idm.example.com Password: [admin@server /]$
$ ssh admin@server.idm.example.com Password: [admin@server /]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 admin 请求一个 Kerberos ticket:
kinit admin Password for admin@IDM.EXAMPLE.COM:
$ kinit admin Password for admin@IDM.EXAMPLE.COM:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示应当缺少嵌套主机组的主机组的信息:
ipa hostgroup-show databases Host-group: databases
$ ipa hostgroup-show databases Host-group: databasesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出确认,外部 databases 主机组中没有mysql-server 和 oracle-server 嵌套式主机组。
48.8. 使用 Ansible playbook 确保没有 IdM 主机组 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保主机组在身份管理(IdM)中不存在。
如果没有 Ansible,则使用 ipa hostgroup-del 命令从 IdM 中删除主机组条目。从 IdM 中删除主机组的结果是 IdM 中缺少主机组的状态。由于 Ansible 依赖于 idempotence,若要使用 Ansible 从 IdM 中删除主机组,您必须创建一个 playbook,它将主机组的状态定义为 absent: state: absent。
先决条件
- 您知道 IdM 管理员密码。
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
创建一个清单文件,如
inventory.file,并使用目标 IdM 服务器列表定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用必要的主机组信息,创建 Ansible playbook 文件。要简化此步骤,您可以复制并修改
/usr/share/doc/ansible-freeipa/playbooks/user/ensure-hostgroup-is-absent.yml文件中的示例。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此 playbook 确保 IdM 中没有 databases 主机组。
state: absent表示从 IdM 中删除主机组的请求,除非它已被删除。运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hostgroup-is-absent.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-hostgroup-is-absent.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以 admin 用户身份登录
ipaserver:ssh admin@server.idm.example.com Password: [admin@server /]$
$ ssh admin@server.idm.example.com Password: [admin@server /]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 admin 请求一个 Kerberos ticket:
kinit admin Password for admin@IDM.EXAMPLE.COM:
$ kinit admin Password for admin@IDM.EXAMPLE.COM:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示您没有保证的主机组的信息:
ipa hostgroup-show databases ipa: ERROR: databases: host group not found
$ ipa hostgroup-show databases ipa: ERROR: databases: host group not foundCopy to Clipboard Copied! Toggle word wrap Toggle overflow IdM 中不存在 databases 主机组。
48.9. 使用 Ansible playbook 确保 IdM 主机组中没有成员管理器 复制链接链接已复制到粘贴板!
以下流程描述了确保使用 Ansible playbook 在 IdM 主机和主机组中存在成员管理器。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - 您必须具有要作为成员管理者删除的用户或用户组的名称,以及它们所管理的主机组的名称。
流程
创建一个清单文件,如
inventory.file,并在该文件中定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用必要的主机和主机组成员管理信息创建一个 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-member-managers-host-groups-are-absent.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-member-managers-host-groups-are-absent.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以使用 ipa group-show 命令验证 group_name 组不包含 example_member 或 project_admins 作为成员管理者:
以管理员身份登录到
ipaserver:ssh admin@server.idm.example.com Password: [admin@server /]$
$ ssh admin@server.idm.example.com Password: [admin@server /]$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示有关 testhostgroup 的信息:
ipaserver]$ ipa hostgroup-show group_name Host-group: group_name Member hosts: server.idm.example.com Member host-groups: testhostgroup2
ipaserver]$ ipa hostgroup-show group_name Host-group: group_name Member hosts: server.idm.example.com Member host-groups: testhostgroup2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 49 章 为用户、主机和服务管理 Kerberos 主体别名 复制链接链接已复制到粘贴板!
当您创建新用户、主机或服务时,会自动添加以下格式的 Kerberos 主体:
- user_name@REALM
- host/host_name@REALM
- service_name/host_name@REALM
管理员可以让用户、主机或服务使用别名对 Kerberos 应用进行身份验证。这在以下情况下很有用:
- 用户名已更改,用户希望使用之前的用户名和新用户名登录。
- 即使 IdM Kerberos 域与电子邮件域不同,用户也需要使用电子邮件地址登录。
请注意,如果您重命名了用户,对象会保留别名和之前的规范主体名称。
49.1. 添加一个 Kerberos 主体别名 复制链接链接已复制到粘贴板!
您可以在身份管理(IdM)环境中将别名名称与现有 Kerberos 主体关联。这增强了安全性,并简化了 IdM 域中的身份验证过程。
流程
要将别名名称
useralias添加到帐户user中,请输入:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要为主机或服务添加一个别名,请分别使用
ipa host-add-principal或ipa service-add-principal命令。如果您使用别名名称进行身份验证,请使用
kinit命令的-C选项:kinit -C <useralias> Password for <user>@IDM.EXAMPLE.COM:
# kinit -C <useralias> Password for <user>@IDM.EXAMPLE.COM:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
49.2. 删除一个 Kerberos 主体别名 复制链接链接已复制到粘贴板!
您可以在其身份管理(IdM)环境中删除与 Kerberos 主体关联的别名名称。
流程
要从帐户
user中删除别名useralias,请输入:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要从主机或服务中删除一个别名,请分别使用
ipa host-remove-principal或ipa service-remove-principal命令。请注意,您无法删除规范主体名称:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
49.3. 添加一个 Kerberos 企业主体别名 复制链接链接已复制到粘贴板!
您可以在身份管理(IdM)环境中将企业级别名名称与现有 Kerberos 企业主体关联。企业主体别名可以使用任何域后缀,但用户主体名称(UPN)后缀、NetBIOS 名称或可信活动目录林域的域名除外。
流程
将企业主体别名
user@example.com添加到user帐户中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要向主机或服务添加一个企业别名,请分别使用
ipa host-add-principal或ipa service-add-principal命令。注意在添加或删除企业级别名时,请使用两个反斜杠(\\)转义 @ 符号。否则,shell 将 @ 符号解释为 Kerberos 域名称的一部分,并导致以下错误:
ipa: ERROR: The realm for the principal does not match the realm for this IPA server.
ipa: ERROR: The realm for the principal does not match the realm for this IPA server.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您使用企业主体名称进行身份验证,请使用
kinit命令的-E选项:kinit -E <user@example.com> Password for user\@example.com@IDM.EXAMPLE.COM:
# kinit -E <user@example.com> Password for user\@example.com@IDM.EXAMPLE.COM:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
49.4. 删除 Kerberos 企业主体别名 复制链接链接已复制到粘贴板!
您可以在其身份管理(IdM)环境中删除与 Kerberos 企业主体关联的企业别名名称。
流程
要从帐户
user中删除企业主体别名user@example.com,请输入:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要从主机或服务中删除一个别名,请分别使用
ipa host-remove-principal或ipa service-remove-principal命令。注意在添加或删除企业级别名时,请使用两个反斜杠(\\)转义 @ 符号。否则,shell 将 @ 符号解释为 Kerberos 域名称的一部分,并导致以下错误:
ipa: ERROR: The realm for the principal does not match the realm for this IPA server
ipa: ERROR: The realm for the principal does not match the realm for this IPA serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 50 章 管理 Kerberos 标记 复制链接链接已复制到粘贴板!
Kerberos 标志对于在支持 Kerberos 的网络环境中指定身份验证机制、授权级别和安全协议至关重要。使用 Kerberos 标志,您可以确保安全访问控制,防止未经授权的访问,并改进不同 Kerberos 实现之间的互操作性。
50.1. 服务和主机的 Kerberos 标志 复制链接链接已复制到粘贴板!
您可以使用各种 Kerberos 标志来定义 Kerberos 票据行为的特定方面。您可以将这些标志添加到服务和主机 Kerberos 主体。
身份管理(IdM)中的主体接受以下 Kerberos 标记:
OK_AS_DELEGATE使用此标志指定可委托的 Kerberos 票据。
Active Directory (AD)客户端检查 Kerberos 票据上的
OK_AS_DELEGATE标志,以确定用户凭证是否可以转发或委派给特定的服务器。AD 仅将票据授予票据(TGT)转发到配置了OK_AS_DELEGATE的服务或主机。使用这个标志,系统安全服务守护进程(SSSD)可以将 AD 用户 TGT 添加到 IdM 客户端机器上的默认 Kerberos 凭证缓存中。REQUIRES_PRE_AUTH使用此标志指定只允许预先验证的票据对主体进行身份验证。
设置
REQUIRES_PRE_AUTH标志后,密钥分发中心(KDC)需要额外的身份验证:只有 TGT 已被预先验证,则 KDC 会发出带有REQUIRES_PRE_AUTH的主体的 TGT。您可以清除
REQUIRES_PRE_AUTH,以禁用所选服务或主机的预身份验证。这降低了 KDC 上的负载,但稍微增加对长期密钥的 brute-force 攻击的可能性。OK_TO_AUTH_AS_DELEGATE使用
OK_TO_AUTH_AS_DELEGATE标志指定允许该服务代表用户获取 Kerberos 票据。请注意,为了代表用户获取其他票据,该服务需要OK_AS_DELEGATE标志以及密钥分发方允许的对应策略决定。
50.2. 从 Web UI 设置 Kerberos 标志 复制链接链接已复制到粘贴板!
您可以使用 IdM Web UI 设置 Kerberos 标志。以下流程将 Kerberos 标志设置为主体。
流程
在菜单中选择 → 。
- 点击您要向其添加标志的服务。
检查您要设置的选项:
-
要设置
OK_AS_DELEGATE标志,请选中 Trusted for delegation。 -
要设置
REQUIRES_PRE_AUTH标志,请检查 Requires pre-authentication。 -
要设置
OK_TO_AUTH_AS_DELEGATE标志,请选中 Trusted 以用户 进行身份验证。
-
要设置
50.3. 从命令行设置和删除 Kerberos 标志 复制链接链接已复制到粘贴板!
您可以使用命令行添加或删除 Kerberos 标记。ipa service-mod 命令对标志使用以下命令选项:
-
OK_AS_DELEGATE的--ok-as-delegate -
REQUIRES_PRE_AUTH的--requires-pre-auth -
--OK-to-auth-as-delegateforOK_TO_AUTH_AS_DELEGATE
通过将选项值设置为 1,您可以为原则启用标记。通过将选项值设为 0,您可以禁用 标志。
以下流程为 服务/ipa.example.com@example.com 主体启用和禁用 OK_AS_DELEGATE 标志。
流程
要为
服务/ipa.example.com@example.com原则添加OK_AS_DELEGATE标志,请运行:ipa service-mod service/ipa.example.com@EXAMPLE.COM --ok-as-delegate=1
$ ipa service-mod service/ipa.example.com@EXAMPLE.COM --ok-as-delegate=1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要从
服务/ipa.example.com@example.com原则中删除OK_AS_DELEGATE标志,请运行:ipa service-mod service/ipa.example.com@EXAMPLE.COM --ok-as-delegate=0
$ ipa service-mod service/ipa.example.com@EXAMPLE.COM --ok-as-delegate=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
50.4. 从命令行显示 Kerberos 标志 复制链接链接已复制到粘贴板!
您可以使用命令行显示 Kerberos 标记设置。以下流程显示 demo/ipa.example.com@EXAMPLE.COM 主体的 OK_AS_DELEGATE 标志。
流程
要找出是否为主体设置了 OK_AS_DELEGATE :
运行
kvno工具:kvno demo/ipa.example.com@EXAMPLE.COM
$ kvno demo/ipa.example.com@EXAMPLE.COMCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要显示标志设置,请运行
klist -f命令。0字符表示禁用了OK_AS_DELEGATE标志:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 51 章 使用 PAC 信息加强 Kerberos 安全性 复制链接链接已复制到粘贴板!
从 RHEL 8.5 开始,您默认使用带有 Privilege Attribute Certificate(PAC)信息的身份管理(IdM)。您还可以在 RHEL 8.5 之前安装的 IdM 部署中启用安全标识符(SID)。
51.1. IdM 中使用特权属性证书 (PAC) 复制链接链接已复制到粘贴板!
为提高安全性,RHEL Identity Management (IdM) 现在在新部署中默认发出带有 Privilege Attribute 证书 (PAC) 信息的 Kerberos 票据。PAC 包含有关 Kerberos 主体的丰富信息,包括其安全标识符 (SID)、组成员资格和主目录信息。
默认情况下,Microsoft Active Directory (AD)使用的 SID 是从不重复使用的全局唯一标识符。SID 表达多个命名空间:每个域都有一个 SID,它是每个对象的 SID 中的前缀。
从 RHEL 8.5 开始,当安装 IdM 服务器或副本时,安装脚本默认为用户和组生成 SID。这允许 IdM 使用 PAC 数据。如果您在 RHEL 8.5 之前安装了 IdM,且您尚未配置 AD 域的信任,您可能没有为 IdM 对象生成 SID。有关为您的 IdM 对象生成 SID 的更多信息,请参阅 IdM 中启用安全标识符 (SID)。
通过评估 Kerberos 票据中的 PAC 信息,您可以使用更详细的信息控制资源访问。例如,一个域中的 Administrator 帐户的 SID 与任何其他域中的 Administrator 帐户不同。在对 AD 域的带有信任的 IdM 环境中,您可以根据全局唯一的 SID 设置访问控制,而不是在不同位置中重复的简单用户名或 UID,如每个 Linux root 帐户都有 UID 0。
51.2. 在 IdM 中启用安全标识符 (SID) 复制链接链接已复制到粘贴板!
如果您在 RHEL 8.5 之前安装了 IdM,且您还没有配置 AD 域的信任,您可能没有为 IdM 对象生成安全标识符(SID)。这是因为之前,生成 SID 的唯一方法是运行 ipa-adtrust-install 命令将 Trust Controller 角色添加到 IdM 服务器。
从 RHEL 8.6 开始,IdM 中的 Kerberos 要求您的 IdM 对象具有 SID,这对基于 Privilege Access 证书 (PAC) 信息的安全性是必需的。
先决条件
- 在 RHEL 8.5 之前已安装了 IdM。
-
还没有运行
ipa-sidgen任务,它是使用 Active Directory 域配置信任的一部分。 - 您可以作为 IdM admin 帐户进行身份验证。
流程
启用 SID 使用并触发
SIDgen任务,以便为现有的用户和组生成 SID。此任务可能是资源密集型:ipa config-mod --enable-sid --add-sids
[root@server ~]# ipa config-mod --enable-sid --add-sidsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证 IdM
admin用户帐户条目是否具有ipantsecurityidentifier属性,其中 SID 以-500结尾,为域管理员保留的 SID:ipa user-show admin --all | grep ipantsecurityidentifier ipantsecurityidentifier: S-1-5-21-2633809701-976279387-419745629-500
[root@server ~]# ipa user-show admin --all | grep ipantsecurityidentifier ipantsecurityidentifier: S-1-5-21-2633809701-976279387-419745629-500Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 52 章 管理 Kerberos 票据策略 复制链接链接已复制到粘贴板!
身份管理(IdM)中的 Kerberos 票据策略对 Kerberos 票据访问、持续时间和续订设置了限制。您可以为运行在 IdM 服务器上的密钥分发中心(KDC)配置 Kerberos 票据策略。
52.1. IdM KDC 的角色 复制链接链接已复制到粘贴板!
身份管理的身份验证机制使用由密钥分发中心(KDC)建立的 Kerberos 基础设施。KDC 是可信赖的权威,其存储凭证信息,并确保来自 IdM 网络内实体的数据的真实性。
每个 IdM 用户、服务和主机都充当 Kerberos 客户端,由唯一的 Kerberos 主体 识别:
-
对于用户:
identifier@REALM,如admin@EXAMPLE.COM -
对于服务:
service/fully-qualified-hostname@REALM,如http/server.example.com@EXAMPLE.COM -
对于主机:
host/fully-qualified-hostname@REALM,如host/client.example.com@EXAMPLE.COM
下图是 Kerberos 客户端、KDC 以及客户端希望与之通信的 Kerberos 应用之间通信的简化。
-
Kerberos 客户端通过作为 Kerberos 主体进行身份验证来向 KDC 识别自己。例如,IdM 用户执行
kinit username,并提供其密码。 - KDC 会检查数据库中的主体,验证客户端,并评估 Kerberos 票据策略 来确定是否授予请求。
- KDC 根据适当的票据策略,签发一个具有生命周期和 验证指标 的客户端票据授予票(TGT)。
- 使用 TGT 时,客户端从 KDC 请求 服务票据,以便与目标主机上的 Kerberos 服务通信。
- KDC 检查客户端的 TGT 是否仍然有效,并根据票据策略评估服务票据请求。
- KDC 向客户端发出 服务票据。
- 通过服务票据,客户端可以在目标主机上启动与服务的 加密通信。
52.2. IdM Kerberos 票据策略类型 复制链接链接已复制到粘贴板!
IdM Kerberos 票据策略实现以下票据策略类型:
- 连接策略
要保护具有不同安全级别的 Kerberos 服务,您可以定义连接策略来强制执行规则,客户端基于这些规则来检索票据授予票(TGT)。
例如,您可以要求智能卡验证来连接到
client1.example.com,并且需要双因素身份验证来访问client2.example.com上的testservice应用。要强制执行连接策略,请将 身份验证指标 与服务相关联。只有在服务票据请求中有所需的验证指标的客户端才能访问这些服务。如需更多信息,请参阅 Kerberos 身份验证指标。
- 票据生命周期策略
每个 Kerberos 票据都有一个 生命周期 和一个潜在的 续订期限 :您可以在达到最长生命周期前续订票据,但不能在超过其最长续订期限之后续订票据。
默认的全局票据生命周期为一天(86400 秒),默认的全局最长续订期限为 1 周(604800 秒)。要调整这些全局值,请参阅 配置全局票据生命周期策略。
您还可以自行定义您自己的票据生命周期策略:
- 要为每个身份验证指标配置不同的全局票据生命周期值,请参阅 根据身份验证指标配置全局票据策略。
- 要为应用任何身份验证方法的单个用户定义票据生命周期值,请参阅 为用户配置默认的票据策略。
- 要为每个只应用到单独用户的身份验证指标定义单个票据生命周期值,请参阅 为用户配置单独的身份验证指标票据策略。
52.3. Kerberos 认证指示符 复制链接链接已复制到粘贴板!
Kerberos 密钥分发中心(KDC)根据客户端使用哪个预身份验证机制来证明其身份,来将 身份验证指标 附加到票据授予票(TGT):
otp- 双因素身份验证(密码 + 一次性密码)
radius- RADIUS 身份验证(通常用于 802.1x 身份验证)
pkinit- PKINIT、智能卡或证书验证
hardened- 强化的密码(SPAKE 或 FAST)[1]
然后 KDC 将来自 TGT 的身份验证指标附加到来自它的任何服务票据请求。KDC 强制执行基于验证指标的策略,如服务访问控制、最长票据生命周期和最长续订期限。
身份验证指标和 IdM 服务
如果您将服务或主机与身份验证指标相关联,则只有使用相应身份验证机制获取 TGT 的客户端才能访问它。KDC (不是应用程序或服务),检查服务票证请求中的身份验证指标,并根据 Kerberos 连接策略授予或拒绝请求。
如果服务或主机没有给其分配的身份验证指标,它将接受任何机制验证的票据。
52.4. 为 IdM 服务强制执行身份验证指标 复制链接链接已复制到粘贴板!
身份验证(IdM)支持的验证机制在身份验证强度方面存在差异。例如,使用一次性密码(OTP)与标准密码(OTP)的结合来获取初始 Kerberos 票据授予票(TGT)被视为比仅使用标准密码进行身份验证更加安全。
通过将身份验证指示符与特定的 IdM 服务相关联,作为 IdM 管理员,您可以配置服务,以便只有使用这些特定预身份验证机制的用户才能获得他们可以访问该服务的初始 Kerberos 票据授予票(TGT)。
这样,您可以配置不同的 IdM 服务以便:
- 只有使用更强大的身份验证方法获取其初始 TGT(如一次性密码(OTP))的用户才能访问对安全性至关重要的服务,比如 VPN。
- 使用更简单的身份验证方法获取其初始 TGT(如密码)的用户只能访问非关键服务,如本地登录。
图 52.1. 使用不同技术进行身份验证的示例
这个流程描述了创建 IdM 服务,并将其配置为需要传入的服务票据请求中的特定 Kerberos 身份验证指标。
52.4.1. 创建 IdM 服务条目及其 Kerberos keytab 复制链接链接已复制到粘贴板!
为运行在 IdM 主机上的服务添加 IdM 服务 条目会创建相应的 Kerberos 主体,并允许服务请求 SSL 证书、Kerberos keytab 或两者。
以下流程描述了创建 IdM 服务条目,并为加密与该服务的通信生成关联的 Kerberos keytab。
先决条件
- 您的服务可以存储 Kerberos 主体、SSL 证书,或两者。
流程
使用
ipa service-add命令添加 IdM 服务,来创建与其关联的 Kerberos 主体。例如,要为运行在主机client.example.com上的testservice应用程序创建 IdM 服务条目:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为客户端上的服务生成并存储 Kerberos keytab。
ipa-getkeytab -k /etc/testservice.keytab -p testservice/client.example.com Keytab successfully retrieved and stored in: /etc/testservice.keytab
[root@client ~]# ipa-getkeytab -k /etc/testservice.keytab -p testservice/client.example.com Keytab successfully retrieved and stored in: /etc/testservice.keytabCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用
ipa service-show命令显示 IdM 服务的信息。ipa service-show testservice/client.example.com Principal name: testservice/client.example.com@EXAMPLE.COM Principal alias: testservice/client.example.com@EXAMPLE.COM Keytab: True Managed by: client.example.com
[root@server ~]# ipa service-show testservice/client.example.com Principal name: testservice/client.example.com@EXAMPLE.COM Principal alias: testservice/client.example.com@EXAMPLE.COM Keytab: True Managed by: client.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
klist命令显示服务的 Kerberos keytab 的内容。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
52.4.2. 使用 IdM CLI 将身份验证指示符与 IdM 服务相关联 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以配置主机或服务,来要求客户端应用程序提供的服务票据包含特定的验证指标。例如,您可以确保在获取 Kerberos 票据授予票据(TGT)时,只有使用有效的带有密码的 IdM 双因素身份验证令牌的用户才能访问该主机或服务。
按照以下流程配置服务,以要求来自传入服务票据请求的特定 Kerberos 身份验证指标。
先决条件
- 您已为运行在 IdM 主机上的服务创建了 IdM 服务条目。请参阅 创建 IdM 服务条目及其 Kerberos keytab。
- 您已在 IdM 中获得了管理用户的票据授予票据。
不要 将身份验证指标分配给内部 IdM 服务。以下 IdM 服务无法执行 PKINIT 和多因素身份验证方法所需的交互式身份验证步骤:
host/server.example.com@EXAMPLE.COM HTTP/server.example.com@EXAMPLE.COM ldap/server.example.com@EXAMPLE.COM DNS/server.example.com@EXAMPLE.COM cifs/server.example.com@EXAMPLE.COM
host/server.example.com@EXAMPLE.COM
HTTP/server.example.com@EXAMPLE.COM
ldap/server.example.com@EXAMPLE.COM
DNS/server.example.com@EXAMPLE.COM
cifs/server.example.com@EXAMPLE.COM
流程
使用
ipa service-mod命令为服务指定一个或多个所需的身份验证指标,用--auth-ind参数标识。Expand 身份验证方法 --auth-ind值双因素身份验证
otpRADIUS 身份验证
radiusPKINIT、智能卡或证书验证
pkinit强化的密码(SPAKE 或 FAST)
hardened例如,要求用户通过智能卡或 OTP 身份验证来检索主机
client.example.com上testservice主体的服务票据:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要从服务中删除所有验证指标,请提供一个空的指标列表:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用
ipa service-show命令显示关于 IdM 服务的信息,包括其所需的身份验证指标。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
52.4.3. 使用 IdM Web UI 将验证指标与 IdM 服务关联 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以配置主机或服务,以便客户端应用程序所提供的服务票据包含特定的身份验证指标。例如,您可以确保在获取 Kerberos 票据授予票据(TGT)时,只有使用带有密码的有效的 IdM 双因素身份验证令牌的用户才能访问该主机或服务。
按照以下流程,使用 IdM Web UI 配置主机或服务,以要求来自传入票据请求的特定的 Kerberos 身份验证指标。
先决条件
- 您以管理用户的身份已登录到 IdM Web UI。
流程
- 选择 → 或 → 。
- 单击所需的主机或服务的名称。
在
Authentication indicators下,选择所需的验证方法。-
例如,选择
OTP来确保在获取 Kerberos TGT 时,只有使用带有密码的有效的 IdM 双因素身份验证令牌的用户才能访问主机或服务。 -
如果您选择
OTP和RADIUS,那么在获取 Kerberos TGT 时使用带有密码的有效的 IdM 双因素身份验证令牌的用户,以及 使用 RADIUS 服务器获取 Kerberos TGT 的用户,都将被允许访问。
-
例如,选择
- 点击页面顶部的 。
52.4.4. 为 IdM 服务检索 Kerberos 服务票据 复制链接链接已复制到粘贴板!
以下流程描述了为 IdM 服务检索 Kerberos 服务票据。您可以使用此流程来测试 Kerberos 票据策略,比如强制票据授予票据(TGT)中存在某些 Kerberos 验证指标。
先决条件
- 如果您正在使用的服务不是内部 IdM 服务,您已为其创建了相应的 IdM 服务 条目。请参阅 创建 IdM 服务条目及其 Kerberos keytab。
- 您有一个 Kerberos 票据授予票据(TGT)。
流程
使用带
-S选项的kvno命令来检索服务票据,并指定 IdM 服务的名称和管理它的主机的完全限定域名。kvno -S testservice client.example.com testservice/client.example.com@EXAMPLE.COM: kvno = 1
[root@server ~]# kvno -S testservice client.example.com testservice/client.example.com@EXAMPLE.COM: kvno = 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您需要访问 IdM 服务以及当前的票据授予票据(TGT)没有所需的与之关联的 Kerberos 身份验证指标,请使用 kdestroy 命令清除当前的 Kerberos 凭证缓存,并检索新的 TGT:
kdestroy
[root@server ~]# kdestroy
例如,如果您最初通过使用密码的身份验证来获取了 TGT,并且您需要访问具有与之相关联的 pkinit身份验证指标的 IdM 服务,请销毁当前的凭证缓存,并使用智能卡重新进行身份验证。请参阅 Kerberos 身份验证指标。
验证
使用
klist命令来验证服务票据是否在默认的 Kerberos 凭据缓存中。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
52.5. 配置全局票据生命周期策略 复制链接链接已复制到粘贴板!
全局票据策略适用于所有服务票据,也适用于没有定义任何按用户的票据策略的用户。
以下流程描述了使用 ipa krbtpolicy-mod 命令调整全局 Kerberos 票据策略的最大票据生命周期和最大票据续订期限。
使用 ipa krbtpolicy-mod 命令时,至少指定以下参数之一:
-
--maxlife最长票据生命周期(以秒为单位) -
--maxrenew最长续订期限(以秒为单位)
流程
修改全局票据策略:
ipa krbtpolicy-mod --maxlife=$((8*60*60)) --maxrenew=$((24*60*60)) Max life: 28800 Max renew: 86400
[root@server ~]# ipa krbtpolicy-mod --maxlife=$((8*60*60)) --maxrenew=$((24*60*60)) Max life: 28800 Max renew: 86400Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,最长生命周期设置为 8 小时(8 * 60 分钟 * 60 秒),最长续订期限设置为一天(24 * 60 分钟 * 60 秒)。
可选:将全局 Kerberos 票据策略重置为默认安装值:
ipa krbtpolicy-reset Max life: 86400 Max renew: 604800
[root@server ~]# ipa krbtpolicy-reset Max life: 86400 Max renew: 604800Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示全局票据策略:
ipa krbtpolicy-show Max life: 28800 Max renew: 86640
[root@server ~]# ipa krbtpolicy-show Max life: 28800 Max renew: 86640Copy to Clipboard Copied! Toggle word wrap Toggle overflow
52.6. 根据身份验证指标配置全局票据策略 复制链接链接已复制到粘贴板!
按照以下流程,为每个身份验证指标调整全局最长票据生命周期和最长可续订期限。这些设置适用于没有定义按用户的票据策略的用户。
使用 ipa krbtpolicy-mod 命令来指定 Kerberos 票据的全局最长生命周期或最大可用期限,具体取决于它们所附加的 身份验证指标。
流程
例如,将全局双因素票据生命周期和续订期限值设置为一周,将全局智能卡票据生命周期和续订期限值设置为两周:
ipa krbtpolicy-mod --otp-maxlife=604800 --otp-maxrenew=604800 --pkinit-maxlife=172800 --pkinit-maxrenew=172800
[root@server ~]# ipa krbtpolicy-mod --otp-maxlife=604800 --otp-maxrenew=604800 --pkinit-maxlife=172800 --pkinit-maxrenew=172800Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示全局票据策略:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,OTP 和 PKINIT 值与全局默认的
Max life和Max renew值不同。
52.7. 为用户配置默认的票据策略 复制链接链接已复制到粘贴板!
您可以定义一个仅适用于单个用户的 Kerberos 票据策略。这些按用户的设置会覆盖所有验证指标的全局票据策略。
使用 ipa krbtpolicy-mod username 命令,并至少指定以下参数之一:
-
--maxlife最长票据生命周期(以秒为单位) -
--maxrenew最长续订期限(以秒为单位)
流程
例如,将 IdM
admin用户的最长票据生命周期设置为两天,将最长续订期限设置为 2 周:ipa krbtpolicy-mod admin --maxlife=172800 --maxrenew=1209600 Max life: 172800 Max renew: 1209600
[root@server ~]# ipa krbtpolicy-mod admin --maxlife=172800 --maxrenew=1209600 Max life: 172800 Max renew: 1209600Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:为用户重置票据策略:
ipa krbtpolicy-reset admin
[root@server ~]# ipa krbtpolicy-reset adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示应用到用户的有效 Kerberos 票据策略:
ipa krbtpolicy-show admin Max life: 172800 Max renew: 1209600
[root@server ~]# ipa krbtpolicy-show admin Max life: 172800 Max renew: 1209600Copy to Clipboard Copied! Toggle word wrap Toggle overflow
52.8. 为用户配置单独的身份验证指标票据策略 复制链接链接已复制到粘贴板!
作为管理员,您可以为每个身份验证指标不同的用户定义 Kerberos 票据策略。例如,您可以将策略配置为允许 IdM admin 用户续订两天的票据(如果是通过 OTP 身份验证获取的票据);或者续订一周的票据(是通过智能卡身份验证获取的票据)。
这些按身份验证的指标设置将覆盖 用户的 默认票据策略、全局的 默认票据策略,以及任何 全局的 身份验证指标票据策略。
使用 ipa krbtpolicy-mod username 命令,为用户的 Kerberos 票据设置自定义的最长生命周期和最长可续订期限值,具体取决于附加给它们的 身份验证指标 。
流程
例如,要允许 IdM
admin用户续订两天的 Kerberos 票据(如果是使用一次性密码身份验证获取的),请设置--otp-maxrenew选项:ipa krbtpolicy-mod admin --otp-maxrenew=$((2*24*60*60)) OTP max renew: 172800
[root@server ~]# ipa krbtpolicy-mod admin --otp-maxrenew=$((2*24*60*60)) OTP max renew: 172800Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:为用户重置票据策略:
ipa krbtpolicy-reset username
[root@server ~]# ipa krbtpolicy-reset usernameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示应用到用户的有效 Kerberos 票据策略:
ipa krbtpolicy-show admin Max life: 28800 Max renew: 86640
[root@server ~]# ipa krbtpolicy-show admin Max life: 28800 Max renew: 86640Copy to Clipboard Copied! Toggle word wrap Toggle overflow
52.9. krbtpolicy-mod 命令的身份验证指标选项 复制链接链接已复制到粘贴板!
使用以下参数为身份验证指标指定值:
| 身份验证指标 | 最长生命周期的参数 | 最长续订期限的参数 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
第 53 章 IdM 中的 Kerberos PKINIT 身份验证 复制链接链接已复制到粘贴板!
Kerberos (PKINIT)中初始身份验证的公钥加密是 Kerberos 的预身份验证机制。身份管理(IdM)服务器包含一个用于 Kerberos PKINIT 身份验证的机制。
53.1. 默认 PKINIT 配置 复制链接链接已复制到粘贴板!
IdM 服务器上的默认 PKINIT 配置取决于证书颁发机构(CA)配置。
| CA 配置 | PKINIT 配置 |
|---|---|
| 没有 CA,没有提供外部 PKINIT 证书 | 本地 PKINIT:IdM 仅将 PKINIT 用于服务器上的内部目的。 |
| 没有 CA,向 IdM 提供外部 PKINIT 证书 | IdM 使用外部 Kerberos 密钥分发中心(KDC)证书和 CA 证书来配置 PKINIT。 |
| 带有集成的 CA | IdM 使用 IdM CA 签名的证书配置 PKINIT。 |
53.2. 显示当前 PKINIT 配置 复制链接链接已复制到粘贴板!
IdM 提供多个命令,您可用来查询域中的 PKINIT 配置。
流程
要确定域中的 PKINIT 状态,请使用
ipa pkinit-status命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令将 PKINIT 配置状态显示为
enabled或disabled:-
enabled: PKINIT 是使用集成 IdM CA 或外部 PKINIT 证书签名的证书配置的。 -
disabled:IdM 仅将 PKINIT 用于 IdM 服务器上的内部目的。
-
要列出支持 IdM 客户端 PKINIT 的活跃的 Kerberos 密钥分发中心(KDC)的 IdM 服务器,请在任何服务器上使用
ipa config-show命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
53.3. 在 IdM 中配置 PKINIT 复制链接链接已复制到粘贴板!
如果您的 IdM 服务器在 PKINIT 被禁用的情况下运行,请使用这些步骤启用它。例如,如果您传递了 ipa-server-install 或 ipa-replica-install 工具和 --no-pkinit 选项,则服务器在禁用了 PKINIT 的情况下运行。
先决条件
- 确保安装了证书颁发机构(CA)的所有 IdM 服务器都在同一域级别上运行。
流程
检查服务器上是否启用了 PKINIT:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 PKINIT 被禁用了,您将看到以下输出:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果省略了
--server <server_fqdn>参数,您也可以使用命令来查找所有启用了 PKINIT 的服务器。如果您使用没有 CA 的 IdM:
在 IdM 服务器上,安装签名了 Kerberos 密钥分发中心(KDC)证书的 CA 证书:
ipa-cacert-manage install -t CT,C,C ca.pem
# ipa-cacert-manage install -t CT,C,C ca.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要更新所有 IPA 主机,请在所有副本和客户端上重复
ipa-certupdate命令:ipa-certupdate
# ipa-certupdateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ipa-cacert-manage list命令检查 CA 证书是否已添加。例如:ipa-cacert-manage list CN=CA,O=Example Organization The ipa-cacert-manage command was successful
# ipa-cacert-manage list CN=CA,O=Example Organization The ipa-cacert-manage command was successfulCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ipa-server-certinstall工具安装外部 KDC 证书。KDC 证书必须满足以下条件:-
它使用通用名称
CN=fully_qualified_domain_name,certificate_subject_base发布。 -
它包括 Kerberos 主体
krbtgt/REALM_NAME@REALM_NAME。 它包含 KDC 身份验证的对象标识符(OID):
1.3.6.1.5.2.3.5。ipa-server-certinstall --kdc kdc.pem kdc.key systemctl restart krb5kdc.service
# ipa-server-certinstall --kdc kdc.pem kdc.key # systemctl restart krb5kdc.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
它使用通用名称
查看您的 PKINIT 状态:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您带有 CA 证书的 IdM ,请启用 PKINIT,如下所示:
ipa-pkinit-manage enable Configuring Kerberos KDC (krb5kdc) [1/1]: installing X509 Certificate for PKINIT Done configuring Kerberos KDC (krb5kdc). The ipa-pkinit-manage command was successful
# ipa-pkinit-manage enable Configuring Kerberos KDC (krb5kdc) [1/1]: installing X509 Certificate for PKINIT Done configuring Kerberos KDC (krb5kdc). The ipa-pkinit-manage command was successfulCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您使用 IdM CA,则命令会从 CA 请求 PKINIT KDC 证书。
第 54 章 维护 IdM Kerberos keytab 文件 复制链接链接已复制到粘贴板!
了解更多有关 Kerberos keytab 文件是什么以及身份管理(IdM)如何使用它们来允许服务使用 Kerberos 安全地进行身份验证。
您可以使用这些信息来了解您应该保护这些敏感文件的原因,并对 IdM 服务之间的通信问题进行故障排除。
54.1. Identity Management 如何使用 Kerberos keytab 文件 复制链接链接已复制到粘贴板!
Kerberos keytab 是包含 Kerberos 主体及其对应的加密密钥的文件。主机、服务、用户和脚本可以使用 keytabs 来安全地向 Kerberos 密钥分发中心(KDC)进行身份验证,而无需人为干预。
IdM 服务器中的每个 IdM 服务都有一个存储在 Kerberos 数据库中的唯一 Kerberos 主体。例如,如果 IdM 服务器 east.idm.example.com 和 west.idm.example.com 提供 DNS 服务,IdM 会创建 2 个唯一的 DNS Kerberos 主体来识别这些服务,它遵循命名规则 < service>/host.domain.com@REALM.COM:
-
DNS/east.idm.example.com@IDM.EXAMPLE.COM -
DNS/west.idm.example.com@IDM.EXAMPLE.COM
IdM 在服务器上为这些服务的每一个创建一个 keytab,以存储 Kerberos 密钥的本地副本,以及它们的密钥版本号(KVNO)。例如,默认 keytab 文件 /etc/krb5.keytab 存储 主机 主体,它代表了在 Kerberos 域中的机器,用于登录身份验证。KDC 为它支持的不同加密算法生成加密密钥,如 aes256-cts-hmac-sha1-96 和 aes128-cts-hmac-sha1-96。
您可以使用 klist 命令显示 keytab 文件的内容:
54.2. 验证 Kerberos keytab 文件是否与 IdM 数据库同步 复制链接链接已复制到粘贴板!
当您更改 Kerberos 密码时,IdM 会自动生成一个新的对应的 Kerberos 密钥,并递增其密钥版本号 (KVNO)。如果没有使用新密钥和 KVNO 更新 Kerberos keytab,则任何依赖于该 keytab 来检索有效密钥的服务可能无法对 Kerberos 密钥分发中心 (KDC) 进行身份验证。
如果您的其中一个 IdM 服务无法与另一个服务通信,请使用以下步骤验证您的 Kerberos keytab 文件是否与 IdM 数据库中存储的密钥同步。如果它们没有同步,请使用更新的密钥和 KVNO 检索 Kerberos keytab。这个示例比较并检索 IdM 服务器的更新 DNS 主体。
先决条件
- 您必须作为 IdM admin 帐户进行身份验证来检索 keytab 文件
-
您必须以
root帐户身份验证来修改其他用户拥有的 keytab 文件
流程
显示您要验证的 keytab 中的主体的 KVNO。在以下示例中,
/etc/named.keytab文件具有 KVNO 为 2 的DNS/server1.idm.example.com@EXAMPLE.COM主体的密钥。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示 IdM 数据库中存储的主体的 KVNO。在本例中,IdM 数据库中密钥的 KVNO 与 keytab 中的 KVNO 不匹配。
kvno DNS/server1.idm.example.com@EXAMPLE.COM DNS/server1.idm.example.com@EXAMPLE.COM: kvno = 3
[root@server1 ~]# kvno DNS/server1.idm.example.com@EXAMPLE.COM DNS/server1.idm.example.com@EXAMPLE.COM: kvno = 3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作为 IdM admin 帐户进行身份验证。
kinit admin Password for admin@IDM.EXAMPLE.COM:
[root@server1 ~]# kinit admin Password for admin@IDM.EXAMPLE.COM:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为主体检索更新的 Kerberos 密钥,并将其存储在其 keytab 中。以
root用户身份执行此步骤,以便您可以修改/etc/named.keytab文件,该文件归named用户所有。ipa-getkeytab -s server1.idm.example.com -p DNS/server1.idm.example.com -k /etc/named.keytab
[root@server1 ~]# ipa-getkeytab -s server1.idm.example.com -p DNS/server1.idm.example.com -k /etc/named.keytabCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在 keytab 中显示主体的更新 KVNO。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示 IdM 数据库中存储的主体的 KVNO,并确保它与 keytab 中的 KVNO 匹配。
kvno DNS/server1.idm.example.com@EXAMPLE.COM DNS/server1.idm.example.com@EXAMPLE.COM: kvno = 4
[root@server1 ~]# kvno DNS/server1.idm.example.com@EXAMPLE.COM DNS/server1.idm.example.com@EXAMPLE.COM: kvno = 4Copy to Clipboard Copied! Toggle word wrap Toggle overflow
54.3. IdM Kerberos keytab 文件内容列表 复制链接链接已复制到粘贴板!
下表显示了 IdM Kerberos keytab 文件的位置、内容和目的。
| keytab 位置 | 内容 | 目的 |
|---|---|---|
|
|
|
在登录时验证用户凭证,供 NFS 使用(如果没有 |
|
|
| 向 IdM 数据库验证用户,在 IdM 副本之间安全地复制数据库内容 |
|
|
| 对 Apache 服务器进行身份验证 |
|
|
| 安全地更新 DNS 记录 |
|
|
| 使 OpenDNSSEC 与 LDAP 同步 |
|
|
| 与证书颁发机构 (CA) 通信。 |
|
|
| 与 Samba 服务通信 |
|
|
Active Directory (AD) 域控制器 (DC) 主体,格式为 | 通过 IdM-AD Trust 与 AD DC 进行通讯 |
54.4. 查看 IdM 主密钥的加密类型 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以查看 IdM 主密钥的加密类型,这是 IdM Kerberos 分发中心(KDC)用来存储所有其他主体的密钥。了解加密类型可帮助您确定部署与 FIPS 标准的兼容性。
从 RHEL 8.7 开始,加密类型是 aes256-cts-hmac-sha384-192。这个加密类型与旨在遵守 FIPS 140-3 的默认 RHEL 9 FIPS 加密策略兼容。
之前 RHEL 版本上使用的加密类型与遵循 FIPS 140-3 标准的 RHEL 9 系统不兼容。要使 RHEL 9 系统与 RHEL 8 FIPS 140-2 部署兼容,请参阅 AD 域用户无法登录到与 FIPS 兼容的环境 KCS 解决方案。
先决条件
-
您有访问 IdM 部署中任何 RHEL 8 副本的
root权限。
流程
在副本中,查看命令行中的加密类型:
kadmin.local getprinc K/M | grep -E '^Key:' Key: vno 1, aes256-cts-hmac-sha1-96
# kadmin.local getprinc K/M | grep -E '^Key:' Key: vno 1, aes256-cts-hmac-sha1-96Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出中的
aes256-cts-hmac-sha1-96密钥表示 IdM 部署已安装在运行 RHEL 8.6 或更早版本的服务器上。输出中存在一个aes256-cts-hmac-sha384-192密钥,表示 IdM 部署已安装在运行 RHEL 8.7 或更高版本的服务器上。
第 55 章 在 IdM 中使用 KDC 代理 复制链接链接已复制到粘贴板!
有些管理员可能会选择使默认的 Kerberos 端口在部署中无法访问。要允许用户、主机和服务获取 Kerberos 凭据,您可以使用 HTTPS 服务作为代理,其通过 HTTPS 端口 443 与 Kerberos 进行通信的。
在身份管理(IdM)中,Kerberos 密钥分发中心代理 (KKDCP)提供此功能。
在 IdM 服务器上,KKDCP 默认启用,并通过 https://server.idm.example.com/KdcProxy 提供。在 IdM 客户端上,您必须更改其 Kerberos 配置来访问 KKDCP。
55.1. 配置 IdM 客户端以使用 KKDCP 复制链接链接已复制到粘贴板!
作为身份管理(IdM)系统管理员,您可以将 IdM 客户端配置为使用 IdM 服务器上的 Kerberos 密钥分发中心代理(KKDCP)。如果默认的 Kerberos 端口在 IdM 服务器上无法访问,并且 HTTPS 端口 443 是访问 Kerberos 服务的唯一方式,那么这很有用。
先决条件
-
您有访问 IdM 客户端的
root权限。
流程
-
打开
/etc/krb5.conf文件进行编辑。 在
[realms]部分中,对kdc、admin_server和kpasswd_server选项输入 KKDCP 的 URL:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要实现冗余,您可以多次添加参数
kdc、admin_server和kpasswd_server来指示不同的 KKDCP 服务器。重启
sssd服务以使更改生效:systemctl restart sssd
~]# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
55.2. 验证 IdM 服务器上是否启用了 KKDCP 复制链接链接已复制到粘贴板!
在身份管理(IdM)服务器上,如果属性和值对 ipaConfigString=kdcProxyEnabled 在目录中存在,则每次 Apache Web 服务器启动时,Kerberos 密钥分发中心代理(KKDCP)会自动启用。在这种情况下,将创建符号链接 /etc/httpd/conf.d/ipa-kdc-proxy.conf。
即使作为非特权用户,您也可以验证 IdM 服务器上是否启用了 KKDCP。
流程
- 检查符号链接是否存在:
ls -l /etc/httpd/conf.d/ipa-kdc-proxy.conf lrwxrwxrwx. 1 root root 36 Jun 21 2020 /etc/httpd/conf.d/ipa-kdc-proxy.conf -> /etc/ipa/kdcproxy/ipa-kdc-proxy.conf
$ ls -l /etc/httpd/conf.d/ipa-kdc-proxy.conf
lrwxrwxrwx. 1 root root 36 Jun 21 2020 /etc/httpd/conf.d/ipa-kdc-proxy.conf -> /etc/ipa/kdcproxy/ipa-kdc-proxy.conf
输出确认启用了 KKDCP。
55.3. 在 IdM 服务器上禁用 KKDCP 复制链接链接已复制到粘贴板!
作为身份管理(IdM)系统管理员,您可以在 IdM 服务器上禁用 Kerberos 密钥分发中心代理(KKDCP)。
先决条件
-
您有访问 IdM 服务器的
root权限。
流程
从目录中删除
ipaConfigString=kdcProxyEnabled属性和值对:ipa-ldap-updater /usr/share/ipa/kdcproxy-disable.uldif Update complete The ipa-ldap-updater command was successful
# ipa-ldap-updater /usr/share/ipa/kdcproxy-disable.uldif Update complete The ipa-ldap-updater command was successfulCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
httpd服务:systemctl restart httpd.service
# systemctl restart httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
KKDCP 现在在当前的 IdM 服务器上被禁用。
验证
验证符号链接不存在:
ls -l /etc/httpd/conf.d/ipa-kdc-proxy.conf ls: cannot access '/etc/httpd/conf.d/ipa-kdc-proxy.conf': No such file or directory
$ ls -l /etc/httpd/conf.d/ipa-kdc-proxy.conf ls: cannot access '/etc/httpd/conf.d/ipa-kdc-proxy.conf': No such file or directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow
55.4. 在 IdM 服务器上重新启用 KKDCP 复制链接链接已复制到粘贴板!
在 IdM 服务器上,默认启用 Kerberos 密钥分发中心代理(KKDCP),并可通过 https://server.idm.example.com/KdcProxy 获取。
如果服务器上已禁用了 KKDCP,您可以重新启用它。
先决条件
-
您有访问 IdM 服务器的
root权限。
流程
将
ipaConfigString=kdcProxyEnabled属性和值对添加到目录中:ipa-ldap-updater /usr/share/ipa/kdcproxy-enable.uldif Update complete The ipa-ldap-updater command was successful
# ipa-ldap-updater /usr/share/ipa/kdcproxy-enable.uldif Update complete The ipa-ldap-updater command was successfulCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
httpd服务:systemctl restart httpd.service
# systemctl restart httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
KKDCP 现在在当前的 IdM 服务器上被启用。
验证
验证符号链接是否存在:
ls -l /etc/httpd/conf.d/ipa-kdc-proxy.conf lrwxrwxrwx. 1 root root 36 Jun 21 2020 /etc/httpd/conf.d/ipa-kdc-proxy.conf -> /etc/ipa/kdcproxy/ipa-kdc-proxy.conf
$ ls -l /etc/httpd/conf.d/ipa-kdc-proxy.conf lrwxrwxrwx. 1 root root 36 Jun 21 2020 /etc/httpd/conf.d/ipa-kdc-proxy.conf -> /etc/ipa/kdcproxy/ipa-kdc-proxy.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow
55.5. 配置 KKDCP 服务器 I 复制链接链接已复制到粘贴板!
使用以下配置,您可以启用 TCP 作为 IdM KKDCP 和 活动目录(AD)域之间的传输协议,其中会使用多个 Kerberos 服务器。
先决条件
-
您有
root访问权限。
流程
将
/etc/ipa/kdcproxy/kdcproxy.conf文件的[global]部分中的use_dns参数设为 false。[global] use_dns = false
[global] use_dns = falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将代理域信息放在
/etc/ipa/kdcproxy/kdcproxy.conf文件中。例如,对于具有代理的 [AD.EXAMPLE.COM] 域,请按如下所示列出域配置参数:[AD.EXAMPLE.COM] kerberos = kerberos+tcp://1.2.3.4:88 kerberos+tcp://5.6.7.8:88 kpasswd = kpasswd+tcp://1.2.3.4:464 kpasswd+tcp://5.6.7.8:464
[AD.EXAMPLE.COM] kerberos = kerberos+tcp://1.2.3.4:88 kerberos+tcp://5.6.7.8:88 kpasswd = kpasswd+tcp://1.2.3.4:464 kpasswd+tcp://5.6.7.8:464Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要域配置参数必须列出由空格分隔的多个服务器,而不是像
/etc/krb5.conf和kdc.conf那样,其中某些选项可以被多次指定。重启身份管理(IdM)服务:
ipactl restart
# ipactl restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
55.6. 配置 KKDCP 服务器 II 复制链接链接已复制到粘贴板!
以下服务器配置依赖于 DNS 服务记录来查找要与之通信的活动目录(AD)服务器。
先决条件
-
您有
root访问权限。
流程
在
/etc/ipa/kdcproxy/kdcproxy.conf文件中的[global]部分,将use_dns参数设为 true。[global] configs = mit use_dns = true
[global] configs = mit use_dns = trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow configs参数允许您加载其他配置模块。在这种情况下,配置是从 MITlibkrb5库中读取的。可选:如果您不想使用 DNS 服务记录,请将明确的 AD 服务器添加到
/etc/krb5.conf文件的[realms]部分中。如果带有代理的域是 AD.EXAMPLE.COM,请添加:[realms] AD.EXAMPLE.COM = { kdc = ad-server.ad.example.com kpasswd_server = ad-server.ad.example.com }[realms] AD.EXAMPLE.COM = { kdc = ad-server.ad.example.com kpasswd_server = ad-server.ad.example.com }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启身份管理(IdM)服务:
ipactl restart
# ipactl restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 56 章 为 IdM 客户端上的 IdM 用户授予 sudo 访问权限 复制链接链接已复制到粘贴板!
了解有关授予 sudo 访问身份管理中用户的更多信息。
56.1. IdM 客户端上的 sudo 访问权限 复制链接链接已复制到粘贴板!
系统管理员可以授予 sudo 访问权限,以允许非 root 用户执行通常为 root 用户保留的管理命令。因此,当用户需要执行通常为 root 用户保留的管理命令时,他们会在此命令前面使用 sudo。输入密码后,将像 root 用户一样执行 命令。要将 sudo 命令作为另一个用户或组(如数据库服务帐户)执行,您可以为 sudo 规则配置 RunAs 别名。
如果 Red Hat Enterprise Linux (RHEL) 8 主机注册为 Identity Management (IdM) 客户端,您可以指定 sudo 规则来定义哪些 IdM 用户可以在主机上执行哪些命令:
-
本地的
/etc/sudoers文件中 - 集中在 IdM 中
您可以使用命令行(CLI)和 IdM Web UI 为 IdM 客户端创建一个 集中式 sudo 规则。
在 RHEL 8.4 及更高版本中,您还可以使用通用安全服务应用程序编程接口 (GSSAPI) 为 sudo 配置免密码身份验证,这是基于 UNIX 的操作系统访问和验证 Kerberos 服务的本地方式。您可以使用 pam_sss_gss.so 可插拔验证模块 (PAM) 通过 SSSD 服务调用 GSSAPI 身份验证,允许用户通过有效的 Kerberos 票据向 sudo 命令进行身份验证。
56.2. 使用 CLI 向 IdM 客户端上的 IdM 用户授予 sudo 访问权限 复制链接链接已复制到粘贴板!
在 Identity Management (IdM) 中,您可以将特定命令的 sudo 访问权限授予特定 IdM 主机上的 IdM 用户帐户。首先,添加 sudo 命令,然后为一个或多个命令创建 sudo 规则。
例如,完成这个过程以创建 idm_user_reboot sudo 规则,为 idm_user 帐户授予在 idmclient 机器上运行 /usr/sbin/reboot 命令的权限。
先决条件
- 以 IdM 管理员身份登录。
- 您已在 IdM 中创建 了 idm_user 的用户帐户,并通过为用户创建密码来解锁帐户。有关使用 CLI 添加新 IdM 用户的详情,请参阅使用命令行添加用户。
-
idmclient 主机上没有本地的 idm_user。idm_user 用户未列在本地
/etc/passwd文件中。
步骤
获取 Kerberos 票据作为 IdM
admin。kinit admin
[root@idmclient ~]# kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
sudo命令的 IdM 数据库中添加/usr/sbin/reboot命令:ipa sudocmd-add /usr/sbin/reboot ------------------------------------- Added Sudo Command "/usr/sbin/reboot" ------------------------------------- Sudo Command: /usr/sbin/reboot
[root@idmclient ~]# ipa sudocmd-add /usr/sbin/reboot ------------------------------------- Added Sudo Command "/usr/sbin/reboot" ------------------------------------- Sudo Command: /usr/sbin/rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为 idm_user_reboot 的
sudo规则:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 idm_user_reboot 规则中添加
/usr/sbin/reboot命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 idm_user_reboot 规则应用到 IdM idmclient 主机:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 idm_user_reboot 规则中添加 idm_user 帐户:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:定义 idm_user_reboot 规则的有效性:
要定义
sudo规则开始有效的时间,请使用带有--setattr sudonotbefore=DATE选项的ipa sudorule-mod sudo_rule_name命令。DATE 值必须遵循 yyyymmddHHMMSSZ 格式,以秒为单位。例如,要将 idm_user_reboot 规则的有效期的开始时间设为 2025 年 12 月 31 日 12:34:00,请输入:ipa sudorule-mod idm_user_reboot --setattr sudonotbefore=20251231123400Z
[root@idmclient ~]# ipa sudorule-mod idm_user_reboot --setattr sudonotbefore=20251231123400ZCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要定义 sudo 规则停止有效期的时间,请使用
--setattr sudonotafter=DATE选项。例如:要将 idm_user_reboot 规则有效期的截止时间设为 2026 年 12 月 31 日 12:34:00,请输入:ipa sudorule-mod idm_user_reboot --setattr sudonotafter=20261231123400Z
[root@idmclient ~]# ipa sudorule-mod idm_user_reboot --setattr sudonotafter=20261231123400ZCopy to Clipboard Copied! Toggle word wrap Toggle overflow
将更改从服务器传播到客户端可能需要几分钟时间。
验证
- 以 idm_user 帐户身份登录 idmclient 主机。
显示允许 idm_user 帐户执行的
sudo规则。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
sudo重新启动计算机。在提示时输入 idm_user 的密码:sudo /usr/sbin/reboot [sudo] password for idm_user:
[idm_user@idmclient ~]$ sudo /usr/sbin/reboot [sudo] password for idm_user:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
56.3. 使用 CLI 在 IdM 客户端上授予 sudo 访问 AD 用户的权限 复制链接链接已复制到粘贴板!
身份管理(IdM)系统管理员可以使用 IdM 用户组来设置访问权限、基于主机的访问控制、sudo 规则,以及对 IdM 用户的其他控制。IdM 用户组授予并限制对 IdM 域资源的访问权限。
您可以将活动目录(AD) 用户 和 AD 组 添加到 IdM 用户组中。要做到这一点:
- 将 AD 用户或组添加到 非 POSIX 外部 IdM 组。
- 将非 POSIX 外部 IdM 组添加到 IdM POSIX 组中。
然后,您可以通过管理 POSIX 组的权限来管理 AD 用户的权限。例如,您可以为特定 IdM 主机上的 IdM POSIX 用户组授予特定命令的 sudo 访问权限。
也可以将 AD 用户组作为成员添加到 IdM 外部组中。通过将用户和组管理放在一个 AD 域中,可以更轻松地为 Windows 用户定义策略。
不要 对 IdM 中的 SUDO 规则使用 AD 用户的 ID 覆盖。AD 用户的 ID 覆盖只代表 AD 用户的 POSIX 属性,而不是 AD 用户本身。
您可以将 ID 覆盖添加为组成员。但是,您只能使用此功能管理 IdM API 中的 IdM 资源。将 ID 覆盖添加为组群成员没有扩展到 POSIX 环境,因此您无法将其用于 sudo 或基于主机的访问控制(HBAC)规则中的成员。
按照以下流程创建 ad_users_reboot sudo 规则,授予 administrator@ad-domain.com AD 用户在 idmclient IdM 主机上运行 /usr/sbin/reboot 命令的权限,这通常是为 root 用户保留的。administrator@ad-domain.com 是 ad_users_external 非 POSIX 组的成员,即 ad_users POSIX 组的成员。
先决条件
-
已获得了 IdM
adminKerberos票据授予票据(TGT)。 - IdM 域和 ad-domain.com AD 域间的跨林信任已存在。
-
idmclient 主机上没有本地 administrator 账户:administrator 用户没有列在本地
/etc/passwd文件中。
流程
使用 administrator@ad-domain 成员创建包含 ad_users_external 组的 ad_users 组:
- 可选:在 AD 域中创建或选择一个对应组,用来管理 IdM 域中的 AD 用户。您可以使用多个 AD 组,并将其添加到 IdM 端的不同组中。
创建 ad_users_external 组,并通过添加
--external选项来表示它包含来自 IdM 域以外的成员:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意确保此处指定的外部组是一个具有
global或universal组范围的AD 安全组,如 活动目录安全组 文档中所定义的。例如,无法使用 Domain users 或 Domain admins AD 安全组,因为其组范围是domain local。创建 ad_users 组:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 administrator@ad-domain.com AD 用户作为外部成员添加到 ad_users_external 中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AD 用户必须被完全限定名称识别,如
DOMAIN\user_name或user_name@DOMAIN。然后,AD 身份被映射到用户的 AD SID。同样适用于添加 AD 组。将 ad_users_external 作为成员添加到 ad_users:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
为 ad_users 的成员授予权限,以在 idmclient 主机上运行
/usr/sbin/reboot:在
sudo命令的 IdM 数据库中添加/usr/sbin/reboot命令:ipa sudocmd-add /usr/sbin/reboot ------------------------------------- Added Sudo Command "/usr/sbin/reboot" ------------------------------------- Sudo Command: /usr/sbin/reboot
[root@idmclient ~]# ipa sudocmd-add /usr/sbin/reboot ------------------------------------- Added Sudo Command "/usr/sbin/reboot" ------------------------------------- Sudo Command: /usr/sbin/rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个名为 ad_users_reboot 的
sudo规则:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 向 ad_users_reboot 规则中添加
/usr/sbin/reboot命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 ad_users_reboot 规则应用到 IdM idmclient 主机:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
ad_users组添加到 ad_users_reboot 规则中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将更改从服务器传播到客户端可能需要几分钟时间。
验证
以 administrator@ad-domain.com 身份登录到 idmclient 主机,它是
ad_users组的间接成员:ssh administrator@ad-domain.com@ipaclient Password:
$ ssh administrator@ad-domain.com@ipaclient Password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:显示允许
administrator@ad-domain.com执行的sudo命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
sudo重新启动计算机。提示时输入administrator@ad-domain.com的密码:[administrator@ad-domain.com@idmclient ~]$ sudo /usr/sbin/reboot [sudo] password for administrator@ad-domain.com:
[administrator@ad-domain.com@idmclient ~]$ sudo /usr/sbin/reboot [sudo] password for administrator@ad-domain.com:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
56.4. 使用 IdM Web UI 向 IdM 客户端上的 IdM 用户授予 sudo 访问权限 复制链接链接已复制到粘贴板!
在 Identity Management (IdM) 中,您可以将特定命令的 sudo 访问权限授予特定 IdM 主机上的 IdM 用户帐户。首先,添加 sudo 命令,然后为一个或多个命令创建 sudo 规则。
完成此步骤以创建 idm_user_reboot sudo 规则,为 idm_user 帐户授予在 idmclient 计算机上运行 /usr/sbin/reboot 命令的权限。
先决条件
- 以 IdM 管理员身份登录。
-
您已在 IdM 中创建
了 idm_user的用户帐户,并通过为用户创建密码来解锁帐户。有关使用命令行添加新 IdM 用户的详情,请参阅 使用命令行添加用户。 -
idmclient主机上没有本地的idm_user。idm_user用户未列在本地/etc/passwd文件中。
步骤
在
sudo命令的 IdM 数据库中添加/usr/sbin/reboot命令:- 导航到 Policy>Sudo>Sudo Commands。
- 单击右上角的 Add,以打开 Add sudo 命令对话框。
-
输入您希望用户能够使用
sudo执行的命令:/usr/sbin/reboot。 - 点击 Add。
使用新的
sudo命令条目创建一个 sudo 规则来允许 idm_user 重启 idmclient 机器:- 导航到 Policy>Sudo>Sudo rules。
- 单击右上角的 Add,以打开 Add sudo 规则对话框。
-
输入
sudo规则的名称: idm_user_reboot。 - 点 Add and Edit。
指定用户:
- 在 Who 部分中,选中指定的用户和组单选按钮。
- 在 Users 部分中,点 Add 打开 Add users into sudo rule "idm_user_reboot" 对话框。
- 在 Available 列中,选中 idm_user 复选框,然后单击箭头将它移到 Prospective 列中。
- 点击 Add。
指定主机:
- 在 Access this host 部分中,选中指定的 Hosts and Groups 单选按钮。
- 在 Hosts 部分中,点 Add 打开 Add hosts into sudo rule "idm_user_reboot" 对话框。
- 在 Available 列中,选中 idmclient.idm.example.com 复选框,然后点击箭头将它移到 Prospective 列中。
- 点击 Add。
指定命令:
- 在 Run Commands 部分中,选中指定的命令和组 单选按钮。
- 在 Sudo Allow Commands 部分中,单击 Add 以打开 Add allow sudo commands into sudo rule "idm_user_reboot" 对话框。
-
在 Available 列中,选中
/usr/sbin/reboot复选框,然后单击箭头将它移到 Prospective 列中。 - 点 Add 返回到 idm_sudo_reboot 页。
- 单击左上角的 Save。
新规则默认为启用。
将更改从服务器传播到客户端可能需要几分钟时间。
验证
-
以
idm_user用户身份登录到idmclient。 使用
sudo重新启动计算机。在提示时输入idm_user的密码:sudo /usr/sbin/reboot [sudo] password for idm_user:
$ sudo /usr/sbin/reboot [sudo] password for idm_user:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果正确配置了 sudo 规则,机器将重启。
56.5. 在 CLI 上创建 sudo 规则,以作为 IdM 客户端上的服务帐户运行命令 复制链接链接已复制到粘贴板!
在 IdM 中,您可以使用 RunAs alias 配置 sudo 规则,以便以另一个用户或组身份运行 sudo 命令。例如,您可能有一个托管数据库应用的 IdM 客户端,您需要以与该应用对应的本地服务帐户运行命令。
使用此示例在命令行上创建名为 run_third-party-app_report 的 sudo 规则,以允许 idm_user 帐户以 idmclient 主机上 thirdpartyapp 服务帐户的身份运行/opt/third-party-app/bin/report 命令。
先决条件
- 以 IdM 管理员身份登录。
-
您已在 IdM 中创建
了 idm_user的用户帐户,并通过为用户创建密码来解锁帐户。有关使用 CLI 添加新 IdM 用户的详情,请参阅使用命令行添加用户。 -
idmclient主机上没有本地的idm_user。idm_user用户未列在本地/etc/passwd文件中。 -
您有一个名为
third-party-app的自定义应用程序安装在idmclient主机上。 -
third-party-app应用程序的report命令安装在/opt/third-party-app/bin/report目录中。 -
您已创建了一个名为
thirdpartyapp的本地服务帐户,来为third-party-app应用程序执行命令。
流程
获取 Kerberos 票据作为 IdM
admin。kinit admin
[root@idmclient ~]# kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
/opt/third-party-app/bin/report命令添加到sudo命令的 IdM 数据库:ipa sudocmd-add /opt/third-party-app/bin/report ---------------------------------------------------- Added Sudo Command "/opt/third-party-app/bin/report" ---------------------------------------------------- Sudo Command: /opt/third-party-app/bin/report
[root@idmclient ~]# ipa sudocmd-add /opt/third-party-app/bin/report ---------------------------------------------------- Added Sudo Command "/opt/third-party-app/bin/report" ---------------------------------------------------- Sudo Command: /opt/third-party-app/bin/reportCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个名为
run_third-party-app_report的sudo规则:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
--users=<user>选项来为sudorule-add-runasuser命令指定 RunAs 用户:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 用户(或使用
--groups=*选项指定 的组)可以是 IdM 的外部用户,如本地服务帐户或活动目录用户。不要为组名称添加%前缀。将
/opt/third-party-app/bin/report命令添加到run_third-party-app_report规则中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
run_third- party-app_report规则应用到 IdMidmclient主机:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
idm_user帐户添加到run_third- party-app_report规则中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将更改从服务器传播到客户端可能需要几分钟时间。
验证
-
以
idm_user帐户身份登录idmclient主机。 测试新的 sudo 规则:
显示允许
idm_user帐户执行的sudo规则。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作为
thirdpartyapp服务帐户,运行report命令。sudo -u thirdpartyapp /opt/third-party-app/bin/report [sudo] password for idm_user@idm.example.com: Executing report... Report successful.
[idm_user@idmclient ~]$ sudo -u thirdpartyapp /opt/third-party-app/bin/report [sudo] password for idm_user@idm.example.com: Executing report... Report successful.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在 IdM 中,您可以使用 RunAs alias 配置 sudo 规则,以便以另一个用户或组身份运行 sudo 命令。例如,您可能有一个托管数据库应用的 IdM 客户端,您需要以与该应用对应的本地服务帐户运行命令。
使用此示例在 IdM Web UI 中创建一个名为 run_third-party-app_report 的 sudo 规则,以允许 idm_user 帐户以 idmclient 主机上 thirdpartyapp 服务账号的身份运行 /opt/third-party-app/bin/report 命令。
先决条件
- 以 IdM 管理员身份登录。
-
您已在 IdM 中创建
了 idm_user的用户帐户,并通过为用户创建密码来解锁帐户。有关使用 CLI 添加新 IdM 用户的详情,请参阅使用命令行添加用户。 -
idmclient主机上没有本地的idm_user。idm_user用户未列在本地/etc/passwd文件中。 -
您有一个名为
third-party-app的自定义应用程序安装在idmclient主机上。 -
third-party-app应用程序的report命令安装在/opt/third-party-app/bin/report目录中。 -
您已创建了一个名为
thirdpartyapp的本地服务帐户,来为third-party-app应用程序执行命令。
流程
将
/opt/third-party-app/bin/report命令添加到sudo命令的 IdM 数据库:- 导航到 Policy>Sudo>Sudo Commands。
- 单击右上角的 Add,以打开 Add sudo 命令对话框。
-
输入命令:
/opt/third-party-app/bin/report。 - 点击 Add。
使用新的
sudo命令条目来创建新的sudo规则:- 导航到 Policy → Sudo → Sudo rules。
- 单击右上角的 Add,以打开 Add sudo 规则对话框。
-
输入
sudo规则的名称:run_third-party-app_report。 - 点 Add and Edit。
指定用户:
- 在 Who 部分中,选中指定的用户和组单选按钮。
- 在 User 部分中,单击 Add 以打开 Add users into sudo rule "run_third-party-app_report" 对话框。
- 在 Available 列中,选中 idm_user 复选框,并将它移到 Prospective 列中。
- 点击 Add。
指定主机:
- 在 Access this host 部分中,选中指定的 Hosts and Groups 单选按钮。
- 在 Hosts 部分中,单击 Add 以打开 Add hosts into sudo rule "run_third-party-app_report" 对话框。
- 在 Available 列中,选中 idmclient.idm.example.com 复选框,并将其移到 Prospective 列中。
- 点击 Add。
指定命令:
- 在 Run Commands 部分中,选中指定的命令和组 单选按钮。
- 在 Sudo Allow Commands 部分中,单击 Add 以打开 Add allow sudo commands into sudo rule "run_third-party-app_report" 对话框。
-
在 Available 列中,选中
/opt/third-party-app/bin/report复选框,并将它移到 Prospective 列。 - 单击 Add 以返回到 run_third-party-app_report 页面。
指定 RunAs 用户:
- 在 As Whom 部分中,选中 指定的用户和组 单选按钮。
- 在 RunAs Users 部分中,单击 Add 以打开 Add RunAs users into sudo rule "run_third-party-app_report" 对话框。
-
在 External 框中输入
thirdpartyapp服务帐户,并将它移到 Prospective 列中。 - 单击 Add 以返回到 run_third-party-app_report 页面。
- 单击左上角的 Save。
新规则默认为启用。
将更改从服务器传播到客户端可能需要几分钟时间。
验证
-
以
idm_user帐户身份登录idmclient主机。 测试新的 sudo 规则:
显示允许
idm_user帐户执行的sudo规则。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作为
thirdpartyapp服务帐户,运行report命令。sudo -u thirdpartyapp /opt/third-party-app/bin/report [sudo] password for idm_user@idm.example.com: Executing report... Report successful.
[idm_user@idmclient ~]$ sudo -u thirdpartyapp /opt/third-party-app/bin/report [sudo] password for idm_user@idm.example.com: Executing report... Report successful.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
56.7. 在 IdM 客户端上为 sudo 启用 GSSAPI 身份验证 复制链接链接已复制到粘贴板!
通过 pam_sss_gss.so PAM 模块,在 IdM 客户端上为 sudo 和 sudo -i 命令启用通用安全服务应用程序接口(GSSAPI)身份验证。使用这个配置,IdM 用户可以使用它们的 Kerberos 票据对 sudo 命令进行身份验证。
先决条件
-
您已为应用于 IdM 主机的 IdM 用户创建了
sudo规则。在本例中,您已创建了idm_user_rebootsudo规则,为idm_user帐户授予在idmclient主机上运行/usr/sbin/reboot命令的权限。 -
idmclient主机正在运行 RHEL 8.4 或更高版本。 -
您需要
root权限来修改/etc/sssd/sssd.conf文件和/etc/pam.d/目录中的 PAM 文件。
流程
-
打开
/etc/sssd/sssd.conf配置文件: 在
[domain/<domain_name> ]部分中添加以下条目。[domain/<domain_name>] pam_gssapi_services = sudo, sudo-i
[domain/<domain_name>] pam_gssapi_services = sudo, sudo-iCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存并关闭
/etc/sssd/sssd.conf文件。 重启 SSSD 服务以载入配置更改。
systemctl restart sssd
[root@idmclient ~]# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 RHEL 8.8 或更高版本中:
可选:确定是否选择了
sssdauthselect配置集:authselect current Profile ID: sssd
# authselect current Profile ID: sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果选择了
sssdauthselect配置文件,请启用 GSSAPI 身份验证:authselect enable-feature with-gssapi
# authselect enable-feature with-gssapiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有选择
sssdauthselect配置文件,请选择它并启用 GSSAPI 身份验证:authselect select sssd with-gssapi
# authselect select sssd with-gssapiCopy to Clipboard Copied! Toggle word wrap Toggle overflow
对于 RHEL 8.7 或更早版本:
-
打开
/etc/pam.d/sudoPAM 配置文件。 添加下列条目,作为
/etc/pam.d/sudo文件中的auth部分的第一行。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存并关闭
/etc/pam.d/sudo文件。
-
打开
验证
以
idm_user帐户身份登录到主机。ssh -l idm_user@idm.example.com localhost idm_user@idm.example.com's password:
[root@idm-client ~]# ssh -l idm_user@idm.example.com localhost idm_user@idm.example.com's password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证您有一个票据授予票据作为
idm_user帐户。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果您没有
idm_user帐户的 Kerberos 凭证,请删除您当前的 Kerberos 凭证,并请求正确的凭证。kdestroy -A kinit idm_user@IDM.EXAMPLE.COM Password for idm_user@idm.example.com:
[idm_user@idmclient ~]$ kdestroy -A [idm_user@idmclient ~]$ kinit idm_user@IDM.EXAMPLE.COM Password for idm_user@idm.example.com:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
sudo重启机器,而不用指定密码。sudo /usr/sbin/reboot
[idm_user@idmclient ~]$ sudo /usr/sbin/rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以通过 pam_sss_gss.so PAM 模块在身份管理(IdM)客户端上启用通用安全服务应用程序接口(GSSAPI)身份验证,如 sudo 和 sudo -i。另外,您只能启用使用智能卡登录的用户,以便使用 Kerberos 票据向这些服务进行身份验证。
您可以将此流程作为模板,使用 SSSD 为其他 PAM 感知的服务配置 GSSAPI 身份验证,并进一步限制只对那些在其 Kerberos 票据上附加了特定身份验证指标的用户进行访问。
但是,使用身份验证指标限制访问目前有两个限制:
- 只有基于 MIT Kerberos 的部署才支持身份验证指标。这些部署包括 Fedora 中的 RHEL IdM、D FreeIPA 和 Samba AD DC。
- 身份验证指标在域边界上从 Kerberos 票据中删除。
因此,如果您想通过使用 pam_gssapi_indicators_map = 访问,则您只能对存储在 IdM LDAP 中的用户应用此限制。向其他存储的用户(如 Active Directory 中存储的用户发出的票据)无法满足 sudo:pkinit 来限制 sudopam_gssapi_indicators_map = sudo:pkinit 条件。
先决条件
-
您已为应用于 IdM 主机的 IdM 用户创建了
sudo规则。在本例中,您已创建了idm_user_rebootsudo规则,为idm_user帐户授予在idmclient主机上运行/usr/sbin/reboot命令的权限。 -
您已为
idmclient主机配置了智能卡身份验证。 -
idmclient主机正在运行 RHEL 8.4 或更高版本。 -
您需要
root权限来修改/etc/sssd/sssd.conf文件和/etc/pam.d/目录中的 PAM 文件。
流程
-
打开
/etc/sssd/sssd.conf配置文件: 将以下条目添加到
[domain/ <idm_domain_name>]部分。[domain/<idm_domain_name>] pam_gssapi_services = sudo, sudo-i pam_gssapi_indicators_map = sudo:pkinit, sudo-i:pkinit
[domain/<idm_domain_name>] pam_gssapi_services = sudo, sudo-i pam_gssapi_indicators_map = sudo:pkinit, sudo-i:pkinitCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存并关闭
/etc/sssd/sssd.conf文件。 重启 SSSD 服务以载入配置更改。
systemctl restart sssd
[root@idmclient ~]# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 RHEL 8.8 或更高版本中:
确定您是否已选择了
sssdauthselect配置集:authselect current Profile ID: sssd
# authselect current Profile ID: sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 选择
sssdauthselect配置集:authselect select sssd
# authselect select sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启用 GSSAPI 身份验证:
authselect enable-feature with-gssapi
# authselect enable-feature with-gssapiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将系统配置为只使用智能卡验证用户:
authselect with-smartcard-required
# authselect with-smartcard-requiredCopy to Clipboard Copied! Toggle word wrap Toggle overflow
对于 RHEL 8.7 或更早版本:
-
打开
/etc/pam.d/sudoPAM 配置文件。 添加下列条目,作为
/etc/pam.d/sudo文件中的auth部分的第一行。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存并关闭
/etc/pam.d/sudo文件。 -
打开
/etc/pam.d/sudo-iPAM 配置文件。 添加下列条目,作为
/etc/pam.d/sudo-i文件中的auth部分的第一行。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存并关闭
/etc/pam.d/sudo-i文件。
-
打开
验证
以
idm_user帐户登录到主机,并使用智能卡进行身份验证。ssh -l idm_user@idm.example.com localhost PIN for smart_card
[root@idmclient ~]# ssh -l idm_user@idm.example.com localhost PIN for smart_cardCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证作为智能卡用户,您有一个票据授予票据。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示允许
idm_user帐户执行的sudo规则。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
sudo重启机器,而不用指定密码。sudo /usr/sbin/reboot
[idm_user@idmclient ~]$ sudo /usr/sbin/rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
56.9. SSSD 选项控制对 PAM 服务的 GSSAPI 身份验证 复制链接链接已复制到粘贴板!
您可以对 /etc/sssd/sssd.conf 配置文件使用以下选项来调整 SSSD 服务中的 GSSAPI 配置。
- pam_gssapi_services
-
默认情况下,禁用带有 SSSD 的 GSSAPI 身份验证。您可以使用此选项来指定一个以逗号分隔的 PAM 服务列表,允许这些服务使用
pam_sss_gss.gss.soPAM 模块尝试 GSSAPI 身份验证。要显式禁用 GSSAPI 身份验证,将这个选项设为-。 - pam_gssapi_indicators_map
这个选项只适用于身份管理(IdM)域。使用这个选项列出授予 PAM 访问服务所需的 Kerberos 身份验证指标。配对的格式必须是
<PAM_service>: _<required_authentication_indicator>_。有效的验证指标为:
-
OTP用于双因素身份验证 -
radius用于 RADIUS 身份验证 -
pkinit用于 PKINIT、智能卡或证书身份验证 -
hardened用于强化的密码
-
- pam_gssapi_check_upn
-
默认启用这个选项,并将其设为
true。如果启用了这个选项,SSSD 服务要求用户名与 Kerberos 凭证匹配。如果为false,pam_ss_gss.soPAM 模块将对能够获取所需服务票据的每个用户进行身份验证。
示例
以下选项为 sudo 和 sudo-i 服务启用 Kerberos 身份验证,要求 sudo 用户使用一次性密码进行身份验证,用户名必须与 Kerberos 主体匹配。由于这些设置位于 [pam] 部分中,因此适用于所有域:
[pam] pam_gssapi_services = sudo, sudo-i pam_gssapi_indicators_map = sudo:otp pam_gssapi_check_upn = true
[pam]
pam_gssapi_services = sudo, sudo-i
pam_gssapi_indicators_map = sudo:otp
pam_gssapi_check_upn = true
您还可以在单独的 [domain] 部分中设置这些选项,来覆盖 [pam] 部分中的任何全局值。以下选项对每个域应用不同的 GSSAPI 设置:
- 对于
idm.example.com域 -
为
sudo和sudo -i服务启用 GSSAPI 身份验证。 -
sudo命令需要证书或智能卡身份验证器。 -
sudo -i命令需要一次性密码身份验证器. - 强制匹配用户名和 Kerberos 主体.
-
为
- 对于
ad.example.com域 -
仅为
sudo服务启用 GSSAPI 身份验证。 - 不强制匹配用户名和主体。
-
仅为
56.10. sudo 的 GSSAPI 身份验证故障排除 复制链接链接已复制到粘贴板!
如果您无法使用 IdM 的 Kerberos 票据对 sudo 服务进行身份验证,请使用以下场景对您的配置进行故障排除。
先决条件
-
您已为
sudo服务启用了 GSSAPI 身份验证。请参阅 在 IdM 客户端上为 sudo 启用 GSSAPI 身份验证。 -
您需要
root权限来修改/etc/sssd/sssd.conf文件和/etc/pam.d/目录中的 PAM 文件。
步骤
如果您看到以下错误,Kerberos 服务可能无法为基于主机名的服务票据解析正确的域:
Server not found in Kerberos database
Server not found in Kerberos databaseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在这种情况下,将主机名直接添加到
/etc/krb5.confKerberos 配置文件中的[domain_realm]部分:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果看到以下错误,则您没有任何 Kerberos 凭证:
No Kerberos credentials available
No Kerberos credentials availableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在这种情况下,使用
kinit工具检索 Kerberos 凭证,或者通过 SSSD 进行身份验证:kinit idm-user@IDM.EXAMPLE.COM Password for idm-user@idm.example.com:
[idm-user@idm-client ~]$ kinit idm-user@IDM.EXAMPLE.COM Password for idm-user@idm.example.com:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您在
/var/log/sssd/sssd_pam.log日志文件中看到以下错误之一,则 Kerberos 凭证与当前登录的用户的用户名不匹配:User with UPN [<UPN>] was not found. UPN [<UPN>] does not match target user [<username>].
User with UPN [<UPN>] was not found. UPN [<UPN>] does not match target user [<username>].Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这种情况下,验证您使用 SSSD 进行身份验证,或考虑禁用
/etc/sssd/sssd.conf文件中的pam_gssapi_check_upn选项:[idm-user@idm-client ~]$ cat /etc/sssd/sssd.conf ... pam_gssapi_check_upn = false
[idm-user@idm-client ~]$ cat /etc/sssd/sssd.conf ... pam_gssapi_check_upn = falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 若要进行额外的故障排除,您可以对
pam_sss_gss.soPAM 模块启用调试输出。在 PAM 文件(如
/etc/pam.d/sudo和/etc/pam.d/sudo-i)中所有pam_sss_gss.so条目的末尾添加debug选项:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 尝试使用
pam_sss_gss.so模块进行身份验证,并查看控制台输出。在本例中,用户没有任何 Kerberos 凭据。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在身份管理(IdM)中,您可以确保对特定命令的 sudo 访问权限被授予给特定 IdM 主机上的 IdM 用户帐户。
完成此流程以确保名为 idm_user_reboot 的 sudo 规则存在。该规则授予 idm_user 在 idmclient 机器上运行 /usr/sbin/reboot 命令的权限。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - 您已 确保 IdM 中存在 idm_user 用户帐户,并通过为用户创建密码解锁了帐户。有关使用命令行添加新 IdM 用户的详情,请参阅链接: 使用命令行添加用户。
-
idmclient 中没有本地 idm_user 帐户。idm_user 用户未列在 idmclient 上的
/etc/passwd文件中。
步骤
创建一个清单文件,如
inventory.file,并在其中定义ipaservers:[ipaservers] server.idm.example.com
[ipaservers] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 添加一个或多个
sudo命令:创建一个
ensure-reboot-sudocmd-is-present.ymlAnsible playbook,来确保sudo命令的 IdM 数据库中存在/usr/sbin/reboot命令。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/sudocmd/ensure-sudocmd-is-present.yml文件中的示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-reboot-sudocmd-is-present.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-reboot-sudocmd-is-present.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
创建一个引用命令的
sudo规则:创建一个
ensure-sudorule-for-idmuser-on-idmclient-is-present.ymlAnsible playbook,来使用sudo命令条目确保存在 sudo 规则。sudo 规则允许 idm_user 重新启动 idmclient 机器。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/sudorule/ensure-sudorule-is-present.yml文件中的示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-sudorule-for-idmuser-on-idmclient-is-present.yml
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-sudorule-for-idmuser-on-idmclient-is-present.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
通过验证 idm_user 能够使用 sudo 重启 idmclient,来测试您在 IdM 服务器上确认其存在性的 sudo 规则是否在 idmclient 上可以工作。请注意,可能需要过几分钟后,服务器上所做的更改才会对客户端生效。
- 以 idm_user 用户身份登录到 idmclient。
使用
sudo重新启动计算机。在提示时输入 idm_user 的密码:sudo /usr/sbin/reboot [sudo] password for idm_user:
$ sudo /usr/sbin/reboot [sudo] password for idm_user:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果正确配置了 sudo,则机器将重启。
第 57 章 配置基于主机的访问控制规则 复制链接链接已复制到粘贴板!
您可以使用基于主机的访问控制(HBAC)规则来管理身份管理(IdM)域中的访问控制。HBAC 规则定义哪些用户或用户组可以使用哪些服务或服务组中的哪些服务来访问指定的主机或主机组。例如,您可以使用 HBAC 规则实现以下目标:
- 将您域中对指定系统的访问权限限制为特定用户组的成员。
- 仅允许使用特定的服务来访问域中的系统。
默认情况下,IdM 是使用名为 allow_all 的默认 HBAC 规则配置的,该规则允许每个用户通过整个 IdM 域中的每个相关服务对每个主机进行通用访问。
您可以通过将默认的 allow_all 规则替换为您自己的一组 HBAC 规则来微调对不同主机的访问。对于集中式和简化的访问控制管理,您可以将 HBAC 规则应用到用户组、主机组或服务组,而不是单个用户、主机或服务。
57.1. 使用 WebUI 在 IdM 域中配置 HBAC 规则 复制链接链接已复制到粘贴板!
要为基于主机的访问控制配置域,请完成以下步骤:
- 在 IdM WebUI 中创建 HBAC 规则。
- 测试新的 HBAC 规则。
-
禁用默认的
allow_allHBAC 规则]。
在创建自定义 HBAC 规则前不要禁用 allow_all 规则,因为,如果您这样做了,没有用户能够访问任何主机。
57.1.1. 在 IdM WebUI 中创建 HBAC 规则 复制链接链接已复制到粘贴板!
要使用 IdM Web UI 为基于主机的访问控制配置域,请按照以下步骤操作。出于本示例的目的,流程演示了如何授予单个用户 sysadmin 使用任何服务访问域中的所有系统。
IdM 将用户的主组存储为 gidNumber 属性的数字值,而不是 IdM 组对象的链接。因此,HBAC 规则只能引用用户的补充组,而不是其主组。
先决条件
- 用户 sysadmin 在 IdM 中存在。
流程
- 选择 Policy>Host-Based Access Control>HBAC Rules。
- 点 开始添加新规则。
- 输入规则的名称,然后点 打开 HBAC 规则配置页面。
- 在 Who 区域中,选择 Specified Users and Groups。然后点 添加用户或组。
- 从 Available 用户列表中选择 sysadmin 用户,并点击 移到 Prospective 用户列表,然后点击 。
- 在 Accessing 区域中,选择 Any Host 将 HBAC 规则应用到所有主机。
在 Via Service 区域中,选择 Any Service 将 HBAC 规则应用到所有服务。
注意默认情况下,只为 HBAC 规则配置最常见的服务和服务组。
- 要显示当前可用的服务列表,请选择 Policy>Host-Based Access Control>HBAC Services。
- 要显示当前可用的服务组列表,请选择 Policy>Host-Based Access Control>HBAC Service Groups。
要添加更多的服务和服务组,请参阅 为自定义 HBAC 服务添加 HBAC 服务条目 和 添加 HBAC 服务组。
- 要保存您在 HBAC rule 配置页面中所做的任何更改,请点击页面顶部的 。
57.1.2. 在 IdM WebUI 中测试 HBAC 规则 复制链接链接已复制到粘贴板!
IdM 允许您使用模拟场景测试各种情况下的 HBAC 配置。执行这些模拟测试,您可以在在生产环境中部署 HBAC 规则前发现错误配置问题或安全风险。
在在生产环境中开始使用它们之前,请始终测试自定义 HBAC 规则。
请注意,IdM 不测试 HBAC 规则对可信活动目录(AD)用户的影响。因为 IdM LDAP 目录不存储 AD 数据,所以当模拟 HBAC 场景时,IdM 不能解析 AD 用户的组成员资格。
流程
- 选择 Policy>Host-Based Access Control>HBAC Test。
- 在 Who 窗口中,指定您要执行测试的身份下的用户,然后点 。
- 在 Accessing 窗口中,指定用户将尝试访问的主机,然后单击 。
- 在 Via Service 窗口上,指定用户将尝试使用的服务,然后单击 。
在 Rules 窗口中,选择您要测试的 HBAC 规则,然后点 。如果您没有选择任何规则,则会测试所有规则。
选择 Include Enabled 以对其状态为 Enabled 的所有规则运行测试。选择 Include Disabled 以对其状态为 Disabled 的所有规则运行测试。要查看并更改 HBAC 规则的状态,请选择 Policy>Host-Based Access Control>HBAC Rules。
重要如果对多个规则运行测试,如果所选规则中至少一个允许访问,则成功通过。
- 在 Run Test 窗口上,单击 。
查看测试结果:
- 如果您看到 ACCESS DENIED,则用户没有在测试中授予访问权限。
- 如果您看到 ACCESS GRANTED,则用户可以成功访问主机。
默认情况下,IdM 在显示测试结果时列出所有经过测试的 HBAC 规则。
- 选择 Matched 以显示允许的成功访问的规则。
- 选择 Unmatched 来显示阻止访问的规则。
57.1.3. 在 IdM WebUI 中禁用 HBAC 规则 复制链接链接已复制到粘贴板!
您可以禁用 HBAC 规则,但它只停用规则,而不删除规则。如果禁用了 HBAC 规则,您可以稍后重新启用它。
当您首次配置自定义 HBAC 规则时,禁用 HBAC 规则很有用。要确保新配置不会被默认的 allow_all HBAC 规则覆盖,您必须禁用 allow_all。
流程
- 选择 Policy>Host-Based Access Control>HBAC Rules。
- 选择您要禁用的 HBAC 规则。
- 单击 。
- 点 以确认您要禁用所选的 HBAC 规则。
57.2. 使用 CLI 在 IdM 域中配置 HBAC 规则 复制链接链接已复制到粘贴板!
要为基于主机的访问控制配置域,请完成以下步骤:
- 在 IdM CLI 中创建 HBAC 规则。
- 测试新的 HBAC 规则。
-
禁用默认的
allow_allHBAC 规则。
在创建自定义 HBAC 规则前,不要禁用 allow_all 规则。如果您在创建自定义规则前禁用了它,则会拒绝所有用户对所有主机的访问。
57.2.1. 在 IdM CLI 中创建 HBAC 规则 复制链接链接已复制到粘贴板!
要使用 IdM CLI 为基于主机的访问控制配置域,请按照以下步骤操作。出于本示例的目的,流程展示了如何授予单个用户 sysadmin 使用任何服务访问域中的所有系统。
IdM 将用户的主组存储为 gidNumber 属性的数字值,而不是 IdM 组对象的链接。因此,HBAC 规则只能引用用户的补充组,而不是其主组。
先决条件
- 用户 sysadmin 在 IdM 中存在。
流程
使用
ipa hbacrule-add命令添加规则。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将 HBAC 规则只应用到 sysadmin 用户,请使用
ipa hbacrule-add-user命令。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意要将 HBAC 规则应用到所有用户,请使用
ipa hbacrule-mod命令,并指定所有用户类别--usercat=all。请注意,如果 HBAC 规则与单个用户或组关联,ipa hbacrule-mod --usercat=all会失败。在这种情况下,使用ipa hbacrule-remove-user命令删除用户和组。指定目标主机。要将 HBAC 规则应用到所有主机,请使用
ipa hbacrule-mod命令,并指定所有主机类别:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果 HBAC 规则与单个主机或组关联,
ipa hbacrule-mod --hostcat=all会失败。在这种情况下,使用ipa hbacrule-remove-host命令删除主机和组。指定目标 HBAC 服务。要将 HBAC 规则应用到所有服务,请使用
ipa hbacrule-mod命令,并指定所有服务类别:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果 HBAC 规则与单个服务或组关联,ipa hbacrule-mod --servicecat=all 会失败。在这种情况下,使用 ipa hbacrule-remove-service 命令删除服务和组。
验证
验证 HBAC 规则是否已正确添加。
-
使用
ipa hbacrule-find命令验证 HBAC 规则是否在 IdM 中存在。 -
使用
ipa hbacrule-show命令验证 HBAC 规则的属性。
-
使用
57.2.2. 在 IdM CLI 中测试 HBAC 规则 复制链接链接已复制到粘贴板!
IdM 允许您使用模拟场景测试各种情况下的 HBAC 配置。执行这些模拟测试,您可以在在生产环境中部署 HBAC 规则前发现错误配置问题或安全风险。
在在生产环境中开始使用它们之前,请始终测试自定义 HBAC 规则。
请注意,IdM 不测试 HBAC 规则对可信活动目录(AD)用户的影响。因为 IdM LDAP 目录不存储 AD 数据,所以当模拟 HBAC 场景时,IdM 不能解析 AD 用户的组成员资格。
流程
使用
ipa hbactest命令测试您的 HBAC 规则。您有测试单个 HBAC 规则或多个 HBAC 规则的选项。要测试单个 HBAC 规则:
ipa hbactest --user=sysadmin --host=server.idm.example.com --service=sudo --rules=rule_name --------------------- Access granted: True --------------------- Matched rules: rule_name
$ ipa hbactest --user=sysadmin --host=server.idm.example.com --service=sudo --rules=rule_name --------------------- Access granted: True --------------------- Matched rules: rule_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要测试多个 HBAC 规则:
添加第二个规则,仅允许 sysadmin 在所有主机上使用
ssh:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来测试多个 HBAC 规则:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在输出中,Matched rules 列出了允许的成功访问的规则,而 Not matched 规则列出了阻止的访问的规则。请注意,如果您没有指定
--rules选项,则会应用所有规则。使用--rules对于独立测试每个规则很有用。
57.2.3. 在 IdM CLI 中禁用 HBAC 规则 复制链接链接已复制到粘贴板!
您可以禁用 HBAC 规则,但它只停用规则,而不删除规则。如果禁用了 HBAC 规则,您可以稍后重新启用它。
当您首次配置自定义 HBAC 规则时,禁用 HBAC 规则很有用。要确保新配置不会被默认的 allow_all HBAC 规则覆盖,您必须禁用 allow_all。
流程
使用
ipa hbacrule-disable命令。例如,要禁用allow_all规则:ipa hbacrule-disable allow_all ------------------------------ Disabled HBAC rule "allow_all" ------------------------------
$ ipa hbacrule-disable allow_all ------------------------------ Disabled HBAC rule "allow_all" ------------------------------Copy to Clipboard Copied! Toggle word wrap Toggle overflow
57.3. 为自定义 HBAC 服务添加 HBAC 服务条目 复制链接链接已复制到粘贴板!
默认为 HBAC 规则配置了最常见的服务和服务组,但您也可以将任何其他可插拔身份验证模块(PAM)服务配置为 HBAC 服务。这允许您在 HBAC 规则中定义自定义 PAM 服务。这些 PAM 服务文件位于 RHEL 系统上的 etc/pam.d 目录中。
将服务添加为 HBAC 服务与向域中添加服务不同。向域中添加服务使其可用于域中的其他资源,但不允许使用 HBAC 规则中的服务。
57.3.1. 在 IdM Web UI 中为自定义 HBAC 服务添加 HBAC 服务条目 复制链接链接已复制到粘贴板!
要添加一个自定义 HBAC 服务条目,请按照以下描述的步骤操作。
流程
- 选择 Policy>Host-Based Access Control>HBAC Services。
- 点 添加 HBAC 服务条目。
- 输入服务的名称,然后单击 。
57.3.2. 在 IdM CLI 中为自定义 HBAC 服务添加 HBAC 服务条目 复制链接链接已复制到粘贴板!
要添加一个自定义 HBAC 服务条目,请按照以下描述的步骤操作。
流程
使用
ipa hbacsvc-add命令。例如,要为tftp服务添加一个条目:ipa hbacsvc-add tftp ------------------------- Added HBAC service "tftp" ------------------------- Service name: tftp
$ ipa hbacsvc-add tftp ------------------------- Added HBAC service "tftp" ------------------------- Service name: tftpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
57.4. 添加 HBAC 服务组 复制链接链接已复制到粘贴板!
HBAC 服务组可以简化 HBAC 规则管理。例如,您可以添加整个服务组,而不是将单个服务添加到 HBAC 规则中。
57.4.1. 在 IdM WebUI 中添加 HBAC 服务组 复制链接链接已复制到粘贴板!
要在 IdM WebUI 中添加 HBAC 服务组,请按照以下概述的步骤操作。
流程
- 选择 Policy>Host-Based Access Control>HBAC Service Groups。
- 点 添加 HBAC 服务组。
- 输入服务组的名称,然后点 。
- 在服务组配置页面中,点 将 HBAC 服务添加为组的成员。
57.4.2. 在 IdM CLI 中添加 HBAC 服务组 复制链接链接已复制到粘贴板!
要在 IdM CLI 中添加 HBAC 服务组,请按照以下概述的步骤操作。
流程
在终端中使用
ipa hbacsvcgroup-add命令来添加 HBAC 服务组。例如,要添加名为 login 的组:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ipa hbacsvcgroup-add-member命令将 HBAC 服务添加为组的成员。例如,将sshd服务添加到 login 组中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 58 章 确保使用 Ansible playbook 的基于主机的访问控制规则在 IdM 中存在 复制链接链接已复制到粘贴板!
Ansible 是一个自动化工具,用于配置系统、部署软件和执行滚动更新。它包括对身份管理(IdM)的支持。
了解更多有关基于身份管理 (IdM) 主机的访问策略的信息,以及如何使用 Ansible 定义它们。
58.1. IdM 中基于主机的访问控制规则 复制链接链接已复制到粘贴板!
基于主机的访问控制(HBAC)规则定义哪些用户或用户组可以通过哪些服务或服务组中的哪些服务来访问哪些主机或主机组。作为系统管理员,您可以使用 HBAC 规则来实现以下目标:
- 将您域中对指定系统的访问权限限制为特定用户组的成员。
- 仅允许使用特定服务来访问域中的系统。
默认情况下,IdM 是使用一个名为 allow_all 的默认 HBAC 规则配置的,这意味着每个用户都可以通过整个 IdM 域中每个相关服务对每个主机进行通用访问。
您可以通过将默认的 allow_all 规则替换为您自己的一组 HBAC 规则来微调对不同主机的访问。对于集中式和简化的访问控制管理,您可以将 HBAC 规则应用到用户组、主机组或服务组,而不是单个用户、主机或服务。
58.2. 使用 Ansible playbook 确保在 IdM 中存在 HBAC 规则 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保基于主机的访问控制(HBAC)规则在身份管理(IdM)中存在。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - IdM 中存在您要用于 HBAC 规则的用户和用户组。详情请参阅 使用 Ansible playbook 管理用户帐户 ,以及 使用 Ansible playbook 确保 IdM 组和组成员存在。
- 您要应用 HBAC 规则的主机和主机组在 IdM 中存在。详情请参阅 使用 Ansible playbook 管理主机,以及 使用 Ansible playbook 管理主机组。
流程
创建一个清单文件,如
inventory.file,并在该文件中定义ipaserver:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 Ansible playbook 文件,该文件定义您要确保其存在的 HBAC 策略。要简化此步骤,您可以复制并修改
/usr/share/doc/ansible-freeipa/playbooks/hbacrule/ensure-hbacrule-allhosts-present.yml文件中的示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-new-hbacrule-present.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-new-hbacrule-present.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 以管理员身份登录到 IdM Web UI。
- 导航到 Policy → Host-Based-Access-Control → HBAC Test。
- 在 Who 选项卡中,选择 idm_user。
- 在 Accessing 选项卡中,选择 client.idm.example.com。
- 在 Via service 选项卡中,选择 sshd。
- 在 Rules 选项卡中,选择 login。
- 在 Run test 选项卡中,单击 Run test 按钮。如果您看到 ACCESS GRANTED,则 HBAC 规则成功实现。
第 59 章 管理复制拓扑 复制链接链接已复制到粘贴板!
您可以管理身份管理(IdM)域中服务器之间的复制。当您创建副本时,身份管理(IdM)会在初始服务器和副本之间创建一个复制协议。然后,复制的数据会存储在拓扑后缀中,当两个副本在它们的后缀之间有复制协议时,后缀会形成一个拓扑段。
59.1. IdM 副本之间的复制协议 复制链接链接已复制到粘贴板!
当管理员基于现有服务器创建副本时,身份管理 (IdM) 会在初始服务器和副本之间创建复制协议。复制协议确保两个服务器之间不断复制数据和配置。
IdM 使用多读/写副本复制。在这种配置中,所有副本都加入到复制协议中接收并提供更新,因此被视为供应商和消费者。复制协议始终是强制的。
图 59.1. 服务器和副本协议
IdM 使用两种复制协议:
- 域复制协议 复制身份信息。
- 证书复制协议 复制证书信息。
两个复制频道都是独立的。两个服务器可以有一类或两种类型的复制协议。例如,当服务器 A 和服务器 B 仅配置了域复制协议时,它们之间仅复制身份信息,而不复制证书信息。
59.2. 拓扑后缀 复制链接链接已复制到粘贴板!
拓扑后缀 存储复制的数据。IdM 支持两种类型的拓扑后缀:domain 和 ca。每个后缀代表一个单独的服务器,即一个单独的复制拓扑。
配置复制协议时,它会在两个不同的服务器上加入同一类型的两个拓扑后缀。
域后缀:dc=示例,dc=com域后缀包含与域相关的所有数据。当两个副本在其
域后缀之间具有复制协议时,它们共享目录数据,如用户、组和策略。ca后缀:o=ipacaca后缀包含证书系统组件的数据。它仅存在于安装有证书颁发机构 (CA) 的服务器上。当两个副本在其
ca后缀之间具有复制协议时,它们会共享证书数据。
图 59.2. 拓扑后缀
在安装新副本时,ipa- replica-install 脚本会在两个服务器之间设置初始拓扑复制协议。
59.3. 拓扑片段 复制链接链接已复制到粘贴板!
当两个副本在其后缀之间具有复制协议时,后缀组成一个 拓扑片段。每个拓扑段由一个 左节点和一个 右节点 组成。节点代表复制协议中加入的服务器。
IdM 中的拓扑片段始终是双向的。每个部分代表两种复制协议:从服务器 A 到服务器 B,从服务器 B 复制到服务器 A。因此数据会同时复制到服务器 A。
图 59.3. 拓扑片段
59.4. 使用 Web UI 查看并修改复制拓扑的可视化表示 复制链接链接已复制到粘贴板!
使用 Web UI,您可以查看、操作和转换复制拓扑的表示。Web UI 中的拓扑图显示域中服务器之间的关系。您可以通过按住并拖动鼠标来移动单个拓扑节点。
解读拓扑图
加入域复制协议的服务器通过圆形箭头连接。加入 CA 复制协议中的服务器通过蓝色箭头连接。
- 拓扑图示例:推荐的拓扑
以下推荐的拓扑示例显示了四个服务器的可能的推荐拓扑之一:每个服务器至少连接到两个其他服务器,并且多个服务器是 CA 服务器。
图 59.4. 推荐的拓扑示例
- 拓扑图示例:不建议拓扑
在下面不鼓励的拓扑示例中,
server1是单点故障。所有其他服务器与此服务器具有复制协议,但任何其他服务器都不具有复制协议。因此,如果server1出现故障,所有其他服务器将被隔离。避免创建如下拓扑:
图 59.5. 不推荐的拓扑示例: 单点故障
先决条件
- 您以 IdM 管理员身份登录。
流程
- 选择 → → 。
更改拓扑:
您可以使用鼠标左键移动拓扑图形节点:
您可以使用鼠标 wheel 缩放拓扑图:
您可以通过按鼠标左键移动拓扑图的画面:
- 如果您对拓扑进行任何没有立即反映在图形中的更改,点 。
59.5. 使用 CLI 查看拓扑后缀 复制链接链接已复制到粘贴板!
在复制协议中,拓扑后缀存储复制的数据。您可以使用 CLI 查看拓扑后缀。
流程
输入
ipa topologysuffix-find命令来显示拓扑后缀的列表:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
59.6. 使用 CLI 查看拓扑段 复制链接链接已复制到粘贴板!
在复制协议中,当两个副本在其后缀之间有复制协议时,后缀组成一个拓扑段。您可以使用 CLI 查看拓扑段。
流程
输入
ipa topologysegment-find命令来显示为域或 CA 后缀配置的当前拓扑段。例如,对于域后缀:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,域相关数据仅在两个服务器之间复制:
server1.example.com和server2.example.com。可选: 要只显示特定片段的详情,请输入
ipa topologysegment-show命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
59.7. 使用 Web UI 在两个服务器之间设置复制 复制链接链接已复制到粘贴板!
使用身份管理(IdM) Web UI,您可以选择两个服务器并在它们之间创建新的复制协议。
先决条件
- 您以 IdM 管理员身份登录。
流程
在拓扑图中,将鼠标悬停在其中一个服务器节点上。
图 59.6. 域或 CA 选项
-
点击
域或圆圈的ca部分,具体取决于您要创建的拓扑网类型。 在鼠标指针下会显示代表新复制协议的新箭头。将鼠标移到其他服务器节点,然后单击它。
图 59.7. 创建新片段
-
在
Add topology segment窗口中,单击 以确认新网段的属性。
两台服务器之间的新拓扑网段将它们加入到复制协议中。拓扑图现在显示更新的复制拓扑:
图 59.8. 创建新片段
59.8. 使用 Web UI 停止两个服务器之间的复制 复制链接链接已复制到粘贴板!
使用身份管理(IdM) Web UI,您可以从服务器中删除复制协议。
先决条件
- 您以 IdM 管理员身份登录。
流程
单击代表您要删除的复制协议的箭头。这会突出显示箭头。
图 59.9. 拓扑片段突出显示
- 点。
在
Confirmation窗口中,单击 。IdM 删除了两台服务器之间的拓扑网段,这将删除它们的复制协议。拓扑图现在显示更新的复制拓扑:
图 59.10. 已删除拓扑片段
59.9. 使用 CLI 在两个服务器之间设置复制 复制链接链接已复制到粘贴板!
您可以使用 ipa topologysegment-add 命令配置两个服务器之间的复制协议。
先决条件
- 有 IdM 管理员凭证。
流程
为两台服务器创建一个拓扑段。在提示时,提供:
-
所需的拓扑后缀:
domain或ca - 左节点和右节点,代表两台服务器
可选:片段的自定义名称
例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加新片段在复制协议中加入服务器。
-
所需的拓扑后缀:
验证
验证新段是否已配置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
59.10. 使用 CLI 停止两个服务器之间的复制 复制链接链接已复制到粘贴板!
您可以使用 ipa topology segment-del 命令从命令行终止复制协议。
先决条件
- 有 IdM 管理员凭证。
流程
可选:如果您不知道要删除的特定复制段的名称,请显示所有可用的片段。使用
ipa topologysegment-find命令。出现提示时,请提供所需的拓扑后缀:domain或ca。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在输出中找到所需的段。
删除连接两个服务器的拓扑段:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除片段会移除复制协议。
验证
验证段是否不再列出:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
59.11. 使用 Web UI 从拓扑中删除服务器 复制链接链接已复制到粘贴板!
您可以使用 Identity Management(IdM)web 界面从拓扑中删除服务器。此操作不会从主机卸载服务器组件。
先决条件
- 您以 IdM 管理员身份登录。
- 您希望删除的服务器 并不是 唯一将其他服务器与拓扑中其余部分连接的服务器;这会导致其他服务器变为隔离状态,这是不允许的。
- 要删除的服务器 不是 您的最后一个 CA 或 DNS 服务器。
删除服务器是一项不当操作。如果您删除了服务器,在拓扑中重新引入它的唯一方法是在机器上安装新副本。
流程
- 选择 → → 。
单击您要删除的服务器的名称。
图 59.11. 选择服务器
- 单击 。
其他资源
59.12. 使用 CLI 从拓扑中删除服务器 复制链接链接已复制到粘贴板!
您可以使用命令行从拓扑中删除身份管理(IdM)服务器。
先决条件
- 有 IdM 管理员凭证。
- 您希望删除的服务器 并不是 唯一将其他服务器与拓扑中其余部分连接的服务器;这会导致其他服务器变为隔离状态,这是不允许的。
- 要删除的服务器 不是 您的最后一个 CA 或 DNS 服务器。
删除服务器是一项不当操作。如果您删除了服务器,在拓扑中重新引入它的唯一方法是在机器上安装新副本。
流程
删除 server1.example.com :
在另一台服务器上,运行
ipa server-del命令来移除server1.example.com。该命令删除指向服务器的所有拓扑片段:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:在
server1.example.com上,运行ipa server-install --uninstall命令来从机器中卸载服务器组件。ipa server-install --uninstall
[root@server1 ~]# ipa server-install --uninstallCopy to Clipboard Copied! Toggle word wrap Toggle overflow
59.13. 删除过时的 RUV 记录 复制链接链接已复制到粘贴板!
如果您从 IdM 拓扑中删除了一台服务器,而没有正确地删除其复制协议,则过时的副本更新向量(RUV)记录将保留在拓扑中的一个或多个剩余的服务器上。例如,可能会由于自动化而发生这种情况。这些服务器预期会从现在已删除的服务器接收更新。在这种情况下,您需要从剩余的服务器中清理过时的 RUV 记录。
先决条件
- 有 IdM 管理员凭证。
- 您知道哪些副本已损坏或已被错误地删除。
流程
使用
ipa-replica-manage list-ruv命令列出 RUV 的详细信息。命令显示副本 ID:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要ipa-replica-manage list-ruv命令列出拓扑中的所有副本,而不仅仅是有故障或错误删除的副本。使用
ipa-replica-manage clean-ruv命令删除与指定副本关联的过时的 RUV。对具有过时 RUV 的每个副本 ID 重复此命令。例如,如果您知道server1.example.com和server2.example.com有故障或者错误地删除了副本:ipa-replica-manage clean-ruv 6 ipa-replica-manage clean-ruv 5
ipa-replica-manage clean-ruv 6 ipa-replica-manage clean-ruv 5Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 ipa-replica-manage clean-ruv 时要非常小心。对有效副本 ID 运行命令将破坏复制数据库中与该副本关联的所有数据。
如果发生这种情况,请使用 $ ipa-replica-manage re-initialize --from server1.example.com 从另一个副本重新初始化副本。
验证
-
再次运行
ipa-replica-manage list-ruv。如果命令不再显示任何损坏的 RUV,则记录已被成功清理。 如果命令仍然显示损坏的 RUV,则使用此任务手动清除它们:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
59.14. 使用 IdM Web UI 查看 IdM 拓扑中可用的服务器角色 复制链接链接已复制到粘贴板!
根据 IdM 服务器中安装的服务,它可以执行各种 服务器角色。例如:
- CA 服务器
- DNS 服务器
- 关键恢复机构(KRA)服务器.
流程
有关支持的服务器角色的完整列表,请参阅 → → 。
注意-
缺少角色状态意味着拓扑中没有服务器执行该角色。 -
启用角色状态意味着拓扑中的一个或多个服务器正在执行该角色。
图 59.12. Web UI 中的服务器角色
-
59.15. 使用 IdM CLI 查看 IdM 拓扑中可用的服务器角色 复制链接链接已复制到粘贴板!
根据 IdM 服务器中安装的服务,它可以执行各种 服务器角色。例如:
- CA 服务器
- DNS 服务器
- 关键恢复机构(KRA)服务器.
流程
要显示拓扑中所有 CA 服务器和当前 CA 续订服务器:
ipa config-show ... IPA masters: server1.example.com, server2.example.com, server3.example.com IPA CA servers: server1.example.com, server2.example.com IPA CA renewal master: server1.example.com
$ ipa config-show ... IPA masters: server1.example.com, server2.example.com, server3.example.com IPA CA servers: server1.example.com, server2.example.com IPA CA renewal master: server1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,要显示特定服务器(如 server.example.com)上启用的角色的列表 :
ipa server-show Server name: server.example.com ... Enabled server roles: CA server, DNS server, KRA server
$ ipa server-show Server name: server.example.com ... Enabled server roles: CA server, DNS server, KRA serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,使用
ipa server-find --servrole命令搜索启用了特定服务器角色的所有服务器。例如,搜索所有 CA 服务器:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
59.16. 将副本提升到 CA 续订服务器和 CRL 发布程序服务器 复制链接链接已复制到粘贴板!
如果您的 IdM 部署使用嵌入式证书颁发机构(CA),其中一个 IdM CA 服务器充当 CA 续订服务器,负责管理 CA 子系统证书的续订服务器。其中一台 IdM CA 服务器也充当 IdM CRL 发布程序服务器,这是生成证书撤销列表的服务器。
默认情况下,CA 续订服务器和 CRL 发布程序服务器角色安装在第一个服务器上,系统管理员使用 ipa-server-install 或 ipa-ca-install 命令在其上安装 CA 角色。但是,您可以将两个角色之一传输到启用了 CA 角色的任何其他 IdM 服务器。
先决条件
- 有 IdM 管理员凭证。
第 60 章 身份管理中的公钥证书 复制链接链接已复制到粘贴板!
X.509 公钥证书用于验证身份管理(IdM)中的用户、主机和服务。除了验证外,X.509 证书还支持启用数字签名和加密,以提供隐私性、完整性和不可抵赖性。
证书包含以下信息:
- 证书验证的主题。
- 签发者,即签署证书的 CA。
- 证书有效性的开始和结束日期。
- 证书的有效使用。
- 主题的公钥。
由公钥加密的消息只能由对应的私钥解密。虽然证书及其包含的公钥可以公开提供,但用户、主机或服务必须对其私钥保密。
60.1. IdM 中的证书颁发机构 复制链接链接已复制到粘贴板!
证书颁发机构以信任层次结构运行。在带有内部证书颁发机构(CA)的 IdM 环境中,所有 IdM 主机、用户和服务都信任 CA 签名的证书。除了这个根 CA 外,IdM 还支持子 CA,其 root CA 已授权依次获得签署证书的能力。通常,此类能够签名的子 CA 证书是特定类型的证书,如 VPN 证书。最后,IdM 支持使用外部 CA。下表显示了在 IdM 中使用独立 CA 类型的具体内容。
| CA 的名称 | 描述 | 使用 | 有用的链接 |
|---|---|---|---|
|
| 基于 Dogtag 上游项目的集成 CA | 集成的 CA 可以为用户、主机和服务创建、撤销和发布证书。 | |
| IdM 子 CA |
隶属于 |
IdM 子 CA 是 | |
| 外部 CA | 外部 CA 是集成 IdM CA 或其子 CA 以外的 CA。 | 使用 IdM 工具,您可以将这些 CA 发布的证书添加到用户、服务或主机,也可以删除它们。 |
从证书的角度来看,自签名的 IdM CA 签名的和外部签名的证书之间没有区别。
CA 的角色包括以下目的:
- 它发布数字证书。
- 通过签署证书,它证明证书中命名的对象拥有一个公钥。主题可以是用户、主机或服务。
- 它可以撤销证书,并通过证书撤销列表(CRL)和在线证书状态协议(OCSP)提供撤销状态。
60.2. 证书和 Kerberos 的比较 复制链接链接已复制到粘贴板!
证书执行的功能与 Kerberos 票据执行的功能类似。Kerberos 是一种计算机网络身份验证协议,它根据票据来允许节点通过非安全网络进行通信,从而以安全的方式证明它们相互的身份。下表显示了 Kerberos 和 X.509 证书的比较:
| 特性 | Kerberos | X.509 |
|
| 是 | 是 |
|
| 可选 | 是 |
|
| 可选 | 是 |
|
| 对称 | 非对称 |
|
| 短(1 天) | 长(2 年) |
默认情况下,身份管理中的 Kerberos 仅确保通信双方的身份。
60.3. 使用证书验证 IdM 中用户的优缺点 复制链接链接已复制到粘贴板!
使用证书验证 IdM 中用户的优点包括:
- 与常规密码相比,保护智能卡上私钥的 PIN 通常不复杂、更容易记住。
- 根据设备,无法导出保存在智能卡上的私钥。这提供了额外的安全性。
- 智能卡可以自动注销: IdM 可以配置为在用户从读卡器中删除智能卡时注销用户。
- 窃取私钥需要对智能卡的实际访问,从而使智能卡免受黑客攻击。
- 智能卡验证是一个双因素验证的示例:它需要您拥有的东西(卡)和您知道的东西(PIN)。
- 智能卡比密码更灵活,因为它们提供可用于其他用途的密钥,如加密电子邮件。
- 在作为 IdM 客户端的共享机器上使用智能卡不会给系统管理员带来额外的配置问题。事实上,智能卡验证对共享机器来说是一个理想选择。
使用证书验证 IdM 中用户的缺点包括:
- 用户可能丢失或忘记携带其智能卡或证书,并被有效锁住。
- 错误输入 PIN 多次可能会导致卡被锁。
- 通常,在请求与某些安全官员或批准人的授权之间有一个中间步骤。在 IdM 中,安全官员或管理员必须运行 ipa cert-request 命令。
- 智能卡和读卡器往往特定于供应商和驱动程序:虽然许多读卡器可用于不同的卡,但特定供应商的智能卡可能无法在另一供应商的读卡器或不是为其设计的读卡器类型中工作。
- 证书和智能卡对管理员来说有一个陡峭的学习曲线。
第 61 章 转换证书格式以和 IdM 一起工作 复制链接链接已复制到粘贴板!
这个用户故事描述了如何确保您作为 IdM 系统管理员使用证书的正确格式和特定的 IdM 命令。例如,这在以下情况下非常有用:
- 您将外部证书加载到用户配置文件中。详情请参阅 转换外部证书以加载到 IdM 用户帐户。
- 当 为智能卡验证配置 IdM 服务器 或 为智能卡验证配置 IdM 客户端 时使用外部 CA 证书,以便用户可以使用带有外部证书颁发机构签发的证书的智能卡向 IdM 进行验证。
- 您将 NSS 数据库中的证书导出为 pkcs #12 格式,其中包括证书和私钥。详情请查看 将 NSS 数据库中的证书和私钥导出到 PKCS #12 文件。
61.1. IdM 中的证书格式和编码 复制链接链接已复制到粘贴板!
包括 IdM 中智能卡验证在内的证书验证通过比较用户提供的证书或证书数据(保存在用户的 IdM 配置文件)来进行。
系统配置
IdM 配置文件中存储的内容仅是证书,而不是对应的私钥。在身份验证期间,用户还必须显示其拥有相应的私钥。用户通过显示包含证书和私钥的 PKCS #12 文件或两个文件:一个包含证书,另一个包含私钥,来执行此操作。
因此,将证书加载到用户配置文件的进程只接受不包含私钥的证书文件。
同样,当系统管理员为您提供了外部 CA 证书时,他将仅提供公共数据:不带私钥的证书。为智能卡验证配置 IdM 服务器或 IdM 客户端的 ipa-advise 工具期望输入文件包含外部 CA 的证书,而不是私钥。
证书编码
有两种常见的证书编码:隐私增强型电子邮件(PEM)和区分的编码规则(DER)。base64 格式与 PEM 格式几乎相同,但其不包含 -----BEGIN CERTIFICATE-----/-----END CERTIFICATE----- 页眉和页脚。
已使用 DER 编码的证书是一个二进制 X509 数字证书文件。作为二进制文件,证书不可读。DER 文件有时使用 .der 文件扩展名,但带有 .crt 和 .cer 文件扩展名的文件有时也会包含 DER 证书。包含密钥的 DER 文件可以命名为 .key。
使用 PEM Base64 编码的证书是一个人类可读的文件。文件包含前缀为"-----BEGIN …"行的 ASCII(Base64)装甲数据。PEM 文件有时使用 .pem 文件扩展名,但具有 .crt 和 .cer 文件扩展名的文件有时也包含 PEM 证书。包含密钥的 PEM 文件可以命名为 .key。
不同的 ipa 命令对其接受的证书类型有不同的限制。例如,ipa user-add-cert 命令只接受以 base64 格式编码的证书,但 ipa-server-certinstall 可接受 PEM, DER, PKCS #7, PKCS #8 和 PKCS #12 证书。
| 编码格式 | 人类可读 | 通用文件扩展名 | 接受编码格式的 IdM 命令示例 |
|---|---|---|---|
| PEM/base64 | 是 | .pem, .crt, .cer | ipa user-add-cert, ipa-server-certinstall, … |
| DER | 否 | .der, .crt, .cer | ipa-server-certinstall, … |
IdM 中与证书相关的命令和格式 列出了带有命令接受的证书格式的 ipa 命令。
用户身份验证
在使用 Web UI 访问 IdM 时,用户通过将两者都存储在浏览器的数据库中,证明自己拥有与证书对应的私钥。
当使用 CLI 访问 IdM 时,用户通过以下方法之一证明自己拥有与证书对应的私钥:
用户添加了
kinit -X命令的X509_user_identity参数的值,添加了连接到包含证书和密钥的智能卡的智能模块的路径:kinit -X X509_user_identity='PKCS11:opensc-pkcs11.so' idm_user
$ kinit -X X509_user_identity='PKCS11:opensc-pkcs11.so' idm_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow 用户添加两个文件作为
kinit -X命令的X509_user_identity参数的值,一个包含证书,另一个包含私钥:kinit -X X509_user_identity='FILE:`/path/to/cert.pem,/path/to/cert.key`' idm_user
$ kinit -X X509_user_identity='FILE:`/path/to/cert.pem,/path/to/cert.key`' idm_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow
有用的证书命令
要查看证书数据,如主题和签发者:
openssl x509 -noout -text -in ca.pem
$ openssl x509 -noout -text -in ca.pem
要比较两个证书在哪行不同:
diff cert1.crt cert2.crt
$ diff cert1.crt cert2.crt
要比较哪行中两个证书与两列中显示的输出不同:
diff cert1.crt cert2.crt -y
$ diff cert1.crt cert2.crt -y
61.2. 转换外部证书以加载到 IdM 用户帐户 复制链接链接已复制到粘贴板!
本节论述了如何确保在将外部证书添加到用户条目之前其被正确编码和格式化。
61.2.1. 先决条件 复制链接链接已复制到粘贴板!
-
如果您的证书由活动目录证书认证机构签发,并使用
PEM编码的,请确保PEM文件已转换为UNIX格式。要转换文件,请使用 eponymous 软件包提供的dos2unix工具。
61.2.2. 在 IdM CLI 中转换外部证书,并将其加载到 IdM 用户帐户 复制链接链接已复制到粘贴板!
IdM CLI 只接受 PEM 证书,第一行和最后一行(-----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE-----)已从中移除。
按照以下流程,将外部证书转换为 PEM 格式,并使用 IdM CLI 将其添加到 IdM 用户帐户。
流程
将证书转换为
PEM格式:如果您的证书为
DER格式:openssl x509 -in cert.crt -inform der -outform pem -out cert.pem
$ openssl x509 -in cert.crt -inform der -outform pem -out cert.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您的文件是
PKCS #12格式,其通用文件扩展名为.pfx和.p12,并且包含证书、私钥和其他数据,请使用openssl pkcs12工具提取证书。提示时,输入保护存储在文件中私钥的密码:openssl pkcs12 -in cert_and_key.p12 -clcerts -nokeys -out cert.pem Enter Import Password:
$ openssl pkcs12 -in cert_and_key.p12 -clcerts -nokeys -out cert.pem Enter Import Password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
获得管理员凭证:
kinit admin
$ kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 根据以下方法之一,使用
IdM CLI将证书添加到用户帐户:在将字符串添加到
ipa user-add-cert命令前,使用sed工具删除PEM文件的第一行和最后一行(-----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE-----):ipa user-add-cert some_user --certificate="$(sed -e '/BEGIN CERTIFICATE/d;/END CERTIFICATE/d' cert.pem)"
$ ipa user-add-cert some_user --certificate="$(sed -e '/BEGIN CERTIFICATE/d;/END CERTIFICATE/d' cert.pem)"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将不包含 第一行和最后一行(-----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE-----)的证书文件的内容复制并粘贴到
ipa user-add-cert命令中:ipa user-add-cert some_user --certificate=MIIDlzCCAn+gAwIBAgIBATANBgkqhki...
$ ipa user-add-cert some_user --certificate=MIIDlzCCAn+gAwIBAgIBATANBgkqhki...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您不能直接将包含证书的
PEM文件作为输入传给ipa user-add-cert命令,无需先删除第一行和最后一行(-----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE-----):ipa user-add-cert some_user --cert=some_user_cert.pem
$ ipa user-add-cert some_user --cert=some_user_cert.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令会导致 "ipa: ERROR: Base64 decoding failed: Incorrect padding"错误消息。
要检查证书是否被系统接受:
ipa user-show some_user
[idm_user@r8server]$ ipa user-show some_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow
61.2.3. 在 IdM Web UI 中转换外部证书以加载到 IdM 用户帐户 复制链接链接已复制到粘贴板!
按照以下流程将外部证书转换为 PEM 格式,并在 IdM Web UI 中将其添加到 IdM 用户帐户。
流程
使用
CLI,将证书转换为PEM格式:如果您的证书为
DER格式:openssl x509 -in cert.crt -inform der -outform pem -out cert.pem
$ openssl x509 -in cert.crt -inform der -outform pem -out cert.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您的文件是
PKCS #12格式,其通用文件扩展名为.pfx和.p12,并且包含证书、私钥和其他数据,请使用openssl pkcs12工具提取证书。提示时,输入保护存储在文件中私钥的密码:openssl pkcs12 -in cert_and_key.p12 -clcerts -nokeys -out cert.pem Enter Import Password:
$ openssl pkcs12 -in cert_and_key.p12 -clcerts -nokeys -out cert.pem Enter Import Password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
在编辑器中打开证书,并复制内容。您可以包含 "-----BEGIN CERTIFICATE-----" and "-----END CERTIFICATE-----" 页眉和页脚行,但不必这样做,因为
PEM和base64格式已被 IdM Web UI 接受了。 - 在 IdM Web UI 中,以安全官员身份登录。
-
前往
Identity→Users→some_user。 -
单击
Certificates旁边的Add。 - 将证书的 PEM 格式内容粘贴到打开的窗口中。
-
单击
Add。
如果证书被系统接受了,您可以看到其会在用户配置文件中的 Certificates 中列出。
61.3. 准备将证书加载到浏览器 复制链接链接已复制到粘贴板!
在将用户证书导入到浏览器前,请确保证书和对应的私钥都是 PKCS #12 格式。有两种常见情况需要额外的准备工作:
- 证书位于 NSS 数据库中。有关如何在此情况下进行处理的详情,请参考 将 NSS 数据库中的证书和私钥导出到 PKCS #12 文件。
-
证书和私钥位于两个单独的
PEM文件中。有关如何在此情况下进行处理的详情,请参考 将证书和私钥 PEM 文件合并到 PKCS #12 文件中。
之后,要将 PEM 格式的 CA 证书和 PKCS #12 格式的用户证书导入到浏览器中,请按照 配置浏览器来启用证书身份验证 和 使用证书作为身份管理用户来验证到身份管理 Web UI 中描述的流程。
61.3.1. 将证书和私钥从 NSS 数据库导出到 PKCS #12 文件中 复制链接链接已复制到粘贴板!
流程
使用
pk12util命令将证书从 NSS 数据库导出为PKCS12格式。例如,将~/certdb目录中存储的 NSS 数据库中的some_user昵称的证书导出到~/some_user.p12文件:pk12util -d ~/certdb -o ~/some_user.p12 -n some_user Enter Password or Pin for "NSS Certificate DB": Enter password for PKCS12 file: Re-enter password: pk12util: PKCS12 EXPORT SUCCESSFUL
$ pk12util -d ~/certdb -o ~/some_user.p12 -n some_user Enter Password or Pin for "NSS Certificate DB": Enter password for PKCS12 file: Re-enter password: pk12util: PKCS12 EXPORT SUCCESSFULCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为
.p12文件设置合适的权限:chmod 600 ~/some_user.p12
# chmod 600 ~/some_user.p12Copy to Clipboard Copied! Toggle word wrap Toggle overflow 由于
PKCS #12文件也包含私钥,因此必须对其进行保护以防止其他用户使用该文件。否则,他们能够模拟用户。
61.3.2. 将证书和私钥 PEM 文件合并到 PKCS #12 文件中 复制链接链接已复制到粘贴板!
按照以下流程,将证书和存储在单独的 PEM 文件中的对应密钥合并到 PKCS #12 文件中。
流程
将存储在
certfile.cer中的证书和存储在certfile.key中的密钥合并到包含证书和密钥的certfile.p12文件中:openssl pkcs12 -export -in certfile.cer -inkey certfile.key -out certfile.p12
$ openssl pkcs12 -export -in certfile.cer -inkey certfile.key -out certfile.p12Copy to Clipboard Copied! Toggle word wrap Toggle overflow
61.4. IdM 中与证书相关的命令和格式 复制链接链接已复制到粘贴板!
下表显示了 IdM 中与证书相关的命令及可接受的格式。
| 命令 | 可接受的格式 | 备注 |
|---|---|---|
|
| base64 PEM 证书 | |
|
| PEM 和 DER 证书;PKCS#7 证书链;PKCS#8 和原始私钥;PKCS#12 证书和私钥 | |
|
| DER; PEM; PKCS#7 | |
|
| PEM 和 DER 证书; PKCS#7 证书链 | |
|
| PEM 和 DER 证书; PKCS#7 证书链 | |
|
| 不适用 |
使用具有 |
|
| 不适用 |
使用具有 |
|
| 不适用 |
使用新证书创建 PEM 格式的 |
|
| 不适用 |
使用新证书创建 PEM 格式的 |
第 62 章 使用集成的 IdM CA 为用户、主机和服务管理证书 复制链接链接已复制到粘贴板!
本章涵盖了使用集成的 CA、ipa CA 及其子 CA 管理身份管理(IdM)中的证书。
62.1. 使用 IdM Web UI 为用户、主机或服务请求新证书 复制链接链接已复制到粘贴板!
按照以下流程,使用身份管理(IdM) Web UI 为集成 IdM 证书颁发机构(CA)中的任何 IdM 实体请求一个新证书:ipa CA 或其任何子 CA。
IdM 实体包括:
- 用户
- 主机
- 服务
服务通常在其上存储了私钥的专用服务节点上运行。将服务的私钥复制到 IdM 服务器被视为不安全。因此,在为服务请求证书时,请在服务节点上创建证书签名请求(CSR)。
先决条件
- 您的 IdM 部署包含一个集成 CA。
- 以 IdM 管理员身份登录到 IdM Web UI。
流程
-
在
Identity选项卡下,选择Users、Hosts或Services子选项卡。 单击用户、主机或服务的名称,来打开其配置页面。
图 62.1. 主机列表
- 单击 → 。
- 可选:选择发布 CA 和配置文件 ID。
-
按照说明使用屏幕上的
certutil命令行(CLI)工具。 - 点 。
62.2. 使用 certutil 从 IdM CA 中为用户、主机或服务请求新证书 复制链接链接已复制到粘贴板!
您可以使用 certutil 工具在标准的 IdM 环境下为身份管理(IdM)用户、主机或服务请求证书。要确保主机或服务 Kerberos 别名可以使用证书,使用 openssl 工具来请求证书。
按照以下流程,使用 certutil 为来自 ipa、IdM 证书颁发机构(CA)的 IdM 用户、主机或服务请求证书。
通常运行在存储私钥的专用服务节点上的服务。将服务的私钥复制到 IdM 服务器被视为不安全。因此,在为服务请求证书时,请在服务节点上创建证书签名请求(CSR)。
先决条件
- 您的 IdM 部署包含一个集成 CA。
- 您已经以 IdM 管理员的身份登录到 IdM 命令行界面(CLI)。
流程
为证书数据库创建一个临时目录:
mkdir ~/certdb/
# mkdir ~/certdb/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,创建一个新的临时证书数据库:
certutil -N -d ~/certdb/
# certutil -N -d ~/certdb/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 CSR,并将输出重定向到文件。例如,要为 4096 位证书创建一个 CSR,并将主题设为 CN=server.example.com,O=EXAMPLE.COM :
certutil -R -d ~/certdb/ -a -g 4096 -s "CN=server.example.com,O=EXAMPLE.COM" -8 server.example.com > certificate_request.csr
# certutil -R -d ~/certdb/ -a -g 4096 -s "CN=server.example.com,O=EXAMPLE.COM" -8 server.example.com > certificate_request.csrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将证书请求文件提交到 IdM 服务器上运行的 CA。指定要与新发布的证书关联的 Kerberos 主体:
ipa cert-request certificate_request.csr --principal=host/server.example.com
# ipa cert-request certificate_request.csr --principal=host/server.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow IdM 中的
ipa cert-request命令使用以下默认值:caIPAserviceCert证书配置文件要选择一个自定义配置文件,请使用
--profile-id选项。集成的 IdM root CA
ipa要选择子 CA,请使用
--ca选项。
62.3. 使用 openssl 从 IdM CA 中为用户、主机或服务请求新证书 复制链接链接已复制到粘贴板!
如果要确保主机或服务的 Kerberos 别名可以使用证书,您可以使用 openssl 工具为身份管理(IdM)主机或服务请求证书。在标准情况下,请考虑 使用 certutil 工具请求一个新证书。
按照以下流程,使用 openssl 为 IdM 主机或来自 ipa、IdM 证书颁发机构的服务请求证书。
通常运行在存储私钥的专用服务节点上的服务。将服务的私钥复制到 IdM 服务器被视为不安全。因此,在为服务请求证书时,请在服务节点上创建证书签名请求(CSR)。
先决条件
- 您的 IdM 部署包含一个集成 CA。
- 您已经以 IdM 管理员的身份登录到 IdM 命令行界面(CLI)。
流程
- 为您的 Kerberos 主体 test/server.example.com 创建一个或多个别名。例如,test1/server.example.com 和 test2/server.example.com。
在 CSR 中,为 dnsName(server.example.com)和 otherName(test2/server.example.com)添加 subjectAltName。要做到这一点,请将
openssl.conf文件配置为包含以下指定 UPN otherName 和 subjectAltName 的行:otherName=1.3.6.1.4.1.311.20.2.3;UTF8:test2/server.example.com@EXAMPLE.COM DNS.1 = server.example.com
otherName=1.3.6.1.4.1.311.20.2.3;UTF8:test2/server.example.com@EXAMPLE.COM DNS.1 = server.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
openssl创建一个证书请求:openssl req -new -newkey rsa:2048 -keyout test2service.key -sha256 -nodes -out certificate_request.csr -config openssl.conf
openssl req -new -newkey rsa:2048 -keyout test2service.key -sha256 -nodes -out certificate_request.csr -config openssl.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将证书请求文件提交到 IdM 服务器上运行的 CA。指定要与新发布的证书关联的 Kerberos 主体:
ipa cert-request certificate_request.csr --principal=host/server.example.com
# ipa cert-request certificate_request.csr --principal=host/server.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow IdM 中的
ipa cert-request命令使用以下默认值:caIPAserviceCert证书配置文件要选择一个自定义配置文件,请使用
--profile-id选项。集成的 IdM root CA
ipa要选择子 CA,请使用
--ca选项。
第 63 章 使用 Ansible 管理 IdM 证书 复制链接链接已复制到粘贴板!
您可以使用 ansible-freeipa ipacert 模块为身份管理(IdM)用户、主机和服务请求、撤销和检索 SSL 证书。您还可以恢复已搁置的证书。
63.1. 使用 Ansible 为 IdM 主机、服务和用户请求 SSL 证书 复制链接链接已复制到粘贴板!
您可以使用 ansible-freeipa ipacert 模块为身份管理(IdM)用户、主机和服务请求 SSL 证书。然后,他们可以使用这些证书向 IdM 进行身份验证。
完成此流程,使用 Ansible playbook ,从 IdM 证书颁发机构(CA)为 HTTP 服务器请求一个证书。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 您已在 ~/MyPlaybooks/ 目录中创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
您已将
ipaadmin_password存储在 secret.yml Ansible vault 中。
- 您的 IdM 部署有一个集成的 CA。
流程
为您的用户、主机或服务生成一个证书签名请求(CSR)。例如,要使用
openssl工具为运行在 client.idm.example.com 上的HTTP服务生成一个 CSR,请输入:openssl req -new -newkey rsa:2048 -days 365 -nodes -keyout new.key -out new.csr -subj '/CN=client.idm.example.com,O=IDM.EXAMPLE.COM'
# openssl req -new -newkey rsa:2048 -days 365 -nodes -keyout new.key -out new.csr -subj '/CN=client.idm.example.com,O=IDM.EXAMPLE.COM'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 因此,CSR 存储在 new.csr 中。
使用以下内容创建您的 Ansible playbook 文件 request-certificate.yml :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将证书请求替换为 new.csr 中的 CSR。
请求证书:
ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/request-certificate.yml
$ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/request-certificate.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
63.2. 使用 Ansible 撤销 IdM 主机、服务和用户的 SSL 证书 复制链接链接已复制到粘贴板!
您可以使用 ansible-freeipa ipacert 模块撤销身份管理(IdM)用户、主机和服务向 IdM 进行身份验证所使用的 SSL 证书。
完成此流程,使用 Ansible playbook 撤销 HTTP 服务器的证书。吊销证书的原因是 "keyCompromise"。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 您已在 ~/MyPlaybooks/ 目录中创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
您已将
ipaadmin_password存储在 secret.yml Ansible vault 中。 -
您已获得了证书的序列号,例如输入
openssl x509 -noout -text -in <path_to_certificate>命令。在本例中,证书的序列号为 123456789。
- 您的 IdM 部署有一个集成的 CA。
流程
使用以下内容创建 Ansible playbook 文件 revoke-certificate.yml :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 撤销证书:
ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/revoke-certificate.yml
$ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/revoke-certificate.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
63.3. 使用 Ansible 为 IdM 用户、主机和服务恢复 SSL 证书 复制链接链接已复制到粘贴板!
您可以使用 ansible-freeipa ipacert 模块恢复之前由身份管理(IdM)用户、主机或服务向 IdM 进行身份验证撤销的 SSL 证书。
您只能恢复搁置的证书。您可能已将其搁置,例如,您不确定私钥是否已丢失。但是,您现在已恢复了密钥,并且您确定没有人在同时访问它,所以您希望重新恢复证书。
完成此流程,使用 Ansible playbook 为注册到 IdM 的服务的搁置的证书发布一个证书。这个示例描述了如何为 HTTP 服务的搁置的证书发布一个证书。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 您已在 ~/MyPlaybooks/ 目录中创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
您已将
ipaadmin_password存储在 secret.yml Ansible vault 中。
- 您的 IdM 部署有一个集成的 CA。
-
您已得到证书的序列号,例如通过输入
openssl x509 -noout -text -in path/to/certificate命令。在本例中,证书序列号为 123456789。
流程
使用以下内容创建 Ansible playbook 文件 restore-certificate.yml :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/restore-certificate.yml
$ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/restore-certificate.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
63.4. 使用 Ansible 为 IdM 用户、主机和服务检索 SSL 证书 复制链接链接已复制到粘贴板!
您可以使用 ansible-freeipa ipacert 模块检索为身份管理(IdM)用户、主机或服务发布的 SSL 证书,并将其存储在受管节点上的一个文件中。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 您已在 ~/MyPlaybooks/ 目录中创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
您已将
ipaadmin_password存储在 secret.yml Ansible vault 中。
-
您已得到了证书的序列号,例如通过输入
openssl x509 -noout -text -in <path_to_certificate>命令。在本例中,证书的序列号为 123456789,存储检索到的证书的文件是 cert.pem。
流程
使用以下内容创建 Ansible playbook 文件 retrieve-certificate.yml :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索证书:
ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/retrieve-certificate.yml
$ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/retrieve-certificate.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 64 章 管理 IdM 用户、主机和服务的外部签名证书 复制链接链接已复制到粘贴板!
本章描述了如何使用身份管理(IdM)命令行界面(CLI)和 IdM Web UI 来添加或删除用户、主机,以及由外部证书颁发机构(CA)发布的服务证书。
64.1. 使用 IdM CLI ,将外部 CA 发布的证书添加到 IdM 用户、主机或服务 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以使用身份管理(IdM)CLI 向 IdM 用户的帐户、主机或服务添加外部签名的证书。
先决条件
- 您已获得管理员用户的票据授予票据。
流程
要为 IdM 用户添加证书,请输入:
ipa user-add-cert user --certificate=MIQTPrajQAwg...
$ ipa user-add-cert user --certificate=MIQTPrajQAwg...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令要求您指定以下信息:
- 用户名
- Base64 编码的 DER 证书
不是将证书内容复制并粘贴到命令行,您可以将证书转换为 DER 格式,然后将其重新编码为 Base64。例如,要将 user_cert.pem 证书添加给 user,请输入:
ipa user-add-cert user --certificate="$(openssl x509 -outform der -in user_cert.pem | base64 -w 0)"
$ ipa user-add-cert user --certificate="$(openssl x509 -outform der -in user_cert.pem | base64 -w 0)"
您可以在不添加任何选项的情况下,以交互方式运行 ipa user-add-cert 命令。
要将证书添加给 IdM 主机,请输入:
-
ipa host-add-cert
要将证书添加给 IdM 服务,请输入:
-
ipa service-add-cert
64.2. 使用 IdM Web UI 将外部 CA 发布的证书添加到 IdM 用户、主机或服务中 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以使用身份管理(IdM)Web UI 将外部签名的证书添加到 IdM 用户的帐户、主机或服务中。
先决条件
- 您以管理用户的身份登录到身份管理(IdM)Web UI。
流程
-
打开
Identity选项卡,然后选择Users、Hosts或Services子选项卡。 - 单击用户、主机或服务的名称,以打开其配置页面。
单击
Certificates条目旁边的 。图 64.1. 将证书添加给用户帐户
- 将 Base64 或 PEM 编码格式的证书粘贴到文本字段中,然后单击 。
- 单击 以保存更改。
64.3. 使用 IdM CLI 从 IdM 用户、主机或服务帐户中删除外部 CA 发布的证书 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以使用身份管理(IdM)CLI 从 IdM 用户的帐户、主机或服务中删除外部签名的证书。
先决条件
- 您已获得管理员用户的票据授予票据。
流程
要从 IdM 用户中删除证书,请输入:
ipa user-remove-cert user --certificate=MIQTPrajQAwg...
$ ipa user-remove-cert user --certificate=MIQTPrajQAwg...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令要求您指定以下信息:
- 用户名
- Base64 编码的 DER 证书
不是将证书内容复制并粘贴到命令行,您可以将证书转换为 DER 格式,然后将其重新编码为 Base64。例如,要从user 中删除 user_cert.pem 证书,请输入:
ipa user-remove-cert user --certificate="$(openssl x509 -outform der -in user_cert.pem | base64 -w 0)"
$ ipa user-remove-cert user --certificate="$(openssl x509 -outform der -in user_cert.pem | base64 -w 0)"
您可以在不添加任何选项的情况下,以交互方式运行 ipa user-remove-cert 命令。
要从 IdM 主机中删除证书,请输入:
-
ipa host-remove-cert
要从 IdM 服务中删除证书,请输入:
-
ipa service-remove-cert
64.4. 使用 IdM Web UI 从 IdM 用户、主机或服务帐户中删除外部 CA 发布的证书 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以使用身份管理(IdM)Web UI 从 IdM 用户的帐户、主机或服务中删除外部签名的证书。
先决条件
- 您以管理用户的身份登录到身份管理(IdM)Web UI。
流程
-
打开
Identity选项卡,然后选择Users、Hosts或Services子选项卡。 - 单击用户、主机或服务的名称,以打开其配置页面。
- 单击要删除的证书旁边的 ,然后选择 。
- 单击 以保存更改。
第 65 章 在身份管理中创建和管理证书配置文件 复制链接链接已复制到粘贴板!
证书授权机构(CA)在签名证书时使用证书配置文件,以确定证书签名请求(CSR)是否可接受,如果可接受,则证书中存在哪些功能和扩展。证书配置文件与发布特定类型的证书相关联。通过组合证书配置文件和 CA 访问控制列表(ACL),您可以定义和控制对自定义证书配置文件的访问。
在描述如何创建证书配置文件时,流程使用 S/MIME 证书作为示例。某些电子邮件程序支持使用安全多用途 Internet 邮件扩展(S/MIME)协议进行数字签名和加密的电子邮件。使用 S/MIME 签名或加密电子邮件消息,要求消息的发件人具有 S/MIME 证书。
65.1. 什么是证书配置文件? 复制链接链接已复制到粘贴板!
您可以使用证书配置文件确定证书的内容,以及发布证书的限制,如下所示:
- 用于加密证书签名请求的签名算法。
- 证书的默认有效期。
- 用于吊销证书的吊销原因。
- 如果主体的通用名称被复制到主题替代名称字段。
- 证书中应存在的特性和扩展。
单个证书配置文件与签发特定类型的证书相关联。您可以为 IdM 中的用户、服务和主机定义不同的证书配置文件。IdM 默认包括以下证书配置文件:
-
caIPAserviceCert -
IECUserRoles -
KDCs_PKINIT_Certs(内部使用)
另外,您可以创建和导入自定义配置文件,允许您为特定目的发布证书。例如,您可以将特定配置文件的使用限制为一个用户或一个组,防止其他用户和组使用该配置文件发布证书进行身份验证。要创建自定义证书配置文件,请使用 ipa certprofile 命令。
65.2. 创建证书配置文件 复制链接链接已复制到粘贴板!
按照以下流程,通过命令行创建证书配置文件,方法是创建一个配置文件来请求 S/MIME 证书。
流程
通过复制现有的默认配置文件来创建自定义配置文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在文本编辑器中打开新创建的配置文件。
vi smime.cfg
$ vi smime.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
Profile ID更改为反映配置文件用法的名称,如smime。注意当您导入新创建的配置文件时,如果有
profileId字段,则其必须与命令行中指定的 ID 匹配。更新扩展的密钥用法配置。默认的扩展的密钥用法扩展配置用于 TLS 服务器和客户端身份验证。例如,对于 S/MIME,必须为电子邮件保护配置扩展的密钥用法:
policyset.serverCertSet.7.default.params.exKeyUsageOIDs=1.3.6.1.5.5.7.3.4
policyset.serverCertSet.7.default.params.exKeyUsageOIDs=1.3.6.1.5.5.7.3.4Copy to Clipboard Copied! Toggle word wrap Toggle overflow 导入新配置文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证新证书配置文件已被导入:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
65.3. 什么是 CA 访问控制列表? 复制链接链接已复制到粘贴板!
证书颁发机构访问控制列表(CA ACL)规则定义哪些配置文件可用于向哪些主体发布证书。您可以使用 CA ACL 来执行此操作,例如:
- 确定可以使用特定配置文件向哪些用户、主机或服务发布证书
- 确定允许哪个 IdM 证书颁发机构或子 CA 发布证书
例如,使用 CA ACL ,您可以将只用于伦敦办事处工作的员工的配置文件限制为与伦敦办事处相关的 IdM 用户组的成员。
用于管理 CA ACL 规则的 ipa caacl 工具允许特权用户添加、显示、修改或删除指定的 CA ACL。
65.4. 定义 CA ACL 以控制对证书配置文件的访问 复制链接链接已复制到粘贴板!
按照以下流程,使用 caacl 工具定义 CA 访问控制列表(ACL)规则,以允许组中的用户访问自定义证书配置文件。在这种情况下,流程描述了如何创建 S/MIME 用户的组以及 CA ACL,以允许该组中的用户访问 smime 证书配置文件。
先决条件
- 确保您已获取 IdM 管理员的凭据。
流程
为证书配置文件的用户创建一个新组:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个新用户来添加到
smime_user_group组中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
smime_user添加到smime_users_group组中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 CA ACL 以允许组中的用户访问证书配置文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将用户组添加到 CA ACL 中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 向 CA ACL 中添加证书配置文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查看您创建的 CA ACL 的详情:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
65.5. 使用证书配置文件和 CA ACL 发布证书 复制链接链接已复制到粘贴板!
当证书颁发机构访问控制列表(CA ACL)允许时,您可以使用证书配置文件来请求证书。按照以下流程,使用自定义证书配置文件为用户请求 S/MIME 证书,该配置文件已通过 CA ACL 授予了访问权限。
先决条件
- 您的证书配置文件已创建。
- 允许用户使用所需证书配置文件请求证书的 CA ACL已创建。
您可以绕过 CA ACL 检查用户是否执行了 cert-request 命令:
-
是
admin用户。 -
具有
请求忽略 CA ACL 的证书权限。
流程
为用户生成证书请求。例如,使用 OpenSSL:
openssl req -new -newkey rsa:2048 -days 365 -nodes -keyout private.key -out cert.csr -subj '/CN=smime_user'
$ openssl req -new -newkey rsa:2048 -days 365 -nodes -keyout private.key -out cert.csr -subj '/CN=smime_user'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为用户从 IdM CA 请求新证书:
ipa cert-request cert.csr --principal=smime_user --profile-id=smime
$ ipa cert-request cert.csr --principal=smime_user --profile-id=smimeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:将 --ca sub-CA_name 选项传给命令,以从子 CA 中请求证书,而不是根 CA。
验证
验证新发布的证书是否已分配给用户:
ipa user-show user User login: user ... Certificate: MIICfzCCAWcCAQA... ...
$ ipa user-show user User login: user ... Certificate: MIICfzCCAWcCAQA... ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
65.6. 修改证书配置文件 复制链接链接已复制到粘贴板!
按照以下流程,使用 ipa certprofile-mod 命令直接通过命令行修改证书配置文件。
流程
确定您要修改的证书配置文件的证书配置文件 ID。显示当前存储在 IdM 中的所有证书配置文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改证书配置文件描述。例如,如果您使用现有的配置文件为 S/MIME 证书创建了自定义证书配置文件,请按照新用法更改描述:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在文本编辑器中打开您的客户证书配置文件,并进行修改以满足您的要求:
vi smime.cfg
# vi smime.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow 有关可以在证书配置文件中配置哪些选项的详情,请查看 证书配置文件配置参数。
更新现有证书配置文件:
ipa certprofile-mod _profile_ID_ --file=smime.cfg
# ipa certprofile-mod _profile_ID_ --file=smime.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证证书配置文件是否已更新:
ipa certprofile-show smime Profile ID: smime Profile description: New certificate profile description Store issued certificates: TRUE
$ ipa certprofile-show smime Profile ID: smime Profile description: New certificate profile description Store issued certificates: TRUECopy to Clipboard Copied! Toggle word wrap Toggle overflow
65.7. 证书配置文件配置参数 复制链接链接已复制到粘贴板!
证书配置文件配置参数存储在 CA 配置文件目录 /var/lib/pki/pki-tomcat/ca/profiles/ca 中的 profile_name.cfg 文件中。配置文件的所有参数 - 默认值、输入、输出和约束 - 都在单个策略集中配置。为证书配置集设置的策略具有名称 policyset.policyName.policyNumber。例如,对于策略设置 serverCertSet :
每个策略集都包含按照策略 ID 号为证书配置文件配置的策略列表,以它们的评估顺序排列。服务器为其收到的每个请求评估每个策略集。收到单个证书请求时,将评估一个集合,并忽略配置文件中的任何其他集合。发布双密钥对后,对第一个证书请求评估第一个策略集,对第二个证书请求评估第二个策略集。在发布双密钥对时,在发布单个证书或多个集合时,您不需要多个策略集。
| 参数 | 描述 |
|---|---|
| desc |
证书配置文件的自由文本描述,显示在终端实体页面上。例如, |
| enable |
启用配置文件,使它可通过终端实体页面访问。例如: |
| auth.instance_id |
设置身份验证管理者插件,用来验证证书请求。要进行自动注册,如果身份验证成功,CA 会立即发布证书。如果身份验证失败或者没有指定身份验证插件,则会将请求排队,来由代理手动批准。例如, |
| authz.acl |
指定授权约束。这主要用于设置组评估访问控制列表(ACL)。例如,
在基于目录的用户证书续订中,此选项用于确保原始请求者和当前验证的用户是同一个。在评估授权前,实体必须验证(绑定或登录到系统)。 |
| name |
证书配置文件的名称。例如, |
| input.list |
按名称列出证书配置文件允许的输入。例如, |
| input.input_id.class_id |
按输入 ID(在 input.list 中列出的输入名称)表示输入的 java 类名称。例如, |
| output.list |
按名称列出证书配置文件可能的输出格式。例如 |
| output.output_id.class_id |
为在 output.list 中命名的输出格式指定 java 类名称。例如: |
| policyset.list |
列出配置的证书配置文件规则。对于双证书,一组规则适用于签名密钥,另一组规则适用于加密密钥。单个证书仅使用一组证书配置文件规则。例如, |
| policyset.policyset_id.list |
按照策略 ID 号,按评估的顺序,列出为证书配置文件配置的策略集合中的策略。例如: |
| policyset.policyset_id.policy_number.constraint.class_id | 表示配置文件规则中配置的默认约束插件集的 java 类名称。例如, policyset.serverCertSet.1.constraint.class_id=subjectNameConstraintImpl。 |
| policyset.policyset_id.policy_number.constraint.name | 提供用户定义的约束名称。例如,policyset.serverCertSet.1.constraint.name=Subject Name Constraint。 |
| policyset.policyset_id.policy_number.constraint.params.attribute | 为约束的允许的属性指定值。可能的属性因约束类型而异。例如, policyset.serverCertSet.1.constraint.params.pattern=CN=.*. |
| policyset.policyset_id.policy_number.default.class_id | 给出配置文件规则中默认集的 java 类名称。例如, policyset.serverCertSet.1.default.class_id=userSubjectNameDefaultImpl |
| policyset.policyset_id.policy_number.default.name | 给出用户定义的默认值的名称。例如: policyset.serverCertSet.1.default.name=Subject Name Default |
| policyset.policyset_id.policy_number.default.params.attribute | 为默认值的允许的属性指定值。可能的属性因默认类型而异。例如: policyset.serverCertSet.1.default.params.name=CN=(Name)$request.requestor_name$. |
第 66 章 管理 IdM 中证书的有效性 复制链接链接已复制到粘贴板!
在身份管理(IdM)中,您可以管理现有证书和未来要发布的证书的有效性,但方法有所不同。
66.1. 管理 IdM CA 发布的现有证书的有效性 复制链接链接已复制到粘贴板!
在 IdM 中,可以使用以下方法查看证书的到期日期:
您可以使用以下方法管理 IdM CA 发布的现有证书的有效性:
通过使用原始证书签名请求(CSR)或私钥生成的新 CSR 请求新的证书来续订证书。您可以使用以下工具请求新证书:
- certmonger
-
您可以使用
certmonger请求服务证书。证书到期之前,certmonger将自动续订证书,从而确保服务证书持续有效。详情请参阅 使用 certmonger 为服务获取 IdM 证书 。 - certutil
-
您可以使用
certutil续订用户、主机和服务证书。有关请求用户证书的详情,请参阅 请求新的用户证书并将其导出到客户端 ; - openssl
-
您可以使用
openssl续订用户、主机和服务证书。
吊销证书。详情请查看:
如果证书已被临时吊销,则恢复证书。详情请查看:
66.2. 管理 IdM CA 发布的未来证书的有效性 复制链接链接已复制到粘贴板!
要管理 IdM CA 发布的未来证书的有效性,请修改、导入或创建证书配置文件。详情请参阅在 在身份管理中创建和管理证书配置文件。
66.3. 在 IdM WebUI 中查看证书的过期日期 复制链接链接已复制到粘贴板!
您可以使用 IdM WebUI 来查看 IdM CA 发布的所有证书的到期日期。
先决条件
- 确保您已获取管理员的凭证。
流程
-
在
Authentication菜单中,点击Certificates>Certificates。 单击证书的序列号,来打开证书信息页面。
图 66.1. 证书列表
-
在证书信息页面中,找到
Expires On信息。
66.4. 在 CLI 中查看证书的到期日期 复制链接链接已复制到粘贴板!
您可以使用命令行(CLI)查看证书的到期日期。
流程
使用
openssl工具以人类可读的格式打开文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
66.5. 吊销带有集成 IdM CA 的证书 复制链接链接已复制到粘贴板!
66.5.1. 证书吊销原因 复制链接链接已复制到粘贴板!
已撤销的证书无效,无法用于身份验证。所有取消都是永久的,除了原因 6:证书冻结。
默认的吊销原因为 0:未指定。
| ID | 原因 | 解释 |
|---|---|---|
| 0 | 未指定 | |
| 1 | 密钥泄露 | 签发证书的密钥不再被信任。 可能的原因是:丢失令牌,非正常访问文件。 |
| 2 | CA 泄露 | 签发证书的 CA 不再被信任。 |
| 3 | 隶属关系更改了 | 可能的原因: * 本人已离开公司或转到另一个部门。 * 主机或服务将被停用。 |
| 4 | 被取代 | 较新的证书替换了当前的证书。 |
| 5 | 停止操作 | 主机或服务将被停用。 |
| 6 | 证书冻结 | 证书被临时吊销。您可稍后恢复证书。 |
| 8 | 从 CRL 中删除 | 证书不再包含在证书吊销列表(CRL)中。 |
| 9 | 特权收回 | 用户、主机或服务不再被允许使用证书。 |
| 10 | 属性授权(AA)泄露 | AA 证书不再被信任。 |
66.5.2. 使用 IdM Web UI 吊销带有集成 IdM CA 的证书 复制链接链接已复制到粘贴板!
如果您知道您已丢失证书的私钥,则您必须吊销证书以防止其被滥用。完成此流程,以使用 IdM WebUI 吊销 IdM CA 发布的证书。
流程
-
点击
Authentication>Certificates>Certificates。 单击证书的序列号,来打开证书信息页面。
图 66.2. 证书列表
- 在证书信息页面中,单击 → 。
- 选择吊销的原因,然后单击 。详情请参阅 证书吊销原因。
66.5.3. 使用 IdM CLI 吊销带有集成 IdM CA 的证书 复制链接链接已复制到粘贴板!
如果您知道您已丢失证书的私钥,则您必须吊销证书以防止其被滥用。完成此流程,以使用 IdM CLI 吊销 IdM CA 发布的证书。
流程
使用
ipa cert-revoke命令,并指定:- 证书序列号
- 吊销原因的 ID 号;有关详细信息,请参阅 证书吊销原因
例如,因为原因 1 : 密钥泄露,要吊销序列号为 1032 的证书,请输入:
ipa cert-revoke 1032 --revocation-reason=1
$ ipa cert-revoke 1032 --revocation-reason=1
有关请求新证书的详情,请查看以下文档:
66.6. 恢复带有集成 IdM CA 的证书 复制链接链接已复制到粘贴板!
如果您因为原因 6 :证书冻结 吊销了证书 ,如果证书的私钥未泄露,您可以恢复它。要恢复证书,请使用以下流程之一:
66.6.1. 使用 IdM WebUI 恢复带有集成 IdM CA 的证书 复制链接链接已复制到粘贴板!
完成这个流程,来使用 IdM WebUI 恢复因为原因 6 :凭证冻结 而吊销的 IdM 证书。
流程
-
在
Authentication菜单中,点击Certificates>Certificates。 单击证书的序列号,来打开证书信息页面。
图 66.3. 证书列表
- 在证书信息页面中,单击 → 。
66.6.2. 使用 IdM CLI 恢复带有集成 IdM CA 的证书 复制链接链接已复制到粘贴板!
完成此流程,以使用 IdM CLI 恢复因为原因 6 :证书冻结 而撤销的 IdM 证书。
流程
使用
ipa cert-remove-hold命令并指定证书序列号。例如:ipa cert-remove-hold 1032
$ ipa cert-remove-hold 1032Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 67 章 为智能卡验证配置身份管理 复制链接链接已复制到粘贴板!
身份管理(IdM)支持使用如下方式的智能卡身份验证:
- IdM 证书颁发机构发布的用户证书
- 外部证书颁发机构发布的用户证书
您可以在 IdM 中为两种类型的证书配置智能卡验证。在这种情况下,rootca.pem CA 证书是包含可信外部证书颁发机构证书的文件。
目前,IdM 不支持导入共享相同主题区分名称(DN)但加密不同的多个 CA。
67.1. 为智能卡验证配置 IdM 服务器 复制链接链接已复制到粘贴板!
此流程涵盖了如何为您的身份管理(IdM) CA 信任的 <EXAMPLE.ORG> 域的证书颁发机构(CA)发布的用户启用智能卡验证。
先决条件
- 有到 IdM 服务器的 root 访问权限。
您有 root CA 证书和所有中间 CA 证书:
- 为 <EXAMPLE.ORG> CA 直接发布或者通过一个或多个其子 CA 发布证书的根 CA 的证书。您可以从颁发机构发布证书的网页下载证书链。详情请查看 配置浏览器来启用证书身份验证 中的步骤 1 - 4a。
-
IdM CA 证书。您可以从运行 IdM CA 实例的 IdM 服务器上的
/etc/ipa/ca.crt文件获取 CA 证书。 - 所有中间 CA 的证书,即介于 <EXAMPLE.ORG> CA 和 IdM CA 之间。
流程
创建要进行配置的目录:
mkdir ~/SmartCard/
[root@server]# mkdir ~/SmartCard/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 进入该目录:
cd ~/SmartCard/
[root@server]# cd ~/SmartCard/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取存储在 PEM 格式文件中的相关 CA 证书。如果您的 CA 证书存储再不同格式的文件中,如 DER,请将其转换为 PEM 格式。IdM 证书颁发机构证书采用 PEM 格式,位于
/etc/ipa/ca.crt文件中。将 DER 文件转换为 PEM 文件:
openssl x509 -in <filename>.der -inform DER -out <filename>.pem -outform PEM
# openssl x509 -in <filename>.der -inform DER -out <filename>.pem -outform PEMCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为方便起见,将证书复制到您要进行配置的目录中:
cp /tmp/rootca.pem ~/SmartCard/ cp /tmp/subca.pem ~/SmartCard/ cp /tmp/issuingca.pem ~/SmartCard/
[root@server SmartCard]# cp /tmp/rootca.pem ~/SmartCard/ [root@server SmartCard]# cp /tmp/subca.pem ~/SmartCard/ [root@server SmartCard]# cp /tmp/issuingca.pem ~/SmartCard/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果您使用外部证书颁发机构的证书,请使用
openssl x509工具查看PEM格式的文件的内容,以检查Issuer和Subject值是否正确:openssl x509 -noout -text -in rootca.pem | more
[root@server SmartCard]# openssl x509 -noout -text -in rootca.pem | moreCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用管理员特权,通过内置的
ipa-advise工具生成配置脚本:kinit admin ipa-advise config-server-for-smart-card-auth > config-server-for-smart-card-auth.sh
[root@server SmartCard]# kinit admin [root@server SmartCard]# ipa-advise config-server-for-smart-card-auth > config-server-for-smart-card-auth.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow config-server-for-smart-card-auth.sh脚本执行以下操作:- 它配置 IdM Apache HTTP 服务器。
- 它在 KDC(Key Distribution Center)中启用 PKINIT(Public Key Cryptography for Initial Authentication in Kerberos)。
- 它将 IdM Web UI 配置为接受智能卡授权请求。
执行脚本,将包含根 CA 和子 CA 证书的 PEM 文件添加为参数:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在任何子 CA 证书前,确保将根 CA 的证书添加为参数,并且 CA 或子 CA 证书还没有过期。
可选:如果发布用户证书的证书颁发机构不提供任何在线证书状态协议(OCSP)响应程序,则您可能需要禁用 OCSP 检查,以对 IdM Web UI 进行身份验证:
在
/etc/httpd/conf.d/ssl.conf文件中将SSLOCSPEnable参数设为off:SSLOCSPEnable off
SSLOCSPEnable offCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 Apache 守护进程(httpd)使更改立即生效:
systemctl restart httpd
[root@server SmartCard]# systemctl restart httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
警告如果您只使用 IdM CA 发出的用户证书,不要禁用 OCSP 检查。OCSP 响应器是 IdM 的一部分。
有关如何保持 OCSP 检查处于启用状态,同时防止 IdM 服务器拒绝用户证书(如果 IdM 服务器不包含有关颁发用户证书的 CA 侦听 OCSP 服务请求的位置的信息)的说明,请参阅 Apache mod_ssl 配置选项 中的
SSLOCSPDefaultResponder指令。
该服务器现在被配置为智能卡验证。
要在整个拓扑中启用智能卡验证,请在每个 IdM 服务器中运行操作过程。
67.2. 使用 Ansible 为智能卡验证配置 IdM 服务器 复制链接链接已复制到粘贴板!
在此过程中,您可以使用 Ansible 为证书是由身份管理(IdM) CA 信任的 <EXAMPLE.ORG> 域的证书颁发机构(CA)发布的用户启用智能卡验证。
先决条件
-
您有到 IdM 服务器的
root访问权限。 -
您需要知道 IdM
admin密码。 您有 root CA 证书、IdM CA 证书和所有中间 CA 证书:
- 为 <EXAMPLE.ORG> CA 直接发布或者通过一个或多个其子 CA 发布证书的根 CA 的证书。您可以从颁发机构发布证书的网页下载证书链。详情请参阅 配置浏览器以启用证书验证 中的步骤 4。
-
IdM CA 证书。您可以从任何 IdM CA 服务器上的
/etc/ipa/ca.crt文件获取 CA 证书。 - 介于<EXAMPLE.ORG> CA 和 IdM CA 之间的所有 CA 的证书。
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
如果您的 CA 证书以不同格式(如
DER)的文件存储,请将其转换为PEM格式:openssl x509 -in <filename>.der -inform DER -out <filename>.pem -outform PEM
# openssl x509 -in <filename>.der -inform DER -out <filename>.pem -outform PEMCopy to Clipboard Copied! Toggle word wrap Toggle overflow IdM 证书颁发机构证书采用
PEM格式,并位于/etc/ipa/ca.crt文件中。可选:使用
openssl x509工具查看PEM格式的文件内容,以检查Issuer和Subject值是否正确:openssl x509 -noout -text -in root-ca.pem | more
# openssl x509 -noout -text -in root-ca.pem | moreCopy to Clipboard Copied! Toggle word wrap Toggle overflow 进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建专用于 CA 证书的子目录:
mkdir SmartCard/
$ mkdir SmartCard/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为方便起见,将所有必需的证书复制到 ~/MyPlaybooks/SmartCard/ 目录中:
cp /tmp/root-ca.pem ~/MyPlaybooks/SmartCard/ cp /tmp/intermediate-ca.pem ~/MyPlaybooks/SmartCard/ cp /etc/ipa/ca.crt ~/MyPlaybooks/SmartCard/ipa-ca.crt
# cp /tmp/root-ca.pem ~/MyPlaybooks/SmartCard/ # cp /tmp/intermediate-ca.pem ~/MyPlaybooks/SmartCard/ # cp /etc/ipa/ca.crt ~/MyPlaybooks/SmartCard/ipa-ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Ansible 清单文件中指定以下内容:
- 要为智能卡验证配置的 IdM 服务器。
- IdM 管理员密码。
CA 证书的路径按以下顺序:
- root CA 证书文件
- 中间 CA 证书文件
- IdM CA 证书文件
文件可以类似如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下内容创建
install-smartcard-server.ymlplaybook:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储密码的文件保护 secret.yml 文件以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory install-smartcard-server.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory install-smartcard-server.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow ipasmartcard_serverAnsible 角色执行以下操作:- 它配置 IdM Apache HTTP 服务器。
- 它在 KDC(Key Distribution Center)中启用 PKINIT(Public Key Cryptography for Initial Authentication in Kerberos)。
- 它将 IdM Web UI 配置为接受智能卡授权请求。
可选: 如果发布用户证书的证书颁发机构不提供任何在线证书状态协议(OCSP)响应程序,您可能需要禁用对 IdM Web UI 进行身份验证的 OCSP 检查:
以
root用户身份连接到 IdM 服务器:ssh root@ipaserver.idm.example.com
ssh root@ipaserver.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/etc/httpd/conf.d/ssl.conf文件中将SSLOCSPEnable参数设为off:SSLOCSPEnable off
SSLOCSPEnable offCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 Apache 守护进程(httpd)使更改立即生效:
systemctl restart httpd
# systemctl restart httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
警告如果您只使用 IdM CA 发出的用户证书,不要禁用 OCSP 检查。OCSP 响应器是 IdM 的一部分。
有关如何保持 OCSP 检查处于启用状态,同时防止 IdM 服务器拒绝用户证书(如果 IdM 服务器不包含有关颁发用户证书的 CA 侦听 OCSP 服务请求的位置的信息)的说明,请参阅 Apache mod_ssl 配置选项 中的
SSLOCSPDefaultResponder指令。
清单文件中列出的服务器现在被配置为智能卡验证。
要在整个拓扑中启用智能卡验证,将 Ansible playbook 中的 hosts 变量设置为 ipacluster :
--- - name: Playbook to setup smartcard for IPA server and replicas hosts: ipacluster [...]
---
- name: Playbook to setup smartcard for IPA server and replicas
hosts: ipacluster
[...]
67.3. 为智能卡验证配置 IdM 客户端 复制链接链接已复制到粘贴板!
您可以为智能卡验证配置 IdM 客户端。这个过程需要运行在每个 IdM 系统、客户端或服务器上,您希望在使用智能卡进行身份验证时连接到这些系统。例如,若要启用从主机 A 到主机 B 的 ssh 连接,需要在主机 B 上运行脚本。
作为管理员,运行这个流程来使用如下方法启用智能卡身份验证
ssh协议详情请查看 使用智能卡验证配置 SSH 访问。
- 控制台登录
- GNOME 显示管理器(GDM)
-
su命令
对于向 IdM Web UI 进行身份验证,不需要此流程。向 IdM Web UI 进行身份验证涉及两个主机,它们都不必是 IdM 客户端:
- 运行浏览器的机器。机器可以在 IdM 域之外。
-
在其上运行
httpd的 IdM 服务器。
以下流程假设您在 IdM 客户端,而不是 IdM 服务器上配置智能卡身份验证。因此,您需要两台计算机:生成配置脚本的 IdM 服务器,以及运行脚本的 IdM 客户端。
先决条件
- 已经为智能卡验证配置了 IdM 服务器,如 为智能卡验证配置 IdM 服务器 中所述。
- 有对 IdM 服务器和 IdM 客户端的 root 访问权限。
- 您有 root CA 证书和所有中间 CA 证书。
-
您使用
--mkhomedir选项安装了 IdM 客户端,以确保远程用户可以成功登录。如果您没有创建主目录,则默认登录位置为目录结构的根目录/。
流程
在 IdM 服务器上,使用管理员权限通过
ipa-advise生成配置脚本:kinit admin ipa-advise config-client-for-smart-card-auth > config-client-for-smart-card-auth.sh
[root@server SmartCard]# kinit admin [root@server SmartCard]# ipa-advise config-client-for-smart-card-auth > config-client-for-smart-card-auth.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow config-client-for-smart-card-auth.sh脚本执行以下操作:- 它配置智能卡守护进程。
- 它设置系统范围的信任存储。
- 它配置系统安全服务守护进程(SSSD),允许用户使用其用户名和密码或其智能卡进行验证。有关智能卡验证的 SSSD 配置集选项的详情,请参考 RHEL 中的智能卡验证选项。
从 IdM 服务器中,将脚本复制到 IdM 客户端机器中选择的目录中:
scp config-client-for-smart-card-auth.sh root@client.idm.example.com:/root/SmartCard/ Password: config-client-for-smart-card-auth.sh 100% 2419 3.5MB/s 00:00
[root@server SmartCard]# scp config-client-for-smart-card-auth.sh root@client.idm.example.com:/root/SmartCard/ Password: config-client-for-smart-card-auth.sh 100% 2419 3.5MB/s 00:00Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从 IdM 服务器中,使用 PEM 格式将 CA 证书文件复制到上一步中使用的 IdM 客户端机器中的同一目录中:
scp {rootca.pem,subca.pem,issuingca.pem} root@client.idm.example.com:/root/SmartCard/ Password: rootca.pem 100% 1237 9.6KB/s 00:00 subca.pem 100% 2514 19.6KB/s 00:00 issuingca.pem 100% 2514 19.6KB/s 00:00[root@server SmartCard]# scp {rootca.pem,subca.pem,issuingca.pem} root@client.idm.example.com:/root/SmartCard/ Password: rootca.pem 100% 1237 9.6KB/s 00:00 subca.pem 100% 2514 19.6KB/s 00:00 issuingca.pem 100% 2514 19.6KB/s 00:00Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在客户端机器上执行脚本,将包含 CA 证书的 PEM 文件添加为参数:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在任何子 CA 证书前,确保将根 CA 的证书添加为参数,并且 CA 或子 CA 证书还没有过期。
现在为智能卡验证配置了客户端。
67.4. 使用 Ansible 为智能卡验证配置 IdM 客户端 复制链接链接已复制到粘贴板!
按照以下流程,使用 ansible-freeipa ipasmartcard_client 模块配置特定的身份管理(IdM)客户端,以允许 IdM 用户使用智能卡进行身份验证。运行这个步骤为使用以下任一方法的 IdM 用户启用智能卡验证:
ssh协议详情请查看 使用智能卡验证配置 SSH 访问。
- 控制台登录
- GNOME 显示管理器(GDM)
-
su命令
对于向 IdM Web UI 进行身份验证,不需要此流程。向 IdM Web UI 进行身份验证涉及两个主机,它们都不必是 IdM 客户端:
- 运行浏览器的机器。机器可以在 IdM 域之外。
-
在其上运行
httpd的 IdM 服务器。
先决条件
- 为智能卡验证配置了您的 IdM 服务器,如使用 Ansible 配置 IdM 服务器进行智能卡验证 所述。
- 有对 IdM 服务器和 IdM 客户端的 root 访问权限。
- 您有 root CA 证书、IdM CA 证书以及所有中间 CA 证书。
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible 库存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
如果您的 CA 证书以不同格式(如
DER)的文件存储,请将其转换为PEM格式:openssl x509 -in <filename>.der -inform DER -out <filename>.pem -outform PEM
# openssl x509 -in <filename>.der -inform DER -out <filename>.pem -outform PEMCopy to Clipboard Copied! Toggle word wrap Toggle overflow IdM CA 证书采用
PEM格式,并位于/etc/ipa/ca.crt文件中。可选:使用
openssl x509工具查看PEM格式的文件内容,以检查Issuer和Subject值是否正确:openssl x509 -noout -text -in root-ca.pem | more
# openssl x509 -noout -text -in root-ca.pem | moreCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Ansible 控制节点上,导航到 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建专用于 CA 证书的子目录:
mkdir SmartCard/
$ mkdir SmartCard/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为方便起见,将所有必需的证书复制到 ~/MyPlaybooks/SmartCard/ 目录中,例如:
cp /tmp/root-ca.pem ~/MyPlaybooks/SmartCard/ cp /tmp/intermediate-ca.pem ~/MyPlaybooks/SmartCard/ cp /etc/ipa/ca.crt ~/MyPlaybooks/SmartCard/ipa-ca.crt
# cp /tmp/root-ca.pem ~/MyPlaybooks/SmartCard/ # cp /tmp/intermediate-ca.pem ~/MyPlaybooks/SmartCard/ # cp /etc/ipa/ca.crt ~/MyPlaybooks/SmartCard/ipa-ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Ansible 清单文件中指定以下内容:
- 要为智能卡验证配置的 IdM 客户端。
- IdM 管理员密码。
CA 证书的路径按以下顺序:
- root CA 证书文件
- 中间 CA 证书文件
- IdM CA 证书文件
文件可以类似如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下内容创建
install-smartcard-clients.ymlplaybook:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件。
运行 Ansible playbook。指定 playbook 和清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory install-smartcard-clients.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory install-smartcard-clients.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow ipasmartcard_clientAnsible 角色执行以下操作:- 它配置智能卡守护进程。
- 它设置系统范围的信任存储。
- 它将系统安全服务守护进程(SSSD)配置为允许用户通过其用户名和密码或者智能卡进行身份验证。有关智能卡验证的 SSSD 配置集选项的详情,请参考 RHEL 中的智能卡验证选项。
现在为智能卡验证配置了清单文件的 ipaclients 部分中列出的客户端。
如果您使用 --mkhomedir 选项安装了 IdM 客户端,远程用户将能够登录到其主目录。否则,默认登录位置是目录结构 / 的根目录。
67.5. 在 IdM Web UI 的用户条目中添加证书 复制链接链接已复制到粘贴板!
您可以在 IdM Web UI 中的用户条目中添加外部证书。
也可以将证书映射数据上传到 IdM 中的用户条目,而不必上传整个证书。包含完整证书或证书映射数据的用户条目可以和相应的证书映射规则一起使用,以便于系统管理员配置智能卡身份验证。详情请查看
如果用户的证书由 IdM 证书颁发机构发布,则证书已存储在用户条目中,您不需要按照此流程操作。
先决条件
- 您有要添加到用户条目的证书。
流程
- 如果要给另一个用户添加证书,请以管理员身份登录到 IdM Web UI。要在您自己的配置文件中添加证书,您不需要管理员的凭证。
-
导航到
Users→Active users→sc_user。 -
找到
Certificate选项,并单击Add。 在命令行中,使用
cat实用程序或文本编辑器以PEM格式显示证书:cat testuser.crt
[user@client SmartCard]$ cat testuser.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 将证书从 CLI 复制并粘贴到 Web UI 中打开的窗口中。
-
点
Add。
sc_user 条目现在包含一个外部证书。
67.6. 在 IdM CLI 中向用户条目中添加证书 复制链接链接已复制到粘贴板!
您可以在 IdM CLI 中的用户条目中添加外部证书。
也可以将证书映射数据上传到 IdM 中的用户条目,而不必上传整个证书。包含完整证书或证书映射数据的用户条目可以和相应的证书映射规则一起使用,以便于系统管理员配置智能卡身份验证。详情请参阅 配置身份验证的证书映射规则。
如果用户的证书由 IdM 证书颁发机构发布,则证书已存储在用户条目中,您不需要按照此流程操作。
先决条件
- 您有要添加到用户条目的证书。
流程
如果要给另一个用户添加证书,请以管理员身份登录到 IdM CLI:
kinit admin
[user@client SmartCard]$ kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要在您自己的配置文件中添加证书,您不需要管理员的凭证。
kinit <smartcard_user>
[user@client SmartCard]$ kinit <smartcard_user>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个包含证书的环境变量,该变量移除了标头和页脚,并串联成一行,这是
ipa user-add-cert命令期望的格式:export CERT=`openssl x509 -outform der -in testuser.crt | base64 -w0 -`
[user@client SmartCard]$ export CERT=`openssl x509 -outform der -in testuser.crt | base64 -w0 -`Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,
testuser.crt文件中的证书必须是PEM格式。使用
ipa user-add-cert命令将证书添加到 & lt;smartcard_user > 的配置集中:ipa user-add-cert <smartcard_user> --certificate=$CERT
[user@client SmartCard]$ ipa user-add-cert <smartcard_user> --certificate=$CERTCopy to Clipboard Copied! Toggle word wrap Toggle overflow
& lt;smartcard_user& gt; 条目现在包含外部证书。
67.7. 安装用来管理和使用智能卡的工具 复制链接链接已复制到粘贴板!
在配置智能卡前,您必须安装可以生成证书并启动 pscd 服务的对应工具。
先决条件
-
您有
root权限。
流程
安装
opensc和gnutls-utils软件包:yum -y install opensc gnutls-utils
# yum -y install opensc gnutls-utilsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
pcscd服务。systemctl start pcscd
# systemctl start pcscdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证
pcscd服务是否正在运行:systemctl status pcscd
# systemctl status pcscdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
67.8. 准备智能卡并将证书和密钥上传到智能卡 复制链接链接已复制到粘贴板!
按照以下流程,使用 pkcs15-init 工具配置智能卡,该工具帮助您配置:
- 擦除智能卡
- 设置新的 PIN 和可选的 PIN Unblocking Keys(PUKs)
- 在智能卡上创建新插槽
- 在插槽存储证书、私钥和公钥
- 如果需要,请锁定智能卡设置,因为某些智能卡需要这个类型的最终化
pkcs15-init 工具可能无法使用所有智能卡。您必须使用您使用智能卡的工具。
先决条件
已安装
opensc软件包,其中包括pkcs15-init工具。如需了解更多详细信息,请参阅 安装用于管理和使用智能卡的工具。
- 该卡插入读卡器并连接到计算机。
-
您有一个要存储在智能卡上的私钥、公钥和证书。在此流程中,
testuser.key、testuserpublic.key和testuser.crt是用于私钥、公钥和证书的名称。 - 您有当前的智能卡用户 PIN 和 Security Officer PIN (SO-PIN)。
流程
擦除智能卡并使用您的 PIN 验证自己:
pkcs15-init --erase-card --use-default-transport-keys Using reader with a card: Reader name PIN [Security Officer PIN] required. Please enter PIN [Security Officer PIN]:
$ pkcs15-init --erase-card --use-default-transport-keys Using reader with a card: Reader name PIN [Security Officer PIN] required. Please enter PIN [Security Officer PIN]:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个卡已经被清除。
初始化智能卡,设置您的用户 PIN 和 PUK,以及您的安全响应 PIN 和 PUK:
pkcs15-init --create-pkcs15 --use-default-transport-keys \ --pin 963214 --puk 321478 --so-pin 65498714 --so-puk 784123 Using reader with a card: Reader name$ pkcs15-init --create-pkcs15 --use-default-transport-keys \ --pin 963214 --puk 321478 --so-pin 65498714 --so-puk 784123 Using reader with a card: Reader nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow pcks15-init工具在智能卡上创建一个新插槽。为插槽设置标签和验证 ID:
pkcs15-init --store-pin --label testuser \ --auth-id 01 --so-pin 65498714 --pin 963214 --puk 321478 Using reader with a card: Reader name$ pkcs15-init --store-pin --label testuser \ --auth-id 01 --so-pin 65498714 --pin 963214 --puk 321478 Using reader with a card: Reader nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 标签设置为人类可读的值,在本例中为
testuser。auth-id必须是两个十六进制值,在本例中设为01。在智能卡的新插槽中存储并标记私钥:
pkcs15-init --store-private-key testuser.key --label testuser_key \ --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader name$ pkcs15-init --store-private-key testuser.key --label testuser_key \ --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在存储您的私钥并将证书存储在下一步中时,您为
--id指定的值必须相同。建议为--id指定自己的值,否则它们将更复杂的值由工具计算。在智能卡上的新插槽中存储并标记该证书:
pkcs15-init --store-certificate testuser.crt --label testuser_crt \ --auth-id 01 --id 01 --format pem --pin 963214 Using reader with a card: Reader name$ pkcs15-init --store-certificate testuser.crt --label testuser_crt \ --auth-id 01 --id 01 --format pem --pin 963214 Using reader with a card: Reader nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:在智能卡的新插槽中保存并标记公钥:
pkcs15-init --store-public-key testuserpublic.key \ --label testuserpublic_key --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader name$ pkcs15-init --store-public-key testuserpublic.key \ --label testuserpublic_key --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果公钥与私钥或证书对应,请指定与私钥或证书的 ID 相同的 ID。
可选:某些智能卡要求您通过锁定设置来完成卡:
pkcs15-init -F
$ pkcs15-init -FCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个阶段,您的智能卡在新创建的插槽中包含证书、私钥和公钥。您还创建了您的用户 PIN 和 PUK,以及安全响应 PIN 和 PUK。
67.9. 使用智能卡登录到 IdM 复制链接链接已复制到粘贴板!
您可以使用智能卡登录到 IdM Web UI。
先决条件
- web 浏览器被配置为使用智能卡验证。
- IdM 服务器被配置为智能卡验证。
- 在您的智能卡中安装的证书由 IdM 服务器发出,或者已添加到 IdM 的用户条目中。
- 您知道解锁智能卡所需的 PIN。
- 智能卡已插入到读取器中。
流程
- 在浏览器中打开 IdM Web UI。
- 点使用证书登陆。
如果 Password Required 对话框打开,请添加 PIN 来解锁智能卡,然后单击 OK 按钮。
此时会打开 User Identification Request 对话框。
如果智能卡包含多个证书,请在 选择用于验证的证书 下方的下拉列表中选择您要用于身份验证的证书。
- 点确定按钮。
现在,您已成功登录到 IdM Web UI。
67.10. 在 IdM 客户端中使用智能卡验证登录到 GDM 复制链接链接已复制到粘贴板!
GNOME 桌面管理器(GDM)需要身份验证。您可以使用您的密码,但是,您也可以使用智能卡进行身份验证。
按照以下流程,使用智能卡验证访问 GDM。
先决条件
- 为智能卡验证配置了系统。详情请参阅为智能卡验证配置 IdM 客户端。
- 该智能卡包含您的证书和私钥。
- 该用户帐户是 IdM 域的成员。
智能卡上的证书通过以下方式映射到用户条目:
- 为特定用户条目分配证书。详情请参阅 在 IdM Web UI 中向用户条目添加证书 或 在 IdM CLI 中向用户条目添加证书 。
- 应用到该帐户的证书映射数据。详情请查看 在智能卡上配置身份验证的证书映射规则。
流程
- 在读取器中插入智能卡。
- 输入智能卡 PIN。
- 点 Sign In。
您成功登录到 RHEL 系统,并且您有一张由 IdM 服务器提供的 TGT。
验证
在 Terminal 中输入
klist,并检查结果:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
67.11. 在 su 命令中使用智能卡验证 复制链接链接已复制到粘贴板!
切换到其他用户需要身份验证。您可以使用密码或证书。按照以下流程,通过 su 命令使用智能卡。这意味着输入 su 命令后,系统会提示您输入智能卡 PIN。
先决条件
为智能卡验证配置了您的 IdM 服务器和客户端。
- 该智能卡包含您的证书和私钥。请参阅智能卡中的证书
- 该卡插入读卡器并连接到计算机。
流程
在终端窗口中,使用
su命令切换到其他用户:su - <user_name> PIN for smart_card
$ su - <user_name> PIN for smart_cardCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果配置正确,会提示您输入智能卡 PIN。
第 68 章 为 IdM 中智能卡验证配置 ADCS 发布的证书 复制链接链接已复制到粘贴板!
要在 IdM 中为其证书是由活动目录(AD)证书服务发布的用户配置智能卡验证:
- 您的部署是基于身份管理(IdM)和活动目录(AD)之间的跨林信任。
- 您希望允许智能卡验证存储在 AD 中的帐户的用户。
- 证书创建并存储在活动目录证书服务(ADCS)中。
先决条件
身份管理(IdM)和活动目录(AD)信任已安装
详情请参阅在 IdM 和 AD 之间安装信任。
- 活动目录证书服务(ADCS)已安装,并且用户证书已生成
68.1. 信任配置和证书使用量所需的 Windows 服务器设置 复制链接链接已复制到粘贴板!
您必须在 Windows 服务器上配置以下内容:
- 已安装活动目录证书服务(ADCS)
- 创建证书颁发机构
- 可选:如果您使用证书颁发机构 Web 注册,则必须配置互联网信息服务(IIS)
导出的证书必须满足以下条件:
-
密钥必须有
2048位或更多 - 包括一个私钥
您将需要以下格式的证书:个人信息交换—
PKCS #12(.PFX)- 启用证书隐私
68.2. 使用 sftp 从 Active Directory 复制证书 复制链接链接已复制到粘贴板!
为了可以使用智能卡验证,您需要复制以下证书文件:
-
CER格式的根 CA 证书:IdM 服务器上的adcs-winserver-ca.cer。 -
具有
PFX格式私钥的用户证书:IdM 客户端上的aduser1.pfx。
这个过程预期 SSH 访问是允许的。如果 SSH 不可用,用户必须将 文件从 AD 服务器复制到 IdM 服务器和客户端。
流程
从 IdM 服务器 连接,并将
adcs-winserver-ca.cer根证书复制到 IdM 服务器:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从 IdM 客户端 连接,并将
aduser1.pfx用户证书复制到客户端:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,CA 证书保存在 IdM 服务器上,用户证书存储在客户端机器上。
68.3. 使用 ADCS 证书为智能卡身份验证配置 IdM 服务器和客户端 复制链接链接已复制到粘贴板!
您必须配置 IdM(身份管理)服务器和客户端,以便能够在 IdM 环境中使用智能卡身份验证。IdM 包含进行了所有必要更改的 ipa-advise 脚本:
- 安装所需的软件包
- 配置 IdM 服务器和客户端
- 将 CA 证书复制到期望的位置
您可以在 IdM 服务器中运行 ipa-advise。
按照以下流程,为智能卡验证配置服务器和客户端:
-
在 IdM 服务器中:准备
ipa-advise脚本,为智能卡验证配置 IdM 服务器。 -
在 IdM 服务器中:准备
ipa-advise脚本,以配置 IdM 客户端以进行智能卡验证。 -
在 IdM 服务器中:使用 AD 证书应用 IdM 服务器上的
ipa-advise服务器脚本。 - 将客户端脚本移动到 IdM 客户端机器中。
-
在 IdM 客户端上:使用 AD 证书在 IdM 客户端上应用
ipa-advise客户端脚本。
先决条件
- 证书已复制到 IdM 服务器。
- 获取 Kerberos 票据。
- 以具有管理权限的用户身份登录。
流程
在 IdM 服务器上,使用
ipa-advise脚本来配置客户端:ipa-advise config-client-for-smart-card-auth > sc_client.sh
[root@idmserver ~]# ipa-advise config-client-for-smart-card-auth > sc_client.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 IdM 服务器上,使用
ipa-advise脚本来配置服务器:ipa-advise config-server-for-smart-card-auth > sc_server.sh
[root@idmserver ~]# ipa-advise config-server-for-smart-card-auth > sc_server.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 IdM 服务器中执行脚本:
sh -x sc_server.sh adcs-winserver-ca.cer
[root@idmserver ~]# sh -x sc_server.sh adcs-winserver-ca.cerCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 它配置 IdM Apache HTTP 服务器。
- 它在 KDC(Key Distribution Center)中启用 PKINIT(Public Key Cryptography for Initial Authentication in Kerberos)。
- 它将 IdM Web UI 配置为接受智能卡授权请求。
将
sc_client.sh脚本复制到客户端系统中:scp sc_client.sh root@client1.idm.example.com:/root Password: sc_client.sh 100% 2857 1.6MB/s 00:00
[root@idmserver ~]# scp sc_client.sh root@client1.idm.example.com:/root Password: sc_client.sh 100% 2857 1.6MB/s 00:00Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 Windows 证书复制到客户端系统中:
scp adcs-winserver-ca.cer root@client1.idm.example.com:/root Password: adcs-winserver-ca.cer 100% 1254 952.0KB/s 00:00
[root@idmserver ~]# scp adcs-winserver-ca.cer root@client1.idm.example.com:/root Password: adcs-winserver-ca.cer 100% 1254 952.0KB/s 00:00Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在客户端系统中运行客户端脚本:
sh -x sc_client.sh adcs-winserver-ca.cer
[root@idmclient1 ~]# sh -x sc_client.sh adcs-winserver-ca.cerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
CA 证书现在以正确的格式安装在 IdM 服务器和客户端系统中。下一步是将用户证书复制到智能卡本身。
68.4. 转换 PFX 文件 复制链接链接已复制到粘贴板!
在将 PFX(PKCS#12)文件保存到智能卡中前,您必须:
- 将文件转换为 PEM 格式
- 将私钥和证书提取到两个不同的文件中
先决条件
- PFX 文件被复制到 IdM 客户端机器中。
流程
在 IdM 客户端上,将文件转换为 PEM 格式:
openssl pkcs12 -in aduser1.pfx -out aduser1_cert_only.pem -clcerts -nodes Enter Import Password:
[root@idmclient1 ~]# openssl pkcs12 -in aduser1.pfx -out aduser1_cert_only.pem -clcerts -nodes Enter Import Password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将密钥提取到单独的文件中:
openssl pkcs12 -in adduser1.pfx -nocerts -out adduser1.pem > aduser1.key
[root@idmclient1 ~]# openssl pkcs12 -in adduser1.pfx -nocerts -out adduser1.pem > aduser1.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将公共证书提取到单独的文件中:
openssl pkcs12 -in adduser1.pfx -clcerts -nokeys -out aduser1_cert_only.pem > aduser1.crt
[root@idmclient1 ~]# openssl pkcs12 -in adduser1.pfx -clcerts -nokeys -out aduser1_cert_only.pem > aduser1.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow
此时,您可以将 aduser1.key 和 aduser1.crt 存储在智能卡中。
68.5. 安装用来管理和使用智能卡的工具 复制链接链接已复制到粘贴板!
在配置智能卡前,您必须安装可以生成证书并启动 pscd 服务的对应工具。
先决条件
-
您有
root权限。
流程
安装
opensc和gnutls-utils软件包:yum -y install opensc gnutls-utils
# yum -y install opensc gnutls-utilsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
pcscd服务。systemctl start pcscd
# systemctl start pcscdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证
pcscd服务是否正在运行:systemctl status pcscd
# systemctl status pcscdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
68.6. 准备智能卡并将证书和密钥上传到智能卡 复制链接链接已复制到粘贴板!
按照以下流程,使用 pkcs15-init 工具配置智能卡,该工具帮助您配置:
- 擦除智能卡
- 设置新的 PIN 和可选的 PIN Unblocking Keys(PUKs)
- 在智能卡上创建新插槽
- 在插槽存储证书、私钥和公钥
- 如果需要,请锁定智能卡设置,因为某些智能卡需要这个类型的最终化
pkcs15-init 工具可能无法使用所有智能卡。您必须使用您使用智能卡的工具。
先决条件
已安装
opensc软件包,其中包括pkcs15-init工具。如需了解更多详细信息,请参阅 安装用于管理和使用智能卡的工具。
- 该卡插入读卡器并连接到计算机。
-
您有一个要存储在智能卡上的私钥、公钥和证书。在此流程中,
testuser.key、testuserpublic.key和testuser.crt是用于私钥、公钥和证书的名称。 - 您有当前的智能卡用户 PIN 和 Security Officer PIN (SO-PIN)。
流程
擦除智能卡并使用您的 PIN 验证自己:
pkcs15-init --erase-card --use-default-transport-keys Using reader with a card: Reader name PIN [Security Officer PIN] required. Please enter PIN [Security Officer PIN]:
$ pkcs15-init --erase-card --use-default-transport-keys Using reader with a card: Reader name PIN [Security Officer PIN] required. Please enter PIN [Security Officer PIN]:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个卡已经被清除。
初始化智能卡,设置您的用户 PIN 和 PUK,以及您的安全响应 PIN 和 PUK:
pkcs15-init --create-pkcs15 --use-default-transport-keys \ --pin 963214 --puk 321478 --so-pin 65498714 --so-puk 784123 Using reader with a card: Reader name$ pkcs15-init --create-pkcs15 --use-default-transport-keys \ --pin 963214 --puk 321478 --so-pin 65498714 --so-puk 784123 Using reader with a card: Reader nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow pcks15-init工具在智能卡上创建一个新插槽。为插槽设置标签和验证 ID:
pkcs15-init --store-pin --label testuser \ --auth-id 01 --so-pin 65498714 --pin 963214 --puk 321478 Using reader with a card: Reader name$ pkcs15-init --store-pin --label testuser \ --auth-id 01 --so-pin 65498714 --pin 963214 --puk 321478 Using reader with a card: Reader nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 标签设置为人类可读的值,在本例中为
testuser。auth-id必须是两个十六进制值,在本例中设为01。在智能卡的新插槽中存储并标记私钥:
pkcs15-init --store-private-key testuser.key --label testuser_key \ --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader name$ pkcs15-init --store-private-key testuser.key --label testuser_key \ --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在存储您的私钥并将证书存储在下一步中时,您为
--id指定的值必须相同。建议为--id指定自己的值,否则它们将更复杂的值由工具计算。在智能卡上的新插槽中存储并标记该证书:
pkcs15-init --store-certificate testuser.crt --label testuser_crt \ --auth-id 01 --id 01 --format pem --pin 963214 Using reader with a card: Reader name$ pkcs15-init --store-certificate testuser.crt --label testuser_crt \ --auth-id 01 --id 01 --format pem --pin 963214 Using reader with a card: Reader nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:在智能卡的新插槽中保存并标记公钥:
pkcs15-init --store-public-key testuserpublic.key \ --label testuserpublic_key --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader name$ pkcs15-init --store-public-key testuserpublic.key \ --label testuserpublic_key --auth-id 01 --id 01 --pin 963214 Using reader with a card: Reader nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果公钥与私钥或证书对应,请指定与私钥或证书的 ID 相同的 ID。
可选:某些智能卡要求您通过锁定设置来完成卡:
pkcs15-init -F
$ pkcs15-init -FCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个阶段,您的智能卡在新创建的插槽中包含证书、私钥和公钥。您还创建了您的用户 PIN 和 PUK,以及安全响应 PIN 和 PUK。
68.7. 在 sssd.conf 中配置超时 复制链接链接已复制到粘贴板!
使用智能卡证书进行身份验证的时间可能比 SSSD 使用的默认超时时间更长。超时时间可能是由以下原因造成的:
- 阅读速度较慢
- 从物理设备转发到虚拟环境
- 保存在智能卡上的证书太多
- 如果使用 OCSP 来验证证书,则来自 OCSP(在线证书状态协议)响应器的响应较慢
在这种情况下,您可以将 sssd.conf 文件中的以下超时时间延长为 60 秒:
-
p11_child_timeout -
krb5_auth_timeout
先决条件
- 您必须以 root 身份登录。
流程
打开
sssd.conf文件:vim /etc/sssd/sssd.conf
[root@idmclient1 ~]# vim /etc/sssd/sssd.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更改
p11_child_timeout的值:[pam] p11_child_timeout = 60
[pam] p11_child_timeout = 60Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更改
krb5_auth_timeout的值:[domain/IDM.EXAMPLE.COM] krb5_auth_timeout = 60
[domain/IDM.EXAMPLE.COM] krb5_auth_timeout = 60Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存设置。
现在,在验证失败并显示超时前,允许与智能卡的交互运行 1 分钟(60 秒)。
68.8. 为智能卡身份验证创建证书映射规则 复制链接链接已复制到粘贴板!
如果要将一个证书用于 AD(Active Directory)和 IdM(身份管理)中的帐户,您可以在 IdM 服务器上创建证书映射规则。
创建此类规则后,用户可以在两个域中使用其智能卡进行身份验证。
有关证书映射规则的详情,请参阅 配置身份验证的证书映射规则。
第 69 章 在身份管理中配置证书映射规则 复制链接链接已复制到粘贴板!
证书映射规则是一种便捷的方式,当身份管理(IdM)管理员无法访问某些用户的证书时,用户可以轻松使用证书进行身份验证。这通常是因为证书已由外部证书颁发机构发布。
69.1. 用于配置身份验证的证书映射规则 复制链接链接已复制到粘贴板!
在以下情况下可能需要配置证书映射规则:
- 证书已由与 IdM 域处于信任关系的活动目录(AD)的证书系统发布。
- 证书已由外部证书颁发机构发布。
- IdM 环境较大,很多用户使用智能卡的用户。在这种情况下,添加完整证书可能会比较复杂。在大多数情况下,主题和签发者是可预测的,因此与完整证书相比,更容易提前添加。
作为系统管理员,您可以创建证书映射规则,并在向特定用户签发证书之前,为用户条目添加证书映射数据。签发证书后,用户可以使用该证书登录,即使完整证书尚未上传到用户条目。
另外,因为证书会定期续订,所以证书映射规则减少了管理开销。续订用户证书时,管理员不必更新用户条目。例如,如果映射基于 Subject 和 Issuer 值,如果新证书的主题和签发者与旧证书相同,则映射仍适用。如果使用完整证书,则管理员必须将新证书上传到用户条目以替换旧证书。
设置证书映射:
- 管理员必须将证书映射数据或完整的证书加载到用户帐户中。
- 管理员必须创建证书映射规则,以允许其帐户包含与证书上信息匹配的证书映射数据条目的用户成功登录到 IdM。
创建证书映射规则后,当最终用户提供保存在 文件系统 或 智能卡 上的证书时,身份验证可以成功。
密钥分发中心(KDC)有一个用于证书映射规则的缓存。缓存在第一个 certauth 请求时填充,它有一个 300 秒的硬编码超时。KDC 不会看到对证书映射规则的任何更改,除非它重启了或缓存过期了。
您的证书映射规则可取决于您使用证书的用例。例如,如果您使用带有证书的 SSH,则必须有从证书中提取公钥的完整证书。
69.2. IdM 中身份映射规则的组件 复制链接链接已复制到粘贴板!
当在 IdM 中创建 身份映射规则 时,您可以配置不同的组件。每个组件都有一个可覆盖的默认值。您可以在 Web UI 或 CLI 中定义这些组件。在 CLI 中,身份映射规则使用 ipa certmaprule-add 命令创建。
- 映射规则
映射规则组件将证书与一个或多个用户帐户关联(或 映射)。规则定义将证书与预期用户帐户关联的 LDAP 搜索过滤器。
不同证书颁发机构(CA)发布的证书可能具有不同的属性,并可在不同的域中使用。因此,IdM 不适用于无条件地应用映射规则,而只适用于适当的证书。使用 匹配规则 定义适当的证书。
请注意,如果您将映射规则选项留空,则证书将在
userCertificate属性中作为 DER 编码的二进制文件进行搜索。利用
--maprule选项,在 CLI 中定义映射规则。- 匹配规则
匹配的规则组件选择您要应用映射规则的证书。默认匹配规则与具有
digitalSignature 密钥用法和clientAuth 扩展密钥用法的证书匹配。为匹配,存储在
DER编码的ASN.1中的主题名称会根据 RFC 4514 转换为字符串。这意味着最具体的名称组件是第一个。使用
--matchrule选项,在 CLI 中定义匹配的规则。例如,带有匹配规则的
ipa certmaprule-mod:<ISSUER>C=US,O=EXAMPLE.COM,CN=Global CA1不适用于带有issuer=C=US,O=EXAMPLE.COM,CN=Global CA1的证书。匹配规则的正确语法应该是 <
ISSUER>CN=Global CA1,O=EXAMPLE.COM,C=US,其中最具体组件CN和O列在C之前,例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 域列表
域列表指定您希望 IdM 在处理身份映射规则时搜索用户的身份域。如果您未指定 选项,IdM 仅在 IdM 客户端所属的本地域中搜索用户。
利用
--domain选项,在 CLI 中定义域。- 优先级
当多个规则适用于证书时,优先级最高的规则优先。所有其他规则将被忽略。
- 数字值越低,身份映射规则的优先级越高。例如,具有优先级 1 的规则的优先级高于优先级 2 的规则。
- 如果规则没有定义优先级值,它具有最低的优先级。
使用
--priority选项,在 CLI 中定义映射规则优先级。
证书映射规则示例
要使用 CLI 定义称为 simple_rule 的证书映射规则,如果该证书上的 Subject 与 IdM 中用户帐户中的 certmapdata 条目匹配,则允许对 EXAMPLE.ORG 机构的 智能卡 CA 发布的证书进行身份验证:
ipa certmaprule-add simple_rule --matchrule '<ISSUER>CN=Smart Card CA,O=EXAMPLE.ORG' --maprule '(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})'
# ipa certmaprule-add simple_rule --matchrule '<ISSUER>CN=Smart Card CA,O=EXAMPLE.ORG' --maprule '(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})'
69.3. 从证书获取数据,以便在匹配规则中使用 复制链接链接已复制到粘贴板!
这个流程描述了如何从证书获取数据,以便您可以将其复制并粘贴到证书映射规则的匹配规则中。要获得匹配规则所需的数据,请使用 sssctl cert-show 或 sssctl cert-eval-rule 命令。
先决条件
- 您有 PEM 格式的用户证书。
流程
创建指向证书的变量,该变量还可确保正确编码,以便您可以检索所需的数据。
CERT=$(openssl x509 -in /path/to/certificate -outform der|base64 -w0)
# CERT=$(openssl x509 -in /path/to/certificate -outform der|base64 -w0)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
sssctl cert-eval-rule来确定匹配的数据。在以下示例中,使用了证书序列号。sssctl cert-eval-rule $CERT --match='<ISSUER>CN=adcs19-WIN1-CA,DC=AD,DC=EXAMPLE,DC=COM' --map='LDAPU1:(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<SR>{serial_number!hex_ur})' Certificate matches rule. Mapping filter: (altSecurityIdentities=X509:<I>DC=com,DC=example,DC=ad,CN=adcs19-WIN1-CA<SR>0F0000000000DB8852DD7B246C9C0F0000003B)# sssctl cert-eval-rule $CERT --match='<ISSUER>CN=adcs19-WIN1-CA,DC=AD,DC=EXAMPLE,DC=COM' --map='LDAPU1:(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<SR>{serial_number!hex_ur})' Certificate matches rule. Mapping filter: (altSecurityIdentities=X509:<I>DC=com,DC=example,DC=ad,CN=adcs19-WIN1-CA<SR>0F0000000000DB8852DD7B246C9C0F0000003B)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这种情况下,将
altSecurityIdentities=后的所有内容添加到 AD 中用户的altSecurityIdentities属性中。如果使用 SKI 映射,请使用--map='LDAPU1: (altSecurityIdentities=X509:<SKI>{subject_key_id!hex_u})'。可选:要在 CLI 中基于匹配规则创建一个新的映射规则,该规则必须与
ad.example.com域的adcs19-WIN1-CA匹配,证书的序列号必须与用户帐户中的altSecurityIdentities条目匹配:ipa certmaprule-add simple_rule --matchrule '<ISSUER>CN=adcs19-WIN1-CA,DC=AD,DC=EXAMPLE,DC=COM' --maprule 'LDAPU1:(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<SR>{serial_number!hex_ur})'# ipa certmaprule-add simple_rule --matchrule '<ISSUER>CN=adcs19-WIN1-CA,DC=AD,DC=EXAMPLE,DC=COM' --maprule 'LDAPU1:(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<SR>{serial_number!hex_ur})'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
69.4. 为存储在 IdM 中的用户配置证书映射 复制链接链接已复制到粘贴板!
如果用户的证书身份验证被配置为存储在 IdM 中,要在 IdM 中启用证书映射,系统管理员必须完成以下任务:
- 设置证书映射规则,以便具有与映射规则及其证书映射数据条目中指定的条件匹配的证书的 IdM 用户可以向 IdM 进行身份验证。
- 将证书映射数据输入到 IdM 用户条目中,以便用户可以使用多个证书进行身份验证,只要它们都包含证书映射数据条目中指定的值。
先决条件
- 用户在 IdM 中有一个帐户。
- 管理员拥有要添加到用户条目的整个证书或证书映射数据。
69.4.1. 在 IdM Web UI 中添加一个证书映射规则 复制链接链接已复制到粘贴板!
- 以管理员身份登录 IdM Web UI。
-
导航到
Authentication→Certificate Identity Mapping Rules→Certificate Identity Mapping Rules。 单击
Add。图 69.1. 在 IdM Web UI 中添加一个新的证书映射规则
- 输入规则名称。
输入映射规则。例如,要让 IdM 搜索提供给它们的任何证书中的
Issuer和Subject条目,并根据所显示证书的两个条目中提供的信息做出验证决定:(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入匹配的规则。例如,只允许
EXAMPLE.ORG机构智能卡 CA发布的证书来验证用户到 IdM:<ISSUER>CN=Smart Card CA,O=EXAMPLE.ORG
<ISSUER>CN=Smart Card CA,O=EXAMPLE.ORGCopy to Clipboard Copied! Toggle word wrap Toggle overflow 图 69.2. 在 IdM Web UI 中输入证书映射规则的详情
-
单击对话框底部的
Add,以添加该规则并关闭该框。 系统安全服务守护进程(SSSD)定期重新读取证书映射规则。要强制立即载入新创建的规则,重启 SSSD:
systemctl restart sssd
# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,您设置了证书映射规则,可将在智能卡证书中找到的映射规则中指定的数据类型与 IdM 用户条目中的证书映射数据进行比较。找到匹配项后,它将对匹配的用户进行身份验证。
69.4.2. 在 IdM CLI 中添加证书映射规则 复制链接链接已复制到粘贴板!
获得管理员凭证:
kinit admin
# kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入映射规则以及映射规则所基于的匹配规则。例如,要让 IdM 搜索所呈现的任何证书中的
发行者和Subject条目,并基于所显示证书的两个条目中找到的信息进行身份验证,仅识别由EXAMPLE.ORG机构的智能卡 CA发布的证书:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 系统安全服务守护进程(SSSD)定期重新读取证书映射规则。要强制立即载入新创建的规则,重启 SSSD:
systemctl restart sssd
# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,您设置了证书映射规则,可将在智能卡证书中找到的映射规则中指定的数据类型与 IdM 用户条目中的证书映射数据进行比较。找到匹配项后,它将对匹配的用户进行身份验证。
69.4.3. 在 IdM Web UI 中添加证书映射数据到用户条目 复制链接链接已复制到粘贴板!
- 以管理员身份登录 IdM Web UI。
-
导航到
Users→Active users→idm_user。 -
查找
证书映射数据选项并单击Add。 选择以下选项之一:
如果您有
idm_user的证书:在命令行中,使用
cat实用程序或文本编辑器显示证书:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 复制证书。
在 IdM Web UI 中,单击
Certificate旁边的Add,并将证书粘贴到打开的窗口中。图 69.3. 添加用户证书映射数据:证书
-
如果您没有
idm_user证书,但知道证书的Issuer和Subject,请检查Issuer and subject单选按钮,并在两个框中分别输入值。
图 69.4. 添加用户证书映射数据:签发者和主题
-
如果您没有
-
点
Add。
验证
如果您可以访问 .pem 格式的整个证书,请验证是否用户和证书已链接:
使用
sss_cache程序在 SSSD 缓存中使idm_user记录无效,并强制重新载入idm_user信息:sss_cache -u idm_user
# sss_cache -u idm_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用包含 IdM 用户证书的文件名称运行
ipa certmap-match命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出确认您现在已将证书映射数据添加到
idm_user,并且存在对应的映射规则。这意味着,您可以使用与定义的证书映射数据匹配的任何证书,以idm_user进行身份验证。
69.4.4. 在 IdM CLI 中添加证书映射数据到用户条目 复制链接链接已复制到粘贴板!
获取管理员凭证:
kinit admin
# kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 选择以下选项之一:
-
如果您有
idm_user的证书,请使用ipa user-add-cert命令将证书添加到用户帐户中:
# CERT=$(openssl x509 -in idm_user_cert.pem -outform der|base64 -w0) ipa user-add-certmapdata idm_user --certificate $CERT
# CERT=$(openssl x509 -in idm_user_cert.pem -outform der|base64 -w0) # ipa user-add-certmapdata idm_user --certificate $CERTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您没有
idm_user的证书,但知道用户证书的Issuer和Subject:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
如果您有
验证
如果您可以访问 .pem 格式的整个证书,请验证是否用户和证书已链接:
使用
sss_cache程序在 SSSD 缓存中使idm_user记录无效,并强制重新载入idm_user信息:sss_cache -u idm_user
# sss_cache -u idm_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用包含 IdM 用户证书的文件名称运行
ipa certmap-match命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出确认您现在已将证书映射数据添加到
idm_user,并且存在对应的映射规则。这意味着,您可以使用与定义的证书映射数据匹配的任何证书,以idm_user进行身份验证。
69.5. 使用 Active Directory 域信任的证书映射规则 复制链接链接已复制到粘贴板!
如果 IdM 部署与活动目录(AD)域具有信任关系,则可能会有不同的证书映射用例。
根据 AD 配置,可能会出现以下情况:
- 如果证书是由 AD 证书系统发布的,但用户和证书存储在 IdM 中,则身份验证请求的映射和整个处理发生在 IdM 端。有关配置此情境的详情,请参阅为存储在 IdM 中的用户配置证书映射
如果用户存储在 AD 中,则身份验证请求的处理会在 AD 中发生。有三个不同的子案例:
- AD 用户条目包含整个证书。有关如何在这种情况下配置 IdM 的详情,请参阅 为 AD 用户条目包含整个证书的用户配置证书映射。
-
AD 配置为将用户证书映射到用户帐户。在本例中,AD 用户条目不包含整个证书,而是包含名为
altSecurityIdentities 的属性。有关如何在这种场景中配置 IdM 的详情,请参阅在将 AD 配置为将用户证书映射到用户帐户时配置证书 映射。 AD 用户条目既不包含整个证书,也不包含映射数据。在这种情况下,有两个选项:
- 如果用户证书是由 AD 证书系统发布的,则证书会包含作为 Subject Alternative Name (SAN)的用户主体名称,或者如果最新的更新被应用到 AD,则用户的 SID在证书的 SID 扩展中。它们都可用于将证书映射到用户。
-
如果用户证书位于智能卡上,要启用带有智能卡的 SSH,SSSD 必须从证书生成公共 SSH 密钥,因此需要完整证书。唯一的解决方案是使用
ipa idoverrideuser-add命令将整个证书添加到 IdM 中 AD 用户的 ID 覆盖中。详情请参阅 在 AD 用户条目不包含证书或映射数据时配置证书映射。
AD 域管理员可以使用 altSecurityIdentities 属性手动将证书映射到 AD 中的用户。此属性有六个支持的值,但三个映射被视为不安全。作为 2022 年 5 月 10 日安全更新 的一部分,在安装之后,所有设备都处于兼容模式,如果证书被弱映射到用户,则身份验证如预期发生。但是,会记录警告消息,标识任何与完整执行模式不兼容的证书。从 2023 年 11 月 14 日起,所有设备都将更新为完整的强制模式,如果证书不满足强映射标准,则身份验证将被拒绝。
例如,当 AD 用户请求带有证书(PKINIT)的 IdM Kerberos 票据时,AD 需要在内部将证书映射到用户,并为此使用新的映射规则。但是,在 IdM 中,如果 IdM 被用于将证书映射到 IdM 客户端上的用户,则以前的规则可以继续工作。
IdM 支持新的映射模板,使 AD 管理员更易于使用新规则,而不维护这两个模板。IdM 现在支持添加到活动目录的新映射模板,来包括:
- 序列号:LDAPU1: (altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<SR>{serial_number!hex_ur})
- 主题 Key Id: LDAPU1: (altSecurityIdentities=X509:<SKI>{subject_key_id!hex_u})
- 用户 SID:LDAPU1: (objectsid={sid})
如果您不想使用新的 SID 扩展重新发布证书,您可以通过将适当的映射字符串添加到 AD 中的 altSecurityIdentities 属性来创建一个手动映射。
69.6. 为 AD 用户条目包含整个证书的用户配置证书映射 复制链接链接已复制到粘贴板!
此用户故事描述了如果 IdM 部署与 Active Directory(AD)信任时,在 IdM 中启用证书映射所需的步骤,该用户存储在 AD 中,AD 中的用户条目包含整个证书。
先决条件
- 用户在 IdM 中没有帐户。
- 用户在 AD 中有一个包含证书的帐户。
- IdM 管理员有权访问 IdM 证书映射规则可以基于的数据。
为确保 PKINIT 对用户正常工作,必须满足以下条件之一:
- 用户条目中的证书包括用户的用户主体名称或 SID 扩展。
-
AD 中的用户条目在
altSecurityIdentities属性中有一个合适的条目。
69.6.1. 在 IdM Web UI 中添加一个证书映射规则 复制链接链接已复制到粘贴板!
- 以管理员身份登录 IdM Web UI。
-
导航到
Authentication→Certificate Identity Mapping Rules→Certificate Identity Mapping Rules。 单击
Add。图 69.5. 在 IdM Web UI 中添加一个新的证书映射规则
- 输入规则名称。
输入映射规则。与 AD 中的可用内容相比,要向 IdM 提供整个证书以进行身份验证:
(userCertificate;binary={cert!bin})(userCertificate;binary={cert!bin})Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果使用完整证书进行映射,如果续订了证书,您必须确保将新证书添加到 AD 用户对象中。
输入匹配的规则。例如,只允许
AD.EXAMPLE.COM域的AD-ROOT-CA发布的证书进行身份验证:<ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com
<ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 图 69.6. 在 AD 中存储证书的用户的证书映射规则
-
单击
Add。 系统安全服务守护进程(SSSD)定期重新读取证书映射规则。要强制立即加载新创建的规则,请在 CLI 中重启 SSSD:
systemctl restart sssd
# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
69.6.2. 在 IdM CLI 中添加证书映射规则 复制链接链接已复制到粘贴板!
获得管理员凭证:
kinit admin
# kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入映射规则以及映射规则所基于的匹配规则。要获得与 AD 中可用证书相比的用于身份验证的完整证书,只允许
AD.EXAMPLE.COM域的AD-ROOT-CA发布的证书来进行验证:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果使用完整证书进行映射,如果续订了证书,您必须确保将新证书添加到 AD 用户对象中。
系统安全服务守护进程(SSSD)定期重新读取证书映射规则。要强制立即载入新创建的规则,重启 SSSD:
systemctl restart sssd
# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
69.7. 如果将 AD 配置为将用户帐户映射到用户帐户,则配置证书映射 复制链接链接已复制到粘贴板!
这个用户故事描述了如果 IdM 部署与活动目录(AD)有信任关系时在 IdM 中启用证书映射所需的步骤,用户存储在 AD 中,AD 中的用户条目包含证书映射数据。
先决条件
- 用户在 IdM 中没有帐户。
-
用户在 AD 中有一个帐户,其中包含
altSecurityIdentities 属性,即 IdMcertmapdata属性的 AD 等效。 - IdM 管理员有权访问 IdM 证书映射规则可以基于的数据。
69.7.1. 在 IdM Web UI 中添加一个证书映射规则 复制链接链接已复制到粘贴板!
- 以管理员身份登录 IdM Web UI。
-
导航到
Authentication→Certificate Identity Mapping Rules→Certificate Identity Mapping Rules。 单击
Add。图 69.7. 在 IdM Web UI 中添加一个新的证书映射规则
- 输入规则名称。
输入映射规则。例如,要使 AD DC 搜索所呈现的任何证书中的
Issuer和Subject条目,并决定根据所出示证书的两个条目中提供的信息进行验证:(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<S>{subject_dn!ad_x500})(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<S>{subject_dn!ad_x500})Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入匹配的规则。例如,要只允许
AD.EXAMPLE.COM域的AD-ROOT-CA发布的证书来向 IdM 验证用户:<ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com
<ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入域:
ad.example.com
ad.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 图 69.8. 如果配置了 AD 进行映射,则证书映射规则
-
单击
Add。 系统安全服务守护进程(SSSD)定期重新读取证书映射规则。要强制立即加载新创建的规则,请在 CLI 中重启 SSSD:
systemctl restart sssd
# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
69.7.2. 在 IdM CLI 中添加证书映射规则 复制链接链接已复制到粘贴板!
获得管理员凭证:
kinit admin
# kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入映射规则以及映射规则所基于的匹配规则。例如,要让 AD 搜索所提供的任何证书中的
Issuer和Subject条目,并且只允许AD.EXAMPLE.COM域的AD-ROOT-CA发布的证书:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 系统安全服务守护进程(SSSD)定期重新读取证书映射规则。要强制立即载入新创建的规则,重启 SSSD:
systemctl restart sssd
# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
69.7.3. 检查 AD 端的证书映射数据 复制链接链接已复制到粘贴板!
altSecurityIdentities 属性是与 IdM 中的 certmapdata 用户属性等效的 Active Directory(AD)。当将可信 AD 域配置为将用户帐户映射到用户帐户时,IdM 系统管理员需要检查 AD 中的用户条目是否正确设置了 altSecurityIdentities 属性。
先决条件
- 用户帐户必须具有用户管理访问权限。
流程
要检查 AD 是否包含 AD 中存储的用户的正确信息,请使用
ldapsearch命令。例如,输入以下命令检查adserver.ad.example.com服务器是否适用以下条件:-
altSecurityIdentities属性在ad_user的用户条目中设置。 matchrule 满足以下条件:
-
ad_user用于向 AD 进行身份验证的证书由ad.example.com域的AD-ROOT-CA签发。 -
主题为
<S>DC=com,DC=example,DC=ad,CN=Users,CN=ad_user:
-
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
69.8. 如果 AD 用户条目不包含证书或映射数据,则配置证书映射 复制链接链接已复制到粘贴板!
如果 IdM 部署与 Active Directory(AD)信任时,此用户故事描述了在 IdM 中启用证书映射所需的步骤,此用户存储在 AD 中,AD 中的用户条目既包含整个证书,也不包含证书映射数据。
先决条件
- 用户在 IdM 中没有帐户。
-
用户在 AD 中有一个帐户,它不包含整个证书和
altSecurityIdentities 属性,即 IdMcertmapdata属性的 AD 等效。 IdM 管理员已完成了以下操作之一:
-
将整个 AD 用户证书添加到 IdM 中的 AD
用户 ID 覆盖中。 - 创建一个映射到证书中备用字段的证书映射规则,如 Subject Alternative Name 或用户的 SID。
-
将整个 AD 用户证书添加到 IdM 中的 AD
69.8.1. 在 IdM Web UI 中添加一个证书映射规则 复制链接链接已复制到粘贴板!
- 以管理员身份登录 IdM Web UI。
-
导航到
Authentication→Certificate Identity Mapping Rules→Certificate Identity Mapping Rules。 单击
Add。图 69.9. 在 IdM Web UI 中添加一个新的证书映射规则
- 输入规则名称。
输入映射规则。与存储在 IdM 中的 AD 用户条目的用户 ID 覆盖条目中的证书相比,为 IdM 提供整个证书进行身份验证:
(userCertificate;binary={cert!bin})(userCertificate;binary={cert!bin})Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意因为证书还包含作为 SAN 的用户主体名称或最新更新、证书 SID 扩展中的用户的 SID ,所以您也可以使用这些字段将证书映射到用户。例如,如果使用用户的 SID,请将此映射规则替换为
LDAPU1:(objectsid={sid})。有关证书映射的更多信息,请参阅您系统上的sss-certmap手册页。输入匹配的规则。例如,只允许
AD.EXAMPLE.COM域的AD-ROOT-CA发布的证书进行身份验证:<ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com
<ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入域名。例如,要在
ad.example.com域中搜索用户:图 69.10. 没有证书或映射数据的用户的证书映射规则
-
单击
Add。 系统安全服务守护进程(SSSD)定期重新读取证书映射规则。要强制立即载入新创建的规则,在 CLI 中重启 SSSD:
systemctl restart sssd
# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
69.8.2. 在 IdM CLI 中添加证书映射规则 复制链接链接已复制到粘贴板!
获得管理员凭证:
kinit admin
# kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入映射规则以及映射规则所基于的匹配规则。要获得与存储在 IdM 中的 AD 用户条目的用户 ID 覆盖条目中的证书相比的用于认证的整个证书,只允许
AD.EXAMPLE.COM域的AD-ROOT-CA发布的证书进行验证:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意因为证书还包含作为 SAN 的用户主体名称或最新更新、证书 SID 扩展中的用户的 SID ,所以您也可以使用这些字段将证书映射到用户。例如,如果使用用户的 SID,请将此映射规则替换为
LDAPU1:(objectsid={sid})。有关证书映射的更多信息,请参阅您系统上的sss-certmap手册页。系统安全服务守护进程(SSSD)定期重新读取证书映射规则。要强制立即载入新创建的规则,重启 SSSD:
systemctl restart sssd
# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
69.8.3. 在 IdM Web UI 中添加证书到 AD 用户的 ID 覆盖中 复制链接链接已复制到粘贴板!
-
导航到
Identity→ID Views→Default Trust View。 单击
Add。图 69.11. 在 IdM Web UI 中添加一个新的用户 ID 覆盖
-
在
User to override字段中,输入ad_user@ad.example.com。 将
ad_user的证书复制并粘贴到Certificate字段中。图 69.12. 为 AD 用户配置用户 ID 覆盖
-
单击
Add。
验证
验证用户和证书是否已链接:
使用
sss_cache程序在 SSSD 缓存中使ad_user@ad.example.com记录无效,并强制重新载入ad_user@ad.example.com信息:sss_cache -u ad_user@ad.example.com
# sss_cache -u ad_user@ad.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用包含 AD 用户证书的文件名称运行
ipa certmap-match命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
输出确认,您具有的证书验证数据被添加到 ad_user@ad.example.com,并存在在 Adding a certificate mapping rule if the AD user entry contains no certificate or mapping data 中定义的相应的映射规则。这意味着,您可以使用与定义的证书映射数据匹配的证书作为 ad_user@ad.example.com 进行身份验证。
69.8.4. 在 IdM CLI 中在 AD 用户的 ID 覆盖中添加证书 复制链接链接已复制到粘贴板!
获取管理员凭证:
kinit admin
# kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将证书 blob 保存在名为
CERT的新变量中:CERT=$(openssl x509 -in /path/to/certificate -outform der|base64 -w0)
# CERT=$(openssl x509 -in /path/to/certificate -outform der|base64 -w0)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ipa idoverrideuser-add-cert命令将ad_user@ad.example.com的证书添加到用户帐户中:ipa idoverrideuser-add-cert ad_user@ad.example.com --certificate $CERT
# ipa idoverrideuser-add-cert ad_user@ad.example.com --certificate $CERTCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证用户和证书是否已链接:
使用
sss_cache程序在 SSSD 缓存中使ad_user@ad.example.com记录无效,并强制重新载入ad_user@ad.example.com信息:sss_cache -u ad_user@ad.example.com
# sss_cache -u ad_user@ad.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用包含 AD 用户证书的文件名称运行
ipa certmap-match命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
输出确认,您具有的证书验证数据被添加到 ad_user@ad.example.com,并存在在 Adding a certificate mapping rule if the AD user entry contains no certificate or mapping data 中定义的相应的映射规则。这意味着,您可以使用与定义的证书映射数据匹配的证书作为 ad_user@ad.example.com 进行身份验证。
69.9. 将多个身份映射规则合并到一个规则中 复制链接链接已复制到粘贴板!
要将多个身份映射规则组合成一个组合规则,请使用 | (或)字符在单个映射规则前前,并使用 () 方括号将它们分隔,例如:
证书映射过滤器示例 1
ipa certmaprule-add ad_cert_for_ipa_and_ad_users \
--maprule='(|(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<S>{subject_dn!ad_x500}))' \
--matchrule='<ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com' \
--domain=ad.example.com
$ ipa certmaprule-add ad_cert_for_ipa_and_ad_users \
--maprule='(|(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<S>{subject_dn!ad_x500}))' \
--matchrule='<ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com' \
--domain=ad.example.com
在上例中,-- maprule 选项中的过滤器定义包括这些条件:
-
ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500}是一个过滤器,它将一个智能卡证书中的 subject 和 issuer 连接到一个 IdM 用户账户中的ipacertmapdata属性的值,如 Adding a certificate mapping rule in IdM 部分所述 -
altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<S>{subject_dn!ad_x500}是一个过滤器,它将一个智能卡证书中的 subject 和 issuer 连接到一个 AD 用户账户中的altSecurityIdentities属性的值,如 Adding a certificate mapping rule if the trusted AD domain is configured to map user certificates 所述 -
添加
--domain=ad.example.com选项意味着映射到给定证书的用户不仅在本地idm.example.com域中搜索,还要在ad.example.com域中搜索
--maprule 选项中的过滤器定义接受逻辑运算符 | (或),以便您可以指定多个条件。在这种情况下,规则映射了至少满足其中一个条件的所有用户帐户。
证书映射过滤器示例 2
ipa certmaprule-add ipa_cert_for_ad_users \
--maprule='(|(userCertificate;binary={cert!bin})(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<S>{subject_dn!ad_x500}))' \
--matchrule='<ISSUER>CN=Certificate Authority,O=REALM.EXAMPLE.COM' \
--domain=idm.example.com --domain=ad.example.com
$ ipa certmaprule-add ipa_cert_for_ad_users \
--maprule='(|(userCertificate;binary={cert!bin})(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<S>{subject_dn!ad_x500}))' \
--matchrule='<ISSUER>CN=Certificate Authority,O=REALM.EXAMPLE.COM' \
--domain=idm.example.com --domain=ad.example.com
在上例中,-- maprule 选项中的过滤器定义包括这些条件:
-
userCertificate;binary={cert!bin}是一个过滤器,它返回包含整个证书的用户条目。对于 AD 用户,创建这类过滤器在 如果 AD 用户条目不包含证书或映射数据,请添加一个证书映射规则 中进行了详细描述。 -
ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500}是一个过滤器,它将一个智能卡证书中的 subject 和 issuer 连接到一个 IdM 用户账户中的ipacertmapdata属性的值,如 Adding a certificate mapping rule in IdM 部分所述。 -
altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<S>{subject_dn!ad_x500}是一个过滤器,它将一个智能卡证书中的 subject 和 issuer 连接到一个 AD 用户账户中的altSecurityIdentities属性的值,如 Adding a certificate mapping rule if the trusted AD domain is configured to map user certificates 所述。
--maprule 选项中的过滤器定义接受逻辑运算符 | (或),以便您可以指定多个条件。在这种情况下,规则映射了至少满足其中一个条件的所有用户帐户。
第 70 章 使用存储在 IdM 客户端桌面的证书配置身份验证 复制链接链接已复制到粘贴板!
通过配置身份管理(IdM),IdM 系统管理员可以使用向用户签发的证书颁发机构(CA)的证书,使用户能够向 IdM Web UI 和命令行界面(CLI)进行身份验证。证书存储在 IdM 客户端的桌面上。
Web 浏览器可以在不属于 IdM 域的系统中运行。
在使用证书配置身份验证时请注意以下几点:
- 如果您要使用证书进行身份验证的用户已有证书,则您可以跳过 请求新的用户证书并将其导出到客户端 ;
- 如果用户的证书已由 IdM CA 发布了,则您可以跳过 确保证书和用户链接在一起。
只有身份管理用户可以使用证书登录 Web UI。Active Directory 用户可使用其用户名和密码登录。
70.1. 在 Web UI 中为证书验证配置身份管理服务器 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以允许用户使用证书为您的 IdM 环境进行身份验证。
流程
作为身份管理管理员:
在身份管理服务器上,获取管理员特权并创建 shell 脚本来配置服务器。
运行
ipa-advise config-server-for-smart-card-auth命令,并将其输出保存到文件中,如server_certificate_script.sh:kinit admin ipa-advise config-server-for-smart-card-auth > server_certificate_script.sh
# kinit admin # ipa-advise config-server-for-smart-card-auth > server_certificate_script.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
chmod实用程序为文件添加执行权限:chmod +x server_certificate_script.sh
# chmod +x server_certificate_script.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在 Identity Management 域中的所有服务器上,运行
server_certificate_script.sh脚本使用 IdM 证书颁发机构证书的路径
/etc/ipa/ca.crt,因为如果 IdM CA 是唯一签发了您要为其启用证书验证的用户证书的证书颁发机构:./server_certificate_script.sh /etc/ipa/ca.crt
# ./server_certificate_script.sh /etc/ipa/ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果不同的外部 CA 签署您想要为其启用证书验证的用户证书,则使用路径作为输入:
./server_certificate_script.sh /tmp/ca1.pem /tmp/ca2.pem
# ./server_certificate_script.sh /tmp/ca1.pem /tmp/ca2.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如果要为整个拓扑中启用用户的证书身份验证,请不要忘记在将来添加到系统的每个新副本上运行 脚本。
70.2. 请求新的用户证书并将其导出到客户端 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以为 IdM 环境中的用户创建证书,并将其导出到您要为用户启用证书身份验证的 IdM 客户端。
如果要使用证书进行身份验证的用户已有证书,则不需要按照此路程操作。
流程
可选:创建一个新目录,如
~/certdb/,并使其作为临时证书数据库。当系统提示时,创建一个 NSS 证书数据库密码来加密后续步骤中生成的证书的密钥:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建证书签名请求(CSR),并将输出重定向到文件。例如,要为
IDM.EXAMPLE.COM领域中的idm_user用户创建一个4096位、名称为certificate_request.csr的 CSR,请将证书私钥的昵称设为idm_user以便于查找,并将主题设为CN=idm_user,O=IDM.EXAMPLE.COM:certutil -R -d ~/certdb/ -a -g 4096 -n idm_user -s "CN=idm_user,O=IDM.EXAMPLE.COM" > certificate_request.csr
# certutil -R -d ~/certdb/ -a -g 4096 -n idm_user -s "CN=idm_user,O=IDM.EXAMPLE.COM" > certificate_request.csrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出现提示时,输入您在使用
certutil创建临时数据库时输入的相同密码。然后继续键入随机输入,直到被告知停止:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将证书请求文件提交到服务器。指定要与新发布的证书关联的 Kerberos 主体、存储证书的输出文件,以及可选的证书配置集。例如,要获取
IECUserRoles配置集的证书,带有添加的用户角色扩展的配置文件,idm_user@IDM.EXAMPLE.COM主体,并将它保存在~/idm_user.pem文件中:ipa cert-request certificate_request.csr --principal=idm_user@IDM.EXAMPLE.COM --profile-id=IECUserRoles --certificate-out=~/idm_user.pem
# ipa cert-request certificate_request.csr --principal=idm_user@IDM.EXAMPLE.COM --profile-id=IECUserRoles --certificate-out=~/idm_user.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将证书添加到 NSS 数据库。使用
-n选项设置之前创建 CSR 时所用的相同 nickname,以便该证书与 NSS 数据库中的私钥相匹配。t选项设置信任级别。详情请查看 certutil(1)man page。i 选项指定输入证书文件。例如,要将存储在~/certdb/数据库中~/idm_user.pem文件中的带有idm_user昵称的证书添加到 NSS 数据库中:certutil -A -d ~/certdb/ -n idm_user -t "P,," -i ~/idm_user.pem
# certutil -A -d ~/certdb/ -n idm_user -t "P,," -i ~/idm_user.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 NSS 数据库中的密钥是否未显示
(或称为)作为其 nickname。例如,验证存储在~/certdb/ 数据库中的证书没有被孤立:certutil -K -d ~/certdb/ < 0> rsa 5ad14d41463b87a095b1896cf0068ccc467df395 NSS Certificate DB:idm_user
# certutil -K -d ~/certdb/ < 0> rsa 5ad14d41463b87a095b1896cf0068ccc467df395 NSS Certificate DB:idm_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
pk12util命令将证书从 NSS 数据库导出到 PKCS12 格式。例如,将/root/certdbNSS 数据库中的idm_usernickname 的证书导出到~/idm_user.p12文件:pk12util -d ~/certdb -o ~/idm_user.p12 -n idm_user Enter Password or Pin for "NSS Certificate DB": Enter password for PKCS12 file: Re-enter password: pk12util: PKCS12 EXPORT SUCCESSFUL
# pk12util -d ~/certdb -o ~/idm_user.p12 -n idm_user Enter Password or Pin for "NSS Certificate DB": Enter password for PKCS12 file: Re-enter password: pk12util: PKCS12 EXPORT SUCCESSFULCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将证书传输到您要启用
idm_user的证书身份验证的主机:scp ~/idm_user.p12 idm_user@client.idm.example.com:/home/idm_user/
# scp ~/idm_user.p12 idm_user@client.idm.example.com:/home/idm_user/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在传输了证书的主机上,出于安全原因使 'pkcs12 文件被 'other' 组无法访问的目录:
chmod o-rwx /home/idm_user/
# chmod o-rwx /home/idm_user/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出于安全考虑,请从服务器中删除临时 NSS 数据库和 .pkcs12 文件:
rm ~/certdb/ rm ~/idm_user.p12
# rm ~/certdb/ # rm ~/idm_user.p12Copy to Clipboard Copied! Toggle word wrap Toggle overflow
70.3. 确保证书和用户链接在一起 复制链接链接已复制到粘贴板!
如果用户的证书已由 IdM CA 发布,则不需要按照此流程操作。
要使证书身份验证发挥作用,您需要确保证书链接到将使用证书进行身份管理(IdM)身份验证的用户。
- 如果证书是由不属于您的身份管理环境的证书颁发机构提供的,请根据 将用户帐户链接到证书 中描述的流程链接用户和证书。
- 如果证书由 Identity Management CA 提供,则证书会自动添加到用户条目中,您不必将该证书链接到用户帐户。有关在 IdM 中创建新证书的详情,请参阅 请求新的用户证书并将其导出到客户端。
70.4. 配置浏览器以启用证书身份验证 复制链接链接已复制到粘贴板!
若要在使用 Web UI 登录身份管理(IdM)时通过证书进行身份验证,您需要将用户和相关证书颁发机构(CA)证书导入到 Mozilla Firefox 或 Google Chrome 浏览器。浏览器运行的主机本身不必是 IdM 域的一部分。
IdM 支持以下浏览器来连接到 WebUI:
- Mozilla Firefox 38 及更新的版本
- Google Chrome 46 及更新的版本
以下流程演示了如何配置 Mozilla Firefox 57.0.1 浏览器。
先决条件
- 您可以使用 PKCS#12 格式在浏览器中导入 用户证书。
流程
打开 Firefox,然后导航到
Preferences→Privacy & Security。图 70.1. Preferences 中的隐私和安全部分
单击 。
图 70.2. 查看隐私和安全性中的证书
-
在您的
证书选项卡中,单击 。以 PKCS12 格式查找并打开用户证书,然后点 和 。 确保 Identity Management 证书授权机构被 Firefox 认可为可信颁发机构:
在本地保存 IdM CA 证书:
通过在 Firefox 地址栏中写入 IdM 服务器的名称,导航到 IdM Web UI。在 Insecure Connection 警告页面上单击
Advanced。图 70.3. 不安全的连接
添加例外.单击View。图 70.4. 查看证书的详情
在
详细信息选项卡中,突出显示证书颁发机构字段。图 70.5. 导出 CA 证书
-
单击 。保存 CA 证书,如
CertificateAuthority.crt文件,然后单击 和 。
将 IdM CA 证书导入 Firefox 作为可信证书颁发机构证书:
打开 Firefox,导航到 Preferences 并点击 。
图 70.6. Preferences 中的隐私和安全部分
单击 。
图 70.7. 查看隐私和安全性中的证书
-
在"
颁发机构"选项卡中,单击 。查找并打开您在上一步中保存在CertificateAuthority.crt文件中的 CA 证书。信任证书来识别网站,然后点 和 。
- 继续 验证身份管理 Web UI,并使用作为身份管理用户的证书。
70.5. 以身份管理用户的身份使用证书向身份管理 Web UI 进行身份验证 复制链接链接已复制到粘贴板!
按照以下流程,使用存储在身份管理客户端桌面上的证书,作为身份管理(IdM) Web UI 的用户进行身份验证。
流程
-
在浏览器中,导航到位于 的 Identity Management Web UI,例如
https://server.idm.example.com/ipa/ui。 单击 "
图 70.8. 在身份管理 Web UI 中
- 应该已经选择了用户的证书。取消选中 Decision,然后单击 。
现在,您被验证为与证书对应的用户。
70.6. 配置 IdM 客户端以使用证书启用对 CLI 的身份验证 复制链接链接已复制到粘贴板!
要使 IdM 用户在 IdM 客户端的命令行界面(CLI)中为 IdM 用户提供证书身份验证,请将 IdM 用户的证书和私钥导入到 IdM 客户端。有关创建和传输用户证书的详情,请参阅 请求新的用户证书并将其导出到客户端。
流程
登录 IdM 客户端,并让包含用户证书和私钥的 .p12 文件准备好。要获取并缓存 Kerberos 票据授予票据(TGT),请使用带有用户主体的
-X选项和X509_username:/path/to/file.p12属性运行kinit命令,以指定在何处查找用户的 X509 身份信息。例如,要使用存储在~/idm_user.p12文件中的用户身份信息获取idm_user的 TGT:kinit -X X509_idm_user='PKCS12:~/idm_user.p12' idm_user
$ kinit -X X509_idm_user='PKCS12:~/idm_user.p12' idm_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意该命令还支持 .pem 文件格式: kinit -X X509_username='FILE:/path/to/cert.pem,/path/to/key' user_principal
第 71 章 使用 IdM CA 续订服务器 复制链接链接已复制到粘贴板!
71.1. IdM CA 续订服务器解释 复制链接链接已复制到粘贴板!
在使用嵌入式证书颁发机构 (CA) 的 Identity Management (IdM) 部署中,CA 续订服务器维护并更新 IdM 系统证书。它确保了强大的 IdM 部署。
IdM 系统证书包括:
-
IdM CA证书 -
OCSP签名证书 -
IdM CA 子系统证书 -
IdM CA 审计签名证书 -
IdM 续订代理(RA)证书 -
KRA传输和存储证书
对系统证书进行定性的特征是,它们的密钥由所有 CA 副本共享。相比之下,IdM 服务证书(如 LDAP、HTTP 和 PKINIT 证书)在不同的 IdM CA 服务器上具有不同的密钥对和主题名称。
在 IdM 拓扑中,默认情况下,第一个 IdM CA 服务器是 CA 续订服务器。
在上游文档中,IdM CA 称为 Dogtag。
CA 续订服务器的角色
IdM CA、IdM CA 子系统 和 IdM RA 证书对 IdM 部署至关重要。每个证书都存储在 /etc/pki/pki-tomcat/ 目录中的 NSS 数据库以及 LDAP 数据库条目中。存储在 LDAP 中的证书必须与存储在 NSS 数据库中的证书匹配。如果不匹配,在 IdM 框架和 IdM CA 之间以及 IdM CA 和 LDAP 之间会发生身份验证失败。
所有 IdM CA 副本都有针对每个系统证书的跟踪请求。如果带有集成 CA 的 IdM 部署不包含 CA 续订服务器,则每个 IdM CA 服务器都会单独请求续订系统证书。这会导致发生各种系统证书和身份验证失败的不同 CA 副本。
将一个 CA 副本用作续订服务器,可以在需要时完全续订一次系统证书,从而避免身份验证失败。
CA 副本上的 cert monger 服务的角色
在所有 IdM CA 副本上运行的 certmonger 服务 使用 dogtag-ipa-ca-renew-agent 续订帮助程序来跟踪 IdM 系统证书。续订帮助程序读取 CA 续订服务器配置。在不是 CA 续订服务器的每个 CA 副本上,续订帮助程序从 ca_renewal LDAP 条目检索最新的系统证书。由于正好发生 证书续订 尝试时,dog tag-ipa-ca-renew-agent 帮助程序有时会在 CA 续订服务器实际续订证书前尝试更新系统证书。如果发生这种情况,旧的、即将扩展的证书将返回到 CA 副本上的 certmonger 服务。在意识到它 的证书服务 已存储在其数据库中,证书服务会一直尝试在单独尝试之间延迟更新证书,直到它可以从 CA 续订服务器检索更新的证书。
IdM CA 续订服务器正常功能
带有嵌入式 CA 的 IdM 部署是一个 IdM 部署,安装有 IdM CA - 或者稍后安装了 IdM CA 服务器。带有嵌入式 CA 的 IdM 部署必须始终有一个 CA 副本配置为续订服务器。续订服务器必须在线且功能完整,并且必须与其他服务器正确复制。
如果正在使用 ipa server-del、ipa-replica-manage del、ipa-csreplica-manage del 或 ipa-server-install --uninstall 命令删除当前的 CA 续订服务器,则另一个 CA 副本会自动被分配为 CA 续订服务器。此策略确保续订服务器配置保持有效。
该政策不包括以下情况:
脱机续订服务器
如果续订服务器在延长期限内处于脱机状态,则可能会错过续订窗口。在这种情况下,所有非续订 CA 服务器都会持续重新安装当前的系统证书,直到证书过期为止。当发生这种情况时,IdM 部署会被破坏,因为即使是一个过期的证书都可能会导致其他证书的续订失败。
为防止这种情况:如果您当前的续订服务器离线且长时间不可用,请考虑 手动分配新的 CA 续订服务器。
复制问题
如果在续订服务器和其他 CA 副本之间存在复制问题,则续订可能会成功,但其他 CA 副本可能无法在更新的证书过期前检索更新的证书。
要防止这种情况,请确保您的复制协议正常工作。详情请参阅 RHEL 7 Linux 域身份、身份验证和策略指南中的常规或特定复制故障排除指南。
71.2. 更改和重置 IdM CA 续订服务器 复制链接链接已复制到粘贴板!
当证书颁发机构(CA)续订服务器停用时,身份管理(IdM)会自动从 IdM CA 服务器列表中选择一个新的 CA 续订服务器。系统管理员无法影响选择。
为了能够选择新的 IdM CA 续订服务器,系统管理员必须手动执行替换操作。在开始停用当前续订服务器的过程之前,选择新的 CA 续订服务器。
如果当前的 CA 续订服务器配置无效,请重置 IdM CA 续订服务器。
完成此步骤以更改或重置 CA 续订服务器。
先决条件
您有 IdM 管理员凭证:
kinit admin Password for admin@IDM.EXAMPLE.COM:
~]$ kinit admin Password for admin@IDM.EXAMPLE.COM:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
可选:要找出部署中哪些 IdM 服务器有资格成为新的 CA 续订服务器的必需的 CA 角色:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 部署中有两个 CA 服务器。
可选: 要找出哪个 CA 服务器是当前的 CA 续订服务器,请输入:
ipa config-show | grep 'CA renewal' IPA CA renewal master: server.idm.example.com
~]$ ipa config-show | grep 'CA renewal' IPA CA renewal master: server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 当前续订服务器为
server.idm.example.com。要更改续订服务器配置,请使用
ipa config-mod实用程序和--ca-renewal-master-server选项:ipa config-mod --ca-renewal-master-server replica.idm.example.com | grep 'CA renewal' IPA CA renewal master: replica.idm.example.com
~]$ ipa config-mod --ca-renewal-master-server replica.idm.example.com | grep 'CA renewal' IPA CA renewal master: replica.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要您还可以使用以下命令切换到新的 CA 续订服务器:
-
ipa-cacert-manage --renew命令。此命令会续订 CA 证书 ,并使 您在其上执行新 CA 续订服务器的 CA 服务器。 ipa-cert-fix命令。当证书过期时,该命令会恢复部署。它还使您在其上执行该命令的 CA 服务器成为新的 CA 续订服务器。详情请查看 IdM 离线时重新更新过期的系统证书。
-
第 72 章 管理外部签名的 CA 证书 复制链接链接已复制到粘贴板!
身份管理(IdM)提供不同类型的证书颁发机构(CA)配置。您可以选择安装带有集成 CA 或外部 CA 的 IdM。您必须指定在安装过程中使用的 CA 类型。但是,安装后,您可以从外部签名的 CA 移到自签名 CA,反之亦然。另外,当自动续订自签名 CA 时,您必须确保续订外部签名的 CA 证书。请参考管理外部签名的 CA 证书所需的相关部分。
安装带有外部签名 CA 的 IdM:
- 从外部签名的 CA 切换到自签名 CA。
- 从自签名 CA 切换到外部签名的 CA。
- 续订外部签名的 CA 证书。
72.1. 在 IdM 中从外部签名的 CA 切换到自签名 CA 复制链接链接已复制到粘贴板!
完成此步骤,从外部签名切换到身份管理(IdM)证书认证机构(CA)的自签名证书。使用自签名 CA 时,自动管理 CA 证书的续订:系统管理员不需要向外部机构提交证书签名请求(CSR)。
从外部签名切换到自签名 CA 只替换 CA 证书。之前 CA 签名的证书仍有效且仍在使用。例如,即使您移至自签名 CA 后,LDAP 证书的证书链也会保持不变:
external_CA certificate > IdM CA certificate > LDAP certificate
external_CA certificate > IdM CA certificate > LDAP certificate
先决条件
-
您有访问 IdM CA 续订服务器和所有 IdM 客户端及服务器的
root权限。
流程
在 IdM CA 续订服务器上,将 CA 证书更新为自签名:
ipa-cacert-manage renew --self-signed Renewing CA certificate, please wait CA certificate successfully renewed The ipa-cacert-manage command was successful
# ipa-cacert-manage renew --self-signed Renewing CA certificate, please wait CA certificate successfully renewed The ipa-cacert-manage command was successfulCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以
root身份SSH到所有剩余的 IdM 服务器和客户端。例如:ssh root@idmclient01.idm.example.com
# ssh root@idmclient01.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 IdM 客户端上,使用来自服务器的证书更新本地 IdM 证书数据库:
ipa-certupdate Systemwide CA database updated. Systemwide CA database updated. The ipa-certupdate command was successful
[idmclient01 ~]# ipa-certupdate Systemwide CA database updated. Systemwide CA database updated. The ipa-certupdate command was successfulCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要检查您的更新是否成功,并且新的 CA 证书是否已添加到
/etc/ipa/ca.crt文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示更新已成功,因为新 CA 证书使用旧的 CA 证书列出。
72.2. 在 IdM 中从自签名 CA 切换到外部签名的 CA 复制链接链接已复制到粘贴板!
在 IdM 中,您可以从自签名 CA 切换到外部签名的 CA。在 IdM 中切换到外部签名的 CA 后,您的 IdM CA 服务器变为外部 CA 的子 CA。另外,不会自动管理 CA 证书的续订,系统管理员必须向外部颁发机构提交证书签名请求(CSR)。
要切换到外部签名的 CA,CSR 必须由外部 CA 签名。按照 使用外部 CA 续订 IdM CA 续订服务器证书 中的步骤操作,来切换到 IdM 中的自签名 CA。
72.3. 使用外部 CA 续订 IdM CA 续订服务器证书 复制链接链接已复制到粘贴板!
按照以下流程,使用外部 CA 续订身份管理(IdM)证书颁发机构(CA)证书,来签名证书签名请求(CSR)。在这个配置中,您的 IdM CA 服务器是外部 CA 的 subCA。外部 CA 可以(但不必)是 Active Directory 证书服务器(AD CS)。
如果外部证书颁发机构是 AD CS,您可以在 CSR 中为 IdM CA 证书指定您想要的模板。证书模板定义收到证书请求时使用的策略和规则。AD 中的证书模板与 IdM 中的证书配置集对应。
您可以通过其对象标识符(OID)定义特定的 AD CS 模板。OID 是不同发布机构发布的唯一数字值,用于唯一标识分布式应用中的数据元素、语法和其他部分。
另外,您还可以根据名称来定义特定的 AD CS 模板。例如,IdM CA 向 AD CS 提交的 CSR 中使用的默认配置集的名称是 subCA。
要通过在 CSR 中指定 OID 或名称来定义配置集,请使用 external-ca-profile 选项。详情请查看您系统上的 ipa-cacert-manage 手册页。
除了使用现成的证书模板外,您还可以在 AD CS 中创建自定义证书模板,并在 CSR 中使用它。
先决条件
- 您具有对 IdM CA 续订服务器的 root 访问权限。
流程
完成此流程以使用外部签名续订 IdM CA 的证书,无论当前的 CA 证书是自签名还是外部签名。
创建要提交到外部 CA 的 CSR:
如果外部 CA 是 AD CS,请使用
--external-ca-type=ms-cs选项。如果要使用与默认subCA模板不同的模板,请使用--external-ca-profile选项指定它:ipa-cacert-manage renew --external-ca --external-ca-type=ms-cs [--external-ca-profile=PROFILE] Exporting CA certificate signing request, please wait The next step is to get /var/lib/ipa/ca.csr signed by your CA and re-run ipa-cacert-manage as: ipa-cacert-manage renew --external-cert-file=/path/to/signed_certificate --external-cert-file=/path/to/external_ca_certificate The ipa-cacert-manage command was successful
~]# ipa-cacert-manage renew --external-ca --external-ca-type=ms-cs [--external-ca-profile=PROFILE] Exporting CA certificate signing request, please wait The next step is to get /var/lib/ipa/ca.csr signed by your CA and re-run ipa-cacert-manage as: ipa-cacert-manage renew --external-cert-file=/path/to/signed_certificate --external-cert-file=/path/to/external_ca_certificate The ipa-cacert-manage command was successfulCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果外部 CA 不是 AD CS:
ipa-cacert-manage renew --external-ca Exporting CA certificate signing request, please wait The next step is to get /var/lib/ipa/ca.csr signed by your CA and re-run ipa-cacert-manage as: ipa-cacert-manage renew --external-cert-file=/path/to/signed_certificate --external-cert-file=/path/to/external_ca_certificate The ipa-cacert-manage command was successful
~]# ipa-cacert-manage renew --external-ca Exporting CA certificate signing request, please wait The next step is to get /var/lib/ipa/ca.csr signed by your CA and re-run ipa-cacert-manage as: ipa-cacert-manage renew --external-cert-file=/path/to/signed_certificate --external-cert-file=/path/to/external_ca_certificate The ipa-cacert-manage command was successfulCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示已创建了 CSR,并存储在
/var/lib/ipa/ca.csr文件中。
-
将位于
/var/lib/ipa/ca.csr 中的 CSR提交到外部 CA。这个过程根据要用作外部 CA 的服务的不同而有所不同。 检索发布的证书和 CA 证书链,用于在基本的 64 编码 Blob 中发布 CA,即:
- 如果外部 CA 不是 AD CS,则为 PEM 文件。
如果外部 CA 是 AD CS,则为 Base_64 证书。
每个证书服务的进程都有所不同。通常,网页或通知电子邮件中的下载链接允许管理员下载所有需要的证书。
如果外部 CA 是 AD CS,且您已通过 Microsoft Windows 认证授权机构管理窗口使用已知模板提交 CSR,AD CS 会立即发出证书,且 Save Certificate 对话框会出现在 AD CS Web 界面中,询问如何保存颁发的证书。
再次运行
ipa-cacert-manage renewal 命令,添加提供完整证书链所需的所有 CA 证书文件。多次使用--external-cert-file选项,根据需要指定任意文件:ipa-cacert-manage renew --external-cert-file=/path/to/signed_certificate --external-cert-file=/path/to/external_ca_certificate_1 --external-cert-file=/path/to/external_ca_certificate_2
~]# ipa-cacert-manage renew --external-cert-file=/path/to/signed_certificate --external-cert-file=/path/to/external_ca_certificate_1 --external-cert-file=/path/to/external_ca_certificate_2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在所有 IdM 服务器和客户端中,使用来自服务器的证书更新本地 IdM 证书数据库:
ipa-certupdate Systemwide CA database updated. Systemwide CA database updated. The ipa-certupdate command was successful
[client ~]$ ipa-certupdate Systemwide CA database updated. Systemwide CA database updated. The ipa-certupdate command was successfulCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要检查您的更新是否成功,并且新的 CA 证书是否已添加到
/etc/ipa/ca.crt文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示更新已成功,因为新 CA 证书使用旧的 CA 证书列出。
第 73 章 IdM 离线时续订过期的系统证书 复制链接链接已复制到粘贴板!
如果系统证书已过期,Identity Management(IdM)无法启动。IdM 支持使用 ipa-cert-fix 工具更新系统证书。
先决条件
- IdM 仅安装在 Red Hat Enterprise Linux 8.1 或更高的版本上。
-
通过在主机上输入
ipactl start --ignore-service-failures命令来确保 LDAP 服务正在运行。
73.1. 在 CA 续订服务器上续订过期的系统证书 复制链接链接已复制到粘贴板!
按照以下流程,对过期的 IdM 证书应用 ipa-cert-fix 工具。
如果您在不是 CA 续订服务器的 CA(证书授权机构)主机上运行 ipa-cert-fix 工具,并且 实用程序续订共享证书,则该主机会自动成为域中的新 CA 续订服务器。域中必须始终只有一个 CA 续订服务器,以避免不一致。
先决条件
- 您必须以管理员身份登录到服务器。
流程
-
可选:备份系统。这强烈推荐,因为
ipa-cert-fix对nssdb进行了不可逆的更改。因为ipa-cert-fix也对 LDAP 进行了更改,因此也建议备份整个集群。 启动
ipa-cert-fix工具,以分析系统并列出需要续订的过期证书:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入
yes以开始续订过程:Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipa-cert-fix更新所有过期证书前最多可能需要一分钟的时间。
验证
验证所有服务现在都在运行:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
此时,证书已被续订,服务正在运行。下一步是检查 IdM 域中的其他服务器。
-
确保 LDAP 复制在拓扑中正常工作后,根据上述流程,首先在一台 CA 服务器上运行
ipa-cert-fix。 -
在另一台 CA 服务器上运行
ipa-cert-fix之前,请通过getcert-resubmit(在另一台 CA 服务器上)触发共享证书的 Certmonger 续订,以避免不必要的共享证书的续订。
73.2. 续订后验证 IdM 域中的其他 IdM 服务器 复制链接链接已复制到粘贴板!
在使用 ipa-cert-fix 工具续订 CA 续订服务器证书后,您必须:
- 重新启动 域中的所有其他身份管理(IdM)服务器。
- 检查 certmonger 是否更新的证书。
-
如果有其他带有过期系统证书的证书颁发机构(CA)副本,还可以使用
ipa-cert-fix工具续订这些证书。
先决条件
- 您必须以管理员身份登录到服务器。
流程
使用
--force参数重启 IdM:ipactl restart --force
# ipactl restart --forceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
--force参数时,ipactl实用程序会忽略单个服务启动失败。例如,如果服务器也是证书过期的 CA,pki-tomcat服务将无法启动。这是预期并忽略的,因为使用了--force参数。重启后,验证
certmonger 服务是否已更新证书(certificate 状态显示 MONITORING):Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可能需要过些时间,
certmonger才会续订副本上的共享证书。如果服务器也是 CA,以上命令会报告
pki-tomcat服务使用的证书的CA_UNREACHABLE:Request ID '20190522120835': status: CA_UNREACHABLE subject: CN=ca2.example.com,O=EXAMPLE.COM 201905222205 ...Request ID '20190522120835': status: CA_UNREACHABLE subject: CN=ca2.example.com,O=EXAMPLE.COM 201905222205 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要续订此证书,请使用
ipa-cert-fix工具:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 74 章 如果 web 服务器和 LDAP 服务器证书还没有在 IdM 副本中过期,替换它们 复制链接链接已复制到粘贴板!
作为身份管理(IdM)系统管理员,您可以手动替换运行在 IdM 服务器上的 web(或 httpd)和 LDAP(或 Directory)服务的证书。例如,如果证书接近到期,且 certmonger 程序没有配置为自动更新证书,或者证书由外部证书颁发机构(CA)签名,则可能需要这样做。
这个示例为运行在 server.idm.example.com IdM 服务器上的服务安装证书。您从外部 CA 获取证书。
HTTP 和 LDAP 服务证书在不同的 IdM 服务器上有不同的密钥对和主题名称,因此您必须单独在每台 IdM 服务器上更新证书。
先决条件
-
在 IdM 服务器有复制协议的拓扑中至少有一个其他 IdM 副本,web 和 LDAP 证书仍然有效。这是
ipa-server-certinstall命令的先决条件。该命令需要TLS连接与其他 IdM 副本通信。但是,使用无效证书时,这种连接无法建立,ipa-server-certinstall命令将失败。在这种情况下,如果 整个 IdM 部署中已过期,请参阅替换 web 服务器和 LDAP 服务器证书。 -
您有访问 IdM 服务器的
root权限。 -
您知道
目录管理器密码。 - 您可以访问存储外部 CA 的 CA 证书链的文件 ca_certificate_chain_file.crt 。
流程
将 ca_certificate_chain_file.crt 中包含的证书作为额外的 CA 证书安装到 IdM:
ipa-cacert-manage install
# ipa-cacert-manage installCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用来自 ca_certicate_chain_file.crt 的证书更新本地 IdM 证书数据库:
ipa-certupdate
# ipa-certupdateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
OpenSSL工具生成私钥和证书签名请求(CSR):openssl req -new -newkey rsa:4096 -days 365 -nodes -keyout new.key -out new.csr -addext "subjectAltName = DNS:server.idm.example.com" -subj '/CN=server.idm.example.com,O=IDM.EXAMPLE.COM'
$ openssl req -new -newkey rsa:4096 -days 365 -nodes -keyout new.key -out new.csr -addext "subjectAltName = DNS:server.idm.example.com" -subj '/CN=server.idm.example.com,O=IDM.EXAMPLE.COM'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 CSR 提交给外部 CA。这个过程根据要用作外部 CA 的服务的不同而有所不同。在 CA 为证书签名后,将证书导入到 IdM 服务器。
在 IdM 服务器上,将 Apache Web 服务器的旧私钥和证书替换为新密钥和新签名的证书:
ipa-server-certinstall -w --pin=password new.key new.crt
# ipa-server-certinstall -w --pin=password new.key new.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在以上命令中:
-
-w选项指定您要将证书安装到 Web 服务器中。 -
pin选项指定保护私钥的密码。
-
-
出现提示时,输入
目录管理器密码。 将 LDAP 服务器的旧私钥和证书替换为新密钥和新签名的证书:
ipa-server-certinstall -d --pin=password new.key new.cert
# ipa-server-certinstall -d --pin=password new.key new.certCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在以上命令中:
-
-d选项指定您要将证书安装到 LDAP 服务器中。 -
pin选项指定保护私钥的密码。
-
-
出现提示时,输入
目录管理器密码。 重启
httpd服务:systemctl restart httpd.service
# systemctl restart httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
Directory服务:systemctl restart dirsrv@IDM.EXAMPLE.COM.service
# systemctl restart dirsrv@IDM.EXAMPLE.COM.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果在服务器上删除或替换了子 CA,请更新客户端:
ipa-certupdate
# ipa-certupdateCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 75 章 如果 web 服务器和 LDAP 服务器证书在整个 IdM 部署中已过期 复制链接链接已复制到粘贴板!
身份管理(IdM)使用以下服务证书:
-
LDAP (或
目录)服务器证书 -
Web (或
httpd)服务器证书 - PKINIT 证书
在没有 CA 的 IdM 部署中,certmong er 默认不跟踪 IdM 服务证书或通知其过期。如果 IdM 系统管理员没有手动设置这些证书的通知,或者将 certmonger 配置为跟踪它们,则证书将在不通知的情况下过期。
按照以下流程,为运行在 server.idm.example.com IdM 服务器上的 httpd 和 LDAP 服务手动替换过期的证书。
HTTP 和 LDAP 服务证书在不同 IdM 服务器上具有不同的密钥对和主题名称。因此,您必须单独更新每个 IdM 服务器中的证书。
先决条件
- 在拓扑中的 所有 IdM 副本中,HTTP 和 LDAP 证书已过期。如果没有,请参阅 替换 web 服务器和 LDAP 服务器证书(如果它们还没有在 IdM 副本中过期 )。
-
有到 IdM 服务器和副本的
root访问权限。 -
您知道
目录管理器密码。 您已创建以下目录和文件的备份:
-
/etc/dirsrv/slapd-IDM-EXAMPLE-COM/ -
/etc/httpd/alias -
/var/lib/certmonger -
/var/lib/ipa/certs/
-
流程
-
可选:执行
/var/lib/ipa/private和/var/lib/ipa/passwds的备份。 如果您没有使用同一 CA 对新证书进行签名,或者已安装的 CA 证书不再有效,请使用包含外部 CA 的有效 CA 的文件更新本地数据库中外部 CA 的信息。文件在 PEM 和 DER 证书、P PKCS#7 证书链、PKCS#8 和原始私钥和 PKCS#12 格式接受。
将 ca_certificate_chain_file.crt 中提供的证书作为额外的 CA 证书安装到 IdM 中:
ipa-cacert-manage install ca_certificate_chain_file.crt
# ipa-cacert-manage install ca_certificate_chain_file.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用来自 ca_certicate_chain_file.crt 的证书更新本地 IdM 证书数据库:
ipa-certupdate
# ipa-certupdateCopy to Clipboard Copied! Toggle word wrap Toggle overflow
为
httpd和 LDAP 请求证书:使用
OpenSSL工具,为在 IdM 实例上运行的 Apache Web 服务器创建到第三方 CA 的证书签名请求(CSR)。创建新私钥是可选的。如果您仍然有原始私钥,可以将
-in选项与openssl req命令一起使用,以指定要从中读取请求的输入文件名:openssl req -new -nodes -in /var/lib/ipa/private/httpd.key -out /tmp/http.csr -addext 'subjectAltName = DNS:_server.idm.example.com_, otherName:1.3.6.1.4.1.311.20.2.3;UTF8:HTTP/server.idm.example.com@IDM.EXAMPLE.COM' -subj '/O=IDM.EXAMPLE.COM/CN=server.idm.example.com'
$ openssl req -new -nodes -in /var/lib/ipa/private/httpd.key -out /tmp/http.csr -addext 'subjectAltName = DNS:_server.idm.example.com_, otherName:1.3.6.1.4.1.311.20.2.3;UTF8:HTTP/server.idm.example.com@IDM.EXAMPLE.COM' -subj '/O=IDM.EXAMPLE.COM/CN=server.idm.example.com'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果要创建新密钥:
openssl req -new -newkey rsa:2048 -nodes -keyout /var/lib/ipa/private/httpd.key -out /tmp/http.csr -addext 'subjectAltName = DNS:server.idm.example.com, otherName:1.3.6.1.4.1.311.20.2.3;UTF8:HTTP/server.idm.example.com@IDM.EXAMPLE.COM' -subj '/O=IDM.EXAMPLE.COM/CN=server.idm.example.com'
$ openssl req -new -newkey rsa:2048 -nodes -keyout /var/lib/ipa/private/httpd.key -out /tmp/http.csr -addext 'subjectAltName = DNS:server.idm.example.com, otherName:1.3.6.1.4.1.311.20.2.3;UTF8:HTTP/server.idm.example.com@IDM.EXAMPLE.COM' -subj '/O=IDM.EXAMPLE.COM/CN=server.idm.example.com'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用
OpenSSL实用程序为 IdM 实例上运行的 LDAP 服务器创建证书签名请求(CSR):openssl req -new -newkey rsa:2048 -nodes -keyout ~/ldap.key -out /tmp/ldap.csr -addext 'subjectAltName = DNS:server.idm.example.com, otherName:1.3.6.1.4.1.311.20.2.3;UTF8:ldap/server.idm.example.com@IDM.EXAMPLE.COM' -subj '/O=IDM.EXAMPLE.COM/CN=server.idm.example.com'
$ openssl req -new -newkey rsa:2048 -nodes -keyout ~/ldap.key -out /tmp/ldap.csr -addext 'subjectAltName = DNS:server.idm.example.com, otherName:1.3.6.1.4.1.311.20.2.3;UTF8:ldap/server.idm.example.com@IDM.EXAMPLE.COM' -subj '/O=IDM.EXAMPLE.COM/CN=server.idm.example.com'Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 CSR、/tmp/http.csr 和 tmp/ldap.csr 提交到外部 CA,并获取
httpd的证书和 LDAP 的证书。这个过程根据要用作外部 CA 的服务的不同而有所不同。
为
httpd安装证书:cp /path/to/httpd.crt /var/lib/ipa/certs/
# cp /path/to/httpd.crt /var/lib/ipa/certs/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 LDAP 证书安装到 NSS 数据库中:
可选:列出可用的证书:
certutil -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM/ -L Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI Server-Cert u,u,u
# certutil -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM/ -L Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI Server-Cert u,u,uCopy to Clipboard Copied! Toggle word wrap Toggle overflow 默认证书 nickname 是 Server-Cert,但可能应用了不同的名称。
使用上一步中的证书 nickname 从 NSS 数据库(
NSSDB)中删除旧的无效证书:certutil -D -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM/ -n 'Server-Cert' -f /etc/dirsrv/slapd-IDM-EXAMPLE-COM/pwdfile.txt
# certutil -D -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM/ -n 'Server-Cert' -f /etc/dirsrv/slapd-IDM-EXAMPLE-COM/pwdfile.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 PKCS12 文件以简化导入过程到
NSSDB中:openssl pkcs12 -export -in ldap.crt -inkey ldap.key -out ldap.p12 -name Server-Cert
# openssl pkcs12 -export -in ldap.crt -inkey ldap.key -out ldap.p12 -name Server-CertCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将创建的 PKCS#12 文件安装到
NSSDB中:pk12util -i ldap.p12 -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM/ -k /etc/dirsrv/slapd-IDM-EXAMPLE-COM/pwdfile.txt
# pk12util -i ldap.p12 -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM/ -k /etc/dirsrv/slapd-IDM-EXAMPLE-COM/pwdfile.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查新证书是否已成功导入:
certutil -L -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM/
# certutil -L -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
重启
httpd服务:systemctl restart httpd.service
# systemctl restart httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
Directory服务:systemctl restart dirsrv@IDM-EXAMPLE-COM.service
# systemctl restart dirsrv@IDM-EXAMPLE-COM.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
在所有 IdM 副本中执行所有前面的步骤。这是在副本之间建立
TLS连接的先决条件。 将新证书注册到 LDAP 存储:
将 Apache Web 服务器的旧私钥和证书替换为新密钥和新签名证书:
ipa-server-certinstall -w --pin=password /var/lib/ipa/private/httpd.key /var/lib/ipa/certs/httpd.crt
# ipa-server-certinstall -w --pin=password /var/lib/ipa/private/httpd.key /var/lib/ipa/certs/httpd.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在以上命令中:
-
-w选项指定您要将证书安装到 Web 服务器中。 -
pin选项指定保护私钥的密码。
-
-
出现提示时,输入
目录管理器密码。 将 LDAP 服务器的旧私钥和证书替换为新密钥和新签名的证书:
ipa-server-certinstall -d --pin=password /etc/dirsrv/slapd-IDM-EXAMPLE-COM/ldap.key /path/to/ldap.crt
# ipa-server-certinstall -d --pin=password /etc/dirsrv/slapd-IDM-EXAMPLE-COM/ldap.key /path/to/ldap.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在以上命令中:
-
-d选项指定您要将证书安装到 LDAP 服务器中。 -
pin选项指定保护私钥的密码。
-
-
出现提示时,输入
目录管理器密码。 重启
httpd服务:systemctl restart httpd.service
# systemctl restart httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
Directory服务:systemctl restart dirsrv@IDM-EXAMPLE-COM.service
# systemctl restart dirsrv@IDM-EXAMPLE-COM.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- 在所有其他受影响的副本上执行上一步中的命令。
第 76 章 在 IdM CA 服务器中生成 CRL 复制链接链接已复制到粘贴板!
如果您的 IdM 部署使用嵌入式证书颁发机构(CA),您可能需要将证书撤销列表(CRL)从一个身份管理(IdM)服务器移到另一个服务器。例如,当您要将服务器迁移到另一个系统时,可能需要这样做。
仅配置一台服务器来生成 CRL。执行 CRL publisher 角色的 IdM 服务器通常与执行 CA 续订服务器角色的服务器相同,但这不是强制要求。在取消 CRL publisher 服务器前,选择并配置另一个服务器来执行 CRL publisher 服务器角色。
76.1. 在 IdM 服务器中停止 CRL 生成 复制链接链接已复制到粘贴板!
要停止在 IdM CRL 发布程序服务器上生成证书撤销列表(CRL),请使用 ipa-crlgen-manage 命令。在禁用生成前,请验证服务器是否确实生成 CRL。然后您可以禁用它。
先决条件
- 身份管理(IdM)服务器安装在 RHEL 8.1 系统或更新版本中。
- 您必须以 root 身份登录。
流程
检查您的服务器是否正在生成 CRL:
ipa-crlgen-manage status CRL generation: enabled Last CRL update: 2019-10-31 12:00:00 Last CRL Number: 6 The ipa-crlgen-manage command was successful
[root@server ~]# ipa-crlgen-manage status CRL generation: enabled Last CRL update: 2019-10-31 12:00:00 Last CRL Number: 6 The ipa-crlgen-manage command was successfulCopy to Clipboard Copied! Toggle word wrap Toggle overflow 停止在服务器上生成 CRL:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查服务器是否停止生成 CRL:
ipa-crlgen-manage status
[root@server ~]# ipa-crlgen-manage statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow
服务器停止生成 CRL。下一步是在 IdM 副本上启用 CRL 生成。
76.2. 在 IdM 副本服务器中启动 CRL 生成 复制链接链接已复制到粘贴板!
您可以使用 ipa-crlgen-manage 命令在 IdM CA 服务器上开始生成证书撤销列表(CRL)。
先决条件
- 身份管理(IdM)服务器安装在 RHEL 8.1 系统或更新版本中。
- RHEL 系统必须是 IdM 证书颁发机构服务器。
- 您必须以 root 身份登录。
流程
开始生成 CRL:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查是否生成 CRL:
ipa-crlgen-manage status CRL generation: enabled Last CRL update: 2019-10-31 12:10:00 Last CRL Number: 7 The ipa-crlgen-manage command was successful
[root@replica1 ~]# ipa-crlgen-manage status CRL generation: enabled Last CRL update: 2019-10-31 12:10:00 Last CRL Number: 7 The ipa-crlgen-manage command was successfulCopy to Clipboard Copied! Toggle word wrap Toggle overflow
76.3. 更改 CRL 更新间隔 复制链接链接已复制到粘贴板!
默认情况下,证书撤销列表(CRL)文件由身份管理证书颁发机构(Idm CA)自动生成。您可以按照以下流程更改此间隔。
流程
停止 CRL 生成服务器:
systemctl stop pki-tomcatd@pki-tomcat.service
# systemctl stop pki-tomcatd@pki-tomcat.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开
/var/lib/pki/pki-tomcat/conf/ca/CS.cfg文件,并将ca.crl.MasterCRL.autoUpdateInterval值改为新的间隔设置。例如,每隔 60 分钟生成 CRL:ca.crl.MasterCRL.autoUpdateInterval=60
ca.crl.MasterCRL.autoUpdateInterval=60Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您更新了
ca.crl.MasterCRL.autoUpdateInterval参数,则更改将在下一次计划的 CRL 更新后生效。启动 CRL 生成服务器:
systemctl start pki-tomcatd@pki-tomcat.service
# systemctl start pki-tomcatd@pki-tomcat.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 77 章 停用执行 CA 续订服务器和 CRL 发布者角色的服务器 复制链接链接已复制到粘贴板!
您可能有一台服务器同时执行证书颁发机构(CA)续订服务器角色和证书吊销列表(CRL)发布者角色。如果您需要将此服务器下线或停用,请选择并配置另一台 CA 服务器来执行这些角色。
在本例中,主机 server.idm.example.com ,其履行 CA 续订服务器和 CRL 发布者角色,必须停用。此流程将 CA 续订服务器和 CRL 发布者角色转移到主机 replica.idm.example.com,并从 IdM 环境中删除 server.idm.example.com。
您不需要配置同一服务器来执行 CA 续订服务器和 CRL 发布者角色。
先决条件
- 有 IdM 管理员凭证。
- 您有要停用的服务器的 root 密码。
- 在您的 IdM 环境中至少有两个 CA 副本。
流程
获取 IdM 管理员凭证:
kinit admin Password for admin@IDM.EXAMPLE.COM:
[user@server ~]$ kinit admin Password for admin@IDM.EXAMPLE.COM:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果您不确定哪些服务器执行 CA 续订服务器和 CRL 发布者角色:
显示当前的 CA 续订服务器。您可以从任何 IdM 服务器运行以下命令:
ipa config-show | grep 'CA renewal' IPA CA renewal master: server.idm.example.com
[user@server ~]$ ipa config-show | grep 'CA renewal' IPA CA renewal master: server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 测试主机是否为当前的 CRL 发布者。
ipa-crlgen-manage status CRL generation: enabled Last CRL update: 2019-10-31 12:00:00 Last CRL Number: 6 The ipa-crlgen-manage command was successful
[user@server ~]$ ipa-crlgen-manage status CRL generation: enabled Last CRL update: 2019-10-31 12:00:00 Last CRL Number: 6 The ipa-crlgen-manage command was successfulCopy to Clipboard Copied! Toggle word wrap Toggle overflow 不生成 CRL 的 CA 服务器显示
CRL generation: disabled。ipa-crlgen-manage status CRL generation: disabled The ipa-crlgen-manage command was successful
[user@replica ~]$ ipa-crlgen-manage status CRL generation: disabled The ipa-crlgen-manage command was successfulCopy to Clipboard Copied! Toggle word wrap Toggle overflow 继续在 CA 服务器上输入此命令,直到找到 CRL 发布者服务器。
显示您可以提升的所有其他 CA 服务器,以履行这些角色。此环境有两个 CA 服务器。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将
replica.idm.example.com设为 CA 续订服务器。ipa config-mod --ca-renewal-master-server replica.idm.example.com
[user@server ~]$ ipa config-mod --ca-renewal-master-server replica.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
server.idm.example.com上:禁用证书更新器任务:
pki-server ca-config-set ca.certStatusUpdateInterval 0
[root@server ~]# pki-server ca-config-set ca.certStatusUpdateInterval 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 IdM 服务:
ipactl restart
[root@server ~]# ipactl restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在
replica.idm.example.com上:启用证书更新器任务:
pki-server ca-config-unset ca.certStatusUpdateInterval
[root@replica ~]# pki-server ca-config-unset ca.certStatusUpdateIntervalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 IdM 服务:
ipactl restart
[root@replica ~]# ipactl restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在
server.idm.example.com上,停止生成 CRL。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
replica.idm.example.com上,开始生成 CRL。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 停止
server.idm.example.com上的 IdM 服务:ipactl stop
[root@server ~]# ipactl stopCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
replica.idm.example.com上,从 IdM 环境中删除server.idm.example.com。ipa server-del server.idm.example.com
[user@replica ~]$ ipa server-del server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
server.idm.example.com上,以 root 帐户身份使用ipa-server-install --uninstall命令:ipa-server-install --uninstall ... Are you sure you want to continue with the uninstall procedure? [no]: yes
[root@server ~]# ipa-server-install --uninstall ... Are you sure you want to continue with the uninstall procedure? [no]: yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示当前的 CA 续订服务器。
ipa config-show | grep 'CA renewal' IPA CA renewal master: replica.idm.example.com
[user@replica ~]$ ipa config-show | grep 'CA renewal' IPA CA renewal master: replica.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确认
replica.idm.example.com主机正在生成 CRL。ipa-crlgen-manage status CRL generation: enabled Last CRL update: 2019-10-31 12:10:00 Last CRL Number: 7 The ipa-crlgen-manage command was successful
[user@replica ~]$ ipa-crlgen-manage status CRL generation: enabled Last CRL update: 2019-10-31 12:10:00 Last CRL Number: 7 The ipa-crlgen-manage command was successfulCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 78 章 使用 certmonger 为服务获取 IdM 证书 复制链接链接已复制到粘贴板!
78.1. Certmonger 概述 复制链接链接已复制到粘贴板!
当 Identity Management(IdM)安装集成 IdM 证书颁发机构(CA)时,它将使用 certmonger 服务 来跟踪和续订系统和服务证书。当证书到达过期日期时,certmonger 通过以下 方法管理续订过程:
- 使用原始请求中提供的选项来重新生成一个证书签名请求(CSR)。
-
使用 IdM API
cert-request命令将 CSR 提交到 IdM CA。 - 从 IdM CA 接收证书。
- 如果原始请求指定了,则执行预先保存的命令。
-
在续订请求中指定的位置安装新证书:在
NSS数据库或一个文件中。 -
如果原始请求指定了,则执行保存后的命令。例如,保存后命令可以指示
certmonger 重新启动相关服务,以便服务获取新证书。
证书类型 certmonger 跟踪
证书可分为系统和服务证书。
与服务证书(例如 HTTP、LDAP 和 PKINIT)不同,后者在不同服务器上具有不同的密钥对和主题名称,IdM 系统证书及其密钥由所有 CA 副本共享。IdM 系统证书包括:
-
IdM CA证书 -
OCSP签名证书 -
IdM CA 子系统证书 -
IdM CA 审计签名证书 -
IdM 续订代理(RA)证书 -
KRA传输和存储证书
certmonger 服务跟踪在安装带有集成 CA 的 IdM 环境期间请求的 IdM 系统和服务证书。Certmonger 还 跟踪系统管理员为 IdM 主机上运行的其他服务手动请求的证书。Certmonger 不会跟踪外部 CA 证书或用户证书。
Certmonger 组件
certmonger 服务由两个主要组件组成:
-
certmonger 守护进程,即引擎跟踪证书列表并启动续订命令 -
命令行(CLI)的
getcert工具允许系统管理员主动向certmonger守护进程发送命令。
更具体来说,系统管理员可以使用 getcert 工具程序:
78.2. 使用 certmonger 为服务获取 IdM 证书 复制链接链接已复制到粘贴板!
为确保浏览器和身份管理(IdM)客户端上运行的 Web 服务之间的通信安全且加密,请使用 TLS 证书。从 IdM 证书颁发机构(CA)获取您的 Web 服务的 TLS 证书。
按照以下流程,使用 certmonger 获取在 IdM 客户端上运行的服务(HTTP/my_company.idm.example.com@IDM.EXAMPLE.COM)的 IdM 证书。
使用 证书监控 器自动请求证书意味着,certmonger 在到期需要续订时管理和续订证书。
有关 certmonger 请求服务证书时所发生的情况的可视化表示,请参阅 请求服务证书的 certmonger 的通信流。
先决条件
- Web 服务器已注册为 IdM 客户端。
- 您有正在运行的 IdM 客户端的 root 访问权限。
- 请求证书的服务不必在 IdM 中预先存在。
流程
在运行
HTTP服务的 my_company.idm.example.comIdM 客户端中,请求与HTTP/my_company.idm.example.com@IDM.EXAMPLE.COM主体对应的服务的证书,并指定:-
证书将存储在本地
/etc/pki/tls/certs/httpd.pem文件中 -
私钥存储在本地
/etc/pki/tls/private/httpd.key文件中 将
SubjectAltName的 extensionRequest 添加到签名请求中,其 DNS 名称为my_company.idm.example.com:ipa-getcert request -K HTTP/my_company.idm.example.com -k /etc/pki/tls/private/httpd.key -f /etc/pki/tls/certs/httpd.pem -g 2048 -D my_company.idm.example.com -C "systemctl restart httpd" New signing request "20190604065735" added.
# ipa-getcert request -K HTTP/my_company.idm.example.com -k /etc/pki/tls/private/httpd.key -f /etc/pki/tls/certs/httpd.pem -g 2048 -D my_company.idm.example.com -C "systemctl restart httpd" New signing request "20190604065735" added.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在以上命令中:
-
ipa-getcert request命令指定要从 IdM CA 获取证书。ipa-getcert request命令是getcert request -c IPA的快捷方式。 -
g选项指定要生成的密钥的大小(如果尚未到位)。 -
D
选项指定要添加到请求的SubjectAltNameDNS 值。 -
C
选项指示certmonger 在获取证书后重新启动httpd服务。
-
要指定证书与特定的配置集一起发布,请使用
-T选项。 -
要使用指定的 CA 中的指定签发者请求证书,请使用
-X ISSUER选项。
注意RHEL 8 在 Apache 中使用与 RHEL 7 中使用的不同的 SSL 模块。SSL 模块依赖于 OpenSSL 而不是 NSS。因此,在 RHEL 8 中,您无法使用 NSS 数据库存储
HTTPS证书和私钥。-
-
证书将存储在本地
可选:要检查请求的状态:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示请求处于
MONITORING状态,这表示已获取了证书。密钥对和证书的位置是请求的位置。
78.3. 请求服务证书的证书的通信流 复制链接链接已复制到粘贴板!
这些图显示了当 certmonger 从身份管理(IdM)证书认证机构(CA)服务器请求服务证书时发生什么情况的阶段。序列由这些图表组成:
未加密的通信 显示初始情况:没有 HTTPS 证书,Web 服务器和浏览器之间的通信未加密。
图 78.1. 未加密的通信
请求服务证书的 certmonger 显示系统管理员使用 certmonger 手动为 Apache web 服务器请求 HTTPS 证书。请注意,在请求 Web 服务器证书时,certmonger 不会直接与 CA 通信。它通过 IdM 代理。
图 78.2. 请求服务证书的 certmonger
发布服务证书的IdM CA 显示为 web 服务器发布 HTTPS 证书的 IdM CA。
图 78.3. 发布服务证书的 IdM CA
Certmonger 应用服务证书显示,certmonger 把 HTTPS 证书放置到 IdM 客户端的正确位置,如果指定,会重启 httpd 服务。随后 Apache 服务器使用 HTTPS 证书来加密自身和浏览器之间的流量。
图 78.4. 应用服务证书的 certmonger
当旧的证书接近过期时,请求新证书的 certmonger ,显示 certmonger 在证书过期前自动从 IdM CA 请求续订服务证书。IdM CA 发布一个新证书。
图 78.5. 当旧的证书接近过期时,请求新证书的 certmonger
78.4. 查看由 certmonger 跟踪的证书请求的详情 复制链接链接已复制到粘贴板!
certmonger 服务 监控证书请求。成功签署证书请求后,会生成证书。Certmonger 管理证书请求,包括生成的证书。按照以下流程查看由 certmonger 管理的特定证书请求的详情。
流程
如果您知道如何指定证书请求,请只列出该特定证书请求的详细信息。例如,您可以指定:
- 请求 ID
- 证书的位置
证书 nickname
例如,要查看请求 ID 为 20190408143846 的证书详情,请使用
-v选项查看您的证书请求失败时的所有错误详情:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
输出显示有关证书的几段信息,例如:
-
证书位置;在上面的示例中,它是
/etc/dirsrv/slapd-IDM-EXAMPLE-COM目录中的 NSS 数据库 -
证书 nickname;上例中为
Server-Cert -
存储 pin 的文件;在上面的示例中,该文件为
/etc/dirsrv/slapd-IDM-EXAMPLE-COM/pwdfile.txt -
将用于续订证书的证书颁发机构(CA);上例中为
IPACA -
到期日期;上例中为
2021-04-08 16:38:47 CEST -
证书的状态;上例中,MON
ITORING状态表示证书有效并且被跟踪。 -
保存后的命令;在上面的示例中,这是
LDAP服务的重新启动。
如果您不知道如何指定证书请求,请列出
certmonger 监控或尝试获取的所有证书的详情:getcert list
# getcert listCopy to Clipboard Copied! Toggle word wrap Toggle overflow
78.5. 启动和停止证书跟踪 复制链接链接已复制到粘贴板!
按照以下流程,使用 getcert stop-tracking 和 getcert start-tracking 命令来监控证书。这两个命令由 certmonger 服务提供。如果您已经从不同的 IdM 客户端上导入了身份管理(IdM)证书认证机构(CA)签发的证书,启用证书跟踪特别有用。启用证书跟踪也可以是以下置备方案的最后一步:
- 在 IdM 服务器上,您可以为尚不存在的系统创建一个证书。
- 您可以创建新系统。
- 将新系统注册为 IdM 客户端。
- 您可以将证书和密钥从 上的 IdM 服务器导入到 IdM 客户端。
-
您开始使用
certmonger 来跟踪证书,以确保其在过期时得到续订。
流程
使用 Request ID 20190408143846 禁用对证书的监控:
getcert stop-tracking -i 20190408143846
# getcert stop-tracking -i 20190408143846Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关更多选项,请参阅您系统上的
getcert stop-tracking手册页。要启用对存储在
/tmp/some_cert.crt文件中的证书的监控,其私钥存储在/tmp/some_key.key文件中:getcert start-tracking -c IPA -f /tmp/some_cert.crt -k /tmp/some_key.key
# getcert start-tracking -c IPA -f /tmp/some_cert.crt -k /tmp/some_key.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow Certmonger无法自动识别发布证书的 CA 类型。因此,如果 IdM CA 签发证书,将-c选项与IPA值一起添加到getcert start-tracking命令中。省略添加-c选项会导致certmonger 进入NEED_CA 状态。有关更多选项,请参阅您系统上的
getcert start-tracking手册页。
这两个命令不操作证书。例如,getcert stop-tracking 不会删除证书或将其从 NSS 数据库或文件系统中删除,只是将证书从受监控的证书列表中删除。同样,getcert start-tracking 只会在受监控证书列表中添加证书。
78.6. 手动续订证书 复制链接链接已复制到粘贴板!
当证书即将到期时,certmonger 守护进程 会自动使用证书颁发机构(CA)帮助程序发出续订命令,获取更新的证书,并将上一个证书替换为新证书。
您还可以使用 getcert resubmit 命令提前手动续订证书。这样,您可以通过添加主题备用名称(SAN)来更新证书包含的信息。
按照以下流程手动续订证书。
流程
使用 Request ID 20190408143846 续订证书:
getcert resubmit -i 20190408143846
# getcert resubmit -i 20190408143846Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要获取特定证书的 Request ID,请使用
getcert list命令。详情请查看您系统上的getcert list手册页。
78.7. 使certmonger 恢复跟踪 CA 副本中的 IdM 证书 复制链接链接已复制到粘贴板!
您可以在跟踪证书中断后,使 certmonger 恢复对带有集成证书颁发机构的 IdM 部署至关重要的 Identity Management (IdM)系统证书的跟踪。中断可能是由在续订系统证书期间从 IdM 主机取消滚动,或者复制拓扑无法正常工作造成的。该程序还演示了如何使 证书恢复 跟踪 IdM 服务证书,即 HTTP、LDAP 和 PKINIT 证书。
先决条件
- 要恢复跟踪系统证书的主机是一个 IdM 服务器,它也是 IdM 证书颁发机构(CA),而不是 IdM CA 续订服务器。
流程
获取子系统 CA 证书的 PIN:
export NSSDB_PIN=$(sed -n 's/^internal=//p' /var/lib/pki/pki-tomcat/conf/password.conf)
# export NSSDB_PIN=$(sed -n 's/^internal=//p' /var/lib/pki/pki-tomcat/conf/password.conf)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为
Issuing CA、审计、OSCP、子系统和Tomcat 服务器证书添加跟踪:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加对剩余的 IdM 证书、HTTP、
LDAP、IPA 续订代理和PKINIT 证书的跟踪:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启证书:systemctl restart certmonger
# systemctl restart certmongerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 等待一分钟,直到
certmonger启动后,然后检查新证书的状态:getcert list
# getcert listCopy to Clipboard Copied! Toggle word wrap Toggle overflow
注意以下几点:
- 如果您的 IdM 系统证书已过期,请参阅红帽知识库解决方案 如何在 RHEL7/RHEL 8 上手动续订身份管理(IPA)证书? 是否手动续订 IdM CA 服务器上的 IdM 系统证书,以及 CA 续订服务器和 CRL 发布者服务器。
- 按照红帽知识库解决方案中描述的步骤,如何在 RHEL7 上手动续订 RHEL7 上的身份管理(IPA)证书? 在拓扑中所有其他 CA 服务器上手动续订 IdM 系统证书。
78.8. 使用带有 certmonger 的 SCEP 复制链接链接已复制到粘贴板!
简单证书注册协议(SCEP)是您可以跨不同设备和操作系统使用的证书管理协议。如果您在环境中使用 SCEP 服务器作为外部证书颁发机构(CA),您可以使用 certmonger 获取身份管理(IdM)客户端的证书。
78.8.1. SCEP 概述 复制链接链接已复制到粘贴板!
简单证书注册协议(SCEP)是您可以跨不同设备和操作系统使用的证书管理协议。您可以使用 SCEP 服务器作为外部证书颁发机构(CA)。
您可以配置一个身份管理(IdM)客户端,以通过 HTTP 直接从 CA SCEP 服务请求并检索证书。此过程由共享 secret 保护,该 secret 通常仅在有限时间内有效。
在客户端上,SCEP 要求您提供以下组件:
- SCEP URL:CA SCEP 接口的 URL。
-
SCEP 共享的 secret:一个在 CA 和 SCEP 客户端之间共享的
challengePasswordPIN,用于获取证书。
然后,客户端通过 SCEP 检索 CA 证书链,并将证书签名请求发送到 CA。
配置带有 certmonger 的 SCEP 时,您可以创建一个新的 CA 配置的配置文件,该配置文件指定签发的证书参数。
78.8.2. 通过 SCEP 请求一个 IdM CA 签名的证书 复制链接链接已复制到粘贴板!
以下示例将 SCEP_example SCEP CA 配置添加到 certmonger,并在 client.idm.example.com IdM 客户端上请求一个新证书。certmonger 支持 NSS 证书数据库格式和基于文件的(PEM)格式,如 OpenSSL。
先决条件
- 您知道 SCEP URL。
-
您有
challengePasswordPIN 共享 secret。
流程
将 CA 配置添加到
certmonger:[root@client.idm.example.com ~]# getcert add-scep-ca -c SCEP_example -u SCEP_URL
[root@client.idm.example.com ~]# getcert add-scep-ca -c SCEP_example -u SCEP_URLCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
-c: CA 配置的强制别名。稍后可以将相同的值用于其他getcert命令。 -u:服务器的 SCEP 接口的 URL。重要使用 HTTPS URL 时,还必须使用
-R选项指定 SCEP 服务器 CA 证书的 PEM 格式的副本的位置。
-
验证 CA 配置是否已成功添加:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果成功添加了配置,certmonger 会从远程 CA 检索 CA 链。然后,CA 链以指纹的形式显示在命令输出中。当通过未加密的 HTTP 访问服务器时,手动将指纹与 SCEP 服务器中显示的指纹进行比较,以防止中间人攻击。
从 CA 请求一个证书:
如果您在使用 NSS:
[root@client.idm.example.com ~]# getcert request -I Example_Task -c SCEP_example -d /etc/pki/nssdb -n ExampleCert -N cn="client.idm.example.com" -L one-time_PIN -D client.idm.example.com
[root@client.idm.example.com ~]# getcert request -I Example_Task -c SCEP_example -d /etc/pki/nssdb -n ExampleCert -N cn="client.idm.example.com" -L one-time_PIN -D client.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用选项来指定证书请求的以下参数:
-
-i : 可选:任务的名称:请求的跟踪 ID。稍后可以将相同的值用于getcert list命令。 -
-c:将请求提交给的 CA 配置。 -
-d:包含 NSS 数据库的目录,以存储证书和密钥。 -
-n:证书的别名,在 NSS 数据库中使用。 -
-n: CSR 中的主题名称。 -
-L:CA 发布的一次性时间限制的challengePasswordPIN。 -
-D:证书的主题备用名称,通常与主机名相同。
-
如果您在使用 OpenSSL:
[root@client.idm.example.com ~]# getcert request -I Example_Task -c SCEP_example -f /etc/pki/tls/certs/server.crt -k /etc/pki/tls/private/private.key -N cn="client.idm.example.com" -L one-time_PIN -D client.idm.example.com
[root@client.idm.example.com ~]# getcert request -I Example_Task -c SCEP_example -f /etc/pki/tls/certs/server.crt -k /etc/pki/tls/private/private.key -N cn="client.idm.example.com" -L one-time_PIN -D client.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用选项来指定证书请求的以下参数:
-
-i : 可选:任务的名称:请求的跟踪 ID。稍后可以将相同的值用于getcert list命令。 -
-c:将请求提交给的 CA 配置。 -
-f:到证书的存储路径。 -
-k:到密钥的存储路径。 -
-n: CSR 中的主题名称。 -
-L:CA 发布的一次性时间限制的challengePasswordPIN。 -
-D:证书的主题备用名称,通常与主机名相同。
-
验证
验证证书是否已颁发,并正确存储在本地数据库中:
如果您使用了 NSS,请输入:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您使用了 OpenSSL,请输入:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 状态 MONITORING 表示成功检索了签发的证书。
getcert-list(1)手册页列出了其他可能的状态及其含义。
78.8.3. 使用 certmonger 自动续订 AD SCEP 证书 复制链接链接已复制到粘贴板!
当 certmonger 发送 SCEP 证书续订请求时,此请求使用现有的证书私钥进行签名。但是,certmonger 发送的续订请求默认还包括用于最初获取证书的 challengePassword PIN。
作为 SCEP 服务器工作的活动目录(AD)网络设备注册服务(NDES)服务器会自动拒绝包含最初 challengePassword PIN 的任何续订请求。因此,续订会失败。
要使带有 AD 的续订正常工作,您需要配置 certmonger,以发送没有 challengePassword PIN 的签名续订请求。您还需要配置 AD 服务器,使其不会在续订时比较主题名称。
除了 AD ,SCEP 服务器也会拒绝包含 challengePassword 的请求。在这些情况下,您可能还需要以这种方式更改 certmonger 配置。
先决条件
- RHEL 服务器必须正在运行 RHEL 8.6 或更新版本。
流程
-
在 AD 服务器上打开
regedit。 -
在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MSCEP 子键中,添加一个新的 32 位 REG_DWORD 条目
DisableRenewalSubjectNameMatch,并将其值设为1。 在运行
certmonger的服务器上,打开/etc/certmonger/certmonger.conf文件,并添加以下部分:[scep] challenge_password_otp = yes
[scep] challenge_password_otp = yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 certmonger:
systemctl restart certmonger
# systemctl restart certmongerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 79 章 从 CA 请求证书,并使用 RHEL 系统角色创建自签名证书 复制链接链接已复制到粘贴板!
许多服务,如 Web 服务器,都使用 TLS 加密与客户端的连接。这些服务需要一个私钥和证书,以及签名证书的可信证书颁发机构(CA)。
通过使用 certificate RHEL 系统角色,您可以在受管节点上自动生成私钥。另外,角色将 certmonger 服务配置为向 CA 发送证书签名请求(CSR),且服务会在证书过期前自动更新证书。
出于测试目的,您可以使用 certificate 角色创建自签名证书,而不是从 CA 请求一个签名证书。
79.1. 使用 certificate RHEL 系统角色从 IdM CA 请求一个新证书 复制链接链接已复制到粘贴板!
如果 Red Hat Enterprise Linux 主机是 RHEL 身份管理(IdM)环境的成员,则您可以从 IdM 证书颁发机构(CA)请求 TLS 证书,并在此主机上运行的服务中使用它们。通过使用 certificate RHEL 系统角色,您可以自动化创建私钥的过程,并让 certmonger 服务从 CA 请求一个证书。默认情况下,certmonger 也将在证书过期前更新证书。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。 - 受管节点是 IdM 域的成员,域使用集成了 IdM 的 CA。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括如下:
name: <path_or_file_name>定义生成的私钥和证书文件的名称或路径:
-
如果将变量设置为
web-server,则角色会将私钥存储在/etc/pki/tls/private/web-server.key中,并将证书存储在/etc/pki/tls/certs/web-server.crt文件中。 如果将变量设置为一个路径,如
/tmp/web-server,则角色会将私钥存储在/tmp/web-server.key中,并将证书存储在/tmp/web-server.crt文件中。请注意,您使用的目录必须设置了
cert_tSELinux 上下文。您可以使用selinuxRHEL 系统角色管理 SELinux 上下文。
-
如果将变量设置为
ca: ipa- 定义角色从 IdM CA 请求证书。
dns: <hostname_or_list_of_hostnames>-
设置发布的证书中的 Subject Alternative Names (SAN)字段包含的主机名。您可以使用通配符(
*)或以 YAML 列表格式指定多个名称。 principal: <kerberos_principal>- 可选:设置应该在证书中包含的 Kerberos 主体。
run_before: <command>-
可选:定义
certmonger在从 CA 请求证书之前应执行的命令。 run_after: <command>-
可选:定义
certmonger在从 CA 收到发布的证书后应该执行的命令。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.certificate/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
列出
certmonger服务管理的证书:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
79.2. 使用 certificate RHEL 系统角色请求新的自签名证书 复制链接链接已复制到粘贴板!
如果需要测试环境的 TLS 证书,您可以使用自签名证书。通过使用 证书 RHEL 系统角色,您可以自动创建私钥并让 certmonger 服务创建自签名证书。默认情况下,certmonger 会在证书过期前更新证书。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo权限。
流程
创建包含以下内容的 playbook 文件,如
~/playbook.yml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括以下内容:
name: <path_or_file_name>定义生成的私钥和证书文件的名称或路径:
-
如果将变量设置为
web-server,该角色会将私钥存储在/etc/pki/tls/private/web-server.key中,并将证书存储在/etc/pki/tls/certs/web-server.crt文件中。 如果将变量设置为路径,如
/tmp/web-server,该角色会将私钥存储在/tmp/web-server.key中,并将证书存储在/tmp/web-server.crt文件中。请注意,您使用的目录必须设置
cert_tSELinux 上下文。您可以使用selinuxRHEL 系统角色来管理 SELinux 上下文。
-
如果将变量设置为
ca: self-sign- 定义该角色创建了自签名证书。
dns: <hostname_or_list_of_hostnames>-
设置发布的证书中的 Subject Alternative Names (SAN)字段所包含的主机名。您可以使用通配符(
*)或以 YAML 列表格式指定多个名称。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.certificate/README.md文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
列出
certmonger服务管理的证书:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 80 章 将应用程序限制为只信任证书子集 复制链接链接已复制到粘贴板!
如果您的 Identity Management(IdM)安装配置了集成证书系统(CS)证书颁发机构(CA),您可以创建轻量级子 CA。您创建的所有子 CA 都从属于证书系统的主 CA,即 ipa CA。
在这种情况下,轻量 级子 CA 意味着为特定目的发布证书的子 CA。例如,轻量级子 CA 允许您配置服务,如虚拟专用网络(VPN)网关和 Web 浏览器,以仅接受 子 CA A 发布的证书。通过将其他服务配置为仅接受由 子 CA B 发布的证书,您可以防止它们接受 子 CA、主 CA( 即 ipa CA)和两者之间的任何中间子 CA 发布的证书。
如果您撤销了子 CA 的中间证书,则正确配置的客户端会自动将此子 CA 发布的所有证书视为无效。所有其他直接由 root CA、ipa 或其他 子 CA 发布的证书保持有效。
本节使用 Apache Web 服务器的示例来说明如何将应用限制为仅信任某一证书子集。完成本节以限制 IdM 客户端上运行的 Web 服务器使用 webserver-ca IdM 子 CA 发布的证书,并要求用户使用 web client-ca IdM 子 CA 发布的用户证书向 web 服务器进行身份验证。
您需要执行的步骤有:
- 创建 IdM 子 CA
- 从 IdM WebUI 下载子 CA 证书
- 创建 CA ACL,指定正确组合用户、服务和 CA,以及使用的证书配置集
- 从 IdM 子 CA 请求在 IdM 客户端上运行的 web 服务的证书
- 设置单实例 Apache HTTP 服务器
- 向 Apache HTTP 服务器添加 TLS 加密
- 在 Apache HTTP 服务器中设置支持的 TLS 协议版本
- 在 Apache HTTP 服务器上设置受支持的密码
- 在 web 服务器中配置 TLS 客户端证书身份验证
- 从 IdM 子 CA 请求用户的证书,并将其导出到客户端
- 将用户证书导入到浏览器中,并将浏览器配置为信任子 CA 证书
80.1. 管理轻量级子 CA 复制链接链接已复制到粘贴板!
本节描述了如何管理轻量级从属证书颁发机构(sub-CA)。您创建的所有子 CA 都从属到证书系统的主 CA ,ipa CA。您还可以禁用和删除子 CA。
-
如果您删除了子 CA,则该子 CA 的吊销检查将不再工作。只有当子 CA 不再发布证书,且其
notAfter过期时间在未来时,才可以删除该子 CA。 - 只有当子 CA 发布的证书仍然未过期时,才应禁用该子CA。如果子 CA 发布的所有证书都已过期,您可以删除该子 CA。
- 您不能禁用或删除 IdM CA。
80.1.1. 从 IdM WebUI 创建子 CA 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM WebUI 创建名为 webserver-ca 和 webclient-ca 的新子 CA。
先决条件
- 以管理员身份登录。
流程
- 在 身份验证 菜单中,单击 Certificates。
- 选择 证书授权 并单击 添加。
- 输入 webserver-ca 子 CA 的名称。在 Subject DN 字段中输入 Subject DN,如 CN=WEBSERVER,O=IDM.EXAMPLE.COM。请注意,主题 DN 在 IdM CA 基础架构中必须是唯一的。
- 输入 webclient-ca 子 CA 的名称。在 Subject DN 字段中输入 Subject DN CN=WEBCLIENT,O=IDM.EXAMPLE.COM。
在命令行中,运行
ipa-certupdate命令为 webserver-ca 和 webclient-ca 子 CA 证书创建 certmonger 跟踪请求:ipa-certupdate
[root@ipaserver ~]# ipa-certupdateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要在创建子 CA 后忘记运行
ipa-certupdate命令意味着,如果子 CA 证书过期,则子 CA 发布的最终用户证书将被视为无效,即使最终用户证书还没有过期。
验证
验证新子 CA 的签名证书是否已添加到 IdM 数据库中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意新子 CA 证书自动传输到安装有证书系统实例的所有副本。
80.1.2. 从 IdM WebUI 删除子 CA 复制链接链接已复制到粘贴板!
按照以下流程删除 IdM Web UI 中的轻量级子 CA。
-
如果您删除了子 CA,则该子 CA 的吊销检查将不再工作。只有当子 CA 不再发布证书,且其
notAfter过期时间在未来时,才可以删除该子 CA。 - 只有当子 CA 发布的证书仍然未过期时,才应禁用该子CA。如果子 CA 发布的所有证书都已过期,您可以删除该子 CA。
- 您不能禁用或删除 IdM CA。
先决条件
- 以管理员身份登录。
- 您已在 IdM CLI 中禁用了子 CA。请参阅 从 IdM CLI 禁用子 CA
流程
-
在 IdM Web UI 中,打开
身份验证选项卡,然后选择证书子选项卡。 -
选择
证书颁发机构。 选择要删除的子 CA,然后单击"
删除"。图 80.1. 在 IdM Web UI 中删除子 CA
-
单击
删除以确认。
80.1.3. 从 IdM CLI 创建子 CA 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM CLI 创建名为 webserver-ca 和 webclient-ca 的新子 CA。
先决条件
- 您已以管理员身份登录到 CA 服务器的 IdM 服务器。
流程
输入
ipa ca-add命令,再指定 webserver-ca 子 CA 的名称及其 Subject Distinguished Name(DN):Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Name
- CA 的名称。
- 授权 ID
- 自动创建 CA 独立 ID。
- 主题 DN
- 主题区分名称(DN)。主题 DN 在 IdM CA 基础架构中必须是唯一的。
- 签发者 DN
- 签发子 CA 证书的父 CA。所有子 CA 都是作为 IdM root CA 的子 CA 创建的。
创建 webclient-ca 子 CA 以向 Web 客户端发布证书:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 ipa-certupdate 命令,来为 webserver-ca 和 webclient-ca 子 CAs 证书创建 certmonger 追踪请求:
ipa-certupdate
[root@ipaserver ~]# ipa-certupdateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要如果您在创建子 CA 后忘记了运行 ipa-certupdate 命令,且子 CA 证书已过期,则该子 CA 发布的最终身份证书被视为无效,即使最终身份证书没有过期。
验证
验证新子 CA 的签名证书是否已添加到 IdM 数据库中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意新子 CA 证书自动传输到安装有证书系统实例的所有副本。
80.1.4. 从 IdM CLI 禁用子 CA 复制链接链接已复制到粘贴板!
按照以下流程,从 IdM CLI 禁用子 CA。如果子 CA 发布的证书还有未过期的,则您不应该删除它,但可以禁用它。如果您删除了子 CA,则对该子 CA 的吊销检查将不再工作。
先决条件
- 以管理员身份登录。
流程
运行
ipa ca-find命令来确定您要删除的子 CA 的名称:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行
ipa ca-disable命令来禁用您的子 CA,在本例中为webserver-ca:ipa ca-disable webserver-ca -------------------------- Disabled CA "webserver-ca" --------------------------
ipa ca-disable webserver-ca -------------------------- Disabled CA "webserver-ca" --------------------------Copy to Clipboard Copied! Toggle word wrap Toggle overflow
80.1.5. 从 IdM CLI 删除子 CA 复制链接链接已复制到粘贴板!
按照以下流程从 IdM CLI 删除轻量级子 CA。
-
如果您删除了子 CA,则该子 CA 的吊销检查将不再工作。只有当子 CA 不再发布证书,且其
notAfter过期时间在未来时,才可以删除该子 CA。 - 只有当子 CA 发布的证书仍然未过期时,才应禁用该子CA。如果子 CA 发布的所有证书都已过期,您可以删除该子 CA。
- 您不能禁用或删除 IdM CA。
先决条件
- 以管理员身份登录。
流程
要显示子 CA 和 CA 的列表,请运行
ipa ca-find命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行
ipa ca-disable命令来禁用您的子 CA,在本例中为webserver-ca:ipa ca-disable webserver-ca -------------------------- Disabled CA "webserver-ca" --------------------------
# ipa ca-disable webserver-ca -------------------------- Disabled CA "webserver-ca" --------------------------Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除子 CA,在本例中为
webserver-ca:ipa ca-del webserver-ca ------------------------- Deleted CA "webserver-ca" -------------------------
# ipa ca-del webserver-ca ------------------------- Deleted CA "webserver-ca" -------------------------Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行
ipa ca-find来显示 CA 和子 CA 的列表。webserver-ca不再位于列表中。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
80.2. 从 IdM WebUI 下载子 CA 证书 复制链接链接已复制到粘贴板!
先决条件
- 以管理员身份登录。
流程
在 Authentication 菜单中点击 Certificates > Certificates。
图 80.2. 证书列表中的子 CA 证书
- 单击子 CA 证书的序列号,以打开证书信息页面。
- 在证书信息页面中,点击 Actions > Download。
在 CLI 中,将子 CA 证书移到
/etc/pki/tls/private/目录中:mv path/to/the/downloaded/certificate /etc/pki/tls/private/sub-ca.crt
# mv path/to/the/downloaded/certificate /etc/pki/tls/private/sub-ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow
80.3. 为 Web 服务器和客户端身份验证创建 CA ACL 复制链接链接已复制到粘贴板!
证书颁发机构访问控制列表(CA ACL)规则定义哪些配置文件可用于向哪些用户、服务或主机发布证书。通过关联配置文件、主体和组,CA ACL 允许主体或组使用特定配置集请求证书。
例如,利用 CA ACL,管理员可以将适用于从伦敦办事处工作的员工的配置文件的使用限制为属于伦敦办事处相关组的成员的用户。
80.3.1. 在 IdM CLI 中查看 CA ACL 复制链接链接已复制到粘贴板!
按照以下流程查看 IdM 部署中提供的证书颁发机构访问控制列表(CA ACL)以及特定 CA ACL 的详情。
流程
要查看 IdM 环境中的所有 CA ACL,请输入
ipa caacl-find命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看 CA ACL 的详细信息,请输入
ipa caacl-show命令并指定 CA ACL 名称。例如,要查看 hosts_services_caIPAserviceCert CA ACL 的详情,请输入:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
按照以下流程,在为 HTTP/my_company.idm.example.com@IDM.EXAMPLE.COM 服务请求证书时,创建一个需要系统管理员使用 webserver-ca 子 CA 和 caIPAserviceCert 配置文件的 CA ACL。如果用户从其他子 CA 或不同配置集请求证书,则请求会失败。唯一的例外是在启用了另一个匹配的 CA ACL 时。要查看可用的 CA ACL,请参阅在 IdM CLI 中查看 CA ACL。
先决条件
- HTTP/my_company.idm.example.com@IDM.EXAMPLE.COM 服务是 IdM 的一部分。
- 以管理员身份登录。
流程
使用
ipa caacl命令创建 CA ACL,并指定其名称:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ipa caacl-mod 命令修改CA ACL 以指定 CA ACL 的说明:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 webserver-ca 子 CA 添加到 CA ACL 中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ipa caacl-add-service指定主体可以请求证书的服务:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ipa caacl-add-profile命令为请求的证书指定证书配置集:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以直接使用新创建的 CA ACL。它在创建后默认启用。
CA ACL 的重点是指定允许哪些 CA 和配置文件组合用于来自特定主体或组的请求。CA ACL 不会影响证书验证或信任。它们不会影响签发的证书的使用方式。
按照以下流程,在请求证书时,创建一个需要系统管理员使用 webclient-ca 子 CA 和 IECUserRoles 配置文件的 CA ACL。如果用户从其他子 CA 或不同配置集请求证书,则请求会失败。唯一的例外是在启用了另一个匹配的 CA ACL 时。要查看可用的 CA ACL,请参阅在 IdM CLI 中查看 CA ACL。
先决条件
- 以管理员身份登录。
流程
使用
ipa caacl命令创建 CA ACL 并指定其名称:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ipa caacl-mod 命令修改CA ACL 以指定 CA ACL 的说明:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 webclient-ca 子 CA 添加到 CA ACL 中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ipa caacl-add-profile命令为请求的证书指定证书配置集:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ipa caacl-mod 命令修改CA ACL,以指定 CA ACL 适用于所有 IdM 用户:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以直接使用新创建的 CA ACL。它在创建后默认启用。
CA ACL 的重点是指定允许哪些 CA 和配置文件组合用于来自特定主体或组的请求。CA ACL 不会影响证书验证或信任。它们不会影响签发的证书的使用方式。
80.4. 使用 certmonger 为服务获取 IdM 证书 复制链接链接已复制到粘贴板!
为确保浏览器和在 IdM 客户端上运行的 Web 服务之间的通信安全且加密,请使用 TLS 证书。如果要将 Web 浏览器限制为信任 webserver-ca 子 CA 发布但没有其它 IdM 子 CA 发布的证书,请从 webserver-ca 子 CA 获取 Web 服务的 TLS 证书。
按照以下流程,使用 certmonger 获取在 IdM 客户端上运行的服务(HTTP/my_company.idm.example.com@IDM.EXAMPLE.COM)的 IdM 证书。
使用 证书监控 器自动请求证书意味着,certmonger 在到期需要续订时管理和续订证书。
有关 certmonger 请求服务证书时发生的情况的可视化表示,请参阅 请求服务证书的 certmonger 的通信流。
先决条件
- Web 服务器已注册为 IdM 客户端。
- 您有正在运行的 IdM 客户端的 root 访问权限。
- 请求证书的服务不必在 IdM 中预先存在。
流程
在运行
HTTP服务的 my_company.idm.example.comIdM 客户端中,请求与HTTP/my_company.idm.example.com@IDM.EXAMPLE.COM主体对应的服务的证书,并指定:-
证书将存储在本地
/etc/pki/tls/certs/httpd.pem文件中 -
私钥存储在本地
/etc/pki/tls/private/httpd.key文件中 -
The
webserver-ca子 CA 将作为发行证书颁发机构 将
SubjectAltName的 extensionRequest 添加到签名请求中,其 DNS 名称为my_company.idm.example.com:ipa-getcert request -K HTTP/my_company.idm.example.com -k /etc/pki/tls/private/httpd.key -f /etc/pki/tls/certs/httpd.pem -g 2048 -D my_company.idm.example.com -X webserver-ca -C "systemctl restart httpd" New signing request "20190604065735" added.
# ipa-getcert request -K HTTP/my_company.idm.example.com -k /etc/pki/tls/private/httpd.key -f /etc/pki/tls/certs/httpd.pem -g 2048 -D my_company.idm.example.com -X webserver-ca -C "systemctl restart httpd" New signing request "20190604065735" added.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在以上命令中:
-
ipa-getcert request命令指定要从 IdM CA 获取证书。ipa-getcert request命令是getcert request -c IPA的快捷方式。 -
g选项指定要生成的密钥的大小(如果尚未到位)。 -
D
选项指定要添加到请求的SubjectAltNameDNS 值。 -
X 选项指定证书的签发者必须是webserver-ca,而不是ipa。 -
C
选项指示certmonger 在获取证书后重新启动httpd服务。
-
要指定证书与特定的配置集一起发布,请使用
-T选项。
注意RHEL 8 在 Apache 中使用与 RHEL 7 中使用的不同的 SSL 模块。SSL 模块依赖于 OpenSSL 而不是 NSS。因此,在 RHEL 8 中,您无法使用 NSS 数据库存储
HTTPS证书和私钥。-
-
证书将存储在本地
可选:检查请求的状态:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示请求处于
MONITORING状态,这表示已获取了证书。密钥对和证书的位置是请求的位置。
80.5. 请求服务证书的证书的通信流 复制链接链接已复制到粘贴板!
这些图显示了当 certmonger 从身份管理(IdM)证书认证机构(CA)服务器请求服务证书时发生了什么情况的阶段。序列由这些图表组成:
在图中,webserver-ca 子 CA 由通用 IdM CA 服务器 表示。
未加密的通信 显示初始情况:没有 HTTPS 证书,Web 服务器和浏览器之间的通信是未加密的。
图 80.3. 未加密的通信
请求服务证书的 certmonger 显示系统管理员使用 certmonger 来手动为 Apache Web 服务器请求 HTTPS 证书。请注意,在请求 Web 服务器证书时,certmonger 不会直接与 CA 通信。它通过 IdM 代理。
图 80.4. 请求服务证书的 certmonger
发布服务证书的 IdM CA 显示为 web 服务器发出 HTTPS 证书的 IdM CA。
图 80.5. 发布服务证书的 IdM CA
Certmonger 应用服务证书显示,certmonger 把 HTTPS 证书放置到 IdM 客户端的正确位置,如果指定,会重启 httpd 服务。随后 Apache 服务器使用 HTTPS 证书来加密自身和浏览器之间的流量。
图 80.6. 应用服务证书的 certmonger
当旧证书接近过期时,请求新证书的 certmonger ,显示 certmonger 在证书过期前自动从 IdM CA 请求续订服务证书。IdM CA 发布一个新证书。
图 80.7. 当旧的证书接近过期时,请求新证书的 certmonger
80.6. 设置单实例 Apache HTTP 服务器 复制链接链接已复制到粘贴板!
您可以设置一个单实例 Apache HTTP 服务器来提供静态 HTML 内容。
如果 Web 服务器应该为与服务器关联的所有域提供相同的内容,请按照流程操作。如果要为不同的域提供不同的内容,请设置基于名称的虚拟主机。详情请参阅配置基于 Apache 名称的虚拟主机。
流程
安装
httpd软件包:yum install httpd
# yum install httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果使用
firewalld,请在本地防火墙中打开 TCP 端口80:firewall-cmd --permanent --add-port=80/tcp firewall-cmd --reload
# firewall-cmd --permanent --add-port=80/tcp # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启用并启动
httpd服务:systemctl enable --now httpd
# systemctl enable --now httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:将 HTML 文件添加到
/var/www/html/目录中。注意在 向
/var/www/html/添加内容时,在httpd默认运行的情况下,文件和目录必须可被用户读取。内容所有者可以是root用户和root用户组,也可以是管理员选择的其他用户或组。如果内容所有者是root用户和root用户组,则文件必须可被其他用户读取。所有文件和目录的 SELinux 上下文必须为httpd_sys_content_t,其默认应用于/var/www目录中的所有内容。
验证
使用 Web 浏览器连接到
http://my_company.idm.example.com/ 或http://server_IP/。如果
/var/www/html/目录为空,或者不包含index.html或index.htm文件,则 Apache 会显示Red Hat Enterprise Linux 测试页面。如果/var/www/html/包含具有不同名称的 HTML 文件,您可以通过在该文件中输入 URL 来加载这些文件,如http://server_IP/example.html或http://my_company.idm.example.com/example.html。
80.7. 在 Apache HTTP 服务器中添加 TLS 加密 复制链接链接已复制到粘贴板!
您可以对 idm.example.com 域的 my_company.idm.example.com Apache HTTP 服务器启用 TLS 加密。
先决条件
-
my_company.idm.example.comApache HTTP 服务器已安装并在运行。 -
您已从 webserver-ca 子 CA 获取 TLS 证书,并将其存储在
/etc/pki/tls/certs/httpd.pem文件中,如使用 certmonger 的服务的 Obtaining IdM 证书 所述。如果您使用其他路径,请调整该流程的对应步骤。 -
对应的私钥存储在
/etc/pki/tls/private/httpd.key文件中。如果您使用其他路径,请调整该流程的对应步骤。 -
webserver-ca CA 证书存储在
/etc/pki/tls/private/sub-ca.crt文件中。如果您使用其他路径,请调整该流程的对应步骤。 - 客户端和 my_company.idm.example.com Web 服务器将服务器的主机名解析为 Web 服务器的 IP 地址。
流程
安装
mod_ssl软件包:yum install mod_ssl
# yum install mod_sslCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
/etc/httpd/conf.d/ssl.conf文件,并将以下设置添加到<VirtualHost _default_:443>指令中:设置服务器名称:
ServerName my_company.idm.example.com
ServerName my_company.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
重要服务器名称必须与证书的
Common Name字段中设置的条目匹配。可选:如果证书在
Subject Alt Names(SAN)字段中包含额外的主机名,您可以 配置mod_ssl来为这些主机名提供 TLS 加密。要配置此功能,请添加具有对应名称的ServerAliases参数:ServerAlias www.my_company.idm.example.com server.my_company.idm.example.com
ServerAlias www.my_company.idm.example.com server.my_company.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 设置到私钥、服务器证书和 CA 证书的路径:
SSLCertificateKeyFile "/etc/pki/tls/private/httpd.key" SSLCertificateFile "/etc/pki/tls/certs/httpd.pem" SSLCACertificateFile "/etc/pki/tls/certs/ca.crt"
SSLCertificateKeyFile "/etc/pki/tls/private/httpd.key" SSLCertificateFile "/etc/pki/tls/certs/httpd.pem" SSLCACertificateFile "/etc/pki/tls/certs/ca.crt"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
出于安全考虑,配置成只有
root用户才可以访问私钥文件:chown root:root /etc/pki/tls/private/httpd.key chmod 600 //etc/pki/tls/private/httpd.key
# chown root:root /etc/pki/tls/private/httpd.key # chmod 600 //etc/pki/tls/private/httpd.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 警告如果私钥被设置为可以被未授权的用户访问,则需要撤销证书,然后再创建一个新私钥并请求一个新证书。否则,TLS 连接就不再安全。
如果您使用
firewalld,请在本地防火墙中打开端口443:firewall-cmd --permanent --add-port=443/tcp firewall-cmd --reload
# firewall-cmd --permanent --add-port=443/tcp # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
httpd服务:systemctl restart httpd
# systemctl restart httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您使用密码来保护私钥文件,则必须在每次
httpd服务启动时都输入此密码。-
使用浏览器并连接到
https://my_company.idm.example.com
-
使用浏览器并连接到
80.8. 在 Apache HTTP 服务器中设置支持的 TLS 协议版本 复制链接链接已复制到粘贴板!
默认情况下,RHEL 上的 Apache HTTP 服务器使用系统范围的加密策略来定义安全默认值,这些值也与最新的浏览器兼容。例如,DEFAULT 策略定义 TLSv1.2 和 TLSv1.3 协议版本仅在 apache 中启用。
您可以手动配置 my_company.idm.example.com Apache HTTP 服务器支持哪些 TLS 协议版本。如果您的环境只需要启用特定的 TLS 协议版本,请按照以下步骤操作,例如:
-
如果您的环境要求客户端也可以使用弱
TLS1(TLSv1.0)或TLS1.1协议。 -
如果你想将 Apache 配置为只支持
TLSv1.2或TLSv1.3协议。
先决条件
- 在 my_company.idm.example.com 服务器上启用了 TLS 加密,如 向 Apache HTTP 服务器 添加 TLS 加密 中所述。
流程
编辑
/etc/httpd/conf/httpd.conf文件,并将以下设置添加到您要为其设置 TLS 协议版本的<VirtualHost>指令中。例如,只启用TLSv1.3协议:SSLProtocol -All TLSv1.3
SSLProtocol -All TLSv1.3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
httpd服务:systemctl restart httpd
# systemctl restart httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用以下命令来验证服务器是否支持
TLSv1.3:openssl s_client -connect example.com:443 -tls1_3
# openssl s_client -connect example.com:443 -tls1_3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令来验证服务器是否不支持
TLSv1.2:openssl s_client -connect example.com:443 -tls1_2
# openssl s_client -connect example.com:443 -tls1_2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果服务器不支持该协议,命令会返回一个错误:
140111600609088:error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:ssl/record/rec_layer_s3.c:1543:SSL alert number 70
140111600609088:error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:ssl/record/rec_layer_s3.c:1543:SSL alert number 70Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 可选:重复用于其他 TLS 协议版本的命令。
80.9. 在 Apache HTTP 服务器中设置支持的密码 复制链接链接已复制到粘贴板!
默认情况下,Apache HTTP 服务器使用定义安全默认值的系统范围的加密策略,这些值也与最新的浏览器兼容。有关系统范围加密允许的密码列表,请查看/etc/crypto-policies/back-ends/openssl.config 文件。
您可以手动配置 my_company.idm.example.com Apache HTTP 服务器支持哪些密码。如果您的环境需要特定的加密系统,请按照以下步骤操作。
先决条件
- 在 my_company.idm.example.com 服务器上启用了 TLS 加密,如 向 Apache HTTP 服务器 添加 TLS 加密 中所述。
流程
编辑
/etc/httpd/conf/httpd.conf文件,并将SSLCipherSuite参数添加到您要为其设置 TLS 密码的<VirtualHost>指令中:SSLCipherSuite "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!SHA1:!SHA256"
SSLCipherSuite "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!SHA1:!SHA256"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个示例只启用
EECDH+AESGCM、EDH+AESGCM、AES256+EECDH和AES256+EDH密码,并禁用所有使用SHA1和SHA256消息身份验证码(MAC)的密码。重启
httpd服务:systemctl restart httpd
# systemctl restart httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示 Apache HTTP 服务器支持的密码列表:
安装
nmap软件包:yum install nmap
# yum install nmapCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
nmap工具来显示支持的加密:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
80.10. 配置 TLS 客户端证书身份验证 复制链接链接已复制到粘贴板!
客户端证书身份验证仅允许使用证书进行身份验证的用户访问 my_company.idm.example.com Web 服务器上的资源。您可以为 /var/www/html/Example/ 目录配置客户端证书身份验证。
如果 my_company.idm.example.com Apache 服务器使用 TLS 1.3 协议,则某些客户端需要额外的配置。例如,在 Firefox 中,将about:config菜单中的security.tls.enable_post_handshake_auth参数设置为true。详情请查看 Red Hat Enterprise Linux 8中的传输层安全版本1.3。
先决条件
- 在 my_company.idm.example.com 服务器上启用了 TLS 加密,如 向 Apache HTTP 服务器 添加 TLS 加密 中所述。
流程
编辑
/etc/httpd/conf/httpd.conf文件,并将以下设置添加到你要为其配置客户端验证的<VirtualHost>指令中:<Directory "/var/www/html/Example/"> SSLVerifyClient require </Directory>
<Directory "/var/www/html/Example/"> SSLVerifyClient require </Directory>Copy to Clipboard Copied! Toggle word wrap Toggle overflow SSLVerifyClient require设置定义了服务器必须成功验证客户端证书,然后客户端才能访问/var/www/html/Example/目录中的内容。重启
httpd服务:systemctl restart httpd
# systemctl restart httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用
curl工具在没有客户端身份验证的情况下访问https://my_company.idm.example.com/Example/URL:curl https://my_company.idm.example.com/Example/ curl: (56) OpenSSL SSL_read: error:1409445C:SSL routines:ssl3_read_bytes:tlsv13 alert certificate required, errno 0
$ curl https://my_company.idm.example.com/Example/ curl: (56) OpenSSL SSL_read: error:1409445C:SSL routines:ssl3_read_bytes:tlsv13 alert certificate required, errno 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此错误表示 my_company.idm.example.com Web 服务器需要客户端证书身份验证。
将客户端私钥和证书以及 CA 证书传递给
curl以便使用客户端身份验证来访问相同的URL:curl --cacert ca.crt --key client.key --cert client.crt https://my_company.idm.example.com/Example/
$ curl --cacert ca.crt --key client.key --cert client.crt https://my_company.idm.example.com/Example/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果请求成功,
curl会显示存储在/var/www/html/Example/目录中的index.html文件。
80.11. 请求新的用户证书并将其导出到客户端 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以配置在 IdM 客户端上运行的 Web 服务器,以请求使用 Web 浏览器访问服务器的用户对特定 IdM 子 CA 发布的证书进行身份验证。按照以下流程,从特定的 IdM 子 CA 请求用户证书,并将证书和对应的私钥导出到用户希望使用 Web 浏览器访问 Web 服务器的主机上。之后 ,将证书和私钥导入到浏览器中。
流程
可选:创建一个新目录,如
~/certdb/,并使其作为临时证书数据库。当系统提示时,创建一个 NSS 证书数据库密码来加密后续步骤中生成的证书的密钥:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建证书签名请求(CSR),并将输出重定向到文件。例如,要为
IDM.EXAMPLE.COM领域中的idm_user用户创建一个4096位、名称为certificate_request.csr的 CSR,请将证书私钥的昵称设为idm_user以便于查找,并将主题设为CN=idm_user,O=IDM.EXAMPLE.COM:certutil -R -d ~/certdb/ -a -g 4096 -n idm_user -s "CN=idm_user,O=IDM.EXAMPLE.COM" > certificate_request.csr
# certutil -R -d ~/certdb/ -a -g 4096 -n idm_user -s "CN=idm_user,O=IDM.EXAMPLE.COM" > certificate_request.csrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出现提示时,输入您在使用
certutil创建临时数据库时输入的相同密码。然后继续键入随机输入,直到被告知停止:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将证书请求文件提交到服务器。指定要与新发布的证书关联的 Kerberos 主体、存储证书的输出文件,以及可选的证书配置集。指定您要签发证书的 IdM 子 CA。例如,要获取
IECUserRoles配置集的证书,带有添加的用户角色扩展的配置文件,idm_user@IDM.EXAMPLE.COM主体来自webclient-ca,并将证书保存到~/idm_user.pem文件中:ipa cert-request certificate_request.csr --principal=idm_user@IDM.EXAMPLE.COM --profile-id=IECUserRoles --ca=webclient-ca --certificate-out=~/idm_user.pem
# ipa cert-request certificate_request.csr --principal=idm_user@IDM.EXAMPLE.COM --profile-id=IECUserRoles --ca=webclient-ca --certificate-out=~/idm_user.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将证书添加到 NSS 数据库。使用
-n选项设置之前创建 CSR 时所用的相同 nickname,以便该证书与 NSS 数据库中的私钥相匹配。t选项设置信任级别。详情请查看 certutil(1)man page。i 选项指定输入证书文件。例如,要将存储在~/certdb/数据库中~/idm_user.pem文件中的带有idm_user昵称的证书添加到 NSS 数据库中:certutil -A -d ~/certdb/ -n idm_user -t "P,," -i ~/idm_user.pem
# certutil -A -d ~/certdb/ -n idm_user -t "P,," -i ~/idm_user.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 NSS 数据库中的密钥是否未显示
(或称为)作为其 nickname。例如,验证存储在~/certdb/ 数据库中的证书没有被孤立:certutil -K -d ~/certdb/ < 0> rsa 5ad14d41463b87a095b1896cf0068ccc467df395 NSS Certificate DB:idm_user
# certutil -K -d ~/certdb/ < 0> rsa 5ad14d41463b87a095b1896cf0068ccc467df395 NSS Certificate DB:idm_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
pk12util命令将证书从 NSS 数据库导出到 PKCS12 格式。例如,将/root/certdbNSS 数据库中的idm_usernickname 的证书导出到~/idm_user.p12文件:pk12util -d ~/certdb -o ~/idm_user.p12 -n idm_user Enter Password or Pin for "NSS Certificate DB": Enter password for PKCS12 file: Re-enter password: pk12util: PKCS12 EXPORT SUCCESSFUL
# pk12util -d ~/certdb -o ~/idm_user.p12 -n idm_user Enter Password or Pin for "NSS Certificate DB": Enter password for PKCS12 file: Re-enter password: pk12util: PKCS12 EXPORT SUCCESSFULCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将证书传输到您要启用
idm_user的证书身份验证的主机:scp ~/idm_user.p12 idm_user@client.idm.example.com:/home/idm_user/
# scp ~/idm_user.p12 idm_user@client.idm.example.com:/home/idm_user/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在传输了证书的主机上,出于安全原因使 'pkcs12 文件被 'other' 组无法访问的目录:
chmod o-rwx /home/idm_user/
# chmod o-rwx /home/idm_user/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出于安全考虑,请从服务器中删除临时 NSS 数据库和 .pkcs12 文件:
rm ~/certdb/ rm ~/idm_user.p12
# rm ~/certdb/ # rm ~/idm_user.p12Copy to Clipboard Copied! Toggle word wrap Toggle overflow
80.12. 配置浏览器以启用证书身份验证 复制链接链接已复制到粘贴板!
若要在使用 Web UI 登录身份管理(IdM)时通过证书进行身份验证,您需要将用户和相关证书颁发机构(CA)证书导入到 Mozilla Firefox 或 Google Chrome 浏览器。浏览器运行的主机本身不必是 IdM 域的一部分。
IdM 支持以下浏览器来连接到 WebUI:
- Mozilla Firefox 38 及更新的版本
- Google Chrome 46 及更新的版本
以下流程演示了如何配置 Mozilla Firefox 57.0.1 浏览器。
先决条件
- 您可以使用 PKCS#12 格式在浏览器中导入 用户证书。
- 您已 下载了子 CA 证书,并以 PEM 格式进行了处理。
流程
打开 Firefox,然后导航到
Preferences→Privacy & Security。图 80.8. Preferences 中的隐私和安全部分
单击 。
图 80.9. 查看隐私和安全性中的证书
-
在您的
证书选项卡中,单击 。以 PKCS12 格式查找并打开用户证书,然后点 和 。 要确保您的 IdM 子 CA 被 Firefox 识别为可信颁发机构,请导入在从 IdM WebUI 下载子 CA证书部分中保存的 IdM 子 CA 证书作为可信证书颁发机构证书:
打开 Firefox,导航到 Preferences 并点击 。
图 80.10. Preferences 中的隐私和安全部分
单击 。
图 80.11. 查看隐私和安全性中的证书
-
在"
颁发机构"选项卡中,单击 。查找并打开子 CA 证书。信任证书来识别网站,然后点 和 。
第 82 章 IdM 中的 vault 复制链接链接已复制到粘贴板!
了解更多身份管理(IdM)中有关 vault 的信息。
82.1. vaults 及其优势 复制链接链接已复制到粘贴板!
您可以使用身份管理(IdM)密码库来保持安全存储的所有敏感数据,但方便在一个位置。
vault 是 IdM 中的安全位置,用于存储、检索、共享和恢复 secret。secret 是安全敏感数据,通常是身份验证凭据,只有有限的人员或实体可以访问这些数据。例如,secret 包括:
- 密码
- PIN
- 私有 SSH 密钥
密码库与密码管理器相当。正如密码管理器一样,密码库通常要求用户生成并记住一个主密码来解锁和访问密码库中存储的任何信息。但是,用户也可以决定拥有标准密码库。标准密码库不要求用户输入任何密码来访问密码库中存储的 secret。
IdM 中的密码库的目的是存储身份验证凭据,允许您向外部的非IdM 相关服务进行身份验证。
IdM 密码库的特征如下:
- Vault 只能供 vault 所有者和 vault 所有者选择为 vault 成员的 IdM 用户访问。另外,IdM 管理员还可以访问所有密码库。
- 如果用户没有足够的特权来创建密码库,IdM 管理员可以创建密码库并将该用户设置为其所有者。
- 用户和服务可从 IdM 域注册的任何机器访问存储在密码库中的 secret。
- 个密码库只能包含一个机密,例如一个文件。但是,文件本身可以包含多个机密,如密码、密钥选项卡或证书。
Vault 仅在 IdM 命令行(CLI)中可用,不能来自 IdM Web UI。
82.2. Vault 所有者、成员和管理员 复制链接链接已复制到粘贴板!
身份管理(IdM)区分以下 vault 用户类型:
- Vault 所有者
vault 所有者是具有密码库基本管理权限的用户或服务。例如,密码库所有者可以修改密码库的属性或添加新的 vault 成员。
每个密码库必须至少有一个所有者。库也可以有多个所有者。
- Vault 成员
- vault 成员是可以访问由其他用户或服务创建的库的用户或服务。
- Vault 管理员
Vault 管理员不受限制地访问所有密码库,并有权执行所有密码库操作。在 IdM 基于角色的访问控制(RBAC)的上下文中,vault 管理员是任何具有
Vault Administrators特权的 IdM 用户。注意对称和非对称密码库 通过密码或密钥进行保护。特殊访问控制规则适用于管理员:
- 访问对称和非对称密码库中的机密。
- 更改或重置 vault 密码或密钥。
- Vault 用户
vault 用户代表密码库所在的容器的用户。
Vault 用户信息显示在特定命令的输出中,如ipa vault-show:ipa vault-show my_vault Vault name: my_vault Type: standard Owner users: user Vault user: user
$ ipa vault-show my_vault Vault name: my_vault Type: standard Owner users: user Vault user: userCopy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 vault 容器和用户密码库的详情,请参阅 Vault 容器。
82.3. 标准、对称和非对称密码库 复制链接链接已复制到粘贴板!
根据安全性和访问控制级别,IdM 将密码库分类为以下类型:
- 标准密码库
- Vault 所有者和密码库成员可以归档和检索密码库内的机密,而无需使用密码或密钥。
- 对称密码库
- 库中的机密通过对称密钥进行保护。Vault 所有者和成员可以归档和检索机密,但必须提供 vault 密码。
- 非对称密码库
- 库中的机密通过非对称密钥进行保护。用户使用公钥存档机密,并使用私钥检索该机密。Vault 所有者可以同时存档和检索机密。Vault 成员只能归档机密。
82.5. Vault 容器 复制链接链接已复制到粘贴板!
vault 容器是密码库的集合。下表列出了 Identity Management (IdM) 提供的默认 vault 容器。
| Type | 描述 | 目的 |
|---|---|---|
| 用户容器 | 用户的私有容器 | 为特定用户存储用户密码库 |
| 服务容器 | 服务的私有容器 | 为特定服务存储服务库 |
| 共享容器 | 用于多个用户和服务的容器 | 存储可由多个用户或服务共享的 vault |
当为用户或服务创建第一个私有密码库时,IdM 会自动为每个用户或服务创建用户和服务容器。删除用户或服务后,IdM 会删除容器及其内容。
82.6. 基本 IdM vault 命令 复制链接链接已复制到粘贴板!
您可以使用以下介绍的基本命令来管理身份管理(IdM) vault。下表 包含 ipa vault-* 命令的列表,并解释了它们的用途。
在运行任何 ipa vault-* 命令前,请将密钥恢复授权 (KRA) 证书系统组件安装到 IdM 域中的一个或多个服务器上。详情请参阅在 IdM 中安装密钥恢复授权。
| 命令 | 目的 |
|---|---|
|
| 显示有关 IdM 库和示例密码库命令的概念信息。 |
|
|
在特定的 |
|
| 将用户 vault 作为 vault 成员访问时,您必须指定 vault 所有者。如果您没有指定 vault 所有者,IdM 会通知您没有找到密码库: ipa vault-show user_vault ipa: ERROR: user_vault: vault not found
|
|
| 在访问共享密码库时,您必须指定您要访问的 vault 是共享密码库。否则,IdM 会通知您没有找到密码库: ipa vault-show shared_vault ipa: ERROR: shared_vault: vault not found
|
82.7. 在 IdM 中安装密钥恢复授权 复制链接链接已复制到粘贴板!
按照以下流程,通过在特定的 IdM 服务器上安装密钥恢复授权(KRA)证书系统(CS)组件来在身份管理(IdM)中启用 vault。
先决条件
-
您已以
root身份登录到 IdM 服务器。 - IdM 证书颁发机构已安装在 IdM 服务器上。
-
您有
目录管理器凭证。
流程
安装 KRA:
ipa-kra-install
# ipa-kra-installCopy to Clipboard Copied! Toggle word wrap Toggle overflow
要使密码库服务高可用且具有弹性,请在两个或多个 IdM 服务器上安装 KRA。维护多个 KRA 服务器可防止数据丢失。
您可以在隐藏的副本上安装 IdM 集群的第一个 KRA。但是,在在非隐藏的副本上安装 KRA 克隆前,安装额外的 KRA 克隆需要临时激活隐藏的副本。然后您可以再次隐藏原始隐藏的副本。
第 83 章 使用 IdM 用户库:存储和检索 secret 复制链接链接已复制到粘贴板!
本章论述了如何在身份管理中使用用户库。具体来说,它描述了用户如何在 IdM 库中存储 secret,以及用户如何检索 secret。用户可以通过两个不同的 IdM 客户端进行存储和检索。
先决条件
- 密钥恢复授权中心 (KRA) 证书系统组件已安装在您的 IdM 域中的一个或多个服务器上。详情请参阅在 IdM 中安装密钥恢复授权。
83.1. 在用户密码库中存储 secret 复制链接链接已复制到粘贴板!
按照以下流程创建带有一个或多个私有 vault 的 vault 容器,以安全地存储具有敏感信息的文件。在以下流程中使用的示例中,idm_user 用户创建标准类型的密码库。标准密码库类型确保无需 idm_user 在访问该文件时进行身份验证。idm_user 能够从用户登录的任何 IdM 客户端检索 文件。
在此过程中:
- idm_user 是想要创建密码库的用户。
- my_vault 是用于存储用户证书的 vault。
-
vault 类型是
标准的,因此访问存档证书不要求用户提供 vault 密码。 - secret.txt 是包含用户希望在密码库中存储的证书的文件。
先决条件
- 您知道 idm_user 的密码。
- 您已登录到属于 IdM 客户端的主机。
步骤
获取
idm_user的 Kerberos 票据授予 ticket(TGT):kinit idm_user
$ kinit idm_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ipa vault-add命令和--type 标准选项来创建标准密码库:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要确保用户的第一个用户库由同一用户创建。为用户创建第一个密码库也会创建用户的 vault 容器。创建的代理变为 vault 容器的所有者。
例如,如果其他用户(如
admin)为user1创建第一个用户库,则用户的 vault 容器所有者也是admin,并且user1无法访问用户密码库或创建新的用户库。使用
ipa vault-archive命令及--in选项将secret.txt文件归档到密码库中:ipa vault-archive my_vault --in secret.txt ----------------------------------- Archived data into vault "my_vault" -----------------------------------
$ ipa vault-archive my_vault --in secret.txt ----------------------------------- Archived data into vault "my_vault" -----------------------------------Copy to Clipboard Copied! Toggle word wrap Toggle overflow
83.2. 从用户密码库检索 secret 复制链接链接已复制到粘贴板!
作为身份管理(IdM),您可以从用户私有密码库中检索机密到您已登录的任何 IdM 客户端。
按照以下流程,以名为 idm_user 的 IdM 用户身份,将名为 my_vault 的用户私有 vault 中的 secret 检索到 idm_client.idm.example.com。
先决条件
- idm_user 是 my_vault 的所有者。
- idm_user 已在 密码库中存档了机密。
- my_vault 是一个标准密码库,这意味着 idm_user 不必输入任何密码才能访问密码库的内容。
步骤
以 idm_user 身份 SSH 到 idm_client:
ssh idm_user@idm_client.idm.example.com
$ ssh idm_user@idm_client.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以
idm_user身份登录:kinit user
$ kinit userCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用带有-
out选项的ipa vault-retrieve命令来检索密码库的内容并将其保存到secret_exported.txt文件中。ipa vault-retrieve my_vault --out secret_exported.txt -------------------------------------- Retrieved data from vault "my_vault" --------------------------------------
$ ipa vault-retrieve my_vault --out secret_exported.txt -------------------------------------- Retrieved data from vault "my_vault" --------------------------------------Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 84 章 使用 Ansible 管理 IdM 用户库:存储和检索 secret 复制链接链接已复制到粘贴板!
本章论述了如何使用 Ansible vault 模块在身份管理中管理用户密码库。具体来说,它描述了用户可以如何使用 Ansible playbook 执行以下三个连续操作:
用户可以通过两个不同的 IdM 客户端进行存储和检索。
先决条件
- 密钥恢复授权中心 (KRA) 证书系统组件已安装在您的 IdM 域中的一个或多个服务器上。详情请参阅在 IdM 中安装密钥恢复授权。
84.1. 使用 Ansible 在 IdM 中存在标准用户库 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 创建一个带有一个或多个私有 vault 的 vault 容器,以安全地存储敏感信息。在以下步骤中使用的示例中,idm_user 用户创建名为 my_vault 的标准类型库。标准密码库类型确保无需 idm_user 在访问该文件时进行身份验证。idm_user 能够从用户登录的任何 IdM 客户端检索 文件。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 idm_user 的密码。
流程
进入 MyPlaybooks 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 /usr/share/doc/ansible-freeipa/playbooks/vault/ensure-standard-vault-is-present.yml Ansible playbook 文件的副本。例如:
cp /usr/share/doc/ansible-freeipa/playbooks/vault/ensure-standard-vault-is-present.yml ensure-standard-vault-is-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/vault/ensure-standard-vault-is-present.yml ensure-standard-vault-is-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 ensure-standard-vault-is-present-copy.yml 文件进行编辑。
通过在
ipavault任务部分设置以下变量来调整文件:-
将
ipaadmin_principal变量设置为 idm_user。 -
将
ipaadmin_password变量设置为 idm_user 密码。 -
将
user变量设置为 idm_user。 -
将
name变量设置为 my_vault。 将
vault_type变量设置为 standard。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook -v -i inventory.file ensure-standard-vault-is-present-copy.yml
$ ansible-playbook -v -i inventory.file ensure-standard-vault-is-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
84.2. 使用 Ansible 将 secret 归档到 IdM 中的标准用户库中 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 将敏感信息存储在个人 vault 中。在使用的示例中,idm_user 用户在名为 my_vault 的库中归档含有名为 password.txt 的敏感信息的文件。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 idm_user 的密码。
- idm_user 是所有者,或者至少是 my_vault 的成员用户。
- 您可以访问 password.txt,这是要在 my_vault 中存档的机密。
流程
进入 MyPlaybooks 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 /usr/share/doc/ansible-freeipa/playbooks/vault/data-archive-in-symmetric-vault.yml Ansible playbook 文件的副本。例如:
cp /usr/share/doc/ansible-freeipa/playbooks/vault/data-archive-in-symmetric-vault.yml data-archive-in-symmetric-vault-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/vault/data-archive-in-symmetric-vault.yml data-archive-in-symmetric-vault-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 data-archive-in-standard-vault-copy.yml 文件进行编辑。
通过在
ipavault任务部分设置以下变量来调整文件:-
将
ipaadmin_principal变量设置为 idm_user。 -
将
ipaadmin_password变量设置为 idm_user 密码。 -
将
user变量设置为 idm_user。 -
将
name变量设置为 my_vault。 -
将
in变量设置为包含敏感信息的文件的完整路径。 将
action变量设置为 member。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook -v -i inventory.file data-archive-in-standard-vault-copy.yml
$ ansible-playbook -v -i inventory.file data-archive-in-standard-vault-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
84.3. 使用 Ansible 从 IdM 中的标准用户库检索 secret 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 从用户个人 vault 中检索 secret。在以下步骤中使用的示例中,idm_user 用户从名为 my_vault 的标准类型库检索包含敏感数据的文件,并检索名为 host01 的 IdM 客户端。idm_user 在访问该文件时不必进行身份验证。idm_user 可以使用 Ansible 从安装 Ansible 的任何 IdM 客户端检索 文件。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 idm_user 的密码。
- idm_user 是 my_vault 的所有者。
- idm_user 已将 secret 存储在 my_vault 中。
- Ansible 可以写入要检索该 secret 的 IdM 主机上的 目录。
- idm_user 可以从要检索 secret 的 IdM 主机上的 目录读取。
流程
进入 MyPlaybooks 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 /usr/share/doc/ansible-freeipa/playbooks/vault/data-archive-in-symmetric-vault.yml Ansible playbook 文件的副本。例如:
cp /usr/share/doc/ansible-freeipa/playbooks/vault/retrive-data-symmetric-vault.yml retrieve-data-symmetric-vault-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/vault/retrive-data-symmetric-vault.yml retrieve-data-symmetric-vault-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并在一个明确定义的部分中提到您要检索该 secret 的 IdM 客户端。例如,要指示 Ansible 在 host01.idm.example.com 上检索 secret,请输入:
[ipahost] host01.idm.example.com
[ipahost] host01.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 retrieve-data-standard-vault.yml-copy.yml 文件进行编辑。
-
通过将
hosts变量设置为 ipahost 来调整 文件。 通过在
ipavault任务部分设置以下变量来调整文件:-
将
ipaadmin_principal变量设置为 idm_user。 -
将
ipaadmin_password变量设置为 idm_user 密码。 -
将
user变量设置为 idm_user。 -
将
name变量设置为 my_vault。 -
将
out变量设置为您要将 secret 导出到的文件的完整路径。 将
state变量设置为 retrieve。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook -v -i inventory.file retrieve-data-standard-vault.yml-copy.yml
$ ansible-playbook -v -i inventory.file retrieve-data-standard-vault.yml-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以 user01 身份通过
SSH连接到 host01:ssh user01@host01.idm.example.com
$ ssh user01@host01.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看 Ansible playbook 文件中
out变量指定的文件:vim /tmp/password_exported.txt
$ vim /tmp/password_exported.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,您可以看到导出的 secret。
其他资源
-
有关使用 Ansible 管理 IdM vaults 和用户 secret 以及 playbook 变量的更多信息,请参阅
/usr/share/doc/ansible-freeipa/目录中的 README-vault.md Markdown 文件,和/usr/share/doc/ansible-freeipa/playbooks/vault/目录中的示例 playbook。
第 85 章 管理 IdM 服务 secret:存储和检索 secret 复制链接链接已复制到粘贴板!
本节论述了如何在身份管理(IdM)中使用服务库安全地将服务 secret 存储在集中式位置。示例中使用的 vault 是非对称的,这意味着要使用它,管理员需要执行以下步骤:
-
使用
openssl实用程序生成私钥。 - 根据私钥生成公钥。
当管理员将服务 secret 归档到密码库时,会用公钥对其进行加密。之后,托管在域中特定计算机上的服务实例使用私钥检索该 secret。只有服务和管理员可以访问该 secret。
如果该机密泄露,管理员可以在服务 vault 中替换它,然后将它重新分发到尚未遭入侵的服务实例。
先决条件
- 密钥恢复授权中心 (KRA) 证书系统组件已安装在您的 IdM 域中的一个或多个服务器上。详情请参阅在 IdM 中安装密钥恢复授权。
在以下步骤中:
- IdM admin 用户是管理服务密码的管理员。
- private-key-to-an-externally-certificate.pem 是包含服务 secret 的文件,本例中为外部签名证书的私钥。请勿将此私钥与用于从密码库检索机密的私钥混淆。
- secret_vault 是为服务创建的库。
- HTTP/webserver.idm.example.com 是正在存档其机密的服务。
- service-public.pem 是用于加密 password_vault 中存储的密码的服务公钥。
- service-private.pem 是用于解密 secret_vault 中存储的密码的服务私钥。
85.1. 在非对称库中存储 IdM 服务 secret 复制链接链接已复制到粘贴板!
按照以下流程创建非对称 vault,并使用它来归档服务 secret。
先决条件
- 您知道 IdM 管理员密码。
步骤
以管理员身份登录:
kinit admin
$ kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 获取服务实例的公钥。例如,使用
openssl工具:生成
service-private.pem私钥。openssl genrsa -out service-private.pem 2048 Generating RSA private key, 2048 bit long modulus .+++ ...........................................+++ e is 65537 (0x10001)
$ openssl genrsa -out service-private.pem 2048 Generating RSA private key, 2048 bit long modulus .+++ ...........................................+++ e is 65537 (0x10001)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据私钥生成
service-public.pem公钥。openssl rsa -in service-private.pem -out service-public.pem -pubout writing RSA key
$ openssl rsa -in service-private.pem -out service-public.pem -pubout writing RSA keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
创建一个非对称密码库作为服务实例库,并提供公钥:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 存档到密码库中的密码将通过 密钥进行保护。
将服务 secret 归档到服务库中:
ipa vault-archive secret_vault --service HTTP/webserver.idm.example.com --in private-key-to-an-externally-signed-certificate.pem ----------------------------------- Archived data into vault "secret_vault" -----------------------------------
$ ipa vault-archive secret_vault --service HTTP/webserver.idm.example.com --in private-key-to-an-externally-signed-certificate.pem ----------------------------------- Archived data into vault "secret_vault" -----------------------------------Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这将使用服务实例公钥加密机密。
对需要机密的每个服务实例重复这些步骤。为每个服务实例创建一个新的非对称库。
85.2. 为 IdM 服务实例检索服务 secret 复制链接链接已复制到粘贴板!
按照以下流程,使用服务实例检索使用本地存储的服务私钥的服务 vault secret。
先决条件
- 您可以访问拥有服务库的服务主体的 keytab,例如 HTTP/webserver.idm.example.com。
- 您已 创建了非对称密码库,并在密码库中存档了机密。
- 您可以访问用于检索服务 vault secret 的私钥。
步骤
以管理员身份登录:
kinit admin
$ kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 获取该服务的 Kerberos 票据:
kinit HTTP/webserver.idm.example.com -k -t /etc/httpd/conf/ipa.keytab
# kinit HTTP/webserver.idm.example.com -k -t /etc/httpd/conf/ipa.keytabCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检索服务 vault 密码:
ipa vault-retrieve secret_vault --service HTTP/webserver.idm.example.com --private-key-file service-private.pem --out secret.txt ------------------------------------ Retrieved data from vault "secret_vault" ------------------------------------
$ ipa vault-retrieve secret_vault --service HTTP/webserver.idm.example.com --private-key-file service-private.pem --out secret.txt ------------------------------------ Retrieved data from vault "secret_vault" ------------------------------------Copy to Clipboard Copied! Toggle word wrap Toggle overflow
85.3. 在被破坏时更改 IdM 服务 vault secret 复制链接链接已复制到粘贴板!
按照以下流程,通过更改服务 vault secret 来隔离有危险的服务实例。
先决条件
- 您知道 IdM 管理员密码。
- 您已 创建了用于存储服务机密的非对称密码库。
- 您已生成新 secret 并可访问它,例如:new -private-key-to-an-externally-certificate.pem 文件中。
步骤
将新 secret 归档到服务实例库中:
ipa vault-archive secret_vault --service HTTP/webserver.idm.example.com --in new-private-key-to-an-externally-signed-certificate.pem ----------------------------------- Archived data into vault "secret_vault" -----------------------------------
$ ipa vault-archive secret_vault --service HTTP/webserver.idm.example.com --in new-private-key-to-an-externally-signed-certificate.pem ----------------------------------- Archived data into vault "secret_vault" -----------------------------------Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会覆盖密码库中存储的当前机密。
- 仅检索非代理服务实例上的新机密。详情请参阅 为 IdM 服务实例检索服务 secret。
第 86 章 使用 Ansible 管理 IdM 服务库:存储和检索 secret 复制链接链接已复制到粘贴板!
本节描述了管理员如何使用 ansible-freeipa vault 模块将服务 secret 安全地存储在集中式位置。示例中使用的 vault 是非对称的,这意味着要使用它,管理员需要执行以下步骤:
-
使用
openssl实用程序生成私钥。 - 根据私钥生成公钥。
当管理员将服务 secret 归档到密码库时,会用公钥对其进行加密。之后,托管在域中特定计算机上的服务实例使用私钥检索该 secret。只有服务和管理员可以访问该 secret。
如果该机密泄露,管理员可以在服务 vault 中替换它,然后将它重新分发到尚未遭入侵的服务实例。
先决条件
- 以下 playbook 中定义的 ipaserver 主机类别中的所有 IdM 服务器都安装了密钥恢复授权(KRA)证书系统组件。详情请参阅在 IdM 中安装密钥恢复授权。
在流程中:
- IdM admin 用户是管理服务密码的管理员。
- private-key-to-an-externally-certificate.pem 是包含服务 secret 的文件,本例中为外部签名证书的私钥。请勿将此私钥与用于从密码库检索机密的私钥混淆。
- secret_vault 是为存储服务 secret 而创建的库。
- HTTP/webserver1.idm.example.com 是密码库的所有者服务。
- HTTP/webserver2.idm.example.com 和 HTTP/webserver3.idm.example.com 是 vault 成员服务。
- service-public.pem 是用于加密 password_vault 中存储的密码的服务公钥。
- service-private.pem 是用于解密 secret_vault 中存储的密码的服务私钥。
86.1. 使用 Ansible 在 IdM 中存在非对称服务库 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 创建一个带有一个或多个私有 vault 的服务 vault 容器,以安全地存储敏感信息。在以下流程中使用的示例中,管理员创建名为 secret_vault 的非对称库。这样可确保 vault 成员必须使用私钥进行身份验证,以检索 vault 中的 secret。vault 成员能够从任何 IdM 客户端检索 文件。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
进入 MyPlaybooks 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 /usr/share/doc/ansible-freeipa/playbooks/vault/ensure-asymmetric-vault-is-present.yml Ansible playbook 文件的副本。例如:
cp /usr/share/doc/ansible-freeipa/playbooks/vault/ensure-asymmetric-vault-is-present.yml ensure-asymmetric-vault-is-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/vault/ensure-asymmetric-vault-is-present.yml ensure-asymmetric-vault-is-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 获取服务实例的公钥。例如,使用
openssl工具:生成
service-private.pem私钥。openssl genrsa -out service-private.pem 2048 Generating RSA private key, 2048 bit long modulus .+++ ...........................................+++ e is 65537 (0x10001)
$ openssl genrsa -out service-private.pem 2048 Generating RSA private key, 2048 bit long modulus .+++ ...........................................+++ e is 65537 (0x10001)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据私钥生成
service-public.pem公钥。openssl rsa -in service-private.pem -out service-public.pem -pubout writing RSA key
$ openssl rsa -in service-private.pem -out service-public.pem -pubout writing RSA keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- 打开 ensure-asymmetric-vault-is-present-copy.yml 文件进行编辑。
- 添加一个任务,该任务将 service-public.pem 公钥从 Ansible 控制器复制到 server.idm.example.com 服务器。
通过在
ipavault任务部分设置以下变量来修改文件的其余部分:-
将
ipaadmin_password变量设置为 IdM 管理员密码。 -
使用
name变量定义 vault 的名称,如 secret_vault。 -
将
vault_type变量设置为非 对称。 -
将
service变量设置为拥有密码库的服务主体,如 HTTP/webserver1.idm.example.com。 将
public_key_file设置为您的公钥的位置。这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-asymmetric-service-vault-is-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-asymmetric-service-vault-is-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
86.2. 使用 Ansible 将成员服务添加到非对称库 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 将成员服务添加到服务 vault 中,以便它们可以检索 vault 中存储的 secret。在以下流程中使用的示例中,IdM 管理员将 HTTP/webserver2.idm.example.com 和 HTTP/webserver3.idm.example.com 服务主体添加到由 HTTP/webserver1.idm.example.com 所有的 secret_vault vault 中。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您已创建了非对称密码库用于存储服务机密。
流程
进入 MyPlaybooks 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 /usr/share/doc/ansible-freeipa/playbooks/vault/data-archive-in-asymmetric-vault.yml Ansible playbook 文件的副本。例如:
cp /usr/share/doc/ansible-freeipa/playbooks/vault/data-archive-in-asymmetric-vault.yml data-archive-in-asymmetric-vault-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/vault/data-archive-in-asymmetric-vault.yml data-archive-in-asymmetric-vault-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 data-archive-in-asymmetric-vault-copy.yml 文件进行编辑。
通过在
ipavault任务部分设置以下变量来修改该文件:-
将
ipaadmin_password变量设置为 IdM 管理员密码。 -
将
name变量设置为 vault 的名称,如 secret_vault。 -
将
service变量设置为密码库的服务所有者,如 HTTP/webserver1.idm.example.com。 -
定义您要使用
services变量访问 vault 机密的服务。 将
action变量设置为member。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file add-services-to-an-asymmetric-vault.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file add-services-to-an-asymmetric-vault.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
86.3. 使用 Ansible 将 IdM 服务 secret 存储在非对称库中 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 将 secret 存储在服务 vault 中,以便稍后可由服务检索。在以下流程中使用的示例中,管理员将带有 secret 的 PEM 文件存储在名为 secret_vault 的非对称库中。这样可确保服务必须使用私钥进行身份验证,以便从 vault 检索 secret。该服务能够从任何 IdM 客户端检索 文件。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您已创建了非对称密码库用于存储服务机密。
- secret 存储在 Ansible 控制器上,例如 /usr/share/doc/ansible-freeipa/playbooks/vault/private-key-to-an-externally-certificate.pem 文件中。
流程
进入 MyPlaybooks 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 /usr/share/doc/ansible-freeipa/playbooks/vault/data-archive-in-asymmetric-vault.yml Ansible playbook 文件的副本。例如:
cp /usr/share/doc/ansible-freeipa/playbooks/vault/data-archive-in-asymmetric-vault.yml data-archive-in-asymmetric-vault-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/vault/data-archive-in-asymmetric-vault.yml data-archive-in-asymmetric-vault-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 data-archive-in-asymmetric-vault-copy.yml 文件进行编辑。
通过在
ipavault任务部分设置以下变量来修改该文件:-
将
ipaadmin_password变量设置为 IdM 管理员密码。 -
将
name变量设置为 vault 的名称,如 secret_vault。 -
将
service变量设置为密码库的服务所有者,如 HTTP/webserver1.idm.example.com。 -
将
in变量设置为 "{{ lookup('file', 'private-key-to-an-externally-certificate.pem')| b64encode }}"。这可确保 Ansible 使用私钥从 Ansible 控制器上的工作目录检索文件,而不是从 IdM 服务器检索。 将
action变量设置为member。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file data-archive-in-asymmetric-vault-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file data-archive-in-asymmetric-vault-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
86.4. 使用 Ansible 为 IdM 服务检索服务 secret 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 代表服务从服务 vault 检索 secret。在以下流程中使用的示例中,运行 playbook 从名为 secret_vault 的非对称库检索带有 secret 的 PEM 文件,并将它存储在 Ansible 清单文件中列出的所有主机上的指定位置,存为 ipaservers。
服务使用 keytabs 验证 IdM,并使用私钥与密码库进行身份验证。您可以代表服务从安装 ansible-freeipa 的任何 IdM 客户端检索 文件。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您已创建了非对称密码库用于存储服务机密。
- 您已在密码库中存档了机密。
-
您已将用于检索服务 vault secret 的私钥存储在 Ansible 控制器上的
private_key_file变量指定的位置。
流程
进入 MyPlaybooks 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 /usr/share/doc/ansible-freeipa/playbooks/vault/retrieve-data-asymmetric-vault.yml Ansible playbook 文件的副本。例如:
cp /usr/share/doc/ansible-freeipa/playbooks/vault/retrieve-data-asymmetric-vault.yml retrieve-data-asymmetric-vault-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/vault/retrieve-data-asymmetric-vault.yml retrieve-data-asymmetric-vault-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件并定义以下主机:
-
在
[ipaserver]部分中定义您的 IdM 服务器。 -
在
[webservers]部分中定义要检索机密的主机。例如,要指示 Ansible 获取到 webserver1.idm.example.com、webserver2.idm.example.com 和 webserver3.idm.example.com 的 secret,请输入:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
在
- 打开 retrieve-data-asymmetric-vault-copy.yml 文件进行编辑。
通过在
ipavault任务部分设置以下变量来修改该文件:-
将
ipaadmin_password变量设置为 IdM 管理员密码。 -
将
name变量设置为 vault 的名称,如 secret_vault。 -
将
service变量设置为密码库的服务所有者,如 HTTP/webserver1.idm.example.com。 -
将
private_key_file变量设置为用于检索服务 vault secret 的私钥的位置。 -
将
out变量设置为 IdM 服务器上您要检索 private-key-to-an-externally-certificate.pem 机密的位置,如当前工作目录。 将
action变量设置为member。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
在 playbook 中添加一个部分,它将从 IdM 服务器检索数据文件到 Ansible 控制器:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 playbook 中添加一个部分,它将检索到的 private-key-to-an-externally-certificate.pem 文件从 上的 Ansible 控制器传输到清单文件的
webservers部分:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-asymmetric-vault-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
86.5. 在使用 Ansible 泄露时更改 IdM 服务 vault secret 复制链接链接已复制到粘贴板!
当服务实例有危险时,请按照此流程重新使用 Ansible playbook 来更改存储在服务 vault 中的 secret。以下示例中的情景假定 on webserver3.idm.example.com 检索到的机密已被破坏,而不是存储该机密的非对称库的密钥。在示例中,管理员重复利用在非对称库中存储一个 secret 时,以及从非对称库中获取一个 secret 导入到 IdM 主机 时使用的 Ansible playbook。在流程开始时,IdM 管理员使用非对称密码库中的新 secret 存储一个新的 PEM 文件,调整清单文件,而不检索到被入侵的 Web 服务器 webserver3.idm.example.com,然后重新运行这两个程序。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
- 您已创建了非对称密码库用于存储服务机密。
-
您已为在 IdM 主机上运行的 web 服务生成了新的
httpd密钥,以替换泄露的旧密钥。 -
新的
httpd密钥存储在 Ansible 控制器上,例如 /usr/share/doc/ansible-freeipa/playbooks/vault/private-key-to-an-externally-certificate.pem 文件中。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/vault目录:cd /usr/share/doc/ansible-freeipa/playbooks/vault
$ cd /usr/share/doc/ansible-freeipa/playbooks/vaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保正确定义了以下主机:
-
[ipaserver]部分中的 IdM 服务器。 要检索
[webservers]部分中的机密的主机。例如,要指示 Ansible 检索到 webserver1.idm.example.com 和 webserver2.idm.example.com 的 secret,请输入:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
重要确保列表不包含当前 example webserver3.idm.example.com 中被入侵的 web 服务器。
-
制作 data-archive-in-asymmetric-vault.yml Ansible playbook 文件的一个副本,例如:
cp data-archive-in-asymmetric-vault.yml data-archive-in-asymmetric-vault-copy.yml
$ cp data-archive-in-asymmetric-vault.yml data-archive-in-asymmetric-vault-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 data-archive-in-asymmetric-vault-copy.yml 文件进行编辑。
通过在
ipavault任务部分设置以下变量来修改该文件:-
将
ipaadmin_password变量设置为 IdM 管理员密码。 -
将
name变量设置为 vault 的名称,如 secret_vault。 -
将
service变量设置为密码库的服务所有者,如 HTTP/webserver.idm.example.com。 -
将
中的变量设置为 "{{ lookup('file', 'new-private-key-to-an-externally-certificate.pem')| b64encode }}"。这可确保 Ansible 使用私钥从 Ansible 控制器上的工作目录检索文件,而不是从 IdM 服务器检索。 将
action变量设置为member。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file data-archive-in-asymmetric-vault-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file data-archive-in-asymmetric-vault-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 retrieve-data-asymmetric-vault-copy.yml 文件进行编辑。
通过在
ipavault任务部分设置以下变量来修改该文件:-
将
ipaadmin_password变量设置为 IdM 管理员密码。 -
将
name变量设置为 vault 的名称,如 secret_vault。 -
将
service变量设置为密码库的服务所有者,如 HTTP/webserver1.idm.example.com。 -
将
private_key_file变量设置为用于检索服务 vault secret 的私钥的位置。 -
将
变量设置为 IdM 服务器上您要检索 new-private-key-to-an-externally-certificate.pem 机密的位置,如当前工作目录。 将
action变量设置为member。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
在 playbook 中添加一个部分,它将从 IdM 服务器检索数据文件到 Ansible 控制器:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 playbook 中添加一个部分,它将检索到的 new-private-key-to-an-externally-certificate.pem 文件从 上的 Ansible 控制器传输到清单文件的
webservers部分:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file retrieve-data-asymmetric-vault-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 87 章 使用 Ansible 在 IdM 中确保存在或不存在服务 复制链接链接已复制到粘贴板!
使用 Ansible service 模块时,管理员可以确保 IdM 中存在或不存在不原生 IdM 的特定服务。例如,您可以使用 service 模块:
检查 IdM 客户端中是否存在手动安装的服务,并在缺少该服务时自动安装该服务。详情请查看:
检查在 IdM 中注册的服务是否已附加证书,并在缺少该证书时自动安装该证书。详情请查看:
允许 IdM 用户和主机检索并创建服务 keytab。详情请查看:
允许 IdM 用户和组向服务添加 Kerberos 别名。详情请查看:
检查 IdM 客户端中是否不存在服务,并在该服务存在时自动删除该服务。详情请查看:
87.1. 使用 Ansible playbook 在 IdM 中存在 HTTP 服务 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保 HTTP 服务器在 IdM 中存在。
先决条件
- 托管 HTTP 服务的系统是一个 IdM 客户端。
- 您有 IdM 管理员密码。
流程
创建一个清单文件,如
inventory.file:touch inventory.file
$ touch inventory.fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开
inventory.file,并在[ipaserver]部分中定义您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成
/usr/share/doc/ansible-freeipa/playbooks/service/service-is-present.ymlAnsible playbook 文件的副本。例如:cp /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开
/usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-copy.ymlAnsible playbook 文件进行编辑:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 调整文件:
-
更改
ipaadmin_password变量定义的 IdM 管理员密码。 -
更改运行 HTTP 服务的 IdM 客户端的名称,如
ipaservice任务的名称变量所定义。
-
更改
- 保存并退出文件。
运行 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/service/service-is-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 以 IdM 管理员身份登录 IdM Web UI。
-
导航到
Identity→Services。
如果 Services 列表中列出了 HTTP/client.idm.example.com@IDM.EXAMPLE.COM,Ansible playbook 已成功添加到 IdM。
87.2. 使用一个 Ansible 任务确保在 IdM 客户端上的 IdM 中存在多个服务 复制链接链接已复制到粘贴板!
您可以使用 ansible-freeipa ipaservice 模块,使用一个 Ansible 任务添加、修改和删除多个身份管理(IdM)服务。为此,请使用 ipaservice 模块的 services 选项。
使用 services 选项,您还可以指定多个仅应用到特定的服务的服务变量。根据 name 变量定义此服务,这是 services 选项的唯一强制变量。
完成此流程,以使用一个任务确保 IdM 中存在 HTTP/client01.idm.example.com@IDM.EXAMPLE.COM 和 ftp/client02.idm.example.com@IDM.EXAMPLE.COM 服务。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 您已在 ~/MyPlaybooks/ 目录中创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
- 您在使用 RHEL 8.9 及更新版本。
-
您已将
ipaadmin_password存储在 secret.yml Ansible vault 中。
流程
使用以下内容创建您的 Ansible playbook 文件 add-http-and-ftp-services.yml :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory add-http-and-ftp-services.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory add-http-and-ftp-services.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
87.3. 使用 Ansible playbook,确保在 IdM 中存在于非IdM 客户端中的 HTTP 服务 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保 HTTP 服务器在不是 IdM 客户端的主机上的 IdM 中存在。通过将 HTTP 服务器添加到 IdM 中,您还会将主机添加到 IdM。
先决条件
- 您已在主机上 安装了 HTTP 服务。
- 设置 HTTP 的主机不是 IdM 客户端。否则,请按照 使用 Ansible playbook 在 IdM 中保证 HTTP 服务存在中的步骤进行操作。
- 您有 IdM 管理员密码。
- 主机的 DNS A 记录 - 或 AAAA 记录(如果使用 IPv6)
流程
创建一个清单文件,如
inventory.file:touch inventory.file
$ touch inventory.fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开
inventory.file,并在[ipaserver]部分中定义您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成
/usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-without-host-check.ymlAnsible playbook 文件的副本。例如:cp /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-without-host-check.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-without-host-check-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-without-host-check.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-without-host-check-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开复制的文件
/usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-without-host-check-copy.yml以进行编辑。在ipaservice任务中找到ipaadmin_password和name变量:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 调整文件:
-
将
ipaadmin_password变量设置为 IdM 管理员密码。 -
将
name变量设置为运行 HTTP 服务的主机的名称。
-
将
- 保存并退出文件。
运行 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/service/service-is-present-without-host-check-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-without-host-check-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 以 IdM 管理员身份登录 IdM Web UI。
-
导航到
Identity→Services。
现在,您可以看到 Services 列表中列出的 HTTP/client.idm.example.com@IDM.EXAMPLE.COM。
87.4. 使用 Ansible playbook 确保在没有 DNS 的 IdM 客户端上存在 HTTP 服务 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保运行在没有 DNS 条目的 IdM 客户端上的 HTTP 服务器存在。场景表示,如果使用 IPv6 而不是 IPv4,IdM 主机没有可用的 DNS A 条目 - 或没有 DNS AAAA 条目。
先决条件
- 托管 HTTP 服务的系统已在 IdM 中注册。
- 主机的 DNS A 或 DNS AAAA 记录可能不存在。否则,如果主机的 DNS 记录存在,请按照以下步骤 确保使用 Ansible playbook 在 IdM 中存在 HTTP 服务。
- 您有 IdM 管理员密码。
流程
创建一个清单文件,如
inventory.file:touch inventory.file
$ touch inventory.fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开
inventory.file,并在[ipaserver]部分中定义您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成
/usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-with-host-force.ymlAnsible playbook 文件的副本。例如:cp /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-with-host-force.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-with-host-force-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-with-host-force.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-with-host-force-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开复制的文件
/usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-with-host-force-copy.yml,以进行编辑。在ipaservice任务中找到ipaadmin_password和name变量:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 调整文件:
-
将
ipaadmin_password变量设置为 IdM 管理员密码。 -
将
name变量设置为运行 HTTP 服务的主机的名称。
-
将
- 保存并退出文件。
运行 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/service/service-is-present-with-host-force-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-with-host-force-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 以 IdM 管理员身份登录 IdM Web UI。
-
导航到
Identity→Services。
现在,您可以看到 Services 列表中列出的 HTTP/client.idm.example.com@IDM.EXAMPLE.COM。
87.5. 使用 Ansible playbook 确保 IdM 服务条目中存在外部签名的证书 复制链接链接已复制到粘贴板!
按照以下流程,使用 ansible-freeipa service 模块确保外部证书颁发机构(CA)发布的证书被附加到 HTTP 服务的 IdM 条目上。如果您的 IdM CA 使用自签名证书,则由外部 CA 而不是 IdM CA 签名的 HTTP 服务证书特别有用。
先决条件
- 您已在主机上 安装了 HTTP 服务。
- 您已 将 HTTP 服务注册到 IdM。
- 您有 IdM 管理员密码。
- 您有一个外部签名的证书,其 Subject 对应于 HTTP 服务的主体。
流程
创建一个清单文件,如
inventory.file:touch inventory.file
$ touch inventory.fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开
inventory.file,并在[ipaserver]部分中定义您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成
/usr/share/doc/ansible-freeipa/playbooks/service/service-member-certificate-present.yml文件的副本,例如:cp /usr/share/doc/ansible-freeipa/playbooks/service/service-member-certificate-present.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-member-certificate-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-member-certificate-present.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-member-certificate-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果证书采用 Privacy Enhanced Mail (PEM)格式,请将证书转换为可辨识的编码规则(DER)格式,以便通过命令行(CLI)更容易地处理:
openssl x509 -outform der -in cert1.pem -out cert1.der
$ openssl x509 -outform der -in cert1.pem -out cert1.derCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
base64命令将DER文件解码为标准输出。使用-w0选项禁用换行:base64 cert1.der -w0 MIIC/zCCAeegAwIBAgIUV74O+4kXeg21o4vxfRRtyJm...
$ base64 cert1.der -w0 MIIC/zCCAeegAwIBAgIUV74O+4kXeg21o4vxfRRtyJm...Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将证书从标准输出复制到剪贴板。
打开
/usr/share/doc/ansible-freeipa/playbooks/service/service-member-certificate-present-copy.yml文件进行编辑并查看其内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 调整文件:
-
将使用
证书变量定义的证书替换为您从 CLI 复制的证书。请注意,如果您使用带有所示"|"管道字符的certificate:变量,您可以输入证书 THIS WAY,而不是让它在一个行中输入。这样可以更轻松地读取证书。 -
更改由
ipaadmin_password变量定义的 IdM 管理员密码。 -
更改运行 HTTP 服务的 IdM 客户端的名称,由
name变量定义。 - 更改任何其他相关变量。
-
将使用
- 保存并退出文件。
运行 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/service/service-member-certificate-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-member-certificate-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 以 IdM 管理员身份登录 IdM Web UI。
-
导航到
Identity→Services。 - 使用新添加的证书,单击服务的名称,如 HTTP/client.idm.example.com。
在右侧的 Service Certificate 部分中,您现在可以看到新添加的证书。
keytab 是一个包含 Kerberos 主体和加密密钥对的文件。keytab 文件通常用于允许脚本使用 Kerberos 自动进行身份验证,无需人工交互或访问存储在纯文本文件中的密码。然后,脚本可以使用获取的凭据来访问存储在远程系统上的文件。
作为身份管理(IdM)管理员,您可以允许其他用户为 IdM 中运行的服务检索甚至创建 keytab。通过允许特定用户和用户组创建 keytab,您可以将服务管理委派给他们,而无需共享 IdM 管理员密码。此委派提供了更加精细的系统管理。
按照以下流程,允许特定的 IdM 用户、用户组、主机和主机组为运行在 IdM 客户端上的 HTTP 服务创建 keytab。具体来说,它描述了如何允许 user01 IdM 用户为名为 client.idm.example.com 的 IdM 客户端上运行的 HTTP 服务创建 keytab。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您已 将 HTTP 服务注册到 IdM。
- 托管 HTTP 服务的系统是一个 IdM 客户端。
- IdM 中已存在您要允许创建 keytab 的 IdM 用户和用户组。
- IdM 中已存在您要允许创建 keytab 的 IdM 主机和主机组。
流程
创建一个清单文件,如
inventory.file:touch inventory.file
$ touch inventory.fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开
inventory.file,并在[ipaserver]部分中定义您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成
/usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_create_keytab-present.ymlAnsible playbook 文件的副本。例如:cp /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_create_keytab-present.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_create_keytab-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_create_keytab-present.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_create_keytab-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
/usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_create_keytab-present-copy.ymlAnsible playbook 文件进行编辑。 通过更改以下内容来调整文件:
-
由
ipaadmin_password变量指定的 IdM 管理员密码。 - 运行 HTTP 服务的 IdM 客户端的名称。在当前示例中,它是 HTTP/client.idm.example.com
-
allow_create_keytab_user:部分中列出的 IdM 用户名称。在当前示例中,是 user01。 -
allow_create_keytab_group:部分中列出的 IdM 用户组名称。 -
allow_create_keytab_host:部分中列出的 IdM 主机名称。 -
allow_create_keytab_hostgroup:部分中所列的 IdM 主机组名称。 由
tasks部分中name变量指定的任务名称。在适应当前示例后,复制的文件类似如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
由
- 保存该文件。
运行 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/service/service-member-allow_create_keytab-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_create_keytab-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以 IdM 用户身份 SSH 到 IdM 服务器,该用户具有为特定 HTTP 服务创建 keytab 的权限:
ssh user01@server.idm.example.com Password:
$ ssh user01@server.idm.example.com Password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ipa-getkeytab命令为 HTTP 服务生成新 keytab:ipa-getkeytab -s server.idm.example.com -p HTTP/client.idm.example.com -k /etc/httpd/conf/krb5.keytab
$ ipa-getkeytab -s server.idm.example.com -p HTTP/client.idm.example.com -k /etc/httpd/conf/krb5.keytabCopy to Clipboard Copied! Toggle word wrap Toggle overflow s 选项指定用于生成 keytab 的密钥分发中心(KDC)服务器。p 选项指定您要创建的 keytab 主体。k 选项指定将新密钥附加到的 keytab 文件。如果文件不存在,则会创建此文件。
如果命令不产生错误,您以 user01 身份成功创建了 HTTP/client.idm.example.com 的 keytab。
keytab 是一个包含 Kerberos 主体和加密密钥对的文件。keytab 文件通常用于允许脚本使用 Kerberos 自动进行身份验证,无需人工交互或访问存储在纯文本文件中的密码。然后,脚本可以使用获取的凭据来访问存储在远程系统上的文件。
作为 IdM 管理员,您可以允许其他用户为 IdM 中运行的服务检索甚至创建 keytab。
按照以下流程,允许特定的 IdM 用户、用户组、主机和主机组为在 IdM 客户端上运行的 HTTP 服务检索 keytab。具体来说,它描述了如何允许 user01 IdM 用户检索 client.idm.example.com 上运行的 HTTP 服务的 keytab。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您已 将 HTTP 服务注册到 IdM。
- IdM 中已存在您要允许检索 keytab 的 IdM 用户和用户组。
- IdM 中已存在您要允许检索 keytab 的 IdM 主机和主机组。
流程
创建一个清单文件,如
inventory.file:touch inventory.file
$ touch inventory.fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开
inventory.file,并在[ipaserver]部分中定义您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成
/usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_retrieve_keytab-present.ymlAnsible playbook 文件的副本。例如:cp /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_retrieve_keytab-present.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_retrieve_keytab-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_retrieve_keytab-present.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_retrieve_keytab-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开复制的文件
/usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_retrieve_keytab-present-copy.yml以进行编辑: 调整文件:
-
将
ipaadmin_password变量设置为 IdM 管理员密码。 -
将
ipaservice任务的name变量设置为 HTTP 服务的主体。在当前示例中,它是 HTTP/client.idm.example.com -
在
allow_retrieve_keytab_group:部分中指定 IdM 用户的名称。在当前示例中,是 user01。 -
在
allow_retrieve_keytab_group:部分中指定 IdM 用户组的名称。 -
在
allow_retrieve_keytab_group:部分中指定 IdM 主机的名称。 -
在
allow_retrieve_keytab_group:部分中指定 IdM 主机组的名称。 使用
tasks部分中的name 变量指定任务的名称。在适应当前示例后,复制的文件类似如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存该文件。
运行 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/service/service-member-allow_retrieve_keytab-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_retrieve_keytab-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以 IdM 用户身份 SSH 到 IdM 服务器,并具有权限检索 HTTP 服务的 keytab:
ssh user01@server.idm.example.com Password:
$ ssh user01@server.idm.example.com Password:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ipa-getkeytab命令和-r选项来检索 keytab:ipa-getkeytab -r -s server.idm.example.com -p HTTP/client.idm.example.com -k /etc/httpd/conf/krb5.keytab
$ ipa-getkeytab -r -s server.idm.example.com -p HTTP/client.idm.example.com -k /etc/httpd/conf/krb5.keytabCopy to Clipboard Copied! Toggle word wrap Toggle overflow s 选项指定您要从中检索 keytab 的密钥分发中心(KDC)服务器。p 选项指定您要检索的 keytab 主体。k 选项指定您要将检索到的密钥附加到的 keytab 文件。如果文件不存在,则会创建此文件。
如果命令不产生错误,您以 user01 身份成功检索了 HTTP/client.idm.example.com 的 keytab。
87.8. 使用 Ansible playbook 确保存在服务的 Kerberos 主体别名 复制链接链接已复制到粘贴板!
在某些情况下,IdM 管理员可启用 IdM 用户、主机或服务使用 Kerberos 主体别名进行身份验证。这些情况包括:
- 用户名已更改,但该用户应该能够使用先前和新用户名登录系统。
- 即使 IdM Kerberos 域与电子邮件域不同,用户也需要使用电子邮件地址登录。
按照以下流程,为运行在 client.idm.example.com 上的 HTTP 服务创建 HTTP/mycompany.idm.example.com 的主体别名。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您已 设置了一个 HTTP 服务
- 您已 将 HTTP 服务注册到 IdM。
- 设置 HTTP 的主机是一个 IdM 客户端。
流程
创建一个清单文件,如
inventory.file:touch inventory.file
$ touch inventory.fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开
inventory.file,并在[ipaserver]部分中定义您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成
/usr/share/doc/ansible-freeipa/playbooks/service/service-member-principal-present.ymlAnsible playbook 文件的副本。例如:cp /usr/share/doc/ansible-freeipa/playbooks/service/service-member-principal-present.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-member-principal-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-member-principal-present.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-member-principal-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
/usr/share/doc/ansible-freeipa/playbooks/service/service-member-principal-present-copy.ymlAnsible playbook 文件进行编辑。 通过更改以下内容来调整文件:
-
由
ipaadmin_password变量指定的 IdM 管理员密码。 -
通过
name变量指定的服务名称。这是服务的规范主体名称。在当前示例中,它是 HTTP/client.idm.example.com。 -
由主体变量指定的 Kerberos
主体别名。这是您要添加到name变量定义的服务的别名。在当前示例中,它是 host/mycompany.idm.example.com。 由
tasks部分中name变量指定的任务名称。在适应当前示例后,复制的文件类似如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
由
- 保存该文件。
运行 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/service/service-member-principal-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-member-principal-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如果运行 playbook 会导致 0 个无法访问和 0 个失败的任务,您已成功为 HTTP/client.idm.example.com 服务创建了host/mycompany.idm.example.com Kerberos 主体。
87.9. 使用 Ansible playbook 确保 IdM 中缺少 HTTP 服务 复制链接链接已复制到粘贴板!
按照以下流程从 IdM 中取消一个服务的注册。更具体地说,它描述了如何使用 Ansible playbook 来确保 IdM 中缺少名为 HTTP/client.idm.example.com 的 HTTP 服务器。
先决条件
- 您有 IdM 管理员密码。
流程
创建一个清单文件,如
inventory.file:touch inventory.file
$ touch inventory.fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开
inventory.file,并在[ipaserver]部分中定义您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成
/usr/share/doc/ansible-freeipa/playbooks/service/service-is-absent.ymlAnsible playbook 文件的副本。例如:cp /usr/share/doc/ansible-freeipa/playbooks/service/service-is-absent.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-is-absent-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-is-absent.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-is-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
/usr/share/doc/ansible-freeipa/playbooks/service/service-is-absent-copy.ymlAnsible playbook 文件进行编辑。 通过更改以下内容来调整文件:
-
由
ipaadmin_password变量定义的 IdM 管理员密码。 HTTP 服务的 Kerberos 主体,由
ipaservice任务的名称变量定义。在适应当前示例后,复制的文件类似如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
由
- 保存并退出文件。
运行 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/service/service-is-absent-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-is-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 以 IdM 管理员身份登录 IdM Web UI。
-
导航到
Identity→Services。
如果您无法在 Services 列表中看到 HTTP/client.idm.example.com@IDM.EXAMPLE.COM 服务,则已成功确保了在 IdM 中缺少 HTTP/client.idm.example.com@IDM.EXAMPLE.COM 服务。
第 88 章 启用 AD 用户管理 IdM 复制链接链接已复制到粘贴板!
88.1. AD 用户的 ID 覆盖 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux(RHEL)7 中,外部组成员资格允许 Active Directory(AD)用户和组在 System Security Services Daemon(SSSD)的帮助下访问 POSIX 环境中的身份管理(IdM)资源。
IdM LDAP 服务器具有自己的机制来授予访问控制。RHEL 8 引进了一个更新,它许作为 IdM 组成员为 AD 用户添加 ID 用户覆盖。ID 覆盖是一种记录,描述了特定的活动目录用户或组属性在特定 ID 视图(本例中为 Default Trust View )中应该是什么样子。更新后,IdM LDAP 服务器可以为 AD 用户应用 IdM 组的访问控制规则。
AD 用户现在可以使用 IdM UI 的自助服务功能,例如上传其 SSH 密钥或更改其个人数据。AD 管理员可以完全管理 IdM ,而无需两个不同的帐户和密码。
目前,IdM 中所选的功能可能仍对 AD 用户不可用。例如,将 IdM 用户的密码设置为 IdM admins 组中的 AD 用户可能会失败。
不要将 AD 用户的 ID 覆盖用于 IdM 中的 sudo 规则。AD 用户的 ID 覆盖只代表 AD 用户的 POSIX 属性,而不是 AD 用户本身。
88.2. 使用 ID 覆盖来启用 AD 用户管理 IdM 复制链接链接已复制到粘贴板!
按照以下流程,为 AD 用户创建和使用 ID 覆盖,来为该用户授予与 IdM 用户相同的权利。在此过程中,可在配置为信任控制器或信任代理的 IdM 服务器中工作。
先决条件
在身份管理(IdM)服务器上启用了
idm:DL1流,您切换到通过这个流提供的 RPM:yum module enable idm:DL1 yum distro-sync
# yum module enable idm:DL1 # yum distro-syncCopy to Clipboard Copied! Toggle word wrap Toggle overflow idm:DL1/adtrust配置集安装在 IdM 服务器上。yum module install idm:DL1/adtrust
# yum module install idm:DL1/adtrustCopy to Clipboard Copied! Toggle word wrap Toggle overflow 该配置文件包含安装与活动目录(AD)具有信任协议的 IdM 服务器所需的所有软件包。
- 设置了一个有效的 IdM 环境。详情请参阅 安装身份管理。
- 您的 IdM 环境与 AD 之间设置了有效信任。
流程
作为 IdM 管理员,为 Default Trust View 中的 AD 用户创建一个 ID 覆盖。例如,要为用户
ad_user@ad.example.com创建一个 ID 覆盖:kinit admin ipa idoverrideuser-add 'default trust view' ad_user@ad.example.com
# kinit admin # ipa idoverrideuser-add 'default trust view' ad_user@ad.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 Default Trust View 中的 ID 覆盖添加为 IdM 组的成员。这必须是非 POSIX 组,因为它与活动目录进行交互。
如果问题中的组是 IdM 角色的成员,则 ID 覆盖代表的 AD 用户在使用 IdM API 时获得角色授予的所有权限,包括命令行界面和 IdM Web UI。
例如,要将
ad_user@ad.example.com用户的 ID 覆盖添加到 IdMadmins组中:ipa group-add-member admins --idoverrideusers=ad_user@ad.example.com
# ipa group-add-member admins --idoverrideusers=ad_user@ad.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,您可以在角色中添加 ID 覆盖,如 User Administrator 角色:
ipa role-add-member 'User Administrator' --idoverrideusers=ad_user@ad.example.com
# ipa role-add-member 'User Administrator' --idoverrideusers=ad_user@ad.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
88.3. 使用 Ansible 启用 AD 用户来管理 IdM 复制链接链接已复制到粘贴板!
您可以使用 ansible-freeipa idoverrideuser 和 group 模块从可信 AD 域中为活动目录(AD)用户创建一个用户 ID 覆盖,并授予该用户与 IdM 用户相同的权限。该流程使用 Default Trust View ID 视图的示例,其中存储在 AD 中的用户的 ad_user@ad.example.com ID 覆盖添加到第一个 playbook 任务中。在下一个 playbook 任务中,ad_user@ad.example.com ID 覆盖作为成员添加到 IdM admins 组中。因此,AD 管理员可以管理 IdM,而无需有两个不同的帐户和密码。
先决条件
-
您需要知道 IdM
admin密码。 - 安装了使用 AD 的信任。
- 您要向其添加用户 ID 覆盖的组在 IdM 中已存在。
-
您可以使用 IdM 的 4.8.7 版本或更高版本。要查看您在服务器上安装的 IdM 版本,请输入
ipa --version。 您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
- 您使用 RHEL 8.10 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
- AD 林信任 IdM 。在示例中,AD 域的名称是 ad.example.com,AD 管理员的完全限定域名(FQDN)是 ad_user@ad.example.com。
-
清单文件中的
ipaserver主机被配置为信任控制器或信任代理。 -
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用任务创建一个 enable-ad-admin-to-administer-idm.yml playbook,将 ad_user@ad.example.com 用户覆盖添加到 Default Trust View 中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在示例中:
- ad_user@ad.example.com 是 AD 用户的用户 ID 覆盖,存储在已建立信任的 AD 域中。
在同一 playbook 中使用另一个 playbook 任务,将 AD 管理员用户 ID 覆盖添加到
admins组中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在示例中:
-
admins是您要添加 ad_user@ad.example.com ID 覆盖的 IdM POSIX 组的名称。此组成员具有全部的管理员特权。
-
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory enable-ad-admin-to-administer-idm.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory enable-ad-admin-to-administer-idm.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
88.4. 验证 AD 用户是否可以在 IdM CLI 中执行正确的命令 复制链接链接已复制到粘贴板!
此流程检查 Active Directory(AD)用户可以登录到 Identity Management(IdM)命令行界面(CLI),并运行适合其角色的命令。
销毁 IdM 管理员的当前 Kerberos ticket:
kdestroy -A
# kdestroy -ACopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意Kerberos ticket 的破坏是必需的,因为 MIT Kerberos 中的 GSSAPI 实施首选项从目标服务域选择凭证,本例中为 IdM 域。这意味着,如果凭证缓存集合,即
KCM:、KEYRING:, orDIR:凭证缓存类型在被使用,则之前获取的admin或其他 IdM 主体的凭证将用于访问 IdM API,而不是 AD 用户的凭证。获取已为其创建 ID 覆盖的 AD 用户的 Kerberos 凭证:
kinit ad_user@AD.EXAMPLE.COM Password for ad_user@AD.EXAMPLE.COM:
# kinit ad_user@AD.EXAMPLE.COM Password for ad_user@AD.EXAMPLE.COM:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 测试 AD 用户的 ID 覆盖是否因 IdM 组成员资格而获得与该组中的任何 IdM 用户相同的权限。如果 AD 用户的 ID 覆盖已添加到
admins组中,AD 用户可以在 IdM 中创建组:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 89 章 配置域名解析顺序来解析较短的 AD 用户名 复制链接链接已复制到粘贴板!
默认情况下,您必须指定格式为 user_name@domain.com 或 domain.com\user_name 的 完全限定名称,以便从 Active Directory(AD)环境中解析和验证用户和组。了解如何配置 IdM 服务器和客户端来解析简短的 AD 用户名和组名称。
89.1. 域解析顺序的工作方式 复制链接链接已复制到粘贴板!
在具有 Active Directory(AD)信任的 Identity Management(IdM)环境中,红帽建议您通过指定完全限定名称来解析和验证用户和组。例如:
-
<idm_username>@idm.example.com适用于idm.example.com域中的 IdM 用户 -
用于
ad.example.com域的 AD 用户的<ad_username>@ad.example.com
默认情况下,如果您使用 简短名称 格式执行用户和组查找,如 ad_username,IdM 只会搜索 IdM 域,且无法找到 AD 用户和组。要使用短名称解析 AD 用户或组,请通过设置域 解析顺序选项来更改 IdM 搜索多个域的顺序。
您可以在 IdM 数据库或单个客户端的 SSSD 配置中设置域解析顺序。IdM 按照以下优先级顺序评估域解析顺序:
-
本地
/etc/sssd/sssd.conf 配置. - ID 视图配置。
- 全局 IdM 配置。
备注
-
如果主机上的 SSSD 配置包含
default_domain_suffix选项,并且您想要向未使用这个选项指定的域发出请求,则必须使用完全限定用户名。 -
如果您使用
域解析顺序选项并查询compat树,您可能会收到多个用户 ID(UID)。如果这可能会影响您,请参阅 设置域解析顺序时 AD 用户的 Pagure 错误报告 Inconsistent compat 用户对象。
不要在 IdM 客户端或 IdM 服务器中使用 full_name_format SSSD 选项。为这个选项使用非默认值会更改用户名的显示方式,并可能会破坏 IdM 环境中的查找。
89.2. 在 IdM 服务器中设置全局域解析顺序 复制链接链接已复制到粘贴板!
此流程为 IdM 域中的所有客户端设置域解析顺序。这个示例按以下顺序设置搜索用户和组的域解析顺序:
-
Active Directory(AD)root 域
ad.example.com -
AD 子域
子域1.ad.example.com -
IdM 域
idm.example.com
先决条件
- 您已使用 AD 环境配置了信任关系。
流程
使用
ipa config-mod --domain-resolution-order命令列出按您首选顺序搜索的域。使用冒号(:)分隔域。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证您是否可以仅使用简短名称从
ad.example.com域检索用户的用户信息。id <ad_username> uid=1916901102(ad_username) gid=1916900513(domain users) groups=1916900513(domain users)
[root@client ~]# id <ad_username> uid=1916901102(ad_username) gid=1916900513(domain users) groups=1916900513(domain users)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
89.3. 为 IdM 服务器中的 ID 视图设置域解析顺序 复制链接链接已复制到粘贴板!
此流程为可应用于一组特定 IdM 服务器和客户端的 ID 视图设置域解析顺序。这个示例为 IdM 主机 client1.idm.example.com 创建名为 ADsubdomain1_first 的 ID 视图,并设置按照以下顺序搜索用户和组的域解析顺序:
-
Active Directory(AD)子域
subdomain1.ad.example.com -
AD root 域
ad.example.com -
IdM 域
idm.example.com
ID 视图中设置的域解析顺序覆盖全局域解析顺序,但它不会覆盖 SSSD 配置在本地设置的任何域解析顺序。
先决条件
- 您已使用 AD 环境配置了信任关系。
流程
创建 ID 视图,并设置
--domain-resolution-order选项。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 ID 视图应用到 IdM 主机。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示 ID 视图的详细信息。
ipa idview-show ADsubdomain1_first --show-hosts ID View Name: ADsubdomain1_first Description: ID view for resolving AD subdomain1 first on client1.idm.example.com Hosts the view applies to: client1.idm.example.com Domain resolution order: subdomain1.ad.example.com:ad.example.com:idm.example.com
[user@server ~]$ ipa idview-show ADsubdomain1_first --show-hosts ID View Name: ADsubdomain1_first Description: ID view for resolving AD subdomain1 first on client1.idm.example.com Hosts the view applies to: client1.idm.example.com Domain resolution order: subdomain1.ad.example.com:ad.example.com:idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证您只能使用简短名称从
subdomain1.ad.example.com域检索用户的用户信息。id <user_from_subdomain1> uid=1916901106(user_from_subdomain1) gid=1916900513(domain users) groups=1916900513(domain users)
[root@client1 ~]# id <user_from_subdomain1> uid=1916901106(user_from_subdomain1) gid=1916900513(domain users) groups=1916900513(domain users)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
89.4. 使用 Ansible 创建一个具有域解析顺序的 ID 视图 复制链接链接已复制到粘贴板!
您可以使用 ansible-freeipa idview 模块在身份管理(IdM)部署中添加、修改和删除 ID 视图。例如,您可以创建一个带有域解析顺序的 ID 视图,来启用短名称表示法。
短名称表示法使用短登录替换活动目录(AD)中的完整用户名,如 aduser05@ad.example.com,在本例中,使用 aduser05 替换。这意味着,当使用 SSH 登录到 IdM 客户端时,aduser05 可以输入 ssh aduser05@client.idm.example.com ,而不是 ssh aduser05@ad.example.com@client.idm.example.com。这同样适用于其他命令,如 id。
完成此流程以使用 Ansible,来:
- 定义一个冒号分开的域的字符串,用于短名称限定。在示例中,字符串是 ad.example.com:idm.example.com。
- 创建一个 ID 视图,其指示 SSSD 首先在字符串中标识的第一个域中搜索用户名。在示例中,这是 ad.example.com。
- 将 ID 视图应用到特定的主机。在示例中,这是 testhost.idm.example.com。
您只能将一个 ID 视图应用到一个 IdM 客户端。应用新的 ID 视图会自动删除以前的 ID 视图(如果适用)。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 您已在 ~/MyPlaybooks/ 目录中创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
- 您再使用 RHEL 8.10 及更新版本。
-
您已将
ipaadmin_password存储在 secret.yml Ansible vault 中。
- testhost.idm.example.com 是一个 IdM 客户端。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
进到 ~/MyPlaybooks/ 目录,并使用以下内容创建一个 Ansible playbook 文件 add-id-view-with-domain-resolution-order.yml :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory add-id-view-with-domain-resolution-order.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory add-id-view-with-domain-resolution-order.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- SSH 到 testhost.idm.example.com。
验证您是否只能使用短名称从 ad.example.com 域检索用户的信息。
id aduser05 uid=1916901102(aduser05) gid=1916900513(domain users) groups=1916900513(domain users)
[root@testhost ~]# id aduser05 uid=1916901102(aduser05) gid=1916900513(domain users) groups=1916900513(domain users)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
89.5. 在 IdM 客户端上在 SSSD 中设置域解析顺序 复制链接链接已复制到粘贴板!
此流程在 IdM 客户端上的 SSSD 配置中设置域解析顺序。这个示例将 IdM 主机 client2.idm.example.com 配置为按以下顺序搜索用户和组:
-
Active Directory(AD)子域
subdomain1.ad.example.com -
AD root 域
ad.example.com -
IdM 域
idm.example.com
本地 SSSD 配置中的域解析顺序覆盖任何全局和 ID 视图域解析顺序。
先决条件
- 您已使用 AD 环境配置了信任关系。
流程
-
在文本编辑器中打开
/etc/sssd/sssd.conf文件。 在文件的
[sssd]部分中设置domain_resolution_order选项。domain_resolution_order = subdomain1.ad.example.com, ad.example.com, idm.example.com
domain_resolution_order = subdomain1.ad.example.com, ad.example.com, idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存并关闭该文件。
重启 SSSD 服务以加载新的配置设置。
systemctl restart sssd
[root@client2 ~]# systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证您只能使用简短名称从
subdomain1.ad.example.com域检索用户的用户信息。id <user_from_subdomain1> uid=1916901106(user_from_subdomain1) gid=1916900513(domain users) groups=1916900513(domain users)
[root@client2 ~]# id <user_from_subdomain1> uid=1916901106(user_from_subdomain1) gid=1916900513(domain users) groups=1916900513(domain users)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 90 章 在 IdM 中使用 AD 用户主体名称启用身份验证 复制链接链接已复制到粘贴板!
90.1. IdM 信任的 AD 林中的用户主体名称 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以允许 AD 用户使用其他用户主体名称 (UPN)访问 IdM 域中的资源。UPN 是 AD 用户以 user_name@KERBEROS-REALM 格式通过 进行身份验证的替代用户登录。作为 AD 管理员,您可以为 user_name 和 KERBEROS-REALM 设置备选值,因为您可以在 AD 林中配置额外的 Kerberos 别名和 UPN 后缀。
例如,如果公司使用 Kerberos 域 AD.EXAMPLE.COM,用户的默认 UPN 为 user@ad.example.com。要允许您的用户使用其电子邮件地址(如 user@example.com )登录,您可以在 AD 中将 EXAMPLE.COM 配置为替代的 UPN。如果贵公司最近进行了合并,并且希望为用户提供统一的登录命名空间,备选 UPN(也称为企业 UPN)特别方便。
只有在 AD 林根目录中定义时,UPN 后缀才对 IdM 可见。作为 AD 管理员,您可以使用 Active Directory 域和 Trust utility 或 PowerShell 命令行工具来定义 UPN。
要为用户配置 UPN 后缀,红帽建议使用执行错误验证的工具,如 Active Directory 域和 Trust 实用程序。
红帽建议不要通过低级修改来配置 UPN,例如使用 ldapmodify 命令为用户设置 userPrincipalName 属性,因为 Active Directory 不验证这些操作。
在 AD 端定义一个新的 UPN 后,在 IdM 服务器中运行 ipa trust-fetch-domains 命令以检索更新的 UPN。请参阅确保 AD UPN 在 IdM 中是最新的。
IdM 将域的 UPN 后缀存储在子树 cn=trusted_domain_name,cn=ad,cn=trusts,dc=idm,dc=example,dc=com 的多值属性 ipaNTAdditionalSuffixes 中。
90.2. 确保 AD UPN 在 IdM 中是最新的 复制链接链接已复制到粘贴板!
在可信 Active Directory(AD)林中添加或删除用户主体名称(UPN)后缀后,刷新 IdM 服务器上的可信林的信息。
先决条件
- IdM 管理员凭证。
流程
输入
ipa trust-fetch-domains命令。请注意,预计会出现一个看似为空的输出:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
输入
ipa trust-show命令,以验证服务器是否已获取新的 UPN。在提示时指定 AD 域的名称:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示
example.comUPN 后缀现在是ad.example.com域条目的一部分。
90.3. 为 AD UPN 身份验证问题收集故障排除数据 复制链接链接已复制到粘贴板!
按照以下流程,从活动目录(AD)环境和 IdM 环境收集有关用户主体名称(UPN)配置的故障排除数据。如果您的 AD 用户无法使用备用 UPN 登录,您可以使用此信息缩小故障排除工作范围。
先决条件
- 您必须登录到 IdM Trust Controller 或 Trust Agent,才能从 AD 域控制器检索信息。
-
您需要
root权限才能修改以下配置文件,并重新启动 IdM 服务。
流程
-
在文本编辑器中打开
/usr/share/ipa/smb.conf.empty配置文件。 将以下内容添加到该文件中。
[global] log level = 10
[global] log level = 10Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存并关闭
/usr/share/ipa/smb.conf.empty文件。 -
在文本编辑器中打开
/etc/ipa/server.conf配置文件。如果没有该文件,请创建一个。 将以下内容添加到该文件中。
[global] debug = True
[global] debug = TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
保存并关闭
/etc/ipa/server.conf文件。 重启 Apache webserver 服务以应用配置更改:
systemctl restart httpd
[root@server ~]# systemctl restart httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从您的 AD 域检索信任信息:
ipa trust-fetch-domains <ad.example.com>
[root@server ~]# ipa trust-fetch-domains <ad.example.com>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看以下日志文件中的调试输出和故障排除信息:
-
/var/log/httpd/error_log -
/var/log/samba/log.*
-
第 91 章 在 IdM 中使用规范化 DNS 主机名 复制链接链接已复制到粘贴板!
默认情况下,在 Identity Management(IdM)客户端上禁用 DNS 规范化,以避免潜在的安全风险。例如,如果攻击者控制 DNS 服务器和域中的主机,攻击者可以导致短主机名(如 demo )解析到被入侵的主机,如 bad .example.com。在这种情况下,用户连接到与预期不同的服务器。
这个流程描述了如何在 IdM 客户端上使用规范化主机名。
91.1. 向主机主体中添加别名 复制链接链接已复制到粘贴板!
默认情况下,使用 ipa-client-install 命令注册的身份管理(IdM)客户端不允许在服务主体中使用短主机名。例如,在访问服务时,用户只能使用 host/demo.example.com@EXAMPLE.COM ,而不是 host/demo@EXAMPLE.COM。
按照以下流程,向 Kerberos 主体中添加别名。请注意,您也可以在 /etc/krb5.conf 文件中启用主机名规范化。详情请参阅 在客户端上的服务主体中启用主机名规范。
先决条件
- 已安装 IdM 客户端。
- 主机名在网络中是唯一的。
步骤
以
admin用户身份对 IdM 进行身份验证:kinit admin
$ kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将别名添加到主机主体。例如,要在
demo.examle.com 主机主体中添加 demo别名:ipa host-add-principal demo.example.com --principal=demo
$ ipa host-add-principal demo.example.com --principal=demoCopy to Clipboard Copied! Toggle word wrap Toggle overflow
91.2. 在客户端的服务主体中启用主机名规范 复制链接链接已复制到粘贴板!
按照以下步骤,在客户端的服务主体中启用主机名规范化。
- 注意
如果您使用主机主体别名,如 向主机主体添加别名 中所述,则不需要启用规范。
先决条件
- 已安装 Identity Management(IdM)客户端。
-
以
root用户身份登录 IdM 客户端。 - 主机名在网络中是唯一的。
步骤
将
/etc/krb5.conf文件中的[libdefaults]部分中的dns_canonicalize_hostname参数设置为false:[libdefaults] ... dns_canonicalize_hostname = true
[libdefaults] ... dns_canonicalize_hostname = trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
91.3. 启用 DNS 主机名规范化使用主机名的选项 复制链接链接已复制到粘贴板!
如果您在 /etc/krb5.conf 文件中设置了 dns_canonicalize_hostname = true,如 在客户端上的服务主体中启用主机名规范 中所述,在服务主体中使用主机名时,您有如下选择:
-
在 Identity Management(IdM)环境中,您可以在服务主体中使用完整主机名,如
host/demo.example.com@EXAMPLE.COM。 - 在没有 IdM 的环境中,但如果 RHEL 主机作为 Active Directory(AD)域的成员,则不需要进一步考虑,因为 AD 域控制器(DC)自动为注册到 AD 的机器的 NetBIOS 名称创建服务主体。
第 92 章 使用 Ansible playbook 在 IdM 中管理全局 DNS 配置 复制链接链接已复制到粘贴板!
使用 Red Hat Ansible Engine dnsconfig 模块,您可以配置 Identity Management(IdM)DNS 的全局配置。全局 DNS 配置中定义的设置应用到所有 IdM DNS 服务器。但是,全局配置优先于特定 IdM DNS 区的配置。
dnsconfig 模块支持以下变量:
- 全局转发器,特别是 IP 地址和用于通信的端口。
- 全局转发策略:只有、first 或 none。有关这些 DNS 转发策略类型的详情,请参阅 IdM 中的 DNS 转发策略。
- 同步正向查找和反向查找区域。
先决条件
DNS 服务安装在 IdM 服务器上。有关如何使用集成 DNS 安装 IdM 服务器的详情,请查看以下链接之一:
本章包括以下部分:
- IdM 如何确保 NetworkManager 不会删除 /etc/resolv.conf 中的全局转发器
- 使用 Ansible 在 IdM 中存在 DNS 全局转发器
- 使用 Ansible 确保 IdM 中没有 DNS 全局转发器
-
ipadnsconfig ansible-freeipa 模块中的
action: member选项 - IdM 中 DNS 转发策略的介绍
- 使用 Ansible playbook 确保 IdM DNS 全局配置中设置了 forward first 策略
- 使用 Ansible playbook 确保 IdM DNS 中禁用了全局转发器
- 使用 Ansible playbook 确保 IdM DNS 中禁用了正向和反向查找区域的同步
使用集成 DNS 安装 Identity Management(IdM)将 /etc/resolv.conf 文件配置为指向 127.0.0.1 localhost 地址:
# Generated by NetworkManager search idm.example.com nameserver 127.0.0.1
# Generated by NetworkManager
search idm.example.com
nameserver 127.0.0.1
在某些情况下,如使用 动态主机配置 协议(DHCP)的网络,NetworkManager 服务可能会恢复对 /etc/resolv.conf 文件的更改。为了使 DNS 配置持久,IdM DNS 安装过程还通过以下方式配置 NetworkManager 服务:
DNS 安装脚本会创建一个
/etc/NetworkManager/conf.d/zzz-ipa.confNetworkManager配置文件来控制搜索顺序和 DNS 服务器列表:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
NetworkManager服务已重新加载,该服务始终使用/etc/NetworkManager/conf.d/目录中的最后一个文件中的设置来创建/etc/resolv.conf文件。这时为zzz-ipa.conf文件。
不要手动修改 /etc/resolv.conf 文件。
92.2. 使用 Ansible 确保 IdM 中存在 DNS 全局转发器 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保 DNS 全局转发器在 IdM 中存在。在下例中,IdM 管理员确保在 DNS 服务器中存在一个到 IPv4 地址为 7.7.9.9,IP v6 地址为 2001:db8::1:0,端口 53 的 DNS global forwarder。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 制作
forwarders-absent.ymlAnsible playbook 文件的副本。例如:cp forwarders-absent.yml ensure-presence-of-a-global-forwarder.yml
$ cp forwarders-absent.yml ensure-presence-of-a-global-forwarder.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
ensure-presence-global-forwarder.yml文件进行编辑。 通过设置以下变量来调整文件:
-
将 playbook
的 name变量更改为 Playbook,以确保 IdM DNS 中存在全局转发器。 -
在
tasks部分中,更改任务的名称,以确保到端口 53上 7.7.9.9 和 2001:db8::1:0 的 DNS 全局转发器存在。 在
ipadnsconfig部分的forwarders部分:-
将第一个
ip_address值更改为全局转发器的 IPv4 地址:7.7.9.9。 -
将第二个
ip_address值更改为全局转发器的 IPv6 地址:2001:db8::1:0。 -
验证
端口值是否已设置为53。
-
将第一个
将
状态更改为present。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 playbook
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-presence-of-a-global-forwarder.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-presence-of-a-global-forwarder.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
92.3. 使用 Ansible 确保 IdM 中没有 DNS 全局转发器 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保 DNS 全局转发器在 IdM 中不存在。在以下示例流程中,IdM 管理员确保端口 53 上具有互联网协议(IP)v4 地址 8.8.6.6 和 IP v6 地址 2001:4860:4860::8800 的 DNS 全局转发器(IP)不存在。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 制作
forwarders-absent.ymlAnsible playbook 文件的副本。例如:cp forwarders-absent.yml ensure-absence-of-a-global-forwarder.yml
$ cp forwarders-absent.yml ensure-absence-of-a-global-forwarder.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
ensure-absence-of-a-global-forwarder.yml文件进行编辑。 通过设置以下变量来调整文件:
-
将 playbook
的 name变量更改为 Playbook,以确保 IdM DNS 中缺少全局转发器。 -
在
tasks部分中,更改任务的名称,以确保到 8.8.6.6 和 2001:4860:4860::8800 端口 53 的 DNS 全局转发器不存在。 在
ipadnsconfig部分的forwarders部分:-
将第一个
ip_address值更改为全局转发器的 IPv4 地址:8.8.6.6。 -
将第二个
ip_address值更改为全局转发器的 IPv6 地址:2001:4860:4860::8800。 -
验证
端口值是否已设置为53。
-
将第一个
-
将
action变量设置为member。 -
验证
state已设为absent。
对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要如果您仅在 playbook 中使用
state: absent选项,而不使用action: member,则 playbook 会失败。-
将 playbook
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-absence-of-a-global-forwarder.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-absence-of-a-global-forwarder.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 ansible-freeipa ipadnsconfig 模块在身份管理(IdM)中排除全局转发器,除了使用 state: absent 选项外,还需要使用 action: member 选项。如果您只使用 playbook 中的 state: absent,而没有使用 action: member,则 playbook 将失败。因此,要删除所有全局转发器,您必须在 playbook 中分别指定它们。相反,state: present 选项不需要 action: member。
下表 提供了添加和删除 DNS 全局转发器的配置示例,其演示了 action: member 选项的正确使用。表中每一行显示了:
- 执行 playbook 前配置的全局转发器
- playbook 摘录
- 执行 playbook 后配置的全局转发器
| 之前的转发器 | Playbook 摘录 | 之后的转发器 |
|---|---|---|
| 8.8.6.6 |
| 8.8.6.7 |
| 8.8.6.6 |
| 8.8.6.6, 8.8.6.7 |
| 8.8.6.6, 8.8.6.7 |
| 尝试执行 playbook 会导致错误。原始配置 - 8.8.6.6、8.8.6.7 - 保持不变。 |
| 8.8.6.6, 8.8.6.7 |
| 8.8.6.6 |
92.5. IdM 中的 DNS 转发策略 复制链接链接已复制到粘贴板!
IdM 支持 第一个 且 唯一的 标准 BIND 转发策略,以及任何 IdM 特定的转发策略。
- 首先转发 (默认)
-
IdM BIND 服务将 DNS 查询转发到配置的转发器。如果因为服务器错误或超时查询失败,BIND 会使用 Internet 上的服务器回退到递归解析。
forward first策略是默认策略,它适合优化 DNS 流量。 - 仅转发
-
IdM BIND 服务将 DNS 查询转发到配置的转发器。如果因为服务器错误或超时查询失败,BIND 会向客户端返回错误。建议在带有分割 DNS 配置的环境中使用
forward only策略。 - none (转发禁用)
-
DNS 查询不会通过
none转发策略转发。禁用转发仅作为全局转发配置的特定区覆盖。这个选项等同于在 BIND 配置中指定空转发器列表。
您不能使用转发将 IdM 中的数据与其他 DNS 服务器的数据组合。您只能在 IdM DNS 中转发主区的查询。
默认情况下,如果查询的 DNS 名称属于 IdM 服务器具有权威的区域,BIND 服务不会将查询转发到另一服务器。在这种情况下,如果无法在 IdM 数据库中找到查询的 DNS 名称,则会返回 NXDOMAIN 回答。未使用转发。
例 92.1. 场景示例
IdM 服务器对 test.example 具有权威。DNS 区域.BIND 配置为将查询转发到 IP 地址 192.0.2.254 的 DNS 服务器。
客户端发送对 不存在.test.example的查询时。DNS 名称,BIND 检测到 IdM 服务器对 test.example. 区域具有权威,并且不会将查询转发到 192.0.2.254. 服务器。因此,DNS 客户端会收到 NXDomain 错误消息,通知用户查询的域不存在。
按照以下流程,使用 Ansible playbook 确保将 IdM DNS 中的全局转发策略被设置为 forward first。
如果您使用 forward first DNS 转发策略,DNS 查询将转发到配置的转发器。如果因为服务器错误或超时查询失败,BIND 会使用 Internet 上的服务器回退到递归解析。forward first 策略是默认策略。它适用于流量优化。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
- 您的 IdM 环境包含一个集成的 DNS 服务器。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 复制 set-configuration.yml Ansible playbook 文件。例如:
cp set-configuration.yml set-forward-policy-to-first.yml
$ cp set-configuration.yml set-forward-policy-to-first.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 set-forward-policy-to-first.yml 文件进行编辑。
通过在
ipadnsconfigtask 部分中设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员密码。 将
forward_policy变量设置为 first。删除原始 playbook 的其他所有行。这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file set-forward-policy-to-first.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file set-forward-policy-to-first.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
92.7. 使用 Ansible playbook 确保 IdM DNS 中禁用了全局转发器 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保全局转发器在 IdM DNS 中被禁用。禁用的方法是将 forward_policy 变量设置为 none。
禁用全局转发器会导致 DNS 查询不会被转发。禁用转发仅作为全局转发配置的特定区覆盖。这个选项等同于在 BIND 配置中指定空转发器列表。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
- 您的 IdM 环境包含一个集成的 DNS 服务器。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 disable-global-forwarders.yml Ansible playbook 文件的副本。例如:
cp disable-global-forwarders.yml disable-global-forwarders-copy.yml
$ cp disable-global-forwarders.yml disable-global-forwarders-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 disable-global-forwarders-copy.yml 文件进行编辑。
通过在
ipadnsconfigtask 部分中设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员密码。 将
forward_policy变量设置为 none。这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file disable-global-forwarders-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file disable-global-forwarders-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
92.8. 使用 Ansible playbook 确保 IdM DNS 中禁用了正向和反向查找区域的同步 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保正向和反向查找区域在 IdM DNS 中未同步。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
- 您的 IdM 环境包含一个集成的 DNS 服务器。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 复制 disallow -reverse-sync.yml Ansible playbook 文件。例如:
cp disallow-reverse-sync.yml disallow-reverse-sync-copy.yml
$ cp disallow-reverse-sync.yml disallow-reverse-sync-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 disallow -reverse-sync-copy.yml 文件进行编辑。
通过在
ipadnsconfigtask 部分中设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员密码。 将
allow_sync_ptr变量设置为 no。这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file disallow-reverse-sync-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file disallow-reverse-sync-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 93 章 管理 IdM 中的 DNS 区域 复制链接链接已复制到粘贴板!
了解如何以 IdM 管理员身份管理身份管理(IdM) DNS 区域。
先决条件
DNS 服务安装在 IdM 服务器上。有关如何使用集成 DNS 安装 IdM 服务器的详情,请查看以下链接之一:
93.1. 支持的 DNS 区类型 复制链接链接已复制到粘贴板!
本节论述了 Identity Management (IdM)支持( primary 和 forward 区域)的两种 DNS 区域类型,并包括 DNS 转发的示例场景。
本节对区域类型使用 BIND 术语,它与用于 Microsoft Windows DNS 的术语不同。BIND 服务器中的 Primary zones 与 Microsoft Windows DNS 中的 forward lookup zones 和 reverse lookup zones 作用相同。BIND 中的转发区域的作用与 Microsoft Windows DNS 中的条件 转发器相同。
- 主 DNS 区域
主 DNS 区域包含权威 DNS 数据,并且可以接受动态 DNS 更新。此行为等同于标准 BIND 配置中的
类型 master设置。您可以使用ipa dnszonefluentd 命令管理主区。在遵守标准 DNS 规则时,每个主区必须包含
start of authority(SOA)和nameserver(NS)记录。在创建 DNS 区域时,IdM 会自动生成这些记录,但您必须手动将 NS 记录复制到父区域,以创建正确委托。根据标准 BIND 行为,查询服务器不具有权威的名称将转发到其他 DNS 服务器。这些 DNS 服务器(也称为转发器)可能也可能不是查询的权威。
例 93.1. DNS 转发的示例
IdM 服务器包含
test.example.主区域。此区域包含sub.test.example.名称的 NS 委派记录。此外,使用sub.text.example子区域的192.0.2.254转发器 IP 地址配置了test.example.区域。查询名称
不存在.test.example.的客户端会收到NXDomain回答,并且不会发生转发,因为 IdM 服务器对此名称具有权威。另一方面,查询
host1.sub.test.example.name 会转发到配置的转发器192.0.2.254,因为 IdM 服务器对此名称没有权威。- 转发 DNS 区域
从 IdM 的角度来看,转发 DNS 区域不包含任何权威数据。事实上,正向"区"通常仅包含两段信息:
- 域名
- 与域关联的 DNS 服务器的 IP 地址
所有对属于定义的域的名称的查询都转发到指定的 IP 地址。此行为等同于标准 BIND 配置中的 type forward 设置。您可以使用 ipa dnsforwardzone fluentd 命令管理转发区。
转发 DNS 区域在 IdM-Active Directory(AD)信任的上下文中特别有用。如果 IdM DNS 服务器对 idm.example.com 区域具有权威,并且 AD DNS 服务器对 ad.example.com 区域具有权威,则 ad.example.com 是 idm.example.com 主区的 DNS 转发区域。这意味着,当查询来自 IdM 客户端以获取 somehost.ad.example.com 的 IP 地址时,IdM DNS 服务器将查询转发到 ad.example.com IdM DNS 转发区域中指定的 AD 域控制器。
93.2. 在 IdM Web UI 中添加主 DNS 区域 复制链接链接已复制到粘贴板!
按照以下步骤,使用 Identity Management (IdM) Web UI 添加主 DNS 区域。
先决条件
- 以 IdM 管理员身份登录。
步骤
在 IdM Web UI 中,点击
Network Services→DNS→DNS Zones。图 93.1. 管理 IdM DNS 主区域
- 单击所有区域列表顶部的 。
提供区域名称。
图 93.2. 输入一个新的 IdM 主区
- 点。
93.3. 在 IdM CLI 中添加主 DNS 区域 复制链接链接已复制到粘贴板!
按照以下流程,使用 Identity Management (IdM)命令行界面(CLI)添加主 DNS 区。
先决条件
- 以 IdM 管理员身份登录。
步骤
ipa dnszone-add命令向 DNS 域添加新区域。添加新区域要求您指定新子域的名称。您可以直接使用以下命令传递子域名:ipa dnszone-add newzone.idm.example.com
$ ipa dnszone-add newzone.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有将名称传递给
ipa dnszone-add,脚本会自动提示它。
93.4. 在 IdM Web UI 中删除主 DNS 区域 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM Web UI 从身份管理(IdM)中删除主 DNS 区。
先决条件
- 以 IdM 管理员身份登录。
步骤
-
在 IdM Web UI 中,点击
Network Services→DNS→DNS Zones。 按区域名称选择复选框,然后单击 。
图 93.3. 删除主 DNS 区域
- 在 Remove DNS 区域 对话框窗口中,确认您要删除所选区域。
93.5. 在 IdM CLI 中删除主 DNS 区域 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM 命令行界面(CLI)从身份管理(IdM)中删除主 DNS 区。
先决条件
- 以 IdM 管理员身份登录。
步骤
要删除主 DNS 区域,输入
ipa dnszone-del命令,后跟您要删除的区域的名称。例如:ipa dnszone-del idm.example.com
$ ipa dnszone-del idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
93.6. DNS 配置优先级 复制链接链接已复制到粘贴板!
您可以在以下层面上配置多个 DNS 配置选项:每个级别具有不同的优先级。
- 特定于区域的配置
-
IdM 中定义的特定区的具体配置级别具有最高的优先级。您可以使用
ipa dnszone-*和ipa dnsforwardzone-*命令来管理特定于区的配置。 - 每服务器配置
-
安装 IdM 服务器过程中,需要您定义每服务器转发器。您可以使用
ipa dnsserver-*命令管理每服务器转发器。如果您不想在安装副本时设置每服务器转发器,您可以使用--no-forwarder选项。 - 全局 DNS 配置
-
如果没有定义特定于区域的配置,IdM 将使用存储在 LDAP 中的全局 DNS 配置。您可以使用
ipa dnsconfig-*命令管理全局 DNS 配置。全局 DNS 配置中定义的设置应用到所有 IdM DNS 服务器。 /etc/named.conf中的配置在每个 IdM DNS 服务器的
/etc/named.conf文件中定义的配置具有最低优先级。它特定于每台服务器,必须手动编辑。/etc/named.conf文件通常仅用于指定到本地 DNS 缓存的 DNS 转发。其他选项通过使用 命令管理上述区域特定和全局 DNS 配置。
您可以在多个级别上同时配置 DNS 选项。在这种情况下,具有最高优先级的配置优先于较低级别上定义的配置。
93.7. 主要 IdM DNS 区的配置属性 复制链接链接已复制到粘贴板!
身份管理(IdM)创建一个具有特定默认配置的新区域,如刷新周期、传输设置或缓存设置。在 IdM DNS 区域属性 中,您可以找到使用以下选项之一修改的默认区域配置的属性:
-
命令行(CLI)上的
dnszone-mod命令。如需更多信息,请参阅在 IdM CLI 中编辑主 DNS 区的配置。 - IdM Web UI.如需更多信息,请参阅在 IdM Web UI 中编辑主 DNS 区的配置。
-
使用
ipadnszone模块的 Ansible playbook。如需更多信息,请参阅使用 Ansible playbook 管理 IdM DNS 区域。
除了设置区域的实际信息外,这些设置定义了 DNS 服务器如何处理 权威启动 (SOA)记录条目以及它如何从 DNS 名称服务器更新其记录。
| 属性 | 命令行选项 | 描述 |
|---|---|---|
| 权威名称服务器 |
| 设置主 DNS 名称服务器的域名,也称为 SOA MNAME。
默认情况下,每个 IdM 服务器在 SOA MNAME 字段中公告其自身。因此,使用 |
| 管理员电子邮件地址 |
| 设置要用于区域管理员的电子邮件地址。这默认为主机上的 root 帐户。 |
| SOA 串行 |
| 在 SOA 记录中设置序列号。请注意,IdM 会自动设置版本号,用户不应该修改它。 |
| SOA 刷新 |
| 设置次要 DNS 服务器在从主 DNS 服务器请求更新前等待的间隔(以秒为单位)。 |
| SOA 重试 |
| 设置在重试失败的刷新操作前要等待的时间(以秒为单位)。 |
| SOA 过期 |
| 设置次要 DNS 服务器在结束操作尝试之前尝试执行刷新更新的时间(以秒为单位)。 |
| 最低 SOA |
| 根据 RFC 2308,将生存时间(TTL)值(以秒为单位)设置为负缓存。 |
| SOA 生存时间 |
|
为区域 apex 的记录设置 TTL(以秒为单位)。例如,在区域 |
| 默认生存时间 |
|
将默认时间设置为 live(TTL),以秒为单位,为之前未设置单个 TTL 值的区域中的所有值提供负缓存。更改生效后,需要在所有 IdM DNS 服务器上重新启动 |
| BIND 更新策略 |
| 设置 DNS 区域中客户端允许的权限。 |
| 动态更新 |
| 启用对客户端的 DNS 记录的动态更新。 请注意,如果设置为 false,IdM 客户端计算机将无法添加或更新其 IP 地址。 |
| 允许传输 |
| 提供允许传输给定区域的 IP 地址或网络名称列表,用分号(;)分隔。
默认情况下禁用区域传送。默认的 |
| 允许查询 |
| 提供允许发出 DNS 查询的 IP 地址或网络名称列表,用分号(;)分隔。 |
| 允许 PTR 同步 |
| 设置区域的 A 或 AAAA 记录(转发记录)是否将自动与 PTR(反向)记录同步。 |
| 区域转发器 |
| 指定为 DNS 区域特别配置的转发器。这与 IdM 域中使用的任何全局转发器分开。 要指定多个转发器,请多次使用 选项。 |
| forward 策略 |
| 指定 forward 策略。有关支持的策略的详情,请查看 IdM 中的 DNS 转发策略。 |
93.8. 在 IdM Web UI 中编辑主 DNS 区域的配置 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM Web UI 编辑主身份管理(IdM) DNS 的配置属性。
先决条件
- 以 IdM 管理员身份登录。
步骤
在 IdM Web UI 中,点击
Network Services→DNS→DNS Zones。图 93.4. DNS 主区管理
在
DNS Zones部分中,单击所有区域列表中的区域名称,以打开 DNS 区域页面。图 93.5. 编辑主区域
单击
Settings。图 93.6. 主区域编辑页面中的 Settings 选项卡
根据需要更改区域配置。
有关可用设置的详情,请参考 IdM DNS 区域属性。
单击 以确认新配置。
注意如果您要将区的默认时间改为 live (TTL),请在所有 IdM DNS 服务器上重新启动
named服务,以使更改生效。所有其他设置将立即自动激活。
93.9. 在 IdM CLI 中编辑主 DNS 区域的配置 复制链接链接已复制到粘贴板!
按照以下流程,使用 Identity Management (IdM)命令行界面(CLI)编辑主 DNS 区的配置。
先决条件
- 以 IdM 管理员身份登录。
步骤
要修改现有的主 DNS 区域,请使用
ipa dnszone-mod命令。例如,在重试失败的刷新操作前要设置等待的时间为 1800 秒:ipa dnszone-mod --retry 1800
$ ipa dnszone-mod --retry 1800Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关可用设置及其相应 CLI 选项的更多信息,请参阅 IdM DNS 区域属性。
如果特定设置在您要修改的 DNS 区域条目中没有值,ipa
dnszone-mod 命令会添加该值。如果设置没有值,该命令将使用指定的值覆盖当前值。注意如果您要将区的默认时间改为 live (TTL),请在所有 IdM DNS 服务器上重新启动
named服务,以使更改生效。所有其他设置将立即自动激活。
93.10. IdM 中的区域传送 复制链接链接已复制到粘贴板!
在有集成 DNS 的身份管理(IdM)部署中,您可以使用 zone transfers 将所有资源记录从一个名称服务器复制到另一个名称服务器。名称服务器为其区域维护权威数据。如果您更改了对 zone A DNS 区具有权威的 DNS 服务器上的区,您必须在位于zone A 外的 IdM DNS 域中的其他名称服务器间分发更改。
IdM 集成的 DNS 可以由不同的服务器同时写入。IdM 区域中的授权起始(SOA)序列号没有在单独的 IdM DNS 服务器间同步。因此,将您的 DNS 服务器配置为仅使用 to-be-transferred 区域中的一个特定的 DNS 服务器。这可防止由未同步的 SOA 序列号导致的区域传输失败。
93.11. 在 IdM Web UI 中启用区域传送 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM Web UI 在身份管理(IdM)中启用区域传送。
先决条件
- 以 IdM 管理员身份登录。
步骤
-
在 IdM Web UI 中,点击
Network Services→DNS→DNS Zones。 -
单击
Settings。 在
Allow transfer下,指定要将区域记录传输到的名称服务器。图 93.7. 启用区传输
- 单击 DNS 区域页面顶部的 ,以确认新配置。
93.12. 在 IdM CLI 中启用区传输 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM 命令行界面(CLI)在身份管理(IdM)中启用区域传送。
先决条件
- 以 IdM 管理员身份登录。
- 您有访问二级 DNS 服务器的 root 权限。
步骤
要在
BIND服务中启用区域传送,请输入ipa dnszone-mod命令,并指定位于 to-be-transferred 区域之外的名称服务器列表,以使用--allow-transfer选项将区域记录传输到其中。例如:ipa dnszone-mod --allow-transfer=192.0.2.1;198.51.100.1;203.0.113.1 idm.example.com
$ ipa dnszone-mod --allow-transfer=192.0.2.1;198.51.100.1;203.0.113.1 idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
SSH 到启用了区传输的 DNS 服务器之一:
ssh 192.0.2.1
$ ssh 192.0.2.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
dig工具传输 IdM DNS 区域:dig @ipa-server zone_name AXFR
# dig @ipa-server zone_name AXFRCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如果命令没有返回任何错误,则您已成功为 zone_name 启用区域传送。
第 94 章 使用 Ansible playbook 管理 IdM DNS 区域 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以使用 ansible-freeipa 软件包中的 dnszone 模块来管理 IdM DNS 区域的工作方式。
先决条件
- DNS 服务安装在 IdM 服务器上。有关如何使用 Ansible 安装带有集成 DNS 的 IdM 服务器的更多信息,请参阅使用 Ansible playbook 安装身份管理服务器。
94.1. 支持的 DNS 区类型 复制链接链接已复制到粘贴板!
本节论述了 Identity Management (IdM)支持( primary 和 forward 区域)的两种 DNS 区域类型,并包括 DNS 转发的示例场景。
本节对区域类型使用 BIND 术语,它与用于 Microsoft Windows DNS 的术语不同。BIND 服务器中的 Primary zones 与 Microsoft Windows DNS 中的 forward lookup zones 和 reverse lookup zones 作用相同。BIND 中的转发区域的作用与 Microsoft Windows DNS 中的条件 转发器相同。
- 主 DNS 区域
主 DNS 区域包含权威 DNS 数据,并且可以接受动态 DNS 更新。此行为等同于标准 BIND 配置中的
类型 master设置。您可以使用ipa dnszonefluentd 命令管理主区。在遵守标准 DNS 规则时,每个主区必须包含
start of authority(SOA)和nameserver(NS)记录。在创建 DNS 区域时,IdM 会自动生成这些记录,但您必须手动将 NS 记录复制到父区域,以创建正确委托。根据标准 BIND 行为,查询服务器不具有权威的名称将转发到其他 DNS 服务器。这些 DNS 服务器(也称为转发器)可能也可能不是查询的权威。
例 94.1. DNS 转发的示例
IdM 服务器包含
test.example.主区域。此区域包含sub.test.example.名称的 NS 委派记录。此外,使用sub.text.example子区域的192.0.2.254转发器 IP 地址配置了test.example.区域。查询名称
不存在.test.example.的客户端会收到NXDomain回答,并且不会发生转发,因为 IdM 服务器对此名称具有权威。另一方面,查询
host1.sub.test.example.name 会转发到配置的转发器192.0.2.254,因为 IdM 服务器对此名称没有权威。- 转发 DNS 区域
从 IdM 的角度来看,转发 DNS 区域不包含任何权威数据。事实上,正向"区"通常仅包含两段信息:
- 域名
- 与域关联的 DNS 服务器的 IP 地址
所有对属于定义的域的名称的查询都转发到指定的 IP 地址。此行为等同于标准 BIND 配置中的 type forward 设置。您可以使用 ipa dnsforwardzone fluentd 命令管理转发区。
转发 DNS 区域在 IdM-Active Directory(AD)信任的上下文中特别有用。如果 IdM DNS 服务器对 idm.example.com 区域具有权威,并且 AD DNS 服务器对 ad.example.com 区域具有权威,则 ad.example.com 是 idm.example.com 主区的 DNS 转发区域。这意味着,当查询来自 IdM 客户端以获取 somehost.ad.example.com 的 IP 地址时,IdM DNS 服务器将查询转发到 ad.example.com IdM DNS 转发区域中指定的 AD 域控制器。
94.2. 主要 IdM DNS 区的配置属性 复制链接链接已复制到粘贴板!
身份管理(IdM)创建一个具有特定默认配置的新区域,如刷新周期、传输设置或缓存设置。在 IdM DNS 区域属性 中,您可以找到使用以下选项之一修改的默认区域配置的属性:
-
命令行(CLI)上的
dnszone-mod命令。如需更多信息,请参阅在 IdM CLI 中编辑主 DNS 区的配置。 - IdM Web UI.如需更多信息,请参阅在 IdM Web UI 中编辑主 DNS 区的配置。
-
使用
ipadnszone模块的 Ansible playbook。如需更多信息,请参阅使用 Ansible playbook 管理 IdM DNS 区域。
除了设置区域的实际信息外,这些设置定义了 DNS 服务器如何处理 权威启动 (SOA)记录条目以及它如何从 DNS 名称服务器更新其记录。
| 属性 | ansible-freeipa 变量 | 描述 |
|---|---|---|
| 权威名称服务器 |
| 设置主 DNS 名称服务器的域名,也称为 SOA MNAME。
默认情况下,每个 IdM 服务器在 SOA MNAME 字段中公告其自身。因此,使用 |
| 管理员电子邮件地址 |
| 设置要用于区域管理员的电子邮件地址。这默认为主机上的 root 帐户。 |
| SOA 串行 |
| 在 SOA 记录中设置序列号。请注意,IdM 会自动设置版本号,用户不应该修改它。 |
| SOA 刷新 |
| 设置次要 DNS 服务器在从主 DNS 服务器请求更新前等待的间隔(以秒为单位)。 |
| SOA 重试 |
| 设置在重试失败的刷新操作前要等待的时间(以秒为单位)。 |
| SOA 过期 |
| 设置次要 DNS 服务器在结束操作尝试之前尝试执行刷新更新的时间(以秒为单位)。 |
| 最低 SOA |
| 根据 RFC 2308,将生存时间(TTL)值(以秒为单位)设置为负缓存。 |
| SOA 生存时间 |
|
为区域 apex 的记录设置 TTL(以秒为单位)。例如,在区域 |
| 默认生存时间 |
|
将默认时间设置为 live(TTL),以秒为单位,为之前未设置单个 TTL 值的区域中的所有值提供负缓存。更改生效后,需要在所有 IdM DNS 服务器上重新启动 |
| BIND 更新策略 |
| 设置 DNS 区域中客户端允许的权限。 |
| 动态更新 |
| 启用对客户端的 DNS 记录的动态更新。 请注意,如果设置为 false,IdM 客户端计算机将无法添加或更新其 IP 地址。 |
| 允许传输 |
| 提供允许传输给定区域的 IP 地址或网络名称列表,用分号(;)分隔。
默认情况下禁用区域传送。默认的 |
| 允许查询 |
| 提供允许发出 DNS 查询的 IP 地址或网络名称列表,用分号(;)分隔。 |
| 允许 PTR 同步 |
| 设置区域的 A 或 AAAA 记录(转发记录)是否将自动与 PTR(反向)记录同步。 |
| 区域转发器 |
| 指定为 DNS 区域特别配置的转发器。这与 IdM 域中使用的任何全局转发器分开。 要指定多个转发器,请多次使用 选项。 |
| forward 策略 |
| 指定 forward 策略。有关支持的策略的详情,请查看 IdM 中的 DNS 转发策略。 |
94.3. 使用 Ansible 在 IdM DNS 中创建主区域 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保主 DNS 区域存在。在以下流程使用的示例中,您确保 zone.idm.example.com DNS 区域存在。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnszone目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnszone
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnszoneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 dnszone-present.yml Ansible playbook 文件的副本。例如:
cp dnszone-present.yml dnszone-present-copy.yml
$ cp dnszone-present.yml dnszone-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 dnszone-present-copy.yml 文件进行编辑。
通过在
ipadnszonetask 部分中设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员密码。 将
zone_name变量设置为 zone.idm.example.com。这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file dnszone-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file dnszone-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
94.4. 使用 Ansible playbook 确保 IdM 中存在一个带有多个变量的主 DNS 区域 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保主 DNS 区域存在。在以下流程中使用的示例中,IdM 管理员确保存在 zone.idm.example.com DNS 区域。Ansible playbook 配置区域的多个参数。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnszone目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnszone
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnszoneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 dnszone-all-params.yml Ansible playbook 文件的副本。例如:
cp dnszone-all-params.yml dnszone-all-params-copy.yml
$ cp dnszone-all-params.yml dnszone-all-params-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 dnszone-all-params-copy.yml 文件进行编辑。
通过在
ipadnszonetask 部分中设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员密码。 -
将
zone_name变量设置为 zone.idm.example.com。 -
如果要允许正向和反向记录同步,这是 A 和 AAAA 记录与 PTR 记录的同步,请将
allow_sync_ptr变量设置为 true。 -
将
dynamic_update变量设置为 true,以启用 IdM 客户端计算机添加或更新其 IP 地址。 将
dnssec变量设置为 true,以允许区域中的记录内联 DNSSEC 签名。警告DNSSEC 在 IdM 中仅作为技术预览提供。
-
将
allow_transfer变量设置为区域中次要名称服务器的 IP 地址。 -
将
allow_query变量设置为允许发出查询的 IP 地址或网络。 -
将
forwarders变量设置为全局转发器的 IP 地址。 -
将
serial变量设置为 SOA 记录序列号。 -
定义区域中 DNS 记录的
refresh、retry、expire、minimum、ttl和default_ttl值。 -
使用
nsec3param_rec 变量,为区域定义 NSEC3PARAM 记录。 -
将
skip_overlap_check变量设置为 true,从而强制创建 DNS,即使它与现有区域重叠。 将
skip_nameserver_check设置为 true,从而强制 DNS 区域创建,即使名称服务器不可解析。这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file dnszone-all-params-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file dnszone-all-params-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
94.5. 在给定 IP 地址时,使用 Ansible playbook 确保存在用于反向 DNS 查找的区域 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保反向 DNS 区域存在。在以下步骤中使用的示例中,IdM 管理员使用 IdM 主机的 IP 地址和前缀长度确保存在反向 DNS 查找区域。
使用 name_from_ip 变量提供 DNS 服务器的 IP 地址前缀长度,允许您控制区域名称。如果您不声明前缀长度,系统会查询 DNS 服务器以获取区,并根据 192.168.1.2 的 name_from_ip 值,查询可以返回以下 DNS 区域中的任何一个:
- 1.168.192.in-addr.arpa.
- 168.192.in-addr.arpa.
- 192.in-addr.arpa.
由于查询返回的区域可能不是您预期的区域,name_from_ip 只能与 state 选项设置为 present 一起使用,以防止意外删除区域。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnszone目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnszone
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnszoneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 dnszone-reverse-from-ip.yml Ansible playbook 文件的副本。例如:
cp dnszone-reverse-from-ip.yml dnszone-reverse-from-ip-copy.yml
$ cp dnszone-reverse-from-ip.yml dnszone-reverse-from-ip-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 dnszone-reverse-from-ip-copy.yml 文件进行编辑。
通过在
ipadnszonetask 部分中设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员密码。 将
name_from_ip变量设置为 IdM 名称服务器的 IP,并提供其前缀长度。这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
playbook 创建一个区,用于从 192.168.1.2 IP 地址及其前缀长度 24 中反向 DNS 查找。接下来,playbook 显示生成的区域名称。
-
将
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file dnszone-reverse-from-ip-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file dnszone-reverse-from-ip-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 95 章 管理 IdM 中的 DNS 位置 复制链接链接已复制到粘贴板!
了解如何使用 IdM Web UI 和 IdM 命令行界面(CLI)管理身份管理(IdM) DNS 位置。
95.1. 基于 DNS 的服务发现 复制链接链接已复制到粘贴板!
在基于 DNS 的服务发现中,客户端使用 DNS 协议在提供特定服务的网络中查找服务器,如 LDAP 或 Kerberos。种典型的操作类型是允许客户端在最接近的网络基础架构中查找身份验证服务器,因为它们提供更高的吞吐量和较低的网络延迟,从而降低总体成本。
服务发现的主要优点是:
- 无需使用附近服务器的名称明确配置客户端。
- DNS 服务器用作策略的中央提供程序。使用同一 DNS 服务器的客户端有权访问关于服务提供商及其首选顺序的相同策略。
在 Identity Management(IdM)域中,存在适用于 LDAP、Kerber os 和其他服务的 DNS 服务记录(SRV 记录)。例如,以下命令在 IdM DNS 域中查询 DNS 服务器以获取提供基于 TCP 的 Kerberos 服务的主机:
例 95.1. 独立于 DNS 位置的结果
dig -t SRV +short _kerberos._tcp.idm.example.com 0 100 88 idmserver-01.idm.example.com. 0 100 88 idmserver-02.idm.example.com.
$ dig -t SRV +short _kerberos._tcp.idm.example.com
0 100 88 idmserver-01.idm.example.com.
0 100 88 idmserver-02.idm.example.com.
输出包含以下信息:
-
0(优先级):目标主机的优先级.首选使用较低值。 -
100(权重).为优先级相同的条目指定相对权重。如需更多信息,请参阅 RFC 2782 第 3 节。 -
88(端口号):服务的端口号。 - 提供服务的主机的规范名称。
在示例中,返回的两个主机名具有相同的优先级和权重。在本例中,客户端使用来自结果列表中的随机条目。
相反,当客户端配置为查询在 DNS 位置配置的 DNS 服务器时,输出会有所不同。对于分配到某个位置的 IdM 服务器,会返回定制值。在以下示例中,客户端被配置为在位置 germany 中查询 DNS 服务器:
例 95.2. 基于 DNS 位置的结果
dig -t SRV +short _kerberos._tcp.idm.example.com _kerberos._tcp.germany._locations.idm.example.com. 0 100 88 idmserver-01.idm.example.com. 50 100 88 idmserver-02.idm.example.com.
$ dig -t SRV +short _kerberos._tcp.idm.example.com
_kerberos._tcp.germany._locations.idm.example.com.
0 100 88 idmserver-01.idm.example.com.
50 100 88 idmserver-02.idm.example.com.
IdM DNS 服务器自动返回一个 DNS 别名(CNAME),指向一个 DNS 位置特定的 SRV 记录(首选本地服务器)。此 CNAME 记录显示在输出的第一行中。在示例中,主机 idmserver-01.idm.example.com 具有最低的优先级值,因此是首选的。idmserver-02.idm.example.com 具有更高的优先级,因此仅在首选主机不可用的情况下用作备份。
95.2. DNS 位置的部署注意事项 复制链接链接已复制到粘贴板!
使用集成 DNS 时,身份管理(IdM)可以生成特定于位置的服务(SRV)记录。因为每个 IdM DNS 服务器都会生成特定于位置的 SRV 记录,所以您必须在每个 DNS 位置至少安装一个 IdM DNS 服务器。
客户端与 DNS 位置的关联仅由客户端收到的 DNS 记录定义。因此,如果客户端执行 DNS 服务发现,从 IdM DNS 服务器解析特定于位置的记录,您可以将 IdM DNS 服务器与非 IdM DNS 使用者服务器合并,并递归器。
在大多数使用混合 IdM 和非 IdM DNS 服务的部署中,DNS 递归器都通过使用往返时间指标自动选择最接近的 IdM DNS 服务器。通常,这可确保使用非 IdM DNS 服务器的客户端正在获取最接近的 DNS 位置的记录,从而使用最佳 IdM 服务器集。
95.3. DNS 生存时间(TTL) 复制链接链接已复制到粘贴板!
客户端可以在区域配置中设置的一段时间内缓存 DNS 资源记录。由于这种缓存,客户端可能无法接收更改,直到生存时间(TTL)值过期为止。Identity Management(IdM)中的默认 TTL 值为 1 天。
如果您的客户端计算机在站点间漫游,您应该调整 IdM DNS 区的 TTL 值。将值设为比客户端在站点之间 roam 需要的时间值低。这样可确保客户端上缓存的 DNS 条目在重新连接到另一个站点之前过期,从而查询 DNS 服务器刷新特定于位置的 SRV 记录。
95.4. 使用 IdM Web UI 创建 DNS 位置 复制链接链接已复制到粘贴板!
您可以使用 DNS 位置来加快身份管理(IdM)客户端和服务器之间的通信速度。按照以下流程,使用 IdM Web UI 创建 DNS 位置。
先决条件
- 您的 IdM 部署已经集成了 DNS。
- 您有在 IdM 中创建 DNS 位置的权限。例如,您以 IdM admin 身份登录。
步骤
-
打开
IPA Server选项卡。 -
选择
Topology子选项卡。 -
单击导航栏中的
IPA Locations。 - 单击位置列表顶部的 。
- 填写位置名称。
- 单击 按钮以保存位置。
- 可选:重复添加更多位置的步骤。
95.5. 使用 IdM CLI 创建 DNS 位置 复制链接链接已复制到粘贴板!
您可以使用 DNS 位置来加快身份管理(IdM)客户端和服务器之间的通信速度。按照以下流程,在 IdM 命令行界面(CLI)中使用 ipa location-add 命令创建 DNS 位置。
先决条件
- 您的 IdM 部署已经集成了 DNS。
- 您有在 IdM 中创建 DNS 位置的权限。例如,您以 IdM admin 身份登录。
步骤
例如,要创建新位置
germany,请输入:ipa location-add germany ---------------------------- Added IPA location "germany" ---------------------------- Location name: germany
$ ipa location-add germany ---------------------------- Added IPA location "germany" ---------------------------- Location name: germanyCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 可选:重复添加更多位置的步骤。
95.6. 使用 IdM Web UI 将 IdM 服务器分配给 DNS 位置 复制链接链接已复制到粘贴板!
您可以使用 Identity Management(IdM)DNS 位置提高 IdM 客户端和服务器之间的通信速度。按照以下流程,使用 IdM Web UI 将 IdM 服务器分配给 DNS 位置。
先决条件
- 您的 IdM 部署已经集成了 DNS。
- 您以有权将服务器分配到 DNS 位置的用户身份登录,例如 IdM admin 用户。
-
您对要为其分配 DNS 位置的主机具有
root访问权限。 - 您已 创建了要为其分配服务器的 IdM DNS 位置。
步骤
-
打开
IPA Server选项卡。 -
选择
Topology子选项卡。 -
单击导航中的
IPA Servers。 - 单击 IdM 服务器名称。
选择 DNS 位置,并选择性地设置服务权重:
图 95.1. 将服务器分配到 DNS 位置
- 点击 。
在您在前面的步骤中指定的主机的命令行(CLI)中,重启
named服务:systemctl restart named
[root@idmserver-01 ~]# systemctl restart namedCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 可选:重复为其他 IdM 服务器分配 DNS 位置的步骤。
95.7. 使用 IdM CLI 将 IdM 服务器分配给 DNS 位置 复制链接链接已复制到粘贴板!
您可以使用 Identity Management(IdM)DNS 位置提高 IdM 客户端和服务器之间的通信速度。按照以下流程,使用 IdM 命令行界面(CLI)将 IdM 服务器分配给 DNS 位置。
先决条件
- 您的 IdM 部署已经集成了 DNS。
- 您以有权将服务器分配到 DNS 位置的用户身份登录,例如 IdM admin 用户。
-
您对要为其分配 DNS 位置的主机具有
root访问权限。 - 您已 创建了要为其分配服务器的 IdM DNS 位置。
流程
可选:列出所有配置的 DNS 位置:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将服务器分配到 DNS 位置。例如,要将位置
germany分配给服务器 idmserver-01.idm.example.com,请运行:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在您在前面的步骤中指定的主机上重启
named服务:systemctl restart named
# systemctl restart namedCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 可选:重复为其他 IdM 服务器分配 DNS 位置的步骤。
95.8. 将 IdM 客户端配置为使用同一位置的 IdM 服务器 复制链接链接已复制到粘贴板!
身份管理(IdM)服务器被分配给 DNS 位置,如 使用 IdM Web UI 将 IdM 服务器分配给 DNS 位置 中所述。现在,您可以将客户端配置为使用与 IdM 服务器位于同一位置的 DNS 服务器:
-
如果
DHCP服务器为客户端分配 DNS 服务器 IP 地址,请配置DHCP服务。有关在DHCP服务中分配 DNS 服务器的详情,请查看DHCP服务文档。 -
如果您的客户端没有从
DHCP服务器接收 DNS 服务器 IP 地址,请在客户端的网络配置中手动设置 IP。有关在 Red Hat Enterprise Linux 上配置网络的详情,请参考 Red Hat Enterprise Linux 网络指南 中的 配置网络连接设置 部分。
如果您将客户端配置为使用分配给不同位置的 DNS 服务器,客户端会联系两个位置的 IdM 服务器。
例 95.3. 根据客户端的位置的不同名称服务器条目
以下示例显示了位于不同位置的客户端的 /etc/resolv.conf 文件中的不同名称服务器条目:
布拉格 中的客户端:
nameserver 10.10.0.1 nameserver 10.10.0.2
nameserver 10.10.0.1
nameserver 10.10.0.2
智利中的客户端:
nameserver 10.50.0.1 nameserver 10.50.0.3
nameserver 10.50.0.1
nameserver 10.50.0.3
Oslo 中的客户端:
nameserver 10.30.0.1
nameserver 10.30.0.1
布林中的客户端:
nameserver 10.30.0.1
nameserver 10.30.0.1
如果每个 DNS 服务器都被分配给 IdM 中的一个位置,客户端将使用其位置中的 IdM 服务器。
第 96 章 使用 Ansible 管理 IdM 中的 DNS 位置 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以使用 ansible-freeipa 软件包中提供 的位置模块管理 IdM DNS 位置。
96.1. 基于 DNS 的服务发现 复制链接链接已复制到粘贴板!
在基于 DNS 的服务发现中,客户端使用 DNS 协议在提供特定服务的网络中查找服务器,如 LDAP 或 Kerberos。种典型的操作类型是允许客户端在最接近的网络基础架构中查找身份验证服务器,因为它们提供更高的吞吐量和较低的网络延迟,从而降低总体成本。
服务发现的主要优点是:
- 无需使用附近服务器的名称明确配置客户端。
- DNS 服务器用作策略的中央提供程序。使用同一 DNS 服务器的客户端有权访问关于服务提供商及其首选顺序的相同策略。
在 Identity Management(IdM)域中,存在适用于 LDAP、Kerber os 和其他服务的 DNS 服务记录(SRV 记录)。例如,以下命令在 IdM DNS 域中查询 DNS 服务器以获取提供基于 TCP 的 Kerberos 服务的主机:
例 96.1. 独立于 DNS 位置的结果
dig -t SRV +short _kerberos._tcp.idm.example.com 0 100 88 idmserver-01.idm.example.com. 0 100 88 idmserver-02.idm.example.com.
$ dig -t SRV +short _kerberos._tcp.idm.example.com
0 100 88 idmserver-01.idm.example.com.
0 100 88 idmserver-02.idm.example.com.
输出包含以下信息:
-
0(优先级):目标主机的优先级.首选使用较低值。 -
100(权重).为优先级相同的条目指定相对权重。如需更多信息,请参阅 RFC 2782 第 3 节。 -
88(端口号):服务的端口号。 - 提供服务的主机的规范名称。
在示例中,返回的两个主机名具有相同的优先级和权重。在本例中,客户端使用来自结果列表中的随机条目。
相反,当客户端配置为查询在 DNS 位置配置的 DNS 服务器时,输出会有所不同。对于分配到某个位置的 IdM 服务器,会返回定制值。在以下示例中,客户端被配置为在位置 germany 中查询 DNS 服务器:
例 96.2. 基于 DNS 位置的结果
dig -t SRV +short _kerberos._tcp.idm.example.com _kerberos._tcp.germany._locations.idm.example.com. 0 100 88 idmserver-01.idm.example.com. 50 100 88 idmserver-02.idm.example.com.
$ dig -t SRV +short _kerberos._tcp.idm.example.com
_kerberos._tcp.germany._locations.idm.example.com.
0 100 88 idmserver-01.idm.example.com.
50 100 88 idmserver-02.idm.example.com.
IdM DNS 服务器自动返回一个 DNS 别名(CNAME),指向一个 DNS 位置特定的 SRV 记录(首选本地服务器)。此 CNAME 记录显示在输出的第一行中。在示例中,主机 idmserver-01.idm.example.com 具有最低的优先级值,因此是首选的。idmserver-02.idm.example.com 具有更高的优先级,因此仅在首选主机不可用的情况下用作备份。
96.2. DNS 位置的部署注意事项 复制链接链接已复制到粘贴板!
使用集成 DNS 时,身份管理(IdM)可以生成特定于位置的服务(SRV)记录。因为每个 IdM DNS 服务器都会生成特定于位置的 SRV 记录,所以您必须在每个 DNS 位置至少安装一个 IdM DNS 服务器。
客户端与 DNS 位置的关联仅由客户端收到的 DNS 记录定义。因此,如果客户端执行 DNS 服务发现,从 IdM DNS 服务器解析特定于位置的记录,您可以将 IdM DNS 服务器与非 IdM DNS 使用者服务器合并,并递归器。
在大多数使用混合 IdM 和非 IdM DNS 服务的部署中,DNS 递归器都通过使用往返时间指标自动选择最接近的 IdM DNS 服务器。通常,这可确保使用非 IdM DNS 服务器的客户端正在获取最接近的 DNS 位置的记录,从而使用最佳 IdM 服务器集。
96.3. DNS 生存时间(TTL) 复制链接链接已复制到粘贴板!
客户端可以在区域配置中设置的一段时间内缓存 DNS 资源记录。由于这种缓存,客户端可能无法接收更改,直到生存时间(TTL)值过期为止。Identity Management(IdM)中的默认 TTL 值为 1 天。
如果您的客户端计算机在站点间漫游,您应该调整 IdM DNS 区的 TTL 值。将值设为比客户端在站点之间 roam 需要的时间值低。这样可确保客户端上缓存的 DNS 条目在重新连接到另一个站点之前过期,从而查询 DNS 服务器刷新特定于位置的 SRV 记录。
96.4. 使用 Ansible 确保存在 IdM 位置 复制链接链接已复制到粘贴板!
作为身份管理系统管理员(IdM),您可以配置 IdM DNS 位置,以允许客户端在最接近的网络基础架构中查找身份验证服务器。
以下流程描述了如何使用 Ansible playbook 来确保 IdM 中存在 DNS 位置。这个示例描述了如何确保 IdM 中存在 germany DNS 位置。因此,您可以将特定的 IdM 服务器分配给这个位置,以便本地 IdM 客户端可以使用它们来缩短服务器响应时间。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您了解 DNS 位置的部署注意事项。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 制作
/usr/share/doc/ansible-freeipa/playbooks/location/目录中location-present.yml文件的一个副本:cp /usr/share/doc/ansible-freeipa/playbooks/location/location-present.yml location-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/location/location-present.yml location-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
location-present-copy.ymlAnsible playbook 文件以进行编辑。 通过在
ipalocationtask 部分中设置以下变量来调整文件:-
调整任务的
name,使其与您的用例对应。 -
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为位置的名称。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
调整任务的
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory location-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory location-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
96.5. 使用 Ansible 确保缺少 IdM 位置 复制链接链接已复制到粘贴板!
作为身份管理系统管理员(IdM),您可以配置 IdM DNS 位置,以允许客户端在最接近的网络基础架构中查找身份验证服务器。
以下流程描述了如何使用 Ansible playbook 来确保 IdM 中没有 DNS 位置。这个示例描述了如何确保 IdM 中没有 germany DNS 位置。因此,您无法将特定的 IdM 服务器分配给这个位置,本地 IdM 客户端无法使用它们。
先决条件
- 您知道 IdM 管理员密码。
- 没有 IdM 服务器被分配给 germany DNS 位置。
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 示例假定您已 创建并配置了 ~/MyPlaybooks/ 目录,来作为存储示例 playbook 副本的中心位置。
流程
进入 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为
/usr/share/doc/ansible-freeipa/playbooks/location/目录中的location-absent.yml文件制作一个副本:cp /usr/share/doc/ansible-freeipa/playbooks/location/location-absent.yml location-absent-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/location/location-absent.yml location-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
location-absent-copy.ymlAnsible playbook 文件以进行编辑。 通过在
ipalocationtask 部分中设置以下变量来调整文件:-
调整任务的
name,使其与您的用例对应。 -
将
ipaadmin_password变量设置为 IdM 管理员的密码。 -
将
name变量设置为 DNS 位置的名称。 -
确保
state变量设置为absent。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
调整任务的
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory location-absent-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory location-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 97 章 在 IdM 中管理 DNS 转发 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible 在身份管理(IdM) Web UI、IdM CLI 中配置 DNS 全局转发器和 DNS 转发区域:
- IdM DNS 服务器的两个角色
- IdM 中的 DNS 转发策略
- 在 IdM Web UI 中添加全局转发器
- 在 CLI 中添加全局转发器
- 在 IdM Web UI 中添加 DNS 转发区域
- 在 CLI 中添加 DNS 转发区域
- 使用 Ansible 在 IdM 中建立 DNS 全局转发器
- 使用 Ansible 确保 IdM 中存在 DNS 全局转发器
- 使用 Ansible 确保 IdM 中没有 DNS 全局转发器
- 使用 Ansible 确保 DNS 全局转发器在 IdM 中被禁用
- 使用 Ansible 确保 IdM 中存在 DNS 转发区域
- 使用 Ansible 确保 DNS 转发区域 在 IdM 中有多个转发器
- 使用 Ansible 确保 IdM 中 DNS Forward 区域被禁用
- 使用 Ansible 确保 IdM 中没有 DNS 转发区域
97.1. IdM DNS 服务器的两个角色 复制链接链接已复制到粘贴板!
DNS 转发会影响 DNS 服务如何应答 DNS 查询。默认情况下,集成了 IdM 的 Berkeley Internet Name Domain (BIND) 作为一个 authoritative 和一个 recursive DNS 服务器:
- 权威 DNS 服务器
- 当 DNS 客户端查询属于 IdM 服务器具有权威的 DNS 区域的名称时,BIND 回复包含在配置区域中的数据。权威数据总是优先于任何其他数据。
- 递归 DNS 服务器
- 当 DNS 客户端查询 IdM 服务器不是权威的名称时,BIND 会尝试使用其他 DNS 服务器解析查询。如果未定义转发器,BIND 会询问 Internet 上的根服务器,并使用递归解析算法回答 DNS 查询。
在某些情况下,不需要让 BIND 直接联系其他 DNS 服务器,并根据 Internet 上可用的数据执行递归。您可以将 BIND 配置为使用另一个 DNS 服务器( 转发器 )来解析查询。
当您将 BIND 配置为使用转发器时,查询和答案将在 IdM 服务器和转发器之间来回转发,IdM 服务器充当非权威数据的 DNS 缓存。
97.2. IdM 中的 DNS 转发策略 复制链接链接已复制到粘贴板!
IdM 支持 第一个 且 唯一的 标准 BIND 转发策略,以及任何 IdM 特定的转发策略。
- 首先转发 (默认)
-
IdM BIND 服务将 DNS 查询转发到配置的转发器。如果因为服务器错误或超时查询失败,BIND 会使用 Internet 上的服务器回退到递归解析。
forward first策略是默认策略,它适合优化 DNS 流量。 - 仅转发
-
IdM BIND 服务将 DNS 查询转发到配置的转发器。如果因为服务器错误或超时查询失败,BIND 会向客户端返回错误。建议在带有分割 DNS 配置的环境中使用
forward only策略。 - none (转发禁用)
-
DNS 查询不会通过
none转发策略转发。禁用转发仅作为全局转发配置的特定区覆盖。这个选项等同于在 BIND 配置中指定空转发器列表。
您不能使用转发将 IdM 中的数据与其他 DNS 服务器的数据组合。您只能在 IdM DNS 中转发主区的查询。
默认情况下,如果查询的 DNS 名称属于 IdM 服务器具有权威的区域,BIND 服务不会将查询转发到另一服务器。在这种情况下,如果无法在 IdM 数据库中找到查询的 DNS 名称,则会返回 NXDOMAIN 回答。未使用转发。
例 97.1. 场景示例
IdM 服务器对 test.example 具有权威。DNS 区域.BIND 配置为将查询转发到 IP 地址 192.0.2.254 的 DNS 服务器。
客户端发送对 不存在.test.example的查询时。DNS 名称,BIND 检测到 IdM 服务器对 test.example. 区域具有权威,并且不会将查询转发到 192.0.2.254. 服务器。因此,DNS 客户端会收到 NXDomain 错误消息,通知用户查询的域不存在。
97.3. 在 IdM Web UI 中添加全局转发器 复制链接链接已复制到粘贴板!
按照以下流程,在身份管理(IdM) Web UI 中添加一个全局 DNS 转发器。
先决条件
- 以 IdM 管理员身份登录到 IdM WebUI。
- 您知道要将查询转发到的 DNS 服务器的 Internet 协议(IP)地址。
流程
在 IdM Web UI 中,选择
Network Services→DNS Global Configuration→DNS。在
DNS Global Configuration部分中,单击Add。指定将接收转发 DNS 查询的 DNS 服务器的 IP 地址。
选择
Forward policy。-
单击窗口顶部的
Save。
验证
选择
Network Services→DNS Global Configuration→DNS。验证 IdM Web UI 中是否存在并启用了带有您指定的 forward 策略的全局转发器。
97.4. 在 CLI 中添加全局转发器 复制链接链接已复制到粘贴板!
按照以下流程,使用命令行(CLI)添加一个全局 DNS 转发器。
先决条件
- 以 IdM 管理员身份登录。
- 您知道要将查询转发到的 DNS 服务器的 Internet 协议(IP)地址。
流程
使用
ipa dnsconfig-mod命令添加新的全局转发器。使用--forwarder选项指定 DNS 转发器的 IP 地址。ipa dnsconfig-mod --forwarder=10.10.0.1 Server will check DNS forwarder(s). This may take some time, please wait ... Global forwarders: 10.10.0.1 IPA DNS servers: server.example.com
[user@server ~]$ ipa dnsconfig-mod --forwarder=10.10.0.1 Server will check DNS forwarder(s). This may take some time, please wait ... Global forwarders: 10.10.0.1 IPA DNS servers: server.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用
dnsconfig-show命令显示全局转发器。ipa dnsconfig-show Global forwarders: 10.10.0.1 IPA DNS servers: server.example.com
[user@server ~]$ ipa dnsconfig-show Global forwarders: 10.10.0.1 IPA DNS servers: server.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
97.5. 在 IdM Web UI 中添加 DNS 转发区域 复制链接链接已复制到粘贴板!
按照以下流程,在身份管理(IdM) Web UI 中添加一个 DNS 转发区。
除非绝对需要,否则请不要使用转发区域。转发区域不是标准解决方案,使用它们可能会导致意外和有问题的行为。如果您必须使用 forward zone,限制使用它们覆盖全局转发配置。
在创建新 DNS 区域时,红帽建议您始终使用名称服务器(NS)记录和避免转发区域,始终使用标准 DNS 委派。在大多数情况下,使用全局转发器足够了,并且转发区不需要。
先决条件
- 以 IdM 管理员身份登录到 IdM WebUI。
- 您知道要将查询转发到的 DNS 服务器的 Internet 协议(IP)地址。
流程
在 IdM Web UI 中,选择
Network Services→DNS Forward Zones→DNS。在
DNS Forward Zones部分,点Add。在
Add DNS forward zone窗口中,指定 forward zone 名称。点击
Add按钮,并指定 DNS 服务器的 IP 地址来接收转发请求。您可以为每个转发区指定多个转发器。选择
Forward policy。-
单击窗口底部的
Add,以添加新的正向区域。
验证
在 IdM Web UI 中,选择
Network Services→DNS Forward Zones→DNS。验证您创建的 forward 区域(带有您指定的 forwarders 和 forward 策略)是否存在并在 IdM Web UI 中启用。
97.6. 在 CLI 中添加 DNS 转发区域 复制链接链接已复制到粘贴板!
按照以下流程,使用命令行(CLI)添加一个 DNS 转发区域。
除非绝对需要,否则请不要使用转发区域。转发区域不是标准解决方案,使用它们可能会导致意外和有问题的行为。如果您必须使用 forward zone,限制使用它们覆盖全局转发配置。
在创建新 DNS 区域时,红帽建议您始终使用名称服务器(NS)记录和避免转发区域,始终使用标准 DNS 委派。在大多数情况下,使用全局转发器足够了,并且转发区不需要。
先决条件
- 以 IdM 管理员身份登录。
- 您知道要将查询转发到的 DNS 服务器的 Internet 协议(IP)地址。
流程
使用
dnsforwardzone-add命令添加新的转发区域。如果转发策略不是none,则使用--forwarder选项至少指定一个转发器,并使用--forward-policy选项指定转发策略。ipa dnsforwardzone-add forward.example.com. --forwarder=10.10.0.14 --forwarder=10.10.1.15 --forward-policy=first Zone name: forward.example.com. Zone forwarders: 10.10.0.14, 10.10.1.15 Forward policy: first
[user@server ~]$ ipa dnsforwardzone-add forward.example.com. --forwarder=10.10.0.14 --forwarder=10.10.1.15 --forward-policy=first Zone name: forward.example.com. Zone forwarders: 10.10.0.14, 10.10.1.15 Forward policy: firstCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用
dnsforwardzone-show命令显示您刚才创建的 DNS 转发区域。ipa dnsforwardzone-show forward.example.com. Zone name: forward.example.com. Zone forwarders: 10.10.0.14, 10.10.1.15 Forward policy: first
[user@server ~]$ ipa dnsforwardzone-show forward.example.com. Zone name: forward.example.com. Zone forwarders: 10.10.0.14, 10.10.1.15 Forward policy: firstCopy to Clipboard Copied! Toggle word wrap Toggle overflow
97.7. 使用 Ansible 在 IdM 中建立 DNS 全局转发器 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 在 IdM 中建立一个 DNS 全局转发器。
在以下示例流程中,IdM 管理员创建了一个到互联网协议(IP)v4 地址为 8.8.6.6 和 IPv6 地址为 2001:4860:4860::8800 的 DNS 服务器,端口为 53 的 DNS 全局转发器。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 复制
set-configuration.ymlAnsible playbook 文件。例如:cp set-configuration.yml establish-global-forwarder.yml
$ cp set-configuration.yml establish-global-forwarder.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开 create
-global-forwarder.yml文件进行编辑。 通过设置以下变量来调整文件:
-
将 playbook
的 name变量更改为 Playbook,以在 IdM DNS 中建立全局转发器。 -
在
tasks部分中,更改任务的名称,来创建一个到 8.8.6.6 和 2001:4860:4860::8800 的 DNS 全局转发器。 在
ipadnsconfig部分的forwarders部分:-
将第一个
ip_address值更改为全局转发器的 IPv4 地址:8.8.6.6。 -
将第二个
ip_address值更改为全局转发器的 IPv6 地址:2001:4860:4860::8800。 -
验证
端口值是否已设置为53。
-
将第一个
将
forward_policy更改为first。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 playbook
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file establish-global-forwarder.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file establish-global-forwarder.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
97.8. 使用 Ansible 确保 IdM 中存在 DNS 全局转发器 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保 DNS 全局转发器在 IdM 中存在。在下例中,IdM 管理员确保在 DNS 服务器中存在一个到 IPv4 地址为 7.7.9.9,IP v6 地址为 2001:db8::1:0,端口 53 的 DNS global forwarder。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 制作
forwarders-absent.ymlAnsible playbook 文件的副本。例如:cp forwarders-absent.yml ensure-presence-of-a-global-forwarder.yml
$ cp forwarders-absent.yml ensure-presence-of-a-global-forwarder.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
ensure-presence-global-forwarder.yml文件进行编辑。 通过设置以下变量来调整文件:
-
将 playbook
的 name变量更改为 Playbook,以确保 IdM DNS 中存在全局转发器。 -
在
tasks部分中,更改任务的名称,以确保到端口 53上 7.7.9.9 和 2001:db8::1:0 的 DNS 全局转发器存在。 在
ipadnsconfig部分的forwarders部分:-
将第一个
ip_address值更改为全局转发器的 IPv4 地址:7.7.9.9。 -
将第二个
ip_address值更改为全局转发器的 IPv6 地址:2001:db8::1:0。 -
验证
端口值是否已设置为53。
-
将第一个
将
状态更改为present。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 playbook
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-presence-of-a-global-forwarder.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-presence-of-a-global-forwarder.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
97.9. 使用 Ansible 确保 IdM 中没有 DNS 全局转发器 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保 DNS 全局转发器在 IdM 中不存在。在以下示例流程中,IdM 管理员确保端口 53 上具有互联网协议(IP)v4 地址 8.8.6.6 和 IP v6 地址 2001:4860:4860::8800 的 DNS 全局转发器(IP)不存在。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 制作
forwarders-absent.ymlAnsible playbook 文件的副本。例如:cp forwarders-absent.yml ensure-absence-of-a-global-forwarder.yml
$ cp forwarders-absent.yml ensure-absence-of-a-global-forwarder.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
ensure-absence-of-a-global-forwarder.yml文件进行编辑。 通过设置以下变量来调整文件:
-
将 playbook
的 name变量更改为 Playbook,以确保 IdM DNS 中缺少全局转发器。 -
在
tasks部分中,更改任务的名称,以确保到 8.8.6.6 和 2001:4860:4860::8800 端口 53 的 DNS 全局转发器不存在。 在
ipadnsconfig部分的forwarders部分:-
将第一个
ip_address值更改为全局转发器的 IPv4 地址:8.8.6.6。 -
将第二个
ip_address值更改为全局转发器的 IPv6 地址:2001:4860:4860::8800。 -
验证
端口值是否已设置为53。
-
将第一个
-
将
action变量设置为member。 -
验证
state已设为absent。
对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要如果您仅在 playbook 中使用
state: absent选项,而不使用action: member,则 playbook 会失败。-
将 playbook
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-absence-of-a-global-forwarder.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-absence-of-a-global-forwarder.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
97.10. 使用 Ansible 确保 DNS 全局转发器在 IdM 中被禁用 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保 DNS 全局转发器在 IdM 中被禁用。在以下示例中,IdM 管理员确保将全局转发器的转发策略设置为 none,这样可有效地禁用全局转发器。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
disable-global-forwarders.ymlAnsible playbook 文件的内容,它已配置为禁用所有 DNS 全局转发器。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file disable-global-forwarders.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file disable-global-forwarders.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
97.11. 使用 Ansible 确保 IdM 中存在 DNS 转发区域 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保 DNS 转发区在 IdM 中存在。在以下示例中,IdM 管理员确保 example.com 的 DNS 转发区域存在到 Internet 协议(IP)地址为 8.8.8.8 的 DNS 服务器。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 制作
forwarders-absent.ymlAnsible playbook 文件的副本。例如:cp forwarders-absent.yml ensure-presence-forwardzone.yml
$ cp forwarders-absent.yml ensure-presence-forwardzone.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
ensure-presence-forwardzone.yml文件进行编辑。 通过设置以下变量来调整文件:
-
将 playbook
的 name变量更改为 Playbook,以确保 IdM DNS 中存在 dnsforwardzone。 -
在
tasks部分,更改任务的名称,来确保 example.com 到 8.8.8.8 的 dnsforwardzone 存在。 -
在
tasks部分中,将ipadnsconfig标题改为ipadnsforwardzone。 在
ipadnsforwardzone部分:-
添加
ipaadmin_password变量,并将其设置为 IdM 管理员密码。 -
添加
name变量,并将它设置为example.com。 在
forwarders部分中:-
删除
ip_address和port行。 通过在短划线后指定 DNS 服务器的 IP 地址来添加 DNS 服务器的 IP 地址以接收转发的请求:
- 8.8.8.8
- 8.8.8.8Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
删除
-
添加
forwardpolicy变量,并将它设为第一。 -
添加
skip_overlap_check变量,并将它设为true。 -
将
state变量更改为present。
对于当前示例为修改过的 Ansible playbook 文件:
-
添加
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 playbook
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-presence-forwardzone.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-presence-forwardzone.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
97.12. 使用 Ansible 确保 DNS 转发区域 在 IdM 中有多个转发器 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保 IdM 中的 DNS 转发区有多个转发器。在以下示例中,IdM 管理员确保 example .com 的 DNS 转发区转发到 8.8.8.8 和 4.4.4.4。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 制作
forwarders-absent.ymlAnsible playbook 文件的副本。例如:cp forwarders-absent.yml ensure-presence-multiple-forwarders.yml
$ cp forwarders-absent.yml ensure-presence-multiple-forwarders.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
ensure-presence-multiple-forwarders.yml文件进行编辑。 通过设置以下变量来调整文件:
-
将 playbook
的 name变量更改为 Playbook,以确保 IdM DNS 中的 dnsforwardzone 中存在多个转发器。 -
在
tasks部分,更改任务的名称,来确保 example.com 的 dnsforwardzone 中存在 8.8.8.8 和 4.4.4.4 转发器。 -
在
tasks部分中,将ipadnsconfig标题改为ipadnsforwardzone。 在
ipadnsforwardzone部分:-
添加
ipaadmin_password变量,并将其设置为 IdM 管理员密码。 -
添加
name变量,并将它设置为example.com。 在
forwarders部分中:-
删除
ip_address和port行。 添加您要确保的 DNS 服务器的 IP 地址,以短划线开头:
- 8.8.8.8 - 4.4.4.4
- 8.8.8.8 - 4.4.4.4Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
删除
- 将 state 变量更改为 present。
对于当前示例为修改过的 Ansible playbook 文件:
-
添加
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 playbook
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-presence-multiple-forwarders.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-presence-multiple-forwarders.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
97.13. 使用 Ansible 确保 IdM 中禁用了 DNS 转发区 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保 DNS 转发区在 IdM 中被禁用。在以下示例中,IdM 管理员确保 example.com 的 DNS 转发区被禁用。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 制作
forwarders-absent.ymlAnsible playbook 文件的副本。例如:cp forwarders-absent.yml ensure-disabled-forwardzone.yml
$ cp forwarders-absent.yml ensure-disabled-forwardzone.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
ensure-disabled-forwardzone.yml文件进行编辑。 通过设置以下变量来调整文件:
-
将 playbook
的 name变量更改为 Playbook,以确保在 IdM DNS 中禁用了 dnsforwardzone。 -
在
tasks部分中,更改任务的名称,来确保 example.com 的 dnsforwardzone 被禁用。 -
在
tasks部分中,将ipadnsconfig标题改为ipadnsforwardzone。 在
ipadnsforwardzone部分:-
添加
ipaadmin_password变量,并将其设置为 IdM 管理员密码。 -
添加
name变量,并将它设置为example.com。 -
删除整个
forwarders部分。 -
将
state变量更改为disabled。
对于当前示例为修改过的 Ansible playbook 文件:
-
添加
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 playbook
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-disabled-forwardzone.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-disabled-forwardzone.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
97.14. 使用 Ansible 确保 IdM 中没有 DNS 转发区域 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保 DNS 转发区在 IdM 中不存在。在以下示例中,IdM 管理员确保 example.com 缺少 DNS 转发区。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 制作
forwarders-absent.ymlAnsible playbook 文件的副本。例如:cp forwarders-absent.yml ensure-absence-forwardzone.yml
$ cp forwarders-absent.yml ensure-absence-forwardzone.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
ensure-absence-forwardzone.yml文件进行编辑。 通过设置以下变量来调整文件:
-
将 playbook
的 name变量更改为 Playbook,以确保 IdM DNS 中没有 dnsforwardzone。 -
在
tasks部分中,更改任务的名称,来确保 example.com 的 dnsforwardzone 不存在。 -
在
tasks部分中,将ipadnsconfig标题改为ipadnsforwardzone。 在
ipadnsforwardzone部分:-
添加
ipaadmin_password变量,并将其设置为 IdM 管理员密码。 -
添加
name变量,并将它设置为example.com。 -
删除整个
forwarders部分。 -
将
state变量保留为absent。
对于当前示例为修改过的 Ansible playbook 文件:
-
添加
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 playbook
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-absence-forwardzone.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-absence-forwardzone.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 98 章 在 IdM 中管理 DNS 记录 复制链接链接已复制到粘贴板!
本章论述了如何在身份管理(IdM)中管理 DNS 记录。作为 IdM 管理员,您可以在 IdM 中添加、修改和删除 DNS 记录。
先决条件
您的 IdM 部署包含一个集成的 DNS 服务器。有关如何使用集成 DNS 安装 IdM 的详情,请查看以下链接之一:
98.1. IdM 中的 DNS 记录 复制链接链接已复制到粘贴板!
身份管理(IdM)支持许多不同的 DNS 记录类型。以下 4 个是最常用的:
- A
这是主机名和 IPv4 地址的基本映射。A 记录的记录名称是主机名,如
www。A 记录的IP Address值是一个 IPv4 地址,如192.0.2.1。有关 A 记录的更多信息,请参阅 RFC 1035。
- AAAA
这是主机名和 IPv6 地址的基本映射。AAAA 记录的记录名称是主机名,如
www。IP Address值是一个 IPv6 地址,如2001:DB8::1111。有关 AAAA 记录的更多信息,请参阅 RFC 3596。
- SRV
服务(SRV)资源记录将服务名称映射到 提供该特定服务的服务器的 DNS 名称。例如,此记录类型可将 LDAP 目录等服务映射到管理此目录的服务器。
SRV 记录的记录名称格式为
_service. _protocol,如_ldap._tcp。SRV 记录的配置选项包括目标服务的优先级、权重、端口号和主机名。有关 SRV 记录的详情请参考 RFC 2782。
- PTR
指针记录(PTR)添加反向 DNS 记录,它将 IP 地址映射到域名。
注意IPv4 地址的所有反向 DNS 查找都使用在
in-addr.arpa.域中定义的反向条目。反向地址(人类可读形式)与常规 IP 地址正好相反,其中in-addr.arpa.域附加到该地址。例如,对于网络地址192.0.2.0/24,反向区域为2.0.192.in-addr.arpa。PTR 的记录名称必须采用 RFC 1035 中指定的标准格式,以 RFC 23 17 和 RFC 3596 扩展。主机名值必须是您要为其创建记录的主机的规范主机名。
注意也可以为 IPv6 地址配置反向区域,包括.
ip6.arpa.域中的区域。有关 IPv6 反向区的更多信息,请参阅 RFC 3596。
添加 DNS 资源记录时,请注意很多记录需要不同的数据。例如,CNAME 记录需要主机名,而 A 记录则需要 IP 地址。在 IdM Web UI 中,用于添加新记录的表单中的字段会自动更新,以反映当前所选记录类型所需的数据。
98.2. 在 IdM Web UI 中添加 DNS 资源记录 复制链接链接已复制到粘贴板!
按照以下流程,在 Identity Management (IdM) Web UI 中添加 DNS 资源记录。
先决条件
- 要添加 DNS 记录的 DNS 区域存在,并由 IdM 管理。有关在 IdM DNS 中创建 DNS 区域的更多信息,请参阅在 IdM 中管理 DNS 区。
- 以 IdM 管理员身份登录。
步骤
-
在 IdM Web UI 中,点击
Network Services→DNS→DNS Zones。 - 点击您要添加 DNS 记录的 DNS 区域。
在
DNS Resource Records部分,点 来添加新记录。图 98.1. 添加新 DNS 资源记录
选择要创建的记录类型,并根据需要填写其他字段。
图 98.2. 定义新的 DNS 资源记录
- 单击 以确认新记录。
98.3. 从 IdM CLI 添加 DNS 资源记录 复制链接链接已复制到粘贴板!
按照以下步骤,从命令行(CLI)添加任何类型的 DNS 资源记录。
先决条件
- 您要添加 DNS 记录的 DNS 区域存在。有关在 IdM DNS 中创建 DNS 区域的更多信息,请参阅在 IdM 中管理 DNS 区。
- 以 IdM 管理员身份登录。
步骤
要添加 DNS 资源记录,请使用
ipa dnsrecord-add命令。该命令采用以下语法:ipa dnsrecord-add zone_name record_name --record_type_option=data
$ ipa dnsrecord-add zone_name record_name --record_type_option=dataCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在以上命令中:
- zone_name 是正在向其添加记录的 DNS 区域的名称。
- record_name 是新 DNS 资源记录的标识符。
例如,要将 host1 的 A 类型 DNS 记录添加到 idm.example.com 区域,请输入:
ipa dnsrecord-add idm.example.com host1 --a-rec=192.168.122.123
$ ipa dnsrecord-add idm.example.com host1 --a-rec=192.168.122.123Copy to Clipboard Copied! Toggle word wrap Toggle overflow
98.4. Common ipa dnsrecord-* 选项 复制链接链接已复制到粘贴板!
在身份管理(IdM)中添加、修改和删除最常见的 DNS 资源记录类型时,您可以使用以下选项:
- A (IPv4)
- AAAA (IPv6)
- SRV
- PTR
在 Bash 中,您可以通过在大括号内列出逗号分隔列表中的值来定义多个条目,如 --option={val1,val2,val3}。
| 选项 | 描述 |
|---|---|
|
| 为记录设置生存时间。 |
|
| 解析原始 DNS 记录,并以结构化格式返回它们。 |
| 选项 | 描述 | 示例 |
|---|---|---|
|
| 传递单个 A 记录或 A 记录列表. |
|
| 可以使用给定 IP 地址创建通配符 A 记录. |
| |
|
|
提供 记录的 IP 地址。在创建记录时,指定 |
|
[a]
这个示例创建了一个通配符 A 记录,其 IP 地址为 192.0.2.123。
| ||
| 选项 | 描述 | 示例 |
|---|---|---|
|
| 传递单个 AAAA(IPv6)记录或 AAAA 记录列表。 |
|
|
|
提供 记录的 IPv6 地址。在创建记录时,指定 |
|
| 选项 | 描述 | 示例 |
|---|---|---|
|
|
传递单个 PTR 记录或 PTR 记录列表。添加反向 DNS 记录时,与添加其他 DNS 记录的用法不同,与 |
|
|
| ||
|
| 提供记录的主机名。 |
| 选项 | 描述 | 示例 |
|---|---|---|
|
|
传递单个 SRV 记录或 SRV 记录列表。在右侧的示例中,_ ldap._tcp 定义 SRV 记录的服务类型和连接协议。 |
|
|
| ||
|
| 设置记录的优先级。某一服务类型可以有多个 SRV 记录。优先级(0 - 65535)设置记录的排名;数值越低,优先级越高。服务必须首先使用优先级最高的记录。 |
|
|
| 设置记录的权重。这有助于确定优先级相同的 SRV 记录的顺序。集合权重应加到 100,代表使用特定记录的可能性(百分比)。 |
|
|
| 指定目标主机上 服务的端口。 |
|
|
| 指定目标主机的域名。如果域中的服务不可用,这可以是单个句点(.)。 |
98.5. 在 IdM Web UI 中删除 DNS 记录 复制链接链接已复制到粘贴板!
按照以下流程,使用 IdM Web UI 在身份管理(IdM)中删除 DNS 记录。
先决条件
- 以 IdM 管理员身份登录。
步骤
-
在 IdM Web UI 中,点击
Network Services→DNS→DNS Zones。 - 单击您要从中删除 DNS 记录的区域,如 example.com。
在
DNS Resource Records部分,点击资源记录的名称。图 98.3. 选择 DNS 资源记录
- 按要删除的记录类型的名称选择复选框。
点
Delete。图 98.4. 删除 DNS 资源记录
现在,所选的记录类型已被删除。资源记录的其他配置保持不变。
98.6. 在 IdM Web UI 中删除整个 DNS 记录 复制链接链接已复制到粘贴板!
按照以下流程,使用 Identity Management (IdM) Web UI 删除区域中特定资源的所有记录。
先决条件
- 以 IdM 管理员身份登录。
步骤
-
在 IdM Web UI 中,点击
Network Services→DNS→DNS Zones。 - 单击您要从中删除 DNS 记录的区域,如 zone.example.com。
-
在
DNS Resource Records部分,选中要删除的资源记录的复选框。 点。
图 98.5. 删除 Entire 资源记录
现在,整个资源记录已被删除。
98.7. 删除 IdM CLI 中的 DNS 记录 复制链接链接已复制到粘贴板!
按照以下流程,从身份管理(IdM) DNS 管理的区中删除 DNS 记录。
先决条件
- 以 IdM 管理员身份登录。
步骤
要从区中删除记录,请使用
ipa dnsrecord-del命令,并将--recordType-rec选项与记录值一起添加。例如,要删除 A 类型记录:ipa dnsrecord-del example.com www --a-rec 192.0.2.1
$ ipa dnsrecord-del example.com www --a-rec 192.0.2.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您在没有任何选项的情况下运行
ipa dnsrecord-del,该命令会提示输入要删除的记录的信息。请注意,通过 命令传递--del-all选项将删除区域的所有相关记录。
第 99 章 在使用外部 DNS 时,系统地更新 DNS 记录 复制链接链接已复制到粘贴板!
使用外部 DNS 时,身份管理(IdM)不会在拓扑更改后自动更新 DNS 记录。您可以系统地更新由外部 DNS 服务管理的 DNS 记录,这减少了手动 DNS 更新的需要。
更新 DNS 记录会删除旧的或无效的 DNS 记录,并添加新记录。您必须在拓扑更改后更新 DNS 记录,例如:
- 安装或卸载副本后
- 在 IdM 服务器上安装 CA、DNS、KRA 或活动目录信任后
99.1. 使用 GUI 更新外部 DNS 记录 复制链接链接已复制到粘贴板!
如果您对拓扑进行了任何更改,则必须使用外部 DNS GUI 更新外部 DNS 记录。
流程
显示您必须更新的记录:
ipa dns-update-system-records --dry-run IPA DNS records: _kerberos-master._tcp.example.com. 86400 IN SRV 0 100 88 ipa.example.com. _kerberos-master._udp.example.com. 86400 IN SRV 0 100 88 ipa.example.com. [... output truncated ...]
$ ipa dns-update-system-records --dry-run IPA DNS records: _kerberos-master._tcp.example.com. 86400 IN SRV 0 100 88 ipa.example.com. _kerberos-master._udp.example.com. 86400 IN SRV 0 100 88 ipa.example.com. [... output truncated ...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用外部 DNS GUI 更新记录。
99.2. 使用 nsupdate 更新外部 DNS 记录 复制链接链接已复制到粘贴板!
您可以使用 nsupdate 工具更新外部 DNS 记录。您还可以将命令添加到脚本中来自动化过程。要使用 nsupdate 工具更新,您需要生成一个带有 DNS 记录的文件,然后继续发送一个使用 TSIG 保护的 nsupdate 请求,或者发送一个使用 GSS-TSIG 保护的 nsupdate 请求。
流程
要为
nsupdate 生成一个带有 DNS 记录的文件,请使用 'ipa dns-update-system-records --dry-run命令及--out选项。--out选项指定要生成的文件的路径:ipa dns-update-system-records --dry-run --out dns_records_file.nsupdate IPA DNS records: _kerberos-master._tcp.example.com. 86400 IN SRV 0 100 88 ipa.example.com. _kerberos-master._udp.example.com. 86400 IN SRV 0 100 88 ipa.example.com. [... output truncated ...]
$ ipa dns-update-system-records --dry-run --out dns_records_file.nsupdate IPA DNS records: _kerberos-master._tcp.example.com. 86400 IN SRV 0 100 88 ipa.example.com. _kerberos-master._udp.example.com. 86400 IN SRV 0 100 88 ipa.example.com. [... output truncated ...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成的文件包含所需的、
nsupdate工具接受的格式的 DNS 记录。生成的记录依赖于:
- 其中记录要被更新的区域的自动检测。
区域的权威服务器的自动检测。
如果您使用一个非典型的 DNS 设置,或者如果缺少区域委派,则
nsupdate可能无法找到正确的区域和服务器。在这种情况下,在生成的文件的开头添加以下选项:-
server:指定nsupdate向其发送记录的服务器名称或权威 DNS 服务器的端口。 zone:指定nsupdate放置记录的区域的名称。例 99.1. 生成的记录
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
99.3. 发送一个使用 TSIG 保护的 nsupdate 请求 复制链接链接已复制到粘贴板!
当使用 nsupdate 发送请求时,确保对其进行了正确保护。事务签名(TSIG)可以让您将 nsupdate 与共享密钥一起使用。
先决条件
- 您必须为 TSIG 配置您的 DNS 服务器。
- DNS 服务器及其客户端必须有共享的密钥。
流程
运行
nsupdate命令,并使用以下这些选项之一提供共享 secret:-k提供 TSIG 身份验证密钥:nsupdate -k tsig_key.file dns_records_file.nsupdate
$ nsupdate -k tsig_key.file dns_records_file.nsupdateCopy to Clipboard Copied! Toggle word wrap Toggle overflow -y从密钥名称和以 Base64 编码的共享 secret 生成签名:nsupdate -y algorithm:keyname:secret dns_records_file.nsupdate
$ nsupdate -y algorithm:keyname:secret dns_records_file.nsupdateCopy to Clipboard Copied! Toggle word wrap Toggle overflow
99.4. 发送一个使用 GSS-TSIG 保护的 nsupdate 请求 复制链接链接已复制到粘贴板!
当使用 nsupdate 发送请求时,确保对其进行了正确保护。GSS-TSIG 使用 GSS-API 接口来获取 secret TSIG 密钥。GSS-TSIG 是 TSIG 协议的一种扩展。
先决条件
- 必须为 GSS-TSIG 配置您的 DNS 服务器。
此流程假设 Kerberos V5 协议用作 GSS-API 的技术。
流程
使用允许更新记录的主体进行身份验证:
kinit principal_allowed_to_update_records@REALM
$ kinit principal_allowed_to_update_records@REALMCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
-g选项运行nsupdate,以启用 GSS-TSIG 模式:nsupdate -g dns_records_file.nsupdate
$ nsupdate -g dns_records_file.nsupdateCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 100 章 使用 Ansible 管理 IdM 中的 DNS 记录 复制链接链接已复制到粘贴板!
本章论述了如何使用 Ansible playbook 管理身份管理(IdM)中的 DNS 记录。作为 IdM 管理员,您可以在 IdM 中添加、修改和删除 DNS 记录。本章包含以下部分:
100.1. IdM 中的 DNS 记录 复制链接链接已复制到粘贴板!
身份管理(IdM)支持许多不同的 DNS 记录类型。以下 4 个是最常用的:
- A
这是主机名和 IPv4 地址的基本映射。A 记录的记录名称是主机名,如
www。A 记录的IP Address值是一个 IPv4 地址,如192.0.2.1。有关 A 记录的更多信息,请参阅 RFC 1035。
- AAAA
这是主机名和 IPv6 地址的基本映射。AAAA 记录的记录名称是主机名,如
www。IP Address值是一个 IPv6 地址,如2001:DB8::1111。有关 AAAA 记录的更多信息,请参阅 RFC 3596。
- SRV
服务(SRV)资源记录将服务名称映射到 提供该特定服务的服务器的 DNS 名称。例如,此记录类型可将 LDAP 目录等服务映射到管理此目录的服务器。
SRV 记录的记录名称格式为
_service. _protocol,如_ldap._tcp。SRV 记录的配置选项包括目标服务的优先级、权重、端口号和主机名。有关 SRV 记录的详情请参考 RFC 2782。
- PTR
指针记录(PTR)添加反向 DNS 记录,它将 IP 地址映射到域名。
注意IPv4 地址的所有反向 DNS 查找都使用在
in-addr.arpa.域中定义的反向条目。反向地址(人类可读形式)与常规 IP 地址正好相反,其中in-addr.arpa.域附加到该地址。例如,对于网络地址192.0.2.0/24,反向区域为2.0.192.in-addr.arpa。PTR 的记录名称必须采用 RFC 1035 中指定的标准格式,以 RFC 23 17 和 RFC 3596 扩展。主机名值必须是您要为其创建记录的主机的规范主机名。
注意也可以为 IPv6 地址配置反向区域,包括.
ip6.arpa.域中的区域。有关 IPv6 反向区的更多信息,请参阅 RFC 3596。
添加 DNS 资源记录时,请注意很多记录需要不同的数据。例如,CNAME 记录需要主机名,而 A 记录则需要 IP 地址。在 IdM Web UI 中,用于添加新记录的表单中的字段会自动更新,以反映当前所选记录类型所需的数据。
100.2. Common ipa dnsrecord-* 选项 复制链接链接已复制到粘贴板!
在身份管理(IdM)中添加、修改和删除最常见的 DNS 资源记录类型时,您可以使用以下选项:
- A (IPv4)
- AAAA (IPv6)
- SRV
- PTR
在 Bash 中,您可以通过在大括号内列出逗号分隔列表中的值来定义多个条目,如 --option={val1,val2,val3}。
| 选项 | 描述 |
|---|---|
|
| 为记录设置生存时间。 |
|
| 解析原始 DNS 记录,并以结构化格式返回它们。 |
| 选项 | 描述 | 示例 |
|---|---|---|
|
| 传递单个 A 记录或 A 记录列表. |
|
| 可以使用给定 IP 地址创建通配符 A 记录. |
| |
|
|
提供 记录的 IP 地址。在创建记录时,指定 |
|
[a]
这个示例创建了一个通配符 A 记录,其 IP 地址为 192.0.2.123。
| ||
| 选项 | 描述 | 示例 |
|---|---|---|
|
| 传递单个 AAAA(IPv6)记录或 AAAA 记录列表。 |
|
|
|
提供 记录的 IPv6 地址。在创建记录时,指定 |
|
| 选项 | 描述 | 示例 |
|---|---|---|
|
|
传递单个 PTR 记录或 PTR 记录列表。添加反向 DNS 记录时,与添加其他 DNS 记录的用法不同,与 |
|
|
| ||
|
| 提供记录的主机名。 |
| 选项 | 描述 | 示例 |
|---|---|---|
|
|
传递单个 SRV 记录或 SRV 记录列表。在右侧的示例中,_ ldap._tcp 定义 SRV 记录的服务类型和连接协议。 |
|
|
| ||
|
| 设置记录的优先级。某一服务类型可以有多个 SRV 记录。优先级(0 - 65535)设置记录的排名;数值越低,优先级越高。服务必须首先使用优先级最高的记录。 |
|
|
| 设置记录的权重。这有助于确定优先级相同的 SRV 记录的顺序。集合权重应加到 100,代表使用特定记录的可能性(百分比)。 |
|
|
| 指定目标主机上 服务的端口。 |
|
|
| 指定目标主机的域名。如果域中的服务不可用,这可以是单个句点(.)。 |
100.3. 确保使用 Ansible 在 IdM 中存在 A 和 AAAA DNS 记录 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保特定 IdM 主机的 A 和 AAAA 记录存在。在下面的示例中,IdM 管理员确保 idm.example.com DNS 区域中存在 host1 的 A 和 AAAA 记录。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
- idm.example.com 区域存在,并由 IdM DNS 管理。有关在 IdM DNS 中添加主 DNS 区域的更多信息,请参阅使用 Ansible playbook 管理 IdM DNS 区域。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsrecord目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnsrecord
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsrecordCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 ensure-A- and-AAAA-records-are-present.yml Ansible playbook 文件的副本。例如:
cp ensure-A-and-AAAA-records-are-present.yml ensure-A-and-AAAA-records-are-present-copy.yml
$ cp ensure-A-and-AAAA-records-are-present.yml ensure-A-and-AAAA-records-are-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 ensure-A-and-AAAA-records-are-present-copy.yml 文件以进行编辑。
通过在
ipadnsrecord任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员密码。 -
将
zone_name变量设置为 idm.example.com。 -
在
records变量中,将name变量设置为 host1,并将a_ip_address变量设置为 192.168.122.123。 在
records变量中,将name变量设置为 host1,并将aaaa_ip_address变量设置为 ::1。这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-A-and-AAAA-records-are-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-A-and-AAAA-records-are-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
100.4. 确保使用 Ansible 在 IdM 中存在 A 和 PTR DNS 记录 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保特定 IdM 主机的 A 记录存在,且有相应的 PTR 记录。在以下流程中使用的示例中,IdM 管理员确保在 idm.example.com 区域中存在 IP 地址为 192.168.122.45 的 host1 的 A 和 PTR 记录。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
- idm.example.com DNS 区域存在,并由 IdM DNS 管理。有关在 IdM DNS 中添加主 DNS 区域的更多信息,请参阅使用 Ansible playbook 管理 IdM DNS 区域。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsrecord目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnsrecord
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsrecordCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 ensure-dnsrecord-with-reverse-is-present.yml Ansible playbook 文件的副本。例如:
cp ensure-dnsrecord-with-reverse-is-present.yml ensure-dnsrecord-with-reverse-is-present-copy.yml
$ cp ensure-dnsrecord-with-reverse-is-present.yml ensure-dnsrecord-with-reverse-is-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 ensure-dnsrecord-with-reverse-is-present-copy.yml 文件以进行编辑。
通过在
ipadnsrecord任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员密码。 -
将
name变量设置为 host1。 -
将
zone_name变量设置为 idm.example.com。 -
将
ip_address变量设置为 192.168.122.45。 将
create_reverse变量设置为 true。这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-dnsrecord-with-reverse-is-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-dnsrecord-with-reverse-is-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
100.5. 确保使用 Ansible 在 IdM 中存在多个 DNS 记录 复制链接链接已复制到粘贴板!
按照以下流程,使用 Ansible playbook 确保多个值与特定 IdM DNS 记录相关联。在以下流程中使用的示例中,IdM 管理员确保 idm.example.com DNS 区域中存在 host1 的多个 A 记录。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
- idm.example.com 区域存在,并由 IdM DNS 管理。有关在 IdM DNS 中添加主 DNS 区域的更多信息,请参阅使用 Ansible playbook 管理 IdM DNS 区域。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsrecord目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnsrecord
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsrecordCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 ensure-presence-multiple-records.yml Ansible playbook 文件的副本。例如:
cp ensure-presence-multiple-records.yml ensure-presence-multiple-records-copy.yml
$ cp ensure-presence-multiple-records.yml ensure-presence-multiple-records-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 ensure-presence-multiple-records-copy.yml 文件进行编辑。
通过在
ipadnsrecord任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员密码。 -
在
records部分中,将name变量设置为 host1。 -
在
records部分中,将zone_name变量设置为 idm.example.com。 -
在
records部分中,将a_rec变量设置为 192.168.122.112,并将 192.168.122.1 22 设为 192.168.122.122。 在
records部分中定义第二个记录:-
将
name变量设置为 host1。 -
将
zone_name变量设置为 idm.example.com。 -
将
aaaa_rec变量设置为 ::1。
这是当前示例修改的 Ansible playbook 文件:
-
将
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-presence-multiple-records-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-presence-multiple-records-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
100.6. 确保使用 Ansible 在 IdM 中存在多个 CNAME 记录 复制链接链接已复制到粘贴板!
Canonical Name 记录(CNAME 记录)是在域名系统(DNS)中一种资源记录类型,用于将一个域名、别名映射到另一个名称,即规范名称。
从单个 IP 地址运行多个服务时,您可能会发现 CNAME 记录很有用:例如,FTP 服务和 Web 服务,每个服务在不同端口上运行。
按照以下流程,使用 Ansible playbook 确保多个 CNAME 记录在 IdM DNS 中存在。在以下步骤中使用的示例中,host03 同时是 HTTP 服务器和 FTP 服务器。IdM 管理员确保在 idm.example.com 区域中存在 host03 A 记录的 www 和 ftp CNAME 记录。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
- idm.example.com 区域存在,并由 IdM DNS 管理。有关在 IdM DNS 中添加主 DNS 区域的更多信息,请参阅使用 Ansible playbook 管理 IdM DNS 区域。
- host03 A 记录存在于 idm.example.com 区域中。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsrecord目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnsrecord
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsrecordCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 ensure-CNAME-record-is-present.yml Ansible playbook 文件的副本。例如:
cp ensure-CNAME-record-is-present.yml ensure-CNAME-record-is-present-copy.yml
$ cp ensure-CNAME-record-is-present.yml ensure-CNAME-record-is-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 ensure-CNAME-record-is-present-copy.yml 文件进行编辑。
通过在
ipadnsrecord任务部分设置以下变量来调整文件:-
可选:调整 play 的
名称提供的描述。 -
将
ipaadmin_password变量设置为 IdM 管理员密码。 -
将
zone_name变量设置为 idm.example.com。 在 Record
变量部分中,设置以下变量和值:-
将
name变量设置为 www。 -
将
cname_hostname变量设置为 host03。 -
将
name变量设置为 ftp。 -
将
cname_hostname变量设置为 host03。
这是当前示例修改的 Ansible playbook 文件:
-
将
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
可选:调整 play 的
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-CNAME-record-is-present.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-CNAME-record-is-present.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
100.7. 使用 Ansible 在 IdM 中存在 SRV 记录 复制链接链接已复制到粘贴板!
DNS 服务 (SRV) 记录定义域中可用服务的主机名、端口号、传输协议、优先级和权重。在 Identity Management(IdM)中,您可以使用 SRV 记录来定位 IdM 服务器和副本。
按照以下流程,使用 Ansible playbook 确保 SRV 记录在 IdM DNS 中存在。在以下示例中,IdM 管理员可确保存在 _kerberos._udp.idm.example.com SRV 记录,其值为 10 50 88 idm.example.com。这会设置以下值:
- 它将服务的优先级设置为 10。
- 它将服务的权重设置为 50。
- 它将服务要使用的端口设置为 88。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - 您知道 IdM 管理员密码。
- idm.example.com 区域存在,并由 IdM DNS 管理。有关在 IdM DNS 中添加主 DNS 区域的更多信息,请参阅使用 Ansible playbook 管理 IdM DNS 区域。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsrecord目录:cd /usr/share/doc/ansible-freeipa/playbooks/dnsrecord
$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsrecordCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开清单文件,并确保
[ipaserver]部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
[ipaserver] server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 ensure-SRV-record-is-present.yml Ansible playbook 文件的副本。例如:
cp ensure-SRV-record-is-present.yml ensure-SRV-record-is-present-copy.yml
$ cp ensure-SRV-record-is-present.yml ensure-SRV-record-is-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开 ensure-SRV-record-is-present-copy.yml 文件进行编辑。
通过在
ipadnsrecord任务部分设置以下变量来调整文件:-
将
ipaadmin_password变量设置为 IdM 管理员密码。 -
将
name变量设置为 _kerberos._udp.idm.example.com。 -
将
srv_rec变量设置为 '10 50 88 idm.example.com'。 将
zone_name变量设置为 idm.example.com。对于当前示例为修改过的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
- 保存这个文件。
运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-SRV-record-is-present.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory.file ensure-SRV-record-is-present.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 101 章 使用 Ansible 管理 IdM 服务器 复制链接链接已复制到粘贴板!
您可以使用 Red Hat Ansible Engine 来管理身份管理(IdM)拓扑中的服务器。您可以使用 ansible-freeipa 软件包中的 server 模块来检查 IdM 拓扑中是否存在服务器。您还可以隐藏任何副本或使副本可见。
这部分包含以下主题:
101.1. 使用 Ansible 检查 IdM 服务器是否存在 复制链接链接已复制到粘贴板!
您可以在 Ansible playbook 中使用 ipaserver ansible-freeipa 模块来验证是否存在身份管理(IdM)服务器。
ipaserver Ansible 模块不会安装 IdM 服务器。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。-
清单文件中定义的从控制节点到 IdM 服务器的
SSH连接工作正常。
-
清单文件中定义的从控制节点到 IdM 服务器的
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制位于
/usr/share/doc/ansible-freeipa/playbooks/server/目录中的server-present.ymlAnsible playbook 文件:cp /usr/share/doc/ansible-freeipa/playbooks/server/server-present.yml server-present-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-present.yml server-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
server-present-copy.yml文件进行编辑。 通过在
ipaserver任务部分中设置以下变量来调整文件,并保存文件:-
将
ipaadmin_password变量设为 IdMadmin的密码。 -
将
name变量设为服务器的FQDN。示例服务器的FQDN是 server123.idm.example.com。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
运行 Ansible playbook ,并指定 playbook 文件和清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory server-present-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory server-present-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
101.2. 使用 Ansible 确保 IdM 拓扑中没有 IdM 服务器 复制链接链接已复制到粘贴板!
使用 Ansible playbook 确保 IdM 拓扑中不存在身份管理(IdM)服务器,即使作为主机也不存在。
与 ansible-freeipa ipaserver 角色不同,此 playbook 中使用的 ipaserver 模块不会从服务器卸载 IdM 服务。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。-
清单文件中定义的从控制节点到 IdM 服务器的
SSH连接工作正常。
-
清单文件中定义的从控制节点到 IdM 服务器的
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制位于
/usr/share/doc/ansible-freeipa/playbooks/server/目录中的server-absent.ymlAnsible playbook 文件:cp /usr/share/doc/ansible-freeipa/playbooks/server/server-absent.yml server-absent-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-absent.yml server-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
server-absent-copy.yml文件进行编辑。 通过在
ipaserver任务部分中设置以下变量来调整文件,并保存文件:-
将
ipaadmin_password变量设为 IdMadmin的密码。 -
将
name变量设为服务器的FQDN。示例服务器的FQDN是 server123.idm.example.com。 -
确保
state变量设置为absent。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
运行 Ansible playbook ,并指定 playbook 文件和清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory server-absent-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory server-absent-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 确保指向 server123.idm.example.com 的所有名称服务器(NS)DNS 记录都已从 DNS 区域中删除。无论您使用由 IdM 还是外部 DNS 管理的集成 DNS,这个均适用。
101.3. 确保尽管拥有最后一个 IdM 服务器角色,也不存在 IdM 服务器 复制链接链接已复制到粘贴板!
您可以使用 Ansible 来确保没有身份管理(IdM)服务器,即使最后一个 IdM 服务实例正在服务器上运行。证书颁发机构(CA)、密钥恢复机构(KRA)或 DNS 服务器都是 IdM 服务的示例。
如果您删除了作为 CA、KRA 或 DNS 服务器的最后一台服务器,会严重破坏 IdM 功能。您可以使用 ipa service-find 命令手动检查哪些服务运行在哪些 IdM 服务器上。CA 服务器的主要名称为 dogtag/server_name/REALM_NAME。
与 ansible-freeipa ipaserver 角色不同,此 playbook 中使用的 ipaserver 模块不会从服务器卸载 IdM 服务。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。-
清单文件中定义的从控制节点到 IdM 服务器的
SSH连接工作正常。
-
清单文件中定义的从控制节点到 IdM 服务器的
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制位于
/usr/share/doc/ansible-freeipa/playbooks/server/目录中的server-absent-ignore-last-of-role.ymlAnsible playbook 文件:cp /usr/share/doc/ansible-freeipa/playbooks/server/server-absent-ignore-last-of-role.yml server-absent-ignore-last-of-role-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-absent-ignore-last-of-role.yml server-absent-ignore-last-of-role-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
server-absent-ignore-last-of-role-copy.yml文件进行编辑。 通过在
ipaserver任务部分中设置以下变量来调整文件,并保存文件:-
将
ipaadmin_password变量设为 IdMadmin的密码。 -
将
name变量设为服务器的FQDN。示例服务器的FQDN是 server123.idm.example.com。 -
确保
ignore_last_of_role变量被设为true。 -
将
state变量设置为absent。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
运行 Ansible playbook ,并指定 playbook 文件和清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory server-absent-ignore-last-of-role-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory server-absent-ignore-last-of-role-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 确保指向 server123.idm.example.com 的所有名称服务器(NS)DNS 记录已从 DNS 区域中删除。无论您使用由 IdM 还是外部 DNS 管理的集成 DNS,这个均适用。
101.4. 确保 IdM 服务器不存在,但不一定与其他 IdM 服务器断开连接 复制链接链接已复制到粘贴板!
如果要从拓扑中删除身份管理(IdM)服务器,您可以使用 Ansible playbook 使其复制协议保持不变。playbook 还确保 IdM 服务器在 IdM 中不存在,即使作为主机也是如此。
仅当其他服务器是您计划删除的工作不正常的服务器时,才建议在删除时忽略服务器的复制协议。删除拓扑中作为中心点的服务器会将拓扑分成两个断开连接的集群。
您可以使用 ipa server-del 命令从拓扑中删除工作不正常的服务器。
如果删除了作为证书颁发机构(CA)、密钥恢复机构(KRA)或 DNS 服务器的最后一台服务器,将会严重破坏身份管理(IdM)功能。为防止此问题,playbook 在卸载充当 CA、KRA 或 DNS 服务器的服务器之前,确保这些服务运行在域中的另一台服务器上。
与 ansible-freeipa ipaserver 角色不同,此 playbook 中使用的 ipaserver 模块不会从服务器卸载 IdM 服务。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。-
清单文件中定义的从控制节点到 IdM 服务器的
SSH连接工作正常。
-
清单文件中定义的从控制节点到 IdM 服务器的
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制位于
/usr/share/doc/ansible-freeipa/playbooks/server/目录中的server-absent-ignore_topology_disconnect.ymlAnsible playbook 文件:cp /usr/share/doc/ansible-freeipa/playbooks/server/server-absent-ignore_topology_disconnect.yml server-absent-ignore_topology_disconnect-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-absent-ignore_topology_disconnect.yml server-absent-ignore_topology_disconnect-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
server-absent-ignore_topology_disconnect-copy.yml文件进行编辑。 通过在
ipaserver任务部分中设置以下变量来调整文件,并保存文件:-
将
ipaadmin_password变量设为 IdMadmin的密码。 -
将
name变量设为服务器的FQDN。示例服务器的FQDN是 server123.idm.example.com。 -
确保
ignore_topology_disconnect变量被设为true。 -
确保
state变量设置为absent。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
运行 Ansible playbook ,并指定 playbook 文件和清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory server-absent-ignore_topology_disconnect-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory server-absent-ignore_topology_disconnect-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 可选:确保指向 server123.idm.example.com 的所有名称服务器(NS) DNS 记录已从 DNS 区域中删除。无论您使用由 IdM 还是外部 DNS 管理的集成 DNS,这个均适用。
101.6. 使用 Ansible playbook 确保现有的 IdM 服务器可见 复制链接链接已复制到粘贴板!
使用 Ansible playbook 中的 ipaserver ansible-freeipa 模块,来确保可以现有的身份管理(IdM)服务器可见。请注意,此 playbook 没有安装 IdM 服务器。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。-
清单文件中定义的从控制节点到 IdM 服务器的
SSH连接工作正常。
-
清单文件中定义的从控制节点到 IdM 服务器的
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制位于
/usr/share/doc/ansible-freeipa/playbooks/server/目录中的server-not-hidden.ymlAnsible playbook 文件:cp /usr/share/doc/ansible-freeipa/playbooks/server/server-not-hidden.yml server-not-hidden-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-not-hidden.yml server-not-hidden-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
server-not-hidden-copy.yml文件进行编辑。 通过在
ipaserver任务部分中设置以下变量来调整文件,并保存文件:-
将
ipaadmin_password变量设为 IdMadmin的密码。 -
将
name变量设为服务器的FQDN。示例服务器的FQDN是 server123.idm.example.com。 -
确保
hidden变量设为no。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
运行 Ansible playbook ,并指定 playbook 文件和清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory server-not-hidden-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory server-not-hidden-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
101.7. 确保现有的 IdM 服务器被分配了 IdM DNS 位置 复制链接链接已复制到粘贴板!
使用 Ansible playbook 中的 ipaserver ansible-freeipa 模块来确保为现有身份管理(IdM)服务器分配了特定的 IdM DNS 位置。
请注意,ipaserver Ansible 模块没有安装 IdM 服务器。
先决条件
-
您需要知道 IdM
admin密码。 - IdM DNS 位置存在。位置示例为 germany。
-
您有访问服务器的
root权限。服务器示例是 server123.idm.example.com。 您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。-
清单文件中定义的从控制节点到 IdM 服务器的
SSH连接工作正常。
-
清单文件中定义的从控制节点到 IdM 服务器的
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制位于
/usr/share/doc/ansible-freeipa/playbooks/server/目录中的server-location.ymlAnsible playbook 文件:cp /usr/share/doc/ansible-freeipa/playbooks/server/server-location.yml server-location-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-location.yml server-location-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
server-location-copy.yml文件进行编辑。 通过在
ipaserver任务部分中设置以下变量来调整文件,并保存文件:-
将
ipaadmin_password变量设为 IdMadmin的密码。 -
将
name变量设为 server123.idm.example.com。 -
将
location变量设为 germany。
这是当前示例修改的 Ansible playbook 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
运行 Ansible playbook ,并指定 playbook 文件和清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory server-location-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory server-location-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以
root用户身份使用SSH连接到 server123.idm.example.com :ssh root@server123.idm.example.com
ssh root@server123.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在服务器中重启
named服务以使更新立即生效:[root@server123.idm.example.com ~]# systemctl restart named
[root@server123.idm.example.com ~]# systemctl restart namedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
101.8. 确保现有的 IdM 服务器没有分配 IdM DNS 位置 复制链接链接已复制到粘贴板!
使用 Ansible playbook 中的 ipaserver ansible-freeipa 模块,来确保现有身份管理(IdM)服务器没有为其分配的 IdM DNS 位置。不要将 DNS 位置分配给经常更改地理位置的服务器。请注意,playbook 不安装 IdM 服务器。
先决条件
-
您需要知道 IdM
admin密码。 -
您有访问服务器的
root权限。服务器示例是 server123.idm.example.com。 您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。-
清单文件中定义的从控制节点到 IdM 服务器的
SSH连接工作正常。
-
清单文件中定义的从控制节点到 IdM 服务器的
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制位于
/usr/share/doc/ansible-freeipa/playbooks/server/目录中的server-no-location.ymlAnsible playbook 文件:cp /usr/share/doc/ansible-freeipa/playbooks/server/server-no-location.yml server-no-location-copy.yml
$ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-no-location.yml server-no-location-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开
server-no-location-copy.yml文件进行编辑。 通过在
ipaserver任务部分中设置以下变量来调整文件,并保存文件:-
将
ipaadmin_password变量设为 IdMadmin的密码。 -
将
name变量设为 server123.idm.example.com。 -
确保
location变量设为 ""。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
运行 Ansible playbook ,并指定 playbook 文件和清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory server-no-location-copy.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory server-no-location-copy.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以
root用户身份使用SSH连接到 server123.idm.example.com :ssh root@server123.idm.example.com
ssh root@server123.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在服务器中重启
named服务以使更新立即生效:[root@server123.idm.example.com ~]# systemctl restart named
[root@server123.idm.example.com ~]# systemctl restart namedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 102 章 收集 IdM 健康检查信息 复制链接链接已复制到粘贴板!
健康检查已设计为手动命令行工具,可帮助您识别身份管理(IdM)中可能存在的问题。
您可以根据 30 天轮转的 Healthcheck 输出创建一个日志集合。
先决条件
- Healthcheck 工具仅适用于 RHEL 8.1 或更新版本
102.1. IdM 中的 Healthcheck 复制链接链接已复制到粘贴板!
Identity Management (IdM)中的 Healthcheck 命令行工具可帮助查找可能会影响 IdM 环境性能的问题。使用 Healthcheck,您可以预先识别问题,以便在它成为关键状态前更正它。
您可以在不获取 Kerberos ticket 的情况下使用 Healthcheck。
模块是独立的
Healthcheck 由独立的模块组成,用于检查:
- 复制问题
- 证书有效期
- 证书颁发机构基础架构问题
- IdM 和 Active Directory 信任问题
- 正确的文件权限和所有权设置
输出格式和目的地
您可以使用 output-type 选项为 Healthcheck 设置以下类型的输出类型:
-
JSON:JSON 格式的机器可读输出(默认) -
human:人类可读的输出
您可以使用-- output-file 选项指定存储输出的文件。
结果
每个 Healthcheck 模块返回以下结果之一:
- SUCCESS
- 该系统按预期配置。
- WARNING
- 建议您监控或评估配置。
- ERROR
- 该系统没有按预期配置。
- CRITICAL
- 配置不如预期,可能会影响 IdM 部署的功能。
102.2. 日志轮转 复制链接链接已复制到粘贴板!
日志轮转每日创建新的日志文件,并且按日期组织这些文件。该日期包含在文件名中。
使用日志轮转,您可以配置要存储的日志文件的最大数量。如果超过这个数字,最新的文件会替换最旧的文件。例如,如果最大轮转号为 30irty,则第三十优先日志文件将替换第一个,这是最旧的日志文件。
日志轮转会减少大量日志文件并组织它们。这有助于您分析日志。
102.3. 使用 IdM Healthcheck 工具配置日志轮转 复制链接链接已复制到粘贴板!
按照以下步骤使用以下工具配置日志轮转:
-
systemd计时器 -
crond服务
systemd 定时器定期运行 Healthcheck 工具并生成日志。默认情况下,设置为每天 4 点发生。
crond 服务用于日志轮转。
默认日志名称为 healthcheck.log,轮转的日志使用 healthcheck.log-YYYMMDD 格式。
先决条件
-
您有
root特权。
流程
启用
systemd计时器:systemctl enable ipa-healthcheck.timer Created symlink /etc/systemd/system/multi-user.target.wants/ipa-healthcheck.timer -> /usr/lib/systemd/system/ipa-healthcheck.timer.
# systemctl enable ipa-healthcheck.timer Created symlink /etc/systemd/system/multi-user.target.wants/ipa-healthcheck.timer -> /usr/lib/systemd/system/ipa-healthcheck.timer.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
systemd计时器:systemctl start ipa-healthcheck.timer
# systemctl start ipa-healthcheck.timerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 打开
/etc/logrotate.d/ipahealthcheck文件,以配置您要保存的日志数:[...] rotate 30 }[...] rotate 30 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,在日志被较新的日志覆盖前,日志会存储 30 天。
在同一文件中,配置存储日志的文件的路径。
/var/log/ipa/healthcheck/healthcheck.log { [...]/var/log/ipa/healthcheck/healthcheck.log { [...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,日志保存在
/var/log/ipa/healthcheck/目录中。- 在同一个文件中,配置您要生成日志的时间。默认情况下,日志在每天的上午 4 点创建。
- 保存这个文件。
确保
crond服务已启用并正在运行:systemctl enable crond systemctl start crond
# systemctl enable crond # systemctl start crondCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要开始生成日志,启动 IdM healthcheck 服务:
systemctl start ipa-healthcheck
# systemctl start ipa-healthcheckCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
-
进入
/var/log/ipa/healthcheck/目录。 - 显示日志文件的内容,以检查它是否已正确创建。
102.4. 更改 IdM Healthcheck 配置 复制链接链接已复制到粘贴板!
您可以通过在 /etc/ipahealthcheck/ipahealthcheck.conf 文件中添加所需的命令行选项来更改 Healthcheck 设置。这很有用,例如,您配置了日志轮转,并希望确保日志采用适合自动分析的格式,但不想设置新的计时器。
此 Healthcheck 功能仅适用于 RHEL 8.7 或更新版本。
在修改后,Healthcheck 创建的所有日志遵循新的设置。这些设置也应用到健康检查的任何手动执行。
手动运行 Healthcheck 时,配置文件中的设置优先于命令行中指定的选项。例如,如果在配置文件中将 output_type 设为 human,则在命令行上指定 json 不起作用。您用来在配置文件中指定的任何命令行选项都会正常应用。
102.5. 配置 Healthcheck 以更改输出日志格式 复制链接链接已复制到粘贴板!
按照以下步骤,使用已配置的计时器配置 Healthcheck。在本例中,您重新配置 Healthcheck 以人类可读的格式开始生成日志,并包括成功结果而不是仅错误。
先决条件
- 您的系统正在运行 RHEL 8.7 或更高版本。
-
您有
root特权。 - 您之前已在计时器中配置了日志轮转。
流程
-
在文本编辑器中打开
/etc/ipahealthcheck/ipahealthcheck.conf文件。 -
将选项
output_type=human和all=True添加到[default]部分。 - 保存并关闭该文件。
验证
手动运行 Healthcheck:
ipa-healthcheck
# ipa-healthcheckCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
进入
/var/log/ipa/healthcheck/,检查日志是否采用正确的格式。
第 103 章 使用 IdM Healthcheck 检查服务 复制链接链接已复制到粘贴板!
您可以使用 Healthcheck 工具监控身份管理(IdM)服务器使用的服务。
先决条件
- Healthcheck 工具只在 RHEL 8.1 及更新版本中可用
103.1. IdM 服务 Healthcheck 测试 复制链接链接已复制到粘贴板!
Healthcheck 工具包含一个测试,用于检查身份管理(IdM)服务是否正确运行。从这个 Healthcheck 测试启动,因为未正确运行的 IdM 服务可能会导致其他 Healthcheck 测试失败。
根据配置的功能,服务测试是特定于上下文的。例如,只有在 IdM 服务器上配置了集成的 IdM DNS 服务时,才会检查 named。其他,如 smb 或 winbind,只有在启用了 IdM-AD 信任时才会检查。
测试评估的 IdM 服务列表如下:
- certmonger
- dirsrv
- gssproxy
- httpd
- ipa_custodia
- ipa_dnskeysyncd
- ipa_otpd
- kadmin
- krb5kdc
- named
- pki_tomcatd
- sssd
您可以通过运行 ipa-healthcheck --list-sources 命令并识别输出中的 ipahealthcheck.meta.services 部分来查看此列表。
103.2. 使用 Healthcheck 进行 IdM 服务 复制链接链接已复制到粘贴板!
按照以下步骤,使用 Healthcheck 工具运行在身份管理(IdM)服务器上运行的服务的独立手动测试。
流程
输入:
ipa-healthcheck --source=ipahealthcheck.meta.services
# ipa-healthcheck --source=ipahealthcheck.meta.servicesCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
the-
source=ipahealthcheck.meta.services选项可确保 IdM Healthcheck 仅执行服务测试。 -
默认情况下启用
--failures-only选项,它可确保 IdM Healthcheck 仅报告警告、错误和严重问题。
成功测试会显示空括号:
[ ]
[ ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果其中一个服务失败,则结果可能类似以下示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意当尝试发现问题时,在所有 IdM 服务器中运行这个测试。
-
the-
第 104 章 使用 IdM 健康检查验证您的 IdM 和 AD 信任配置 复制链接链接已复制到粘贴板!
了解如何使用 Healthcheck 工具识别身份管理(IdM)和活动目录(AD)之间的信任问题。
先决条件
- Healthcheck 工具仅适用于 RHEL 8.1 或更新版本
104.1. IdM 和 AD 信任健康检查测试 复制链接链接已复制到粘贴板!
Healthcheck 工具包括多个测试,用于测试身份管理(IdM)和活动目录(AD)之间的信任状态。
要查看所有信任测试,请使用 --list-sources 选项运行 ipa-healthcheck :
ipa-healthcheck --list-sources
# ipa-healthcheck --list-sources
您可以在 ipahealthcheck.ipa.trust 源下找到所有与信任相关的测试:
- IPATrustAgentCheck
-
如果当前主机被配置为信任代理,则此测试会检查 SSSD 配置。对于
/etc/sssd/sssd.conf中的每个域,其中id_provider=ipa确保ipa_server_mode为 True。 - IPATrustDomainsCheck
-
此测试通过将
sssctl domain-list中的域列表与ipa trust-find之外的 IdM 域的域列表进行比较,来检查信任域是否与 SSSD 域匹配。 - IPATrustCatalogCheck
此测试解析为 AD 用户
Administrator@REALM。这将填充sssctl domain-status输出中的 AD Global 目录和 AD 域控制器值。对于每个信任域,查找 SID + 500 的 ID 的用户,即管理员 ID,然后检查
sssctl domain-status <domain> --active-server的输出,以确保域处于活动状态。- IPAsidgenpluginCheck
-
此测试会验证 IdM 389-ds 实例中是否启用了
sidgen插件。该测试还验证cn=plugins,cn=config中的IPA SIDGEN和ipa-sidgen-task插件是否包含nsslapd-pluginEnabled选项。 - IPATrustAgentMemberCheck
-
此测试将验证当前主机是否为
cn=adtrust 代理,cn=sysaccounts,cn=etc,SUFFIX的成员。 - IPATrustControllerPrincipalCheck
-
此测试将验证当前主机是否为
cn=adtrust 代理,cn=sysaccounts,cn=etc,SUFFIX的成员。 - IPATrustControllerServiceCheck
- 此测试会验证当前主机是否在 ipactl 中启动 ADTRUST 服务。
- IPATrustControllerConfCheck
-
此测试验证
net conf列表输出中是否为 passdb 后端启用了ldapi。 - IPATrustControllerGroupSIDCheck
-
此测试将验证
admins组的 SID 是否以 512 结尾,这是域管理员的 RID。 - IPATrustPackageCheck
-
如果没有启用信任控制器和 AD 信任,这个测试会验证是否安装了
trust-ad软件包。
104.2. 使用 Healthcheck 工具建立信任 复制链接链接已复制到粘贴板!
按照以下流程,使用 Healthcheck 工具对身份管理(IdM)和活动目录(AD)信任健康检查运行独立的手工测试。
流程
输入:
ipa-healthcheck --source=ipahealthcheck.ipa.trust --failures-only
# ipa-healthcheck --source=ipahealthcheck.ipa.trust --failures-onlyCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
--source=ipahealthcheck.ipa.trust选项可确保 IdM Healthcheck 仅执行信任测试。
-
成功测试会显示空括号:
ipa-healthcheck --source=ipahealthcheck.ipa.trust []
# ipa-healthcheck --source=ipahealthcheck.ipa.trust
[]
当尝试找到问题时,在所有 IdM 服务器中运行这些测试。
第 105 章 使用 IdM Healthcheck 验证证书 复制链接链接已复制到粘贴板!
了解更多有关理解和使用身份管理(IdM)中的 Healthcheck 工具,以识别由 certmonger 工具维护的 IdM 证书的问题。
先决条件
- Healthcheck 工具只在 RHEL 8.1 及更新版本中可用。
105.1. IdM 证书健康检查测试 复制链接链接已复制到粘贴板!
Healthcheck 工具包括多个测试,用于验证身份管理(IdM)中由 certmonger 维护的证书状态。有关 certmonger 的详情,请参阅使用 certmonger 为服务获取 IdM 证书。
此测试套件检查证书过期、验证、信任和其他配置。健康检查可以报告同一底层问题的多个错误。
您可以在 ipa-healthcheck --list-sources 命令的输出中的 ipahealthcheck.ipa.certs 源中找到这些证书测试。
- IPACertmongerExpirationCheck
此测试检查
certmonger 中的过期时间。如果报告错误,证书已过期。
如果出现警告,证书将很快过期。默认情况下,如果测试在证书过期前运行 28 天或更少,会出现一个警告。
您可以在
/etc/ipahealthcheck/ipahealthcheck.conf文件中配置天数。打开该文件后,更改default部分中的cert_expiration_days选项。注意Certmonger加载和维护自己的证书过期视图。此检查不会验证磁盘中的证书。- IPACertfileExpirationCheck
此测试会检查证书文件或 NSS 数据库是否配置了正确的访问权限。此测试还会检查过期情况。因此,请仔细阅读错误或警告输出中的
msg属性。消息指定了问题。注意此测试会检查磁盘中的证书。如果证书缺失或不可读取,健康检查会返回错误。
- IPACertNSSTrust
- 此测试会分析存储在 NSS 数据库中的证书的信任。对于 NSS 数据库中的预期跟踪证书,健康检查会将信任与预期值进行比较,并在不匹配时引发错误。
- IPANSSChainValidation
-
此测试会验证 NSS 证书的证书链。测试执行
certutil -V -u V -e -d [dbdir] -n [nickname]命令。 - IPAOpenSSLChainValidation
此测试会验证 OpenSSL 证书的证书链。具体来说,健康检查执行以下 OpenSSL 命令:
openssl verify -verbose -show_chain -CAfile /etc/ipa/ca.crt [cert file]
openssl verify -verbose -show_chain -CAfile /etc/ipa/ca.crt [cert file]Copy to Clipboard Copied! Toggle word wrap Toggle overflow - IPARAAgent
-
此测试将磁盘上的证书与
uid=ipara,ou=People,o=ipaca中 LDAP 中的等效记录进行比较。 - IPACertRevocation
-
此测试会验证由
certmonger维护的证书是否已被撤销。 - IPACertmongerCA
此测试验证
证书授权机构(CA)配置。IdM 无法在没有 CA 的情况下发布证书。Certmonger维护一组 CA 帮助程序。名为IPA的 CA 通过 IdM 为主机或服务发布证书,以主机或用户主体进行身份验证。另外,还有
dogtag-ipa-ca-renew-agent和dogtag-ipa-ca-renew-agent-reuse用于续订 CA 子系统证书。
105.2. 使用 Healthcheck 工具验证证书 复制链接链接已复制到粘贴板!
按照以下步骤,使用 Healthcheck 工具运行身份管理(IdM)证书健康检查的独立手动测试。
先决条件
-
您有
root特权。
流程
输入:
ipa-healthcheck --source=ipahealthcheck.ipa.certs --failures-only
# ipa-healthcheck --source=ipahealthcheck.ipa.certs --failures-onlyCopy to Clipboard Copied! Toggle word wrap Toggle overflow the-
source=ipahealthcheck.ipa.certs选项可确保 IdM Healthcheck 仅执行certmonger证书测试。成功测试会显示空括号:
[]
[]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 失败的测试会显示以下输出:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在打开 NSS 数据库时,这个
IPACertfileExpirationCheck测试失败。
当尝试检查问题时,在所有 IdM 服务器中运行此 Healthcheck 测试。
第 106 章 使用 IdM Healthcheck 验证系统证书 复制链接链接已复制到粘贴板!
了解更多有关使用 Healthcheck 工具识别身份管理(IdM)中系统证书的问题的信息。
先决条件
- Healthcheck 工具仅在 RHEL 8.1 或更新版本中可用。
106.1. 系统证书健康检查测试 复制链接链接已复制到粘贴板!
Healthcheck 工具包括用于验证系统或 Dogtag、证书的多个测试。
您可以在 ipa-healthcheck --list-sources 命令的输出中的 ipahealthcheck.dogtag.ca 源下找到与证书相关的所有测试。
- DogtagCertsConfigCheck
此测试将其 NSS 数据库中的 CA(证书授权机构)证书与存储在
CS.cfg中的相同值进行比较。如果不匹配,CA 无法启动。具体来说,它会检查:
-
auditSigningCert cert-pki-caagainstca.audit_signing.cert -
ocspSigningCert cert-pki-caagainstca.ocsp_signing.cert -
caSigningCert cert-pki-caagainstca.signing.cert -
subsystemCert cert-pki-caagainstca.subsystem.cert -
针对
ca.sslserver.cert的Server-Cert cert-pki-ca
如果安装了 Key Recovery Authority (KRA),它也会检查:
-
transportCert cert-pki-kraagainstca.connector.KRA.transportCert
-
- DogtagCertsConnectivityCheck
此测试验证连接性。此测试等同于检查以下内容的
ipa cert-show 1命令:- Apache 中的 PKI 代理配置
- IdM 能够找到 CA
- RA 代理客户端证书
- CA 回复请求的正确性
该测试会验证是否可以执行
ipa cert-show命令,以及是否从 IdM CA 返回预期响应 - 证书本身或未找到的响应。
106.2. 使用 Healthcheck 强制系统证书 复制链接链接已复制到粘贴板!
按照以下流程,使用 Healthcheck 工具对身份管理(IdM)证书运行独立的手工测试。
流程
输入:
ipa-healthcheck --source=ipahealthcheck.dogtag.ca
# ipa-healthcheck --source=ipahealthcheck.dogtag.caCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
--source=ipahealthcheck.dogtag.ca选项可确保 Healthcheck 仅执行证书测试。
-
测试成功示例:
测试失败的示例:
当尝试找到问题时,在所有 IdM 服务器中运行证书测试。
第 107 章 使用 IdM Healthcheck 检查磁盘空间 复制链接链接已复制到粘贴板!
您可以使用 Healthcheck 工具监控身份管理服务器的可用磁盘空间。
先决条件
- Healthcheck 工具仅适用于 RHEL 8.1 及更新的版本。
107.1. 磁盘空间健康检查测试 复制链接链接已复制到粘贴板!
Healthcheck 工具包括 FileSystemSpaceCheck 测试,用于检查可用磁盘空间。测试会检查以下内容:
- 需要最少的原始可用字节数。
- 最小可用磁盘空间百分比为 20%。
测试检查以下路径:
| 测试检查的路径 | 以 MB 为单位的最小磁盘空间 |
|---|---|
|
| 1024 |
|
| 512 |
|
| 1024 |
|
| 512 |
|
| 512 |
|
| 512 |
可用磁盘空间不足可能会导致以下问题:
- 日志
- 执行
- Backups
您可以通过运行 ipa-healthcheck --list-sources 命令并识别输出中的 ipahealthcheck.system.filesystemspace 部分来查找 FileSystemSpaceCheck 测试。
107.2. 使用 Healthcheck 工具强制磁盘空间 复制链接链接已复制到粘贴板!
按照以下流程,使用 Healthcheck 工具在身份管理(IdM)服务器上对可用磁盘空间运行独立的手工测试。
流程
输入:
ipa-healthcheck --source=ipahealthcheck.system.filesystemspace
# ipa-healthcheck --source=ipahealthcheck.system.filesystemspaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
the-
source=ipahealthcheck.meta.services选项可确保 IdM Healthcheck 仅执行磁盘空间测试。
-
the-
成功测试会显示空括号:
[]
[]
例如,测试失败可显示:
此失败的测试会通知您 /var/lib/dirsrv 目录中没有可用的空间。
当尝试发现问题时,在所有 IdM 服务器中运行这个测试。
第 108 章 使用 Healthcheck 验证 IdM 配置文件的权限 复制链接链接已复制到粘贴板!
了解如何使用 Healthcheck 工具测试身份管理(IdM)配置文件。
先决条件
- Healthcheck 工具仅在 RHEL 8.1 或更新的系统中可用。
108.1. 文件权限健康检查测试 复制链接链接已复制到粘贴板!
Healthcheck 工具测试由 Identity Management (IdM)安装或配置的文件的所有权和权限。
如果您更改了这些文件的所有权或权限,测试会在 result 部分中返回警告。虽然这不一定意味着配置不起作用,但这意味着文件与默认配置不同。
您可以在 ipa-healthcheck --list-sources 命令的输出的 ipahealthcheck.ipa.files 源中找到文件权限测试。
- IPAFileNSSDBCheck
-
如果相关,此测试会检查 389-ds NSS 数据库和证书颁发机构(CA)数据库。389-ds 数据库位于
/etc/dirsrv/slapd-<dashed-REALM>中,CA 数据库位于/etc/pki/pki-tomcat/alias/中。 - IPAFileCheck
此测试检查以下文件:
-
/var/lib/ipa/ra-agent.{key|pem} -
/var/lib/ipa/certs/httpd.pem -
/var/lib/ipa/private/httpd.key -
/etc/httpd/alias/ipasession.key -
/etc/dirsrv/ds.keytab -
/etc/ipa/ca.crt -
/etc/ipa/custodia/server.keys -
/etc/resolv.conf /etc/hosts如果启用了 PKINIT,它也测试:
-
/var/lib/ipa/certs/kdc.pem /var/lib/ipa/private/kdc.key如果配置了 DNS,它也会测试:
-
/etc/named.keytab -
/etc/ipa/dnssec/ipa-dnskeysyncd.keytab
-
- TomcatFileCheck
此测试会检查某些特定于
tomcat的文件:-
/etc/pki/pki-tomcat/password.conf -
/var/lib/pki/pki-tomcat/conf/ca/CS.cfg -
/etc/pki/pki-tomcat/server.xml
-
108.2. 使用 Healthcheck 处理配置文件 复制链接链接已复制到粘贴板!
按照以下流程,使用 Healthcheck 工具对身份管理(IdM)服务器的配置文件运行独立的手工测试。
Healthcheck 工具包含许多测试。可以通过以下方法缩小结果:
-
仅包含所有者和权限测试
:-- source=ipahealthcheck.ipa.files
流程
要在 IdM 配置文件所有权和权限中运行 Healthcheck 测试,同时只显示警告、错误和严重问题,请输入:
ipa-healthcheck --source=ipahealthcheck.ipa.files
# ipa-healthcheck --source=ipahealthcheck.ipa.filesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
成功测试会显示空括号:
ipa-healthcheck --source=ipahealthcheck.ipa.files []
# ipa-healthcheck --source=ipahealthcheck.ipa.files
[]
失败的测试显示结果 类似如下 :
当尝试找到问题时,在所有 IdM 服务器中运行这些测试。
第 109 章 使用 Healthcheck 检查 IdM 复制 复制链接链接已复制到粘贴板!
您可以使用 Healthcheck 工具测试身份管理(IdM)复制。
先决条件
- 您使用 RHEL 版本 8.1 或更新版本。
109.1. IdM 复制和拓扑 Healthcheck 测试 复制链接链接已复制到粘贴板!
Healthcheck 工具包含身份管理(IdM)拓扑配置的测试。测试会搜索复制冲突问题。
您可以在 ipa-healthcheck --list-sources 命令的输出的 ipahealthcheck.ipa.topology 和 ipahealthcheck.ds.replication 源下找到 IPATopologyDomainCheck 和 ReplicationConflictCheck 测试。
- IPATopologyDomainCheck
测试以下配置:
- 没有 IdM 服务器与拓扑断开连接。
- IdM 服务器没有超过推荐的复制协议数量。
如果测试成功,则测试会返回配置的域。否则,将报告特定的连接错误。
注意测试为
domain后缀运行ipa topologysuffix-verify命令。如果在此服务器上配置了 IdM Certificate Authority server 角色,它也会为ca后缀运行命令。- ReplicationConflictCheck
-
搜索 LDAP 匹配中的条目
(& (! (objectclass=nstombstone)) (nsds5ReplConflict 3.3.0))。
109.2. 使用 Healthcheck 进行复制 复制链接链接已复制到粘贴板!
按照以下步骤,使用 Healthcheck 工具运行身份管理(IdM)复制和拓扑配置的独立手动测试。
先决条件
-
您有
root特权。
流程
输入:
ipa-healthcheck --source=ipahealthcheck.ds.replication --source=ipahealthcheck.ipa.topology
# ipa-healthcheck --source=ipahealthcheck.ds.replication --source=ipahealthcheck.ipa.topologyCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
--source=ipahealthcheck.ds.replicationand--source=ipahealthcheck.ipa.topology选项可确保 IdM Healthcheck 只执行复制冲突和拓扑测试。
可能会有四种不同的结果:
SUCCESS SAS- SAS 测试成功通过。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 预告:测试通过,但可能存在问题。
ERROR SAS- SAS 测试失败。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - CRITICAL SAS- SAS 测试失败,它会影响 IdM 服务器功能。
-
当尝试检查问题时,在所有 IdM 服务器中运行这些测试。
109.3. 其他资源 复制链接链接已复制到粘贴板!
第 110 章 使用 IdM Healthcheck 检查 DNS 记录 复制链接链接已复制到粘贴板!
您可以使用 Healthcheck 工具识别身份管理(IdM)中与 DNS 记录有关的问题。
先决条件
- DNS 记录 Healthcheck 工具仅在 RHEL 8.2 或更新版本中可用。
110.1. DNS 记录健康检查测试 复制链接链接已复制到粘贴板!
Healthcheck 工具包括 IPADNSSystemRecordsCheck 测试,用于检查自动发现所需的预期 DNS 记录是否可以解析。具体来说,测试会使用您登录的 IdM 服务器上的 /etc/resolv.conf 文件中指定的第一个解析器检查 ipa dns-update-system-records --dry-run 命令获取的 DNS 记录。
您可以在 ipa-healthcheck --list-sources 命令的输出的 ipahealthcheck.ipa.idns 源下找到 IPADNSSystemRecordsCheck 测试。
110.2. 使用 Healthcheck 工具建立 IdM DNS 记录 复制链接链接已复制到粘贴板!
按照以下步骤,使用 Healthcheck 工具在身份管理(IdM)服务器上运行 DNS 记录独立手动测试。
Healthcheck 工具包含许多测试。通过添加 --source ipahealthcheck.ipa.idns 选项,可以只包含 DNS 记录测试来缩小结果范围。
先决条件
-
您有
root特权。
流程
输入:
ipa-healthcheck --source ipahealthcheck.ipa.idns
# ipa-healthcheck --source ipahealthcheck.ipa.idnsCopy to Clipboard Copied! Toggle word wrap Toggle overflow --source ipahealthcheck.ipa.idns选项可确保 IdM Healthcheck 仅执行 DNS 记录测试。如果记录可以解析,测试会返回
SUCCESS,从而返回:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,当记录数量与预期数目不匹配时,测试将返回
WARNING:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 112 章 Identity Management 安全设置 复制链接链接已复制到粘贴板!
了解有关身份管理的与安全相关的功能的更多信息。
112.1. 身份管理如何应用默认安全设置 复制链接链接已复制到粘贴板!
默认情况下,RHEL 8 上的身份管理(IdM)使用系统范围的加密策略。这个策略的好处是您不需要手动强化单独的 IdM 组件。
红帽建议您使用系统范围的加密策略。更改单个安全设置可能会破坏 IdM 的组件。例如,RHEL 8 中的 Java 不完全支持 TLS 1.3 协议。因此,使用这个协议可能会导致在 IdM 中出现问题。
112.2. Identity Management 中的匿名 LDAP 绑定 复制链接链接已复制到粘贴板!
默认情况下,启用匿名绑定到 Identity Management(IdM)LDAP 服务器。匿名绑定可以公开某些配置设置或目录值。但是,一些实用程序(如 realmd 或 较旧的 RHEL 客户端)需要启用匿名绑定来发现注册客户端时的域设置。
112.3. 禁用匿名绑定 复制链接链接已复制到粘贴板!
您可以使用 LDAP 工具重置 nsslapd-allow-anonymous-access 属性来禁用 Identity Management(IdM)389 Directory Server 实例上的匿名绑定。
这些是 nsslapd-allow-anonymous-access 属性的有效值:
-
on: 允许所有匿名绑定(默认) -
rootdse: 仅允许匿名绑定进行 DSE 信息 -
off: 不允许任何匿名绑定
红帽不推荐通过将属性设置为 off 来完全禁止匿名绑定,因为这也会阻止外部客户端检查服务器配置。LDAP 和 Web 客户端不一定是域客户端,因此它们会匿名连接,以读取 root DSE 文件来获取连接信息。
将 nsslapd-allow-anonymous-access 属性的值更改为 rootdse,您允许访问 root DSE 和服务器配置而无需访问目录数据。
某些客户端依赖于匿名绑定来发现 IdM 设置。另外,对于没有使用身份验证的传统客户端,compat 树可能无法正常工作。只有在您的客户端不需要匿名绑定时才执行这个流程。
先决条件
- 您可以作为 Directory Manager 进行身份验证,以写入到 LDAP 服务器。
-
您可以以
root用户身份进行身份验证以重启 IdM 服务。
流程
将
nsslapd-allow-anonymous-access属性更改为rootdse。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 389 Directory 服务器实例以加载新设置。
systemctl restart dirsrv.target
# systemctl restart dirsrv.targetCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示
nsslapd-allow-anonymous-access属性的值。ldapsearch -x -D "cn=Directory Manager" -b cn=config -W -h server.example.com -p 389 nsslapd-allow-anonymous-access | grep nsslapd-allow-anonymous-access Enter LDAP Password: requesting: nsslapd-allow-anonymous-access nsslapd-allow-anonymous-access: rootdse
$ ldapsearch -x -D "cn=Directory Manager" -b cn=config -W -h server.example.com -p 389 nsslapd-allow-anonymous-access | grep nsslapd-allow-anonymous-access Enter LDAP Password: # requesting: nsslapd-allow-anonymous-access nsslapd-allow-anonymous-access: rootdseCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 113 章 在 IdM 域成员中设置 Samba 复制链接链接已复制到粘贴板!
您可以在加入到 Red Hat Identity Management (IdM)域的主机上设置 Samba。来自IdM的用户,以及来自受信任的 Active Directory(AD)域的用户(如果有的话)可以访问 Samba 提供的共享和打印机服务。
对 IdM 域成员使用 Samba 是一种不受支持的技术预览特性,且包含了某些限制。例如,IdM 信任控制器不支持活动目录全局目录服务,并且不支持使用分布式计算环境/远程过程调用(DCE/RPC)协议解析 IdM 组。因此,AD 用户在登录到其他 IdM 客户端时只能访问托管在 IdM 客户端上的 Samba 共享和打印机;登录到 Windows 机器的 AD 用户无法访问托管在 IdM 域成员上的 Samba 共享。
我们鼓励在 IdM 域成员中部署 Samba 的用户向红帽提供反馈意见。
如果 AD 域中的用户需要访问 Samba 提供的共享和打印机服务,请确保在 AD 中启用了 AES 加密类型。如需更多信息,请参阅 使用 GPO 在活动目录中启用 AES 加密类型。
先决条件
- 主机作为 IdM 域的客户端加入。
- IdM 服务器和客户端必须在 RHEL 8.1 或更高版本中运行。
113.1. 准备 IdM 域以便在域成员中安装 Samba 复制链接链接已复制到粘贴板!
在IdM客户端上设置Samba之前,必须在IdM服务器上使用ipa-adtrust-install工具来准备IdM域。
运行ipa-adtrust-install命令的任何系统都会自动成为 AD 信任控制器。但是,您只能在 IdM 服务器上运行ipa-adtrust-install一次。
先决条件
- IdM 服务器已安装。
- 您有 root 特权来安装软件包和重启 IdM 服务。
流程
安装所需的软件包:
yum install ipa-server-trust-ad samba-client
[root@ipaserver ~]# yum install ipa-server-trust-ad samba-clientCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以 IdM 管理用户身份进行身份验证:
kinit admin
[root@ipaserver ~]# kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行
ipa-adtrust-install工具:ipa-adtrust-install
[root@ipaserver ~]# ipa-adtrust-installCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 IdM 安装了集成的 DNS 服务器,则会自动创建 DNS 服务记录。
如果您安装的IdM没有集成 DNS 服务器,
ipa-adtrust-install会打印一个服务记录列表,您必须手动将其添加到DNS后才能继续操作。该脚本会提示您
/etc/samba/smb.conf已存在,并将被重写:WARNING: The smb.conf already exists. Running ipa-adtrust-install will break your existing Samba configuration. Do you wish to continue? [no]: yes
WARNING: The smb.conf already exists. Running ipa-adtrust-install will break your existing Samba configuration. Do you wish to continue? [no]: yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 该脚本提示您配置
slapi-nis插件,这是一个兼容性插件,允许旧的 Linux 客户端与受信任的用户一起工作:Do you want to enable support for trusted domains in Schema Compatibility plugin? This will allow clients older than SSSD 1.9 and non-Linux clients to work with trusted users. Enable trusted domains support in slapi-nis? [no]: yes
Do you want to enable support for trusted domains in Schema Compatibility plugin? This will allow clients older than SSSD 1.9 and non-Linux clients to work with trusted users. Enable trusted domains support in slapi-nis? [no]: yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 提示时,输入 IdM 域的 NetBIOS 名称,或者按 Enter 接受推荐的名称:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 系统会提示您运行 SID 生成任务,以便为任何现有用户创建 SID:
Do you want to run the ipa-sidgen task? [no]: yes
Do you want to run the ipa-sidgen task? [no]: yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这是一个资源密集型任务,因此如果您有大量的用户,您可以在其他时间运行此任务。
可选:默认情况下,对于 Windows Server 2008 及更高版本,动态 RPC 端口范围定义为
49152-65535。如果您需要为您的环境定义不同的动态 RPC 端口范围,请将 Samba 配置为使用不同的端口,并在防火墙设置中开放这些端口。以下示例将端口范围设置为55000-65000。net conf setparm global 'rpc server dynamic port range' 55000-65000 firewall-cmd --add-port=55000-65000/tcp firewall-cmd --runtime-to-permanent
[root@ipaserver ~]# net conf setparm global 'rpc server dynamic port range' 55000-65000 [root@ipaserver ~]# firewall-cmd --add-port=55000-65000/tcp [root@ipaserver ~]# firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
ipa服务:ipactl restart
[root@ipaserver ~]# ipactl restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
smbclient工具来验证 Samba 是否响应 IdM 端的 Kerberos 身份验证:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
113.2. 在 IdM 客户端中安装和配置 Samba 服务器 复制链接链接已复制到粘贴板!
您可以在 IdM 域中注册的客户端上安装和配置 Samba。
先决条件
- IdM 服务器和客户端必须在 RHEL 8.1 或更高版本中运行。
- IdM 域已准备好,如 为在域成员上安装 Samba 准备 IdM 域 中所述。
- 如果 IdM 具有配置了 AD 的信任,请为 Kerberos 启用 AES 加密类型。例如,使用组策略对象(GPO)来启用 AES 加密类型。详情请参阅 使用 GPO 在活动目录中启用 AES 加密。
流程
安装
ipa-client-samba软件包:yum install ipa-client-samba
[root@idm_client]# yum install ipa-client-sambaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ipa-client-samba工具准备客户端并创建初始 Samba 配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,
ipa-client-samba会自动将[homes]部分添加到/etc/samba/smb.conf文件中,该文件在用户连接时动态共享用户的主目录。如果用户在这个服务器上没有主目录,或者您不想共享主目录,请从/etc/samba/smb.conf中删除以下行:[homes] read only = no[homes] read only = noCopy to Clipboard Copied! Toggle word wrap Toggle overflow 共享目录和打印机。详情请查看以下部分:
在本地防火墙中打开 Samba 客户端所需的端口:
firewall-cmd --permanent --add-service=samba-client firewall-cmd --reload
[root@idm_client]# firewall-cmd --permanent --add-service=samba-client [root@idm_client]# firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启用并启动
smb和winbind服务:systemctl enable --now smb winbind
[root@idm_client]# systemctl enable --now smb winbindCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在安装了 samba-client 软件包的不同 IdM 域成员上运行以下验证步骤:
使用 Kerberos 身份验证列出 Samba 服务器中的共享:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
113.3. 如果 IdM 信任新域,请手动添加 ID 映射配置 复制链接链接已复制到粘贴板!
Samba 需要一个 ID 映射配置,用户可从该域访问资源。在 IdM 客户端上运行的现有 Samba 服务器上,在管理员向 Active Directory(AD)域添加了新的信任后,您必须手动添加 ID 映射配置。
先决条件
- 您在 IdM 客户端中配置了 Samba。之后,IdM 增加了一个新的信任。
- 在可信 AD 域中必须禁用 Kerberos 的 DES 和 RC4 加密类型。为了安全起见,RHEL 8 不支持这些弱加密类型。
流程
使用主机的 keytab 进行身份验证:
kinit -k
[root@idm_client]# kinit -kCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
ipa idrange-find命令来显示新域的基本 ID 和 ID 范围大小。例如,以下命令显示了ad.example.com域的值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在后续步骤中,您需要
ipabaseid和ipaidrangesize属性的值。要计算可用最高的 ID,请使用以下公式:
maximum_range = ipabaseid + ipaidrangesize - 1
maximum_range = ipabaseid + ipaidrangesize - 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用上一步中的值,
ad.example.com域的最大可用 ID 是1918599999(1918400000 + 200000 - 1)。编辑
/etc/samba/smb.conf文件,并将域的 ID 映射配置添加到[global]部分:idmap config AD : range = 1918400000 - 1918599999 idmap config AD : backend = sss
idmap config AD : range = 1918400000 - 1918599999 idmap config AD : backend = sssCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
ipabaseid属性的值指定为最小值,将上一步中的计算值指定为该范围的最大值。重启
smb和winbind服务:systemctl restart smb winbind
[root@idm_client]# systemctl restart smb winbindCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用 Kerberos 身份验证列出 Samba 服务器中的共享:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 114 章 使用外部身份提供者向 IdM 进行身份验证 复制链接链接已复制到粘贴板!
您可以将用户与支持 OAuth 2.0 设备授权流的外部身份提供程序(IdP)关联。当这些用户使用 RHEL 8.7 或更高版本中的系统安全服务守护进程(SSSD)版本进行身份验证时,它们会在外部 IdP 执行身份验证和授权后收到带有 Kerberos 票据的 RHEL Identity Management (IdM)单点登录功能。
主要特性包括:
-
使用
ipa idp-*命令添加、修改和删除对外部 IdP 的引用。 -
使用
ipa user-mod --user-auth-type=idp命令为用户启用 IdP 身份验证。
114.1. 将 IdM 连接到外部 IdP 的好处 复制链接链接已复制到粘贴板!
作为管理员,您可能想要允许存储在外部身份源(如云服务供应商)中的用户访问连接到 Identity Management (IdM) 环境的 RHEL 系统。要达到此目的,您可以将这些用户的 Kerberos 票据的身份验证和授权过程委托给该外部实体。
您可以使用此功能扩展 IdM 的功能,并允许存储在外部身份提供者(IdP) 中的用户访问由 IdM 管理的 Linux 系统。
114.2. IdM 如何通过外部 IdP 融合登录 复制链接链接已复制到粘贴板!
SSSD 2.7.0 包含 sssd-idp 软件包,该软件包可实施 idp Kerberos pre-authentication 方法。这个验证方法遵循 OAuth 2.0 设备授权流,将授权决策委托给外部 IdP:
-
IdM 客户端用户启动 OAuth 2.0 设备授权流,例如,通过在命令行中使用
kinit工具检索 Kerberos Ticket Granting Ticket Granting Ticket (TGT)。 - 一个特殊的代码和网站链接从授权服务器发送到 IdM 密钥分发中心(KDC)后端。
- IdM 客户端显示用户的链接和代码。在本例中,IdM 客户端会在命令行上输出链接和代码。
用户在浏览器中打开网站链接,可以在另一个主机上、移动电话等:
- 用户输入特殊代码。
- 如有必要,用户登录到基于 OAuth 2.0 的 IdP。
- 系统将提示用户授权客户端访问信息。
- 用户在原始设备提示符处确认访问。在这个示例中,用户在命令行中点 Enter 键。
- IdM KDC 后端轮询 OAuth 2.0 授权服务器以访问用户信息。
支持什么:
-
启用了
键盘互动验证方法通过 Secure Shell (SSH)远程登录,它允许调用可插拔验证模块(PAM)库。 -
通过
logind服务,使用控制台本地登录。 -
使用
kinit工具检索 Kerberos TGT。
当前不支持什么:
- 直接登录到 IdM WebUI。要登录到 IdM WebUI,您必须首先获取一个 Kerberos ticket。
- 直接登录 Cockpit WebUI。要登录 Cockpit Web UI,您必须首先获取一个 Kerberos ticket。
114.3. 创建一个到外部身份提供者的引用 复制链接链接已复制到粘贴板!
要将外部身份提供者(IdP)连接到您的身份管理(IdM)环境,请在 IdM 中创建 IdP 引用。完成此流程,来根据 Keycloak 模板创建一个到 IdP 的名为 my-keycloak-idp 的引用。如需了解更多引用模板,请参阅 IdM 中到不同外部 IdP 的引用示例。
先决条件
- 您已将 IdM 作为 OAuth 应用程序注册到外部 IdP,并获取了客户端 ID。
- 您可以作为 IdM admin 帐户进行身份验证。
- 您的 IdM 服务器使用 RHEL 8.7 或更高版本。
- 您的 IdM 服务器使用 SSSD 2.7.0 或更高版本。
流程
在 IdM 服务器中作为 IdM 管理员进行身份验证。
kinit admin
[root@server ~]# kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 根据 Keycloak 模板,创建一个到 IdP 的名为
my-keycloak-idp的引用,其中--base-url选项指定到 Keycloak 服务器的 URL,格式为server-name.$DOMAIN:$PORT/prefix。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证
ipa idp-show命令的输出显示您创建的 IdP 引用。ipa idp-show my-keycloak-idp
[root@server ~]# ipa idp-show my-keycloak-idpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
114.4. IdM 中到不同外部 IdP 的引用示例 复制链接链接已复制到粘贴板!
下表列出了在 IdM 中创建到不同 IdP 的引用的 ipa idp-add 命令的示例。
| 身份供应商 | 重要选项 | 命令示例 |
|---|---|---|
|
Microsoft Identity Platform, |
|
ipa idp-add my-azure-idp \ --provider microsoft \ --organization main \ --client-id <azure_client_id>
|
| |
|
ipa idp-add my-google-idp \ --provider google \ --client-id <google_client_id>
|
| GitHub |
|
ipa idp-add my-github-idp \ --provider github \ --client-id <github_client_id>
|
|
Keycloak, |
|
ipa idp-add my-keycloak-idp \ --provider keycloak \ --organization main \ --base-url keycloak.idm.example.com:8443/auth \ --client-id <keycloak_client_id>
注意
Keycloak 17 及更新版本的 Quarkus 版本已删除 URI 的 |
| Okta |
|
ipa idp-add my-okta-idp \ --provider okta --base-url dev-12345.okta.com \ --client-id <okta_client_id>
|
114.5. 在 IdM 中管理外部身份提供者的 ipa idp-* 命令的选项 复制链接链接已复制到粘贴板!
以下示例演示了如何根据不同的 IdP 模板配置到外部 IdP 的引用。使用以下选项指定设置:
--provider- 其中一个已知的身份提供程序的预定义模板。
--client-id- IdP 在应用程序注册过程中发布的 OAuth 2.0 客户端标识符。当应用程序注册步骤特定于每个 IdP 时,请参考它们的文档来了解详情。如果外部 IdP 是红帽单点登录(SSO),请参阅 创建 OpenID Connect 客户端。
--base-url- Keycloak 和 Okta 所需的 IdP 模板的基本 URL。
--organization- Microsoft Azure 需要的 IdP 中的域或机构 ID。
--secret可选:如果您已将外部 IdP 配置为需要来自机密 OAuth 2.0 客户端的 secret,则使用此选项。如果您在创建 IdP 引用时使用这个选项,则会以交互方式会提示您输入 secret。将客户端 secret 作为密码保护。
注意RHEL 8.7 中的 SSSD 只支持不使用客户端 secret 的非机密 OAuth 2.0 客户端。如果要使用需要机密客户端的客户端 secret 的外部 IdP,您必须在 RHEL 8.8 及之后的版本中使用 SSSD。
114.6. 管理对外部 IdP 的引用 复制链接链接已复制到粘贴板!
创建到外部身份提供者(IdP) 的引用后,您可以找到、显示、修改和删除该引用。本例演示了如何管理对名为 keycloak-server1 的外部 IdP 的引用。
先决条件
- 您可以作为 IdM admin 帐户进行身份验证。
- 您的 IdM 服务器使用 RHEL 8.7 或更高版本。
- 您的 IdM 服务器使用 SSSD 2.7.0 或更高版本。
- 您已在 IdM 中创建了到外部 IdP 的引用。请参阅 创建一个到外部身份提供者的引用。
流程
在 IdM 服务器中作为 IdM 管理员进行身份验证。
kinit admin
[root@server ~]# kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 管理 IdP 参考。
查找 IdP 参考,其条目包括字符串
keycloak:ipa idp-find keycloak
[root@server ~]# ipa idp-find keycloakCopy to Clipboard Copied! Toggle word wrap Toggle overflow 显示名为
my-keycloak-idp的 IdP 参考:ipa idp-show my-keycloak-idp
[root@server ~]# ipa idp-show my-keycloak-idpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要修改 IdP 参考,请使用
ipa idp-mod命令。例如,要更改名为my-keycloak-idp的 IdP 参考的 secret,请指定要提示输入 secret 的--secret选项:ipa idp-mod my-keycloak-idp --secret
[root@server ~]# ipa idp-mod my-keycloak-idp --secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除名为
my-keycloak-idp的 IdP 参考:ipa idp-del my-keycloak-idp
[root@server ~]# ipa idp-del my-keycloak-idpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
114.7. 启用 IdM 用户通过外部 IdP 进行身份验证 复制链接链接已复制到粘贴板!
要使 IdM 用户能够通过外部身份提供者(IdP)进行身份验证,请将之前创建的外部 IdP 引用与用户帐户关联。这个示例将外部 IdP 引用 keycloak-server1 与用户 idm-user-with-external-idp 相关联。
先决条件
- 您的 IdM 客户端和服务器使用 RHEL 8.7 或更高版本。
- 您的 IdM 客户端和服务器使用 SSSD 2.7.0 或更高版本。
- 您已在 IdM 中创建了到外部 IdP 的引用。请参阅 创建一个到外部身份提供者的引用。
流程
修改 IdM 用户条目,将 IdP 引用与用户帐户关联:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证该用户的
ipa user-show命令的输出是否显示对 IdP 的引用:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
114.8. 以外部 IdP 用户身份检索 IdM 票据授予票据 复制链接链接已复制到粘贴板!
如果您已将身份管理(IdM)用户的身份验证委派给外部身份提供者(IdP),则 IdM 用户可以通过认证到外部 IdP 来请求 Kerberos 票据授予票据(TGT)。
完成此流程,来:
- 在本地检索和存储匿名 Kerberos 票据。
-
使用
kinit和-T选项为 idm-user-with-external-idp 用户请求 TGT,以通过 Secure Tunneling (FAST)渠道启用灵活的身份验证,来在 Kerberos 客户端和 Kerberos 分发中心(KDC)之间提供安全连接。
先决条件
- 您的 IdM 客户端和服务器使用 RHEL 8.7 或更高版本。
- 您的 IdM 客户端和服务器使用 SSSD 2.7.0 或更高版本。
- 您已在 IdM 中创建了到外部 IdP 的引用。请参阅 创建一个到外部身份提供者的引用。
- 您已与用户帐户关联了一个外部 IdP 参考。请参阅启用 IdM 用户以通过外部 IdP 进行身份验证。
- 您最初以其份登录的用户对本地文件系统中的目录有写权限。
流程
使用 Anonymous PKINIT 获取 Kerberos 票据,并将其存储在名为
./fast.ccache的文件中。kinit -n -c ./fast.ccache
$ kinit -n -c ./fast.ccacheCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:查看检索到的票据:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以 IdM 用户身份开始身份验证,使用
-T选项启用 FAST 通信渠道。kinit -T ./fast.ccache idm-user-with-external-idp Authenticate at https://oauth2.idp.com:8443/auth/realms/master/device?user_code=YHMQ-XKTL and press ENTER.:
[root@client ~]# kinit -T ./fast.ccache idm-user-with-external-idp Authenticate at https://oauth2.idp.com:8443/auth/realms/master/device?user_code=YHMQ-XKTL and press ENTER.:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 在浏览器中,以命令输出中提供的网站的用户身份进行身份验证。
- 在命令行中,按 Enter 键来完成身份验证过程。
验证
显示您的 Kerberos ticket 信息,并确认对于带有外部 IdP 的预身份验证的行
config: pa_type显示152。Copy to Clipboard Copied! Toggle word wrap Toggle overflow pa_type = 152表示外部 IdP 身份验证。
114.9. 以外部 IdP 用户身份通过 SSH 登录到 IdM 客户端 复制链接链接已复制到粘贴板!
要以外部身份提供者(IdP) 用户的身份通过 SSH 登录到 IdM 客户端,请在命令行上开始登录过程。出现提示时,在与 IdP 关联的网站上执行身份验证过程,并在 Identity Management (IdM) 客户端上完成该过程。
先决条件
- 您的 IdM 客户端和服务器使用 RHEL 8.7 或更高版本。
- 您的 IdM 客户端和服务器使用 SSSD 2.7.0 或更高版本。
- 您已在 IdM 中创建了到外部 IdP 的引用。请参阅 创建一个到外部身份提供者的引用。
- 您已与用户帐户关联了一个外部 IdP 参考。请参阅启用 IdM 用户以通过外部 IdP 进行身份验证。
流程
尝试通过 SSH 登录到 IdM 客户端。
ssh idm-user-with-external-idp@client.idm.example.com (idm-user-with-external-idp@client.idm.example.com) Authenticate at https://oauth2.idp.com:8443/auth/realms/main/device?user_code=XYFL-ROYR and press ENTER.
[user@client ~]$ ssh idm-user-with-external-idp@client.idm.example.com (idm-user-with-external-idp@client.idm.example.com) Authenticate at https://oauth2.idp.com:8443/auth/realms/main/device?user_code=XYFL-ROYR and press ENTER.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 在浏览器中,以命令输出中提供的网站的用户身份进行身份验证。
- 在命令行中,按 Enter 键来完成身份验证过程。
验证
显示您的 Kerberos ticket 信息,并确认对于带有外部 IdP 的预身份验证的行
config: pa_type显示152。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
114.10. ipa idp-* 命令中的 --provider 选项 复制链接链接已复制到粘贴板!
以下身份提供者 (IdP) 支持 OAuth 2.0 设备授权流:
- Microsoft Identity Platform,包括 Azure AD
- GitHub
- Keycloak,包括 Red Hat Single Sign-On (SSO)
- Okta
当使用 ipa idp-add 命令创建对其中一个外部 IdP 的引用时,您可以使用 --provider 选项指定 IdP 类型,它扩展至额外的选项,如下所述:
--provider=microsoftMicrosoft Azure IdP 允许基于 Azure 租户 ID 进行半虚拟化 ID,您可以使用
--organization选项指定ipa idp-add命令。如果您需要对 live.com IdP 的支持,请指定--organization common的选项。选择
--provider=microsoft扩展以使用以下选项:--organization选项的值替换了表中的字符串${ipaidporg}。Expand 选项 值 --auth-uri=URIhttps://login.microsoftonline.com/${ipaidporg}/oauth2/v2.0/authorize--dev-auth-uri=URIhttps://login.microsoftonline.com/${ipaidporg}/oauth2/v2.0/devicecode--token-uri=URIhttps://login.microsoftonline.com/${ipaidporg}/oauth2/v2.0/token--userinfo-uri=URIhttps://graph.microsoft.com/oidc/userinfo--keys-uri=URIhttps://login.microsoftonline.com/common/discovery/v2.0/keys--scope=STRopenid email--idp-user-id=STRemail--provider=google选择
--provider=google扩展以使用以下选项:Expand 选项 值 --auth-uri=URIhttps://accounts.google.com/o/oauth2/auth--dev-auth-uri=URIhttps://oauth2.googleapis.com/device/code--token-uri=URIhttps://oauth2.googleapis.com/token--userinfo-uri=URIhttps://openidconnect.googleapis.com/v1/userinfo--keys-uri=URIhttps://www.googleapis.com/oauth2/v3/certs--scope=STRopenid email--idp-user-id=STRemail--provider=github选择
--provider=github展开以使用以下选项:Expand 选项 值 --auth-uri=URIhttps://github.com/login/oauth/authorize--dev-auth-uri=URIhttps://github.com/login/device/code--token-uri=URIhttps://github.com/login/oauth/access_token--userinfo-uri=URIhttps://openidconnect.googleapis.com/v1/userinfo--keys-uri=URIhttps://api.github.com/user--scope=STRuser--idp-user-id=STRlogin--provider=keycloak使用 Keycloak 时,您可以定义多个域或机构。由于它是自定义部署的一部分,基本 URL 和域 ID 都是必需的,因此您可以使用
--base-url和--organization选项指定它们到ipa idp-add命令:ipa idp-add MySSO --provider keycloak \ --org main --base-url keycloak.domain.com:8443/auth \ --client-id <your-client-id>
[root@client ~]# ipa idp-add MySSO --provider keycloak \ --org main --base-url keycloak.domain.com:8443/auth \ --client-id <your-client-id>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 选择
--provider=keycloak扩展以使用以下选项:您在--base-url选项中指定的值替换表中的字符串${ipaidpbaseurl},而您为--organization指定的选项替换字符串 `${ipaidporg}。Expand 选项 值 --auth-uri=URIhttps://${ipaidpbaseurl}/realms/${ipaidporg}/protocol/openid-connect/auth--dev-auth-uri=URIhttps://${ipaidpbaseurl}/realms/${ipaidporg}/protocol/openid-connect/auth/device--token-uri=URIhttps://${ipaidpbaseurl}/realms/${ipaidporg}/protocol/openid-connect/token--userinfo-uri=URIhttps://${ipaidpbaseurl}/realms/${ipaidporg}/protocol/openid-connect/userinfo--scope=STRopenid email--idp-user-id=STRemail--provider=okta在注册一个 Okta 中的新机构后,会关联一个新的基本 URL。您可以使用
ipa idp-add命令的--base-url选项指定这个基本 URL:ipa idp-add MyOkta --provider okta --base-url dev-12345.okta.com --client-id <your-client-id>
[root@client ~]# ipa idp-add MyOkta --provider okta --base-url dev-12345.okta.com --client-id <your-client-id>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 选择
--provider=okta扩展以使用以下选项:您为--base-url选项指定的值替换了表中字符串${ipaidpbaseurl}。Expand 选项 值 --auth-uri=URIhttps://${ipaidpbaseurl}/oauth2/v1/authorize--dev-auth-uri=URIhttps://${ipaidpbaseurl}/oauth2/v1/device/authorize--token-uri=URIhttps://${ipaidpbaseurl}/oauth2/v1/token--userinfo-uri=URIhttps://${ipaidpbaseurl}/oauth2/v1/userinfo--scope=STRopenid email--idp-user-id=STRemail
第 115 章 使用 Ansible 将 IdM 用户的身份验证委托给外部身份提供者 复制链接链接已复制到粘贴板!
您可以使用 idp ansible-freeipa 模块将用户与支持 OAuth 2 设备授权流的外部身份提供者(IdP)相关联。如果一个 IdP 引用和一个关联的 IdP 用户 ID 存在,您可以使用它们来为具有 user ansible-freeipa 模块的 IdM 用户启用 IdP 身份验证。
之后,如果这些用户使用 RHEL 8.7 或更高版本中提供的 SSSD 版本 2.7.0 或更高版本进行身份验证,它们会在外部 IdP 执行身份验证和授权后收到带有 Kerberos 票据的 RHEL 身份管理(IdM)单点登录功能。
115.1. 将 IdM 连接到外部 IdP 的好处 复制链接链接已复制到粘贴板!
作为管理员,您可能想要允许存储在外部身份源(如云服务供应商)中的用户访问连接到 Identity Management (IdM) 环境的 RHEL 系统。要达到此目的,您可以将这些用户的 Kerberos 票据的身份验证和授权过程委托给该外部实体。
您可以使用此功能扩展 IdM 的功能,并允许存储在外部身份提供者(IdP) 中的用户访问由 IdM 管理的 Linux 系统。
115.2. IdM 如何通过外部 IdP 融合登录 复制链接链接已复制到粘贴板!
SSSD 2.7.0 包含 sssd-idp 软件包,该软件包可实施 idp Kerberos pre-authentication 方法。这个验证方法遵循 OAuth 2.0 设备授权流,将授权决策委托给外部 IdP:
-
IdM 客户端用户启动 OAuth 2.0 设备授权流,例如,通过在命令行中使用
kinit工具检索 Kerberos Ticket Granting Ticket Granting Ticket (TGT)。 - 一个特殊的代码和网站链接从授权服务器发送到 IdM 密钥分发中心(KDC)后端。
- IdM 客户端显示用户的链接和代码。在本例中,IdM 客户端会在命令行上输出链接和代码。
用户在浏览器中打开网站链接,可以在另一个主机上、移动电话等:
- 用户输入特殊代码。
- 如有必要,用户登录到基于 OAuth 2.0 的 IdP。
- 系统将提示用户授权客户端访问信息。
- 用户在原始设备提示符处确认访问。在这个示例中,用户在命令行中点 Enter 键。
- IdM KDC 后端轮询 OAuth 2.0 授权服务器以访问用户信息。
支持什么:
-
启用了
键盘互动验证方法通过 Secure Shell (SSH)远程登录,它允许调用可插拔验证模块(PAM)库。 -
通过
logind服务,使用控制台本地登录。 -
使用
kinit工具检索 Kerberos TGT。
当前不支持什么:
- 直接登录到 IdM WebUI。要登录到 IdM WebUI,您必须首先获取一个 Kerberos ticket。
- 直接登录 Cockpit WebUI。要登录 Cockpit Web UI,您必须首先获取一个 Kerberos ticket。
115.3. 使用 Ansible 创建到外部身份提供者的引用 复制链接链接已复制到粘贴板!
要将外部身份提供者(IdP)连接到您的身份管理(IdM)环境,请在 IdM 中创建 IdP 引用。完成此流程,以使用 idp ansible-freeipa 模块配置到 github 外部 IdP 的引用。
先决条件
您已将 IdM 作为 OAuth 应用程序注册到外部 IdP,并在设备上生成了 IdM 用户将用来向 IdM 进行身份验证的客户端 ID 和客户端 secret 。示例假定:
- my_github_account_name 是 github 用户,其帐户将被 IdM 用户用于向 IdM 进行身份验证。
-
客户端 ID为 2efe1acffe9e8ab869f4。 -
客户端 secret为 656a5228abc5f9545c85fa626aecbf69312d398c。
- 您的 IdM 服务器使用 RHEL 8.7 或更高版本。
- 您的 IdM 服务器使用 SSSD 2.7.0 或更高版本。
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已在 Ansible 控制器上安装了
ansible-freeipa软件包。 - 您使用 RHEL 8.10 或更高版本。
- 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
流程
在 Ansible 控制节点上,创建一个 configure-external-idp-reference.yml playbook:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory configure-external-idp-reference.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory configure-external-idp-reference.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在 IdM 客户端上,验证
ipa idp-show命令的输出是否显示您创建的 IdP 引用。ipa idp-show github_idp
[idmuser@idmclient ~]$ ipa idp-show github_idpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
115.4. 使用 Ansible ,以使 IdM 用户能够通过外部 IdP 进行身份验证 复制链接链接已复制到粘贴板!
您可以使用 user ansible-freeipa 模块,以使身份管理(IdM)用户能够通过外部身份提供者(IdP)进行身份验证。为此,将之前创建的外部 IdP 引用与 IdM 用户帐户相关联。完成此流程,以使用 Ansible 将名为 github_idp 的外部 IdP 参考与名为 idm-user-with-external-idp 的 IdM 用户相关联。因此,用户可以使用 my_github_account_name github 身份作为 idm-user-with-external-idp 进行身份验证。
先决条件
- 您的 IdM 客户端和服务器使用 RHEL 8.7 或更高版本。
- 您的 IdM 客户端和服务器使用 SSSD 2.7.0 或更高版本。
- 您已在 IdM 中创建了到外部 IdP 的引用。请参阅 使用 Ansible 创建到外部身份提供者的引用。
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已在 Ansible 控制器上安装了
ansible-freeipa软件包。 - 您使用 RHEL 8.10 或更高版本。
- 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
流程
在 Ansible 控制节点上,创建一个 enable-user-to-authenticate-via-external-idp.yml playbook:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory enable-user-to-authenticate-via-external-idp.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory enable-user-to-authenticate-via-external-idp.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
登录到 IdM 客户端,并验证 idm-user-with-external-idp 用户的
ipa user-show命令的输出是否显示到 IdP 的引用:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
115.5. 以外部 IdP 用户身份检索 IdM 票据授予票据 复制链接链接已复制到粘贴板!
如果您已将身份管理(IdM)用户的身份验证委派给外部身份提供者(IdP),则 IdM 用户可以通过认证到外部 IdP 来请求 Kerberos 票据授予票据(TGT)。
完成此流程,来:
- 在本地检索和存储匿名 Kerberos 票据。
-
使用
kinit和-T选项为 idm-user-with-external-idp 用户请求 TGT,以通过 Secure Tunneling (FAST)渠道启用灵活的身份验证,来在 Kerberos 客户端和 Kerberos 分发中心(KDC)之间提供安全连接。
先决条件
- 您的 IdM 客户端和服务器使用 RHEL 8.7 或更高版本。
- 您的 IdM 客户端和服务器使用 SSSD 2.7.0 或更高版本。
- 您已在 IdM 中创建了到外部 IdP 的引用。请参阅 使用 Ansible 创建到外部身份提供者的引用。
- 您已与用户帐户关联了一个外部 IdP 参考。请参阅 使用 Ansible ,使 IdM 用户能够通过外部 IdP 进行身份验证。
- 您最初以其身份登录的用户对本地文件系统上的目录有写权限。
流程
使用 Anonymous PKINIT 获取 Kerberos 票据,并将其存储在名为
./fast.ccache的文件中。kinit -n -c ./fast.ccache
$ kinit -n -c ./fast.ccacheCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:查看检索到的票据:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以 IdM 用户身份开始身份验证,使用
-T选项启用 FAST 通信渠道。kinit -T ./fast.ccache idm-user-with-external-idp Authenticate at https://oauth2.idp.com:8443/auth/realms/master/device?user_code=YHMQ-XKTL and press ENTER.:
[root@client ~]# kinit -T ./fast.ccache idm-user-with-external-idp Authenticate at https://oauth2.idp.com:8443/auth/realms/master/device?user_code=YHMQ-XKTL and press ENTER.:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 在浏览器中,以命令输出中提供的网站的用户身份进行身份验证。
- 在命令行中,按 Enter 键来完成身份验证过程。
验证
显示您的 Kerberos ticket 信息,并确认对于带有外部 IdP 的预身份验证的行
config: pa_type显示152。Copy to Clipboard Copied! Toggle word wrap Toggle overflow pa_type = 152表示外部 IdP 身份验证。
115.6. 以外部 IdP 用户身份通过 SSH 登录到 IdM 客户端 复制链接链接已复制到粘贴板!
要以外部身份提供者(IdP) 用户的身份通过 SSH 登录到 IdM 客户端,请在命令行上开始登录过程。出现提示时,在与 IdP 关联的网站上执行身份验证过程,并在 Identity Management (IdM) 客户端上完成该过程。
先决条件
- 您的 IdM 客户端和服务器使用 RHEL 8.7 或更高版本。
- 您的 IdM 客户端和服务器使用 SSSD 2.7.0 或更高版本。
- 您已在 IdM 中创建了到外部 IdP 的引用。请参阅 使用 Ansible 创建到外部身份提供者的引用。
- 您已与用户帐户关联了一个外部 IdP 参考。请参阅 使用 Ansible ,使 IdM 用户能够通过外部 IdP 进行身份验证。
流程
尝试通过 SSH 登录到 IdM 客户端。
ssh idm-user-with-external-idp@client.idm.example.com (idm-user-with-external-idp@client.idm.example.com) Authenticate at https://oauth2.idp.com:8443/auth/realms/main/device?user_code=XYFL-ROYR and press ENTER.
[user@client ~]$ ssh idm-user-with-external-idp@client.idm.example.com (idm-user-with-external-idp@client.idm.example.com) Authenticate at https://oauth2.idp.com:8443/auth/realms/main/device?user_code=XYFL-ROYR and press ENTER.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 在浏览器中,以命令输出中提供的网站的用户身份进行身份验证。
- 在命令行中,按 Enter 键来完成身份验证过程。
验证
显示您的 Kerberos ticket 信息,并确认对于带有外部 IdP 的预身份验证的行
config: pa_type显示152。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
115.7. ipaidp Ansible 模块中的 provider 选项 复制链接链接已复制到粘贴板!
以下身份提供者 (IdP) 支持 OAuth 2.0 设备授权流:
- Microsoft Identity Platform,包括 Azure AD
- GitHub
- Keycloak,包括 Red Hat Single Sign-On (SSO)
- Okta
当使用 idp ansible-freeipa 模块创建到这些外部 IdP 中的一个的引用时,您可以在 ipaidp ansible-freeipa playbook 任务中使用 provider 选项指定 IdP 类型,它扩展到其它选项,如下所述:
provider: microsoftMicrosoft Azure IdP 允许基于 Azure 租户 ID 的半虚拟化,您可以使用
organization选项指定。如果您需要支持 live.com IdP ,请指定选项organization common。选择
provider: microsoft扩展,以使用以下选项。organization选项的值替换表中的字符串${ipaidporg}。Expand 选项 value auth_uri: URIhttps://login.microsoftonline.com/${ipaidporg}/oauth2/v2.0/authorizedev_auth_uri: URIhttps://login.microsoftonline.com/${ipaidporg}/oauth2/v2.0/devicecodetoken_uri: URIhttps://login.microsoftonline.com/${ipaidporg}/oauth2/v2.0/tokenuserinfo_uri: URIhttps://graph.microsoft.com/oidc/userinfokeys_uri: URIhttps://login.microsoftonline.com/common/discovery/v2.0/keysscope: STRopenid emailidp_user_id: STRemailprovider: google选择
provider: google扩展,以使用以下选项:Expand 选项 value auth_uri: URIhttps://accounts.google.com/o/oauth2/authdev_auth_uri: URIhttps://oauth2.googleapis.com/device/codetoken_uri: URIhttps://oauth2.googleapis.com/tokenuserinfo_uri: URIhttps://openidconnect.googleapis.com/v1/userinfokeys_uri: URIhttps://www.googleapis.com/oauth2/v3/certsscope: STRopenid emailidp_user_id: STRemailprovider: github选择
provider: github扩展,以使用以下选项:Expand 选项 value auth_uri: URIhttps://github.com/login/oauth/authorizedev_auth_uri: URIhttps://github.com/login/device/codetoken_uri: URIhttps://github.com/login/oauth/access_tokenuserinfo_uri: URIhttps://openidconnect.googleapis.com/v1/userinfokeys_uri: URIhttps://api.github.com/userscope: STRuseridp_user_id: STRloginprovider: keycloak使用 Keycloak 时,您可以定义多个域或机构。由于它通常是自定义部署的一部分,因此基本 URL 和域 ID 是必需的,您可以在
ipaidpplaybook 任务中使用base_url和organization选项指定它们:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 选择
provider: keycloak扩展,以使用以下选项。您在base_url选项中指定的值替换表中的字符串${ipaidpbaseurl},您为organization 选项指定的值替换字符串 '${ipaidporg}。Expand 选项 value auth_uri: URIhttps://${ipaidpbaseurl}/realms/${ipaidporg}/protocol/openid-connect/authdev_auth_uri: URIhttps://${ipaidpbaseurl}/realms/${ipaidporg}/protocol/openid-connect/auth/devicetoken_uri: URIhttps://${ipaidpbaseurl}/realms/${ipaidporg}/protocol/openid-connect/tokenuserinfo_uri: URIhttps://${ipaidpbaseurl}/realms/${ipaidporg}/protocol/openid-connect/userinfoscope: STRopenid emailidp_user_id: STRemailprovider: okta在注册一个 Okta 中的新机构后,会关联一个新的基本 URL。您可以在
ipaidpplaybook 任务中使用base_url选项指定这个基本 URL:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 选择
provider: okta扩展,以使用以下选项。您为base_url选项指定的值替换表中的字符串${ipaidpbaseurl}。Expand 选项 value auth_uri: URIhttps://${ipaidpbaseurl}/oauth2/v1/authorizedev_auth_uri: URIhttps://${ipaidpbaseurl}/oauth2/v1/device/authorizetoken_uri: URIhttps://${ipaidpbaseurl}/oauth2/v1/tokenuserinfo_uri: URIhttps://${ipaidpbaseurl}/oauth2/v1/userinfoscope: STRopenid emailidp_user_id: STRemail
第 116 章 IdM 与红帽产品集成 复制链接链接已复制到粘贴板!
查找与 IdM 集成的其他红帽产品的文档。您可以配置这些产品,以允许 IdM 用户可以访问它们的服务。
第 117 章 使用 Ansible 将 IdM 与 NIS 域和网络组集成 复制链接链接已复制到粘贴板!
117.1. NIS 及其优点 复制链接链接已复制到粘贴板!
在 UNIX 环境中,网络信息服务(NIS)是集中管理身份和身份验证的通用方法。NIS 最初被命名为 Yellow Pages (YP),集中管理身份验证和身份信息,例如:
- 用户和密码
- 主机名和 IP 地址
- POSIX 组
对于现代网络基础架构,NIS 被视为不安全,因为,例如它既不提供主机身份验证,也不会通过网络发送加密的数据。要临时解决这个问题,NIS 通常会与其他协议集成以增强安全性。
如果您使用身份管理(IdM),您可以使用 NIS 服务器插件连接无法完全迁移到 IdM 的客户端。IdM 将 netgroups 和其他 NIS 数据集成到 IdM 域中。另外,您可以轻松地将用户和主机身份从 NIS 域迁移到 IdM。
netgroups 可用在 NIS 组期望的任何位置。
117.2. IdM 中的 NIS 复制链接链接已复制到粘贴板!
IdM 中的 NIS 对象
按照 RFC 2307,NIS 对象集成并存储在目录服务器后端。IdM 在 LDAP 目录中创建 NIS 对象,客户端通过系统安全服务守护进程(SSSD)或使用加密的 LDAP 连接的 nss_ldap 来检索它们。
IdM 管理 netgroups、帐户、组、主机和其他数据。IdM 使用 NIS 侦听器将密码、组和 netgroups 映射到 IdM 条目。
IdM 中的 NIS 插件
对于 NIS 支持,IdM 使用 slapi-nis 软件包中提供的以下插件:
- NIS 服务器插件
- NIS 服务器插件使 IdM 集成的 LDAP 服务器能够充当客户端的 NIS 服务器。在此角色中,目录服务器会根据配置动态生成和更新 NIS 映射。使用插件,IdM 作为 NIS 服务器为使用 NIS 协议的客户端提供服务。
- 模式兼容性插件
模式兼容性插件可使目录服务器后端提供存储在目录信息树(DIT)部分中条目的一个替代视图。这包括添加、删除或重命名属性值,以及可选择从树中的多个条目检索属性值。
详情请查看
/usr/share/doc/slapi-nis-version/sch-getting-started.txt文件。
117.3. IdM 中的 NIS netgroups 复制链接链接已复制到粘贴板!
NIS 实体可以存储在 netgroups 中。与 UNIX 组相比, netgroups 为以下情况提供支持:
- 嵌套组(作为其他组成员的组)。
- 对主机进行分组。
netgroup 定义一组以下信息: 主机、用户和域。这个集合被称为 triple。这三个字段可以包含:
- 值。
-
短划线(
-),其指定 "no valid value" - 无值。空字段指定一个通配符。
(host.example.com,,nisdomain.example.com) (-,user,nisdomain.example.com)
(host.example.com,,nisdomain.example.com)
(-,user,nisdomain.example.com)
当客户端请求 NIS netgroup 时,IdM 将 LDAP 条目转换为:
- 传统的 NIS 映射,并使用 NIS 插件将其通过 NIS 协议发送到客户端。
- 与 RFC 2307 或 RFC 2307bis 兼容的 LDAP 格式。
117.4. 使用 Ansible 确保 netgroup 存在 复制链接链接已复制到粘贴板!
您可以使用 Ansible playbook 确保 IdM netgroup 存在。这个示例描述了如何确保 TestNetgroup1 组存在。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已在 Ansible 控制器上安装了
ansible-freeipa软件包。 - 您已在 ~/MyPlaybooks/ 目录中创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
您已将
ipaadmin_password存储在 secret.yml Ansible vault 中。
流程
使用以下内容创建您的 Ansible playbook 文件 netgroup-present.yml :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/netgroup-present.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/netgroup-present.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
117.5. 使用 Ansible 确保成员在 netgroup 中存在 复制链接链接已复制到粘贴板!
您可以使用 Ansible playbook 确保 IdM 用户、组和 netgroups 是 netgroup 的成员。这个示例描述了如何确保 TestNetgroup1 有以下成员:
- user1 和 user2 IdM 用户
- group1 IdM 组
- admins netgroup
- 是 IdM 客户端的 idmclient1 主机
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已在 Ansible 控制器上安装了
ansible-freeipa软件包。 - 您已在 ~/MyPlaybooks/ 目录中创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
您已将
ipaadmin_password存储在 secret.yml Ansible vault 中。
- TestNetgroup1 IdM netgroup 已存在。
- user1 和 user2 IdM 用户已存在。
- group1 IdM 组已存在。
- admins IdM netgroup 已存在。
流程
使用以下内容创建 Ansible playbook 文件 IdM-members-present-in-a-netgroup.yml :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/IdM-members-present-in-a-netgroup.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/IdM-members-present-in-a-netgroup.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
117.6. 使用 Ansible 确保一个成员在 netgroup 中不存在 复制链接链接已复制到粘贴板!
您可以使用 Ansible playbook 确保 IdM 用户是 netgroup 的成员。这个示例描述了如何确保 TestNetgroup1 组在其 members. netgroup 中没有 user1 IdM 用户
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已在 Ansible 控制器上安装了
ansible-freeipa软件包。 - 您已在 ~/MyPlaybooks/ 目录中创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
您已将
ipaadmin_password存储在 secret.yml Ansible vault 中。
- TestNetgroup1 netgroup 已存在。
流程
使用以下内容创建 Ansible playbook 文件 IdM-member-absent-from-a-netgroup.yml :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/IdM-member-absent-from-a-netgroup.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/IdM-member-absent-from-a-netgroup.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
117.7. 使用 Ansible 确保 netgroup 不存在 复制链接链接已复制到粘贴板!
您可以使用 Ansible playbook 确保 netgroup 在身份管理(IdM)中不存在。这个示例描述了如何确保 TestNetgroup1 组在 IdM 域中不存在。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已在 Ansible 控制器上安装了
ansible-freeipa软件包。 - 您已在 ~/MyPlaybooks/ 目录中创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
您已将
ipaadmin_password存储在 secret.yml Ansible vault 中。
流程
使用以下内容创建您的 Ansible playbook 文件 netgroup-absent.yml :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 playbook:
ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/netgroup-absent.yml
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/netgroup-absent.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 118 章 从 NIS 迁移到身份管理 复制链接链接已复制到粘贴板!
网络信息服务(NIS)服务器可以包含有关用户、组、主机、网络组和自动挂载映射的信息。作为系统管理员,您可以将这些条目类型、身份验证和授权从 NIS 服务器迁移到身份管理(IdM)服务器,以便在 IdM 服务器上执行所有用户管理操作。从 NIS 迁移到 IdM 还允许您访问更为安全的协议,如 Kerberos。
118.1. 在 IdM 中启用 NIS 复制链接链接已复制到粘贴板!
要允许 NIS 和 Identity Management(IdM)服务器之间的通信,您必须在 IdM 服务器中启用 NIS 兼容性选项。
先决条件
- 在 IdM 服务器中具有 root 访问权限。
流程
在 IdM 服务器中启用 NIS 侦听程序和兼容性插件:
ipa-nis-manage enable ipa-compat-manage enable
[root@ipaserver ~]# ipa-nis-manage enable [root@ipaserver ~]# ipa-compat-manage enableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 对于更严格的防火墙配置,请设置固定的端口。
例如,将端口设置为未使用的端口
514:ldapmodify -x -D 'cn=directory manager' -W dn: cn=NIS Server,cn=plugins,cn=config changetype: modify add: nsslapd-pluginarg0 nsslapd-pluginarg0: 514
[root@ipaserver ~]# ldapmodify -x -D 'cn=directory manager' -W dn: cn=NIS Server,cn=plugins,cn=config changetype: modify add: nsslapd-pluginarg0 nsslapd-pluginarg0: 514Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告为避免与其他服务冲突,请勿使用任何 1024 以上的端口号。
启用并启动端口映射器服务:
systemctl enable rpcbind.service systemctl start rpcbind.service
[root@ipaserver ~]# systemctl enable rpcbind.service [root@ipaserver ~]# systemctl start rpcbind.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启目录服务器:
systemctl restart dirsrv.target
[root@ipaserver ~]# systemctl restart dirsrv.targetCopy to Clipboard Copied! Toggle word wrap Toggle overflow
118.2. 将用户条目从 NIS 迁移到 IdM 复制链接链接已复制到粘贴板!
NIS passwd 映射包含有关用户的信息,如名称、UID、主组、GECOS、shell 和主目录。使用此数据将 NIS 用户帐户迁移到身份管理(IdM):
先决条件
- 在 NIS 服务器中具有 root 访问权限.
- 在 IdM 中启用了 NIS。
- NIS 服务器已加入 IdM。
- 您有可存储导入用户的 UID 的 ID 范围。
流程
安装
yp-tools软件包:yum install yp-tools -y
[root@nis-server ~]# yum install yp-tools -yCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 NIS 服务器中
创建包含以下内容的 /root/nis-users.sh脚本:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以 IdM
admin用户身份进行身份验证:kinit admin
[root@nis-server ~]# kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行脚本。例如:
sh /root/nis-users.sh nisdomain nis-server.example.com
[root@nis-server ~]# sh /root/nis-users.sh nisdomain nis-server.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要此脚本对名字和姓氏使用硬编码的值,并将密码设置为
passw0rd1。用户在下次登录时必须更改临时密码。
118.3. 将用户组从 NIS 迁移到 IdM 复制链接链接已复制到粘贴板!
NIS 组 映射包含有关组的信息,如组名称、GID 或组成员。使用此数据将 NIS 组迁移到身份管理(IdM):
先决条件
- 在 NIS 服务器中具有 root 访问权限.
- 在 IdM 中启用了 NIS。
- NIS 服务器已加入 IdM。
流程
安装
yp-tools软件包:yum install yp-tools -y
[root@nis-server ~]# yum install yp-tools -yCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 NIS 服务器中使用以下内容创建
/root/nis-groups.sh脚本:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意确保您的用户名不包含任何特殊字符,以确保成功迁移用户组。
以 IdM
admin用户身份进行身份验证:kinit admin
[root@nis-server ~]# kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行脚本。例如:
sh /root/nis-groups.sh nisdomain nis-server.example.com
[root@nis-server ~]# sh /root/nis-groups.sh nisdomain nis-server.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
118.4. 将主机条目从 NIS 迁移到 IdM 复制链接链接已复制到粘贴板!
NIS 主机 映射包含有关主机的信息,如主机名和 IP 地址。使用此数据将 NIS 主机条目迁移到身份管理(IdM):
当您在 IdM 中创建主机组时,会自动创建对应的 shadow NIS 组。不要在这些影子 NIS 组中使用 ipa netgroup-* 命令。使用 ipa netgroup-* 命令仅管理通过 netgroup-add 命令创建的原生网络组。
先决条件
- 在 NIS 服务器中具有 root 访问权限.
- 在 IdM 中启用了 NIS。
- NIS 服务器已加入 IdM。
流程
安装
yp-tools软件包:yum install yp-tools -y
[root@nis-server ~]# yum install yp-tools -yCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 NIS 服务器中使用以下内容创建
/root/nis-hosts.sh脚本:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以 IdM
admin用户身份进行身份验证:kinit admin
[root@nis-server ~]# kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行脚本。例如:
sh /root/nis-hosts.sh nisdomain nis-server.example.com
[root@nis-server ~]# sh /root/nis-hosts.sh nisdomain nis-server.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意此脚本不会迁移特殊的主机配置,如别名。
118.5. 将 netgroup 条目从 NIS 迁移到 IdM 复制链接链接已复制到粘贴板!
NIS netgroup 映射包含有关网络组的信息。使用此数据将 NIS 网络组迁移到身份管理(IdM):
先决条件
- 在 NIS 服务器中具有 root 访问权限.
- 在 IdM 中启用了 NIS。
- NIS 服务器已加入 IdM。
流程
安装
yp-tools软件包:yum install yp-tools -y
[root@nis-server ~]# yum install yp-tools -yCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 NIS 服务器中使用以下内容创建
/root/nis-netgroups.sh脚本:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以 IdM
admin用户身份进行身份验证:kinit admin
[root@nis-server ~]# kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行脚本。例如:
sh /root/nis-netgroups.sh nisdomain nis-server.example.com
[root@nis-server ~]# sh /root/nis-netgroups.sh nisdomain nis-server.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
118.6. 将自动挂载映射从 NIS 迁移到 IdM 复制链接链接已复制到粘贴板!
自动挂载映射是一系列嵌套的条目,它们定义位置(父条目)、关联的键和映射。将 NIS 自动挂载映射到身份管理(IdM):
先决条件
- 在 NIS 服务器中具有 root 访问权限.
- 在 IdM 中启用了 NIS。
- NIS 服务器已加入 IdM。
流程
安装
yp-tools软件包:yum install yp-tools -y
[root@nis-server ~]# yum install yp-tools -yCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 NIS 服务器的以下内容创建
/root/nis-automounts.sh脚本:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意脚本导出 NIS 自动挂载信息,为自动挂载位置和相关映射生成 LDAP 数据交换格式(LDIF),并将 LDIF 文件导入到 IdM 目录服务器。
以 IdM
admin用户身份进行身份验证:kinit admin
[root@nis-server ~]# kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行脚本。例如:
sh /root/nis-automounts.sh location nisdomain nis-server.example.com map_name[root@nis-server ~]# sh /root/nis-automounts.sh location nisdomain nis-server.example.com map_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 119 章 在 IdM 中使用自动挂载 复制链接链接已复制到粘贴板!
自动挂载是在多个系统间管理、组织和访问目录的一种方式。每当请求访问一个目录时,Automount 会自动挂载该目录。这在身份管理(IdM)域中工作良好,因为它允许您在域中的客户端上轻松共享目录。
这个示例使用以下场景:
- nfs-server.idm.example.com 是网络文件系统(NFS)服务器的完全限定域名(FQDN)。
为了简单起见,nfs-server.idm.example.com 是一个 IdM 客户端,为 raleigh 自动挂载位置提供映射。
注意自动挂载位置是一组唯一的 NFS 映射。理想情况下,这些映射都位于同一地理位置,例如:客户端可以从快速连接中受益,但这不是强制要求。
- NFS 服务器以读写形式导出 /exports/project 目录。
- 属于 developers 组的任何 IdM 用户都可以在使用 raleigh 自动挂载位置的任何 IdM 客户端中以 /devel/project/ 来访问导出的目录。
- idm-client.idm.example.com 是位于 raleigh 自动挂载位置的 IdM 客户端。
如果要使用 Samba 服务器而不是 NFS 服务器为 IdM 客户端提供共享,请参阅红帽知识库解决方案 如何在 IPA 环境中使用 Autofs 配置 Kerberos 化的 CIFS 挂载?。
119.1. IdM 中的 autofs 和自动挂载 复制链接链接已复制到粘贴板!
autofs 服务可根据需要自动化目录的挂载,方法是在目录被访问时,将 automount 守护进程定向到挂载目录。此外,在不活动一段时间后,autofs 将automount 定向到未卸载的自动挂载的目录。与静态挂载不同,按需挂载可节省系统资源。
- 自动挂载映射
在使用
autofs的系统上,automount配置存储在几个不同的文件中。主要的automount配置文件是/etc/auto.master,其中包含系统上automount的主映射以及相关的资源。此映射称为 自动挂载映射。/etc/auto.master配置文件包含 主映射。它可以包含对其他映射的引用。这些映射可以是直接的,也可以是间接的。直接映射使用挂载点的绝对路径名,而间接映射则使用相对路径名。- IdM 中的自动挂载配置
虽然
automount通常从本地/etc/auto.master和相关文件检索其映射数据,但它也可以从其他源检索映射数据。一个通用源是 LDAP 服务器。在身份管理(IdM)环境中,这是一个 389 目录服务器。如果使用
autofs的系统是 IdM 域中的一个客户端,则automount配置不会存储在本地配置文件中。相反,autofs配置(如映射、位置和密钥)作为 LDAP 条目存储在 IdM 目录中。例如,对于idm.example.comIdM 域,默认的 主映射 存储如下:dn: automountmapname=auto.master,cn=default,cn=automount,dc=idm,dc=example,dc=com objectClass: automountMap objectClass: top automountMapName: auto.master
dn: automountmapname=auto.master,cn=default,cn=automount,dc=idm,dc=example,dc=com objectClass: automountMap objectClass: top automountMapName: auto.masterCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如果使用 Red Hat Enterprise Linux Identity Management (IdM),您可以将 NFS 服务器加入到 IdM 域中。这可让您集中管理用户和组,并使用 Kerberos 进行身份验证、完整性保护和流量加密。
先决条件
- NFS 服务器已在 Red Hat Enterprise Linux Identity Management (IdM)域中 注册。
- NFS 服务器正在运行并已配置。
流程
以 IdM 管理员身份获取 kerberos 票据:
kinit admin
# kinit adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个
nfs/<FQDN>服务主体:ipa service-add nfs/nfs_server.idm.example.com
# ipa service-add nfs/nfs_server.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从 IdM 检索
nfs服务主体,并将其存储在/etc/krb5.keytab文件中:ipa-getkeytab -s idm_server.idm.example.com -p nfs/nfs_server.idm.example.com -k /etc/krb5.keytab
# ipa-getkeytab -s idm_server.idm.example.com -p nfs/nfs_server.idm.example.com -k /etc/krb5.keytabCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:显示
/etc/krb5.keytab文件中的主体:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,当您将主机加入到 IdM 域时,IdM 客户端会将主机主体添加到
/etc/krb5.keytab文件中。如果缺少主机主体,请使用ipa-getkeytab -s idm_server.idm.example.com -p host/nfs_server.idm.example.com -k /etc/krb5.keytab命令添加它。使用
ipa-client-automount工具配置 IdM ID 的映射:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新
/etc/exports文件,并将 Kerberos 安全方法添加到客户端选项中。例如:/nfs/projects/ 192.0.2.0/24(rw,sec=krb5i)
/nfs/projects/ 192.0.2.0/24(rw,sec=krb5i)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您希望客户端可以从多个安全方法中选择,请使用冒号分割它们:
/nfs/projects/ 192.0.2.0/24(rw,sec=krb5:krb5i:krb5p)
/nfs/projects/ 192.0.2.0/24(rw,sec=krb5:krb5i:krb5p)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新载入导出的文件系统:
exportfs -r
# exportfs -rCopy to Clipboard Copied! Toggle word wrap Toggle overflow
119.3. 使用 IdM CLI 在 IdM 中配置自动挂载位置和映射 复制链接链接已复制到粘贴板!
位置是一组映射,全部存储在 auto.master 中。一个位置可以存储多个映射。位置条目仅充当映射条目的容器;它本身并不是一个自动挂载配置。
作为身份管理(IdM)中的系统管理员,您可以在 IdM 中配置自动挂载位置和映射,以便指定位置中的 IdM 用户可以通过导航到其主机上的特定挂载点来访问 NFS 服务器导出的共享。导出的 NFS 服务器目录和挂载点都在映射中指定。这个示例描述了如何配置 raleigh 位置和映射,其将 nfs-server.idm.example.com:/exports/project 共享作为读写目录,挂载到 IdM 客户端上的 /devel/ 挂载点。
先决条件
- 您以 IdM 管理员的身份登录到任何注册了 IdM 的主机上。
流程
创建 raleigh 自动挂载位置:
ipa automountlocation-add raleigh ---------------------------------- Added automount location "raleigh" ---------------------------------- Location: raleigh
$ ipa automountlocation-add raleigh ---------------------------------- Added automount location "raleigh" ---------------------------------- Location: raleighCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 raleigh 位置创建一个 auto.devel 自动挂载映射:
ipa automountmap-add raleigh auto.devel -------------------------------- Added automount map "auto.devel" -------------------------------- Map: auto.devel
$ ipa automountmap-add raleigh auto.devel -------------------------------- Added automount map "auto.devel" -------------------------------- Map: auto.develCopy to Clipboard Copied! Toggle word wrap Toggle overflow 添加 exports/ 共享的密钥和挂载信息:
为 auto.devel 映射添加密钥和挂载信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 auto.master 映射添加密钥和挂载信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
119.4. 在 IdM 客户端上配置自动挂载 复制链接链接已复制到粘贴板!
作为身份管理(IdM)系统管理员,您可以在 IdM 客户端上配置自动挂载服务,以便在用户登录客户端时 IdM 用户可以自动访问为已添加客户端的位置配置的 NFS 共享。这个示例描述了如何配置 IdM 客户端,以使用 raleigh 位置中可用的 automount 服务。
先决条件
-
您有访问 IdM 客户端的
root权限。 - 以 IdM 管理员身份登录。
- 自动挂载位置存在。示例位置为 raleigh。
流程
在 IdM 客户端上,输入
ipa-client-automount命令并指定位置。使用-U选项以无人值守方式运行脚本:ipa-client-automount --location raleigh -U
# ipa-client-automount --location raleigh -UCopy to Clipboard Copied! Toggle word wrap Toggle overflow 停止 autofs 服务,清除 SSSD 缓存,然后启动 autofs 服务来加载新的配置设置:
systemctl stop autofs ; sss_cache -E ; systemctl start autofs
# systemctl stop autofs ; sss_cache -E ; systemctl start autofsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 121 章 IdM 日志文件和目录 复制链接链接已复制到粘贴板!
使用以下小节来监控、分析并排除 Identity Management (IdM) 的独立组件:
另外,您可以监控、分析 IdM 服务器和客户端 并对其进行故障排除, 并在 IdM 服务器中启用审计日志。
121.1. IdM 服务器和客户端日志文件和目录 复制链接链接已复制到粘贴板!
下表显示 Identity Management (IdM) 服务器和客户端用来记录信息的目录和文件。您可以使用文件和目录排除安装错误。
| 目录或文件 | 描述 |
|---|---|
|
| IdM 服务器的安装日志。 |
|
| IdM 副本的安装日志。 |
|
| IdM 客户端的安装日志。 |
|
| SSSD 的日志文件。您可以 在 sssd.conf 文件中为 SSSD 启用详细的日志记录 或 使用 sssctl 命令 。 |
|
|
日志文件,用于远程过程调用(RPC)返回的错误以及 |
|
| DNS、SSSD、Apache、Tomcat 和 Kerberos 的日志轮转策略。 |
|
|
这个链接指向 |
121.2. 目录服务器日志文件 复制链接链接已复制到粘贴板!
下表显示 Identity Management (IdM) 目录服务器 (DS) 实例用来记录信息的目录和文件。您可以使用文件和目录对 DS 相关问题进行故障排除。
| 目录或文件 | 描述 |
|---|---|
|
| 与 IdM 服务器使用的 DS 实例关联的日志文件。这里记录的大多数操作数据都与服务器数据交互相关。 |
|
| 包含在 DS 配置中启用审计时所有 DS 操作的审计跟踪。 注意
您还可以审核 IdM API 日志访问的 Apache 错误日志。但是,因为也可以直接通过 LDAP 进行更改,因此出于审计目的,红帽建议启用更全面的 |
|
| 包含有关试图访问域 DS 实例的详细信息。 |
|
| 包含有关对域 DS 实例的失败操作的详细信息。 |
121.3. 在 IdM 服务器中启用审计日志记录 复制链接链接已复制到粘贴板!
按照以下流程,为审计目的对身份管理(IdM)服务器启用日志记录。使用详细的日志,您可以监控数据、对问题进行故障排除,以及检查网络上的可疑活动。
如果记录了大量 LDAP 更改,则 LDAP 服务可能会变得较慢,特别是在值较大时。
先决条件
- Directory Manager 密码
流程
绑定到 LDAP 服务器:
ldapmodify -D "cn=Directory Manager" -W << EOF
$ ldapmodify -D "cn=Directory Manager" -W << EOFCopy to Clipboard Copied! Toggle word wrap Toggle overflow 指定您要进行的所有修改,例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
通过在新行中输入 EOF 来指示
ldapmodify命令的末尾。 - 按 [Enter] 两次。
- 在您要在其上启用审计日志的所有其他 IdM 服务器中重复前面的步骤。
验证
打开
/var/log/dirsrv/slapd-REALM_NAME/audit文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该文件不再为空,确认启用了审计。
系统会记录一个更改的条目的绑定 LDAP 可分辨名称(DN)。因此,您可能必须在对日志进行后处理。例如,在 IdM Directory 服务器中,它是一个 ID 覆盖 DN,它代表修改记录的 AD 用户的身份:
modifiersName: ipaanchoruuid=:sid:s-1-5-21-19610888-1443184010-1631745340-279100,cn=default trust view,cn=views,cn=accounts,dc=idma,dc=idm,dc=example,dc=com
$ modifiersName: ipaanchoruuid=:sid:s-1-5-21-19610888-1443184010-1631745340-279100,cn=default trust view,cn=views,cn=accounts,dc=idma,dc=idm,dc=example,dc=com
如果您有用户 SID,请使用 pysss_nss_idmap.getnamebysid Python 命令查找 AD 用户:
>>> import pysss_nss_idmap
>>> pysss_nss_idmap.getnamebysid('S-1-5-21-1273159419-3736181166-4190138427-500'))
{'S-1-5-21-1273159419-3736181166-4190138427-500': {'name': 'administrator@ad.vm', 'type': 3}}
>>> import pysss_nss_idmap
>>> pysss_nss_idmap.getnamebysid('S-1-5-21-1273159419-3736181166-4190138427-500'))
{'S-1-5-21-1273159419-3736181166-4190138427-500': {'name': 'administrator@ad.vm', 'type': 3}}
121.4. 修改 IdM 服务器上的错误日志 复制链接链接已复制到粘贴板!
按照以下流程获取有关特定类型错误的调试信息。该示例重点是通过将错误日志级别设为 8192 来获取有关复制的详细的错误日志。要记录不同类型的信息,请在 Red Hat Directory Server 文档中 错误日志记录级别 的表中选择不同的编号。
如果记录了很多类型的 LDAP 错误,则 LDAP 服务可能会变得很慢,特别是在值较大时。
先决条件
- 目录管理器密码。
流程
绑定到 LDAP 服务器:
ldapmodify -x -D "cn=directory manager" -w <password>
$ ldapmodify -x -D "cn=directory manager" -w <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定要进行的修改。例如,仅收集与复制相关的日志:
dn: cn=config changetype: modify add: nsslapd-errorlog-level nsslapd-errorlog-level: 8192
dn: cn=config changetype: modify add: nsslapd-errorlog-level nsslapd-errorlog-level: 8192Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
按 [Enter] 两次,表示
ldapmodify指令的结束。这将显示modifying entry "cn=config"消息。 -
按 [Ctrl+C] 退出
ldapmodify命令。 - 在您要在其上收集关于复制错误的详细日志的其他 IdM 服务器上重复前面的步骤。
完成故障排除后,将 nsslapd-errorlog-level 设回 0 以防止性能问题。
121.5. IdM Apache 服务器日志文件 复制链接链接已复制到粘贴板!
下表显示 Identity Management (IdM) Apache 服务器用来记录信息的目录和文件。
| 目录或文件 | 描述 |
|---|---|
|
| Apache Web 服务器的日志文件。 |
|
| Apache 服务器的标准访问和错误日志。特定于 IdM 的消息会和 Apache 信息一起记录,因为 IdM Web UI 和 RPC 命令行界面使用 Apache。访问日志主要仅用于用户主体和使用的 URI,通常是 RPC 端点。错误日志包含 IdM 服务器日志。 |
|
|
121.6. IdM 中的证书系统日志文件 复制链接链接已复制到粘贴板!
下表显示 Identity Management (IdM) 证书系统用来记录信息的目录和文件。
| 目录或文件 | 描述 |
|---|---|
|
| IdM 证书颁发机构 (CA) 的安装日志。 |
|
| IdM 密钥恢复授权 (KRA) 的安装日志。 |
|
| PKI 操作日志的顶级目录。包含 CA 和 KRA 日志。 |
|
| 包含与证书操作相关的日志的目录。在 IdM 中,这些日志用于服务主体、主机以及使用证书的其他实体。 |
|
| 包含与 KRA 相关的日志的目录。 |
|
| 包括其它系统消息中的证书错误消息。 |
121.7. IdM 中的 Kerberos 日志文件 复制链接链接已复制到粘贴板!
下表列出了 Kerberos 用来在 Identity Management (IdM) 中记录信息的目录和文件。
| 目录或文件 | 描述 |
|---|---|
|
| Kerberos KDC 服务器的主日志文件。 |
|
| Kerberos 管理服务器的主日志文件。 |
|
这些文件的位置在 | |
121.8. IdM 中的 DNS 日志文件 复制链接链接已复制到粘贴板!
下表列出了 DNS 用来在 Identity Management (IdM) 中记录信息的目录和文件。
| 目录或文件 | 描述 |
|---|---|
|
|
包括 DNS 错误消息和其他系统信息。默认情况下不启用此文件中的 DNS 日志记录。要启用它,请输入 |
121.9. IdM 中的 custodia 日志文件 复制链接链接已复制到粘贴板!
下表显示了 Custodia 用来记录 Identity Management (IdM) 中的目录和文件。
| 目录或文件 | 描述 |
|---|---|
|
| Custodia 服务的日志文件目录。 |
第 122 章 为 IdM 域中的 RHEL 8 web 控制台配置单点登录 复制链接链接已复制到粘贴板!
使用 RHEL 8 web 控制台中的 Identity Management (IdM)提供的单点登录(SSO)身份验证有以下优点:
- IdM 域中具有 Kerberos 票据的用户不需要提供登录凭证来访问 Web 控制台。
- IdM 证书颁发机构(CA)发布的证书的用户不需要提供登录凭证来访问 Web 控制台。Web 控制台服务器自动切换到 IdM 证书颁发机构发布的证书,并被浏览器接受。不需要证书配置。
配置登录到 RHEL web 控制台的 SSO 需要:
- 使用 RHEL 8 web 控制台将机器添加到 IdM 域中。
- 如果要使用 Kerberos 进行身份验证,您必须在机器上获得 Kerberos 票据。
- 允许 IdM 服务器上的管理员在任何主机上运行任何命令。
先决条件
RHEL web 控制台服务安装在 RHEL 8 系统中。
详情请参阅安装 Web 控制台。
IdM 客户端安装在运行 RHEL web 控制台服务的系统中。
详情请查看 IdM 客户端安装。
122.1. 使用 Kerberos 身份验证登录到 web 控制台 复制链接链接已复制到粘贴板!
作为身份管理(IdM)用户,您可以使用单点登录(SSO)身份验证来在浏览器中自动访问 RHEL web 控制台。
使用 SSO ,您通常在 Web 控制台中没有任何管理特权。这只有在您配置了无密码 sudo 时才有效。Web 控制台不以交互方式询问 sudo 密码。
先决条件
IdM 域可由 DNS 解析。例如,Kerberos 服务器的 SRV 记录可以被解析:
host -t SRV _kerberos._udp.idm.example.com _kerberos._udp.idm.example.com has SRV record 0 100 88 dc.idm.example.com
$ host -t SRV _kerberos._udp.idm.example.com _kerberos._udp.idm.example.com has SRV record 0 100 88 dc.idm.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您运行浏览器的系统是一个 RHEL 8 系统,并 加入到 IdM 域,则您使用与 web 控制台服务器相同的 DNS,且不需要 DNS 配置。
- 您已为 SSO 身份验证配置了 Web 控制台服务器。
- 运行 Web 控制台服务的主机是一个 IdM 客户端。
- 您已为 SSO 身份验证配置了 Web 控制台客户端。
流程
获取您的 Kerberos 票据授予票据:
kinit idmuser@IDM.EXAMPLE.COM Password for idmuser@IDM.EXAMPLE.COM:
$ kinit idmuser@IDM.EXAMPLE.COM Password for idmuser@IDM.EXAMPLE.COM:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入运行 Web 控制台服务的主机的完全限定名称:
https://<dns_name>:9090
https://<dns_name>:9090Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此时,您已成功连接到 RHEL web 控制台,您可以使用配置启动。例如,您可以在 web 控制台中将 RHEL 8 系统加入到 IdM 域中。
122.2. 使用 Web 控制台将 RHEL 8 系统添加到 IdM 域中 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台将 Red Hat Enterprise Linux 8 系统添加到 Identity Management (IdM)域中。
先决条件
- IdM 域正在运行,并可访问您想要加入的客户端。
- 您有 IdM 域管理员凭证。
- 您已安装了 RHEL 8 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
- 在 Overview 选项卡的 Configuration 字段中点 Join Domain。
- 在 Join a Domain 对话框的 Domain Address 字段中输入 IdM 服务器的主机名。
- 在 Domain administrator name 字段中输入 IdM 管理帐户的用户名。
- 在域 Domain administrator password 中添加密码。
- 点 。
验证
- 如果 RHEL 8 web 控制台没有显示错误,该系统就被加入到 IdM 域,您可以在 系统 屏幕中看到域名。
要验证该用户是否为域的成员,点 Terminal 页面并输入
id命令:id euid=548800004(example_user) gid=548800004(example_user) groups=548800004(example_user) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
$ id euid=548800004(example_user) gid=548800004(example_user) groups=548800004(example_user) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 123 章 在 IdM 中使用受限委托 复制链接链接已复制到粘贴板!
了解更多有关如何在身份管理(IdM)中使用受限委托功能的信息:
- 身份管理中的约束委托 描述了约束委托是如何工作的。
-
配置 Web 控制台以允许使用智能卡进行身份验证的用户 SSH 到远程主机,而无需再次进行身份验证 描述了使用 Red Hat Enterprise Linux web 控制台
SSH到远程主机,而无需进行身份验证情况下的受限委托的用例。 -
使用 Ansible 配置 Web 控制台,以允许通过智能卡进行身份验证的用户可以 SSH 到远程主机,而无需再次要求进行身份验证 描述了使用 Ansible 配置使用 Red Hat Enterprise Linux Web 控制台
SSH到远程主机,而无需进行身份验证情况下的受限委托的用例。 -
配置 Web 控制台客户端以允许使用智能卡进行身份验证的用户运行 sudo,而无需要求进行身份验证 描述了在使用 Red Hat Enterprise Linux Web 控制台运行
sudo而无需身份验证的上下文中约束委托的用例。 -
使用 Ansible 配置 Web 控制台,以使通过智能卡进行身份验证的用户能够运行 sudo ,而无需再次要求进行身份验证 描述了使用 Ansible 配置 Red Hat Enterprise Linux web 控制台以运行
sudo,而无需进行身份验证情况下的受限委托的用例。
123.1. 身份管理中的受限委托 复制链接链接已复制到粘贴板!
用户到代理 (S4U2proxy) 扩展的服务为代表用户的另一服务获取服务票据。此功能称为受限委托。第二个服务通常是在用户的授权上下文下代表第一个服务执行某些工作的代理。使用受限委托无需用户委派其完整票据授予票 (TGT)。
身份管理 (IdM) 通常使用 Kerberos S4U2proxy 功能来允许 Web 服务器框架代表用户获取 LDAP 服务票据。IdM-AD 信任系统也使用受限委托来获取 cifs 主体。
您可以使用 S4U2proxy 功能配置 Web 控制台客户端,以允许使用智能卡进行身份验证的 IdM 用户来实现以下内容:
- 在运行 web 控制台服务的 RHEL 主机上以超级用户权限运行命令,而无需再次进行身份验证。
-
使用
SSH访问远程主机并访问主机上的服务,而无需再次进行身份验证。
在 RHEL web 控制台中登录到用户帐户后,您可以使用 SSH 协议连接到远程机器。您可以使用受限委托功能来使用 SSH,而无需再次进行身份验证。
在示例流程中,web 控制台会话在 myhost.idm.example.com 主机上运行,并将控制台配置为代表经过身份验证的用户使用 SSH 访问 remote.idm.example.com 主机。
先决条件
-
您已获得 IdM
admin票据授予票(TGT)。 -
您有访问
remote.idm.example.com的root权限。 -
cockpit服务在 IdM 中运行。 Web 控制台在用户会话中创建了一个
S4U2ProxyKerberos ticket。要验证它,以 IdM 用户身份登录 Web 控制台,打开Terminal页面,并输入:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
创建委派规则可访问的目标主机列表:
创建服务委托目标:
ipa servicedelegationtarget-add cockpit-target
$ ipa servicedelegationtarget-add cockpit-targetCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将目标主机添加到委派目标:
ipa servicedelegationtarget-add-member cockpit-target \ --principals=host/remote.idm.example.com@IDM.EXAMPLE.COM
$ ipa servicedelegationtarget-add-member cockpit-target \ --principals=host/remote.idm.example.com@IDM.EXAMPLE.COMCopy to Clipboard Copied! Toggle word wrap Toggle overflow
通过创建服务委派规则并将 HTTP 服务 Kerberos 主体添加到其中,允许
cockpit会话访问目标主机列表:创建服务委派规则:
ipa servicedelegationrule-add cockpit-delegation
$ ipa servicedelegationrule-add cockpit-delegationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 Web 控制台客户端添加到委派规则中:
ipa servicedelegationrule-add-member cockpit-delegation \ --principals=HTTP/myhost.idm.example.com@IDM.EXAMPLE.COM
$ ipa servicedelegationrule-add-member cockpit-delegation \ --principals=HTTP/myhost.idm.example.com@IDM.EXAMPLE.COMCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将委派目标添加到委派规则中:
ipa servicedelegationrule-add-target cockpit-delegation \ --servicedelegationtargets=cockpit-target
$ ipa servicedelegationrule-add-target cockpit-delegation \ --servicedelegationtargets=cockpit-targetCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在 remote.idm.example.com 主机上启用 Kerberos 身份验证:
-
以
root身份通过 SSH 连接到 remote.idm.example.com。 -
打开
/etc/ssh/sshd_config文件进行编辑。 -
通过取消注释
GSSAPIAuthentication no行,并使用GSSAPIAuthentication yes替换它来启用GSSAPIAuthentication。
-
以
在 remote.idm.example.com 上重启
sshd服务,以便更改生效:systemctl try-restart sshd.service
$ systemctl try-restart sshd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在 RHEL web 控制台中登录到用户帐户后,您可以使用 SSH 协议连接到远程机器。您可以使用 servicedelegationrule 和 servicedelegationtarget 模块为受限委托功能配置 Web 控制台,这将启用 SSH 连接,而无需再次进行身份验证。
在示例流程中,web 控制台会话在 myhost.idm.example.com 主机上运行,并将它配置为代表经过身份验证的用户使用 SSH 访问 remote.idm.example.com 主机。
先决条件
-
IdM
admin密码。 -
对
remote.idm.example.com的root访问权限。 - Web 控制台服务在 IdM 中运行。
Web 控制台在用户会话中创建了一个
S4U2ProxyKerberos ticket。要验证它,以 IdM 用户身份登录 Web 控制台,打开Terminal页面,并输入:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
进入您的 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建包含以下内容的
web-console-smart-card-ssh.ymlplaybook:创建确保存在委派目标的任务:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加将目标主机添加到委派目标的任务:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加一个任务来确保存在委派规则:
- name: Ensure servicedelegationrule delegation-rule is present ipaservicedelegationrule: ipaadmin_password: "{{ ipaadmin_password }}" name: web-console-delegation-rule- name: Ensure servicedelegationrule delegation-rule is present ipaservicedelegationrule: ipaadmin_password: "{{ ipaadmin_password }}" name: web-console-delegation-ruleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 添加一项任务,该任务确保 Web 控制台客户端服务的 Kerberos 主体是受限委派规则的成员:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加一个任务,以确保 delegation 规则与 web-console-delegation-target 委派目标关联:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护
secret.yml文件和清单文件的密码的文件:ansible-playbook --vault-password-file=password_file -v -i inventory web-console-smart-card-ssh.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory web-console-smart-card-ssh.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
remote.idm.example.com上启用 Kerberos 身份验证:-
以
root身份通过 SSH 连接到remote.idm.example.com。 -
打开
/etc/ssh/sshd_config文件进行编辑。 -
通过取消注释
GSSAPIAuthentication no行,并使用GSSAPIAuthentication yes替换它来启用GSSAPIAuthentication。
-
以
在
remote.idm.example.com上重启sshd服务,以便更改生效:systemctl try-restart sshd.service
$ systemctl try-restart sshd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
123.4. 配置 Web 控制台,以允许使用智能卡进行身份验证的用户运行 sudo,而无需要求再次进行身份验证 复制链接链接已复制到粘贴板!
登录到 RHEL web 控制台上的用户帐户后,作为身份管理(IdM)系统管理员,您可能需要使用超级用户权限运行命令。您可以使用 约束委托 功能来在系统上运行 sudo,而无需要求再次进行身份验证。
按照以下流程,将 Web 控制台配置为使用受限的委托。在以下示例中,Web 控制台会话运行在myhost.idm.example.com主机上。
先决条件
-
您已获得 IdM
admin票据授予票(TGT)。 - Web 控制台服务在 IdM 中存在。
- myhost.idm.example.com 主机在 IdM 中存在。
-
您已为 IdM 服务器上的域管理员启用了
adminsudo访问权限。详情请参阅 在 IdM 主机上为 IdM 管理员启用 sudo 访问权限。 Web 控制台在用户会话中创建了一个
S4U2ProxyKerberos ticket。要验证是否是这种情况,请以 IdM 用户身份登录 Web 控制台,打开Terminal页面,并输入:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
创建可以通过委派规则访问的目标主机列表:
创建服务委托目标:
ipa servicedelegationtarget-add cockpit-target
$ ipa servicedelegationtarget-add cockpit-targetCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将目标主机添加到委派目标:
ipa servicedelegationtarget-add-member cockpit-target \ --principals=host/myhost.idm.example.com@IDM.EXAMPLE.COM
$ ipa servicedelegationtarget-add-member cockpit-target \ --principals=host/myhost.idm.example.com@IDM.EXAMPLE.COMCopy to Clipboard Copied! Toggle word wrap Toggle overflow
通过创建服务委派规则并将
HTTP服务 Kerberos 主体添加到其中,允许cockpit会话访问目标主机列表:创建服务委派规则:
ipa servicedelegationrule-add cockpit-delegation
$ ipa servicedelegationrule-add cockpit-delegationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 Web 控制台服务添加到委派规则中:
ipa servicedelegationrule-add-member cockpit-delegation \ --principals=HTTP/myhost.idm.example.com@IDM.EXAMPLE.COM
$ ipa servicedelegationrule-add-member cockpit-delegation \ --principals=HTTP/myhost.idm.example.com@IDM.EXAMPLE.COMCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将委派目标添加到委派规则中:
ipa servicedelegationrule-add-target cockpit-delegation \ --servicedelegationtargets=cockpit-target
$ ipa servicedelegationrule-add-target cockpit-delegation \ --servicedelegationtargets=cockpit-targetCopy to Clipboard Copied! Toggle word wrap Toggle overflow
启用
pam_sss_gss,用来通过通用安全服务应用程序接口(GSSAPI)与系统安全服务守护进程(SSSD)合作来验证用户的 PAM 模块:-
打开
/etc/sssd/sssd.conf文件进行编辑。 指定
pam_sss_gss可以为 IdM 域中的sudo和sudo -i命令提供身份验证:[domain/idm.example.com] pam_gssapi_services = sudo, sudo-i
[domain/idm.example.com] pam_gssapi_services = sudo, sudo-iCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存并退出文件。
-
打开
/etc/pam.d/sudo文件进行编辑。 将以下行插入到
#%PAM-1.0列表的顶部以允许但不要求sudo命令的 GSSAPI 身份验证:auth sufficient pam_sss_gss.so
auth sufficient pam_sss_gss.soCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存并退出文件。
-
打开
重启
SSSD服务,以便上述更改立即生效:systemctl restart sssd
$ systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
登录到 RHEL web 控制台上的用户帐户后,作为身份管理(IdM)系统管理员,您可能需要使用超级用户权限运行命令。您可以使用 受限委托 功能在系统上运行 sudo,而无需再次进行身份验证。
按照以下流程,使用 ipaservicedelegationrule 和 ipaservicedelegationtarget ansible-freeipa 模块将 Web 控制台配置为使用受限的委托。在以下示例中,Web 控制台会话运行在myhost.idm.example.com主机上。
先决条件
-
您已通过使用智能卡向 web 控制台会话进行身份验证,而获得了一个 IdM
admin票据授予票(TGT)。 - Web 控制台服务已注册到 IdM 。
- myhost.idm.example.com 主机在 IdM 中存在。
-
您已为 IdM 服务器上的域管理员启用了
adminsudo访问权限。详情请参阅 在 IdM 主机上为 IdM 管理员启用 sudo 访问权限。 Web 控制台在用户会话中创建了一个
S4U2ProxyKerberos ticket。要验证是否是这种情况,请以 IdM 用户身份登录 Web 控制台,打开Terminal页面,并输入:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个 Ansible 清单文件,其中包含您要配置受限委托的 IdM 服务器的完全限定域名(FQDN)。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password。
-
目标节点(这是执行
ansible-freeipa模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
在 Ansible 控制节点上,导航到 ~/MyPlaybooks/ 目录:
cd ~/MyPlaybooks/
$ cd ~/MyPlaybooks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下内容创建
web-console-smart-card-sudo.ymlplaybook:创建确保存在委派目标的任务:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加将目标主机添加到委派目标的任务:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加一个任务来确保存在委派规则:
- name: Ensure servicedelegationrule named sudo-web-console-delegation-rule is present ipaservicedelegationrule: ipaadmin_password: "{{ ipaadmin_password }}" name: sudo-web-console-delegation-rule- name: Ensure servicedelegationrule named sudo-web-console-delegation-rule is present ipaservicedelegationrule: ipaadmin_password: "{{ ipaadmin_password }}" name: sudo-web-console-delegation-ruleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 添加一个任务,确保 Web 控制台服务的 Kerberos 主体是约束委派规则的一个成员:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加一个任务,确保约束委派规则与 sudo-web-console-delegation-target 委派目标关联:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
ansible-playbook --vault-password-file=password_file -v -i inventory web-console-smart-card-sudo.yml
$ ansible-playbook --vault-password-file=password_file -v -i inventory web-console-smart-card-sudo.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启用
pam_sss_gss,用来通过通用安全服务应用程序接口(GSSAPI)与系统安全服务守护进程(SSSD)合作来验证用户的 PAM 模块:-
打开
/etc/sssd/sssd.conf文件进行编辑。 指定
pam_sss_gss可以为 IdM 域中的sudo和sudo -i命令提供身份验证:[domain/idm.example.com] pam_gssapi_services = sudo, sudo-i
[domain/idm.example.com] pam_gssapi_services = sudo, sudo-iCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存并退出文件。
-
打开
/etc/pam.d/sudo文件进行编辑。 将以下行插入到
#%PAM-1.0列表的顶部以允许但不要求sudo命令的 GSSAPI 身份验证:auth sufficient pam_sss_gss.so
auth sufficient pam_sss_gss.soCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存并退出文件。
-
打开
重启
SSSD服务,以便上述更改立即生效:systemctl restart sssd
$ systemctl restart sssdCopy to Clipboard Copied! Toggle word wrap Toggle overflow