使用 Ansible 安装和管理身份管理
使用 Ansible 维护 IdM 环境
摘要
ansible-freeipa
软件包,使管理员能够使用 Ansible 运行 Red Hat Identity Management (IdM)。您可以使用 playbook 安装 IdM 并管理用户、组、主机、访问控制和配置设置。
对红帽文档提供反馈
我们感谢您对我们文档的反馈。让我们了解如何改进它。
通过 Jira 提交反馈(需要帐户)
- 登录到 Jira 网站。
- 单击顶部导航栏中的 Create。
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入您对改进的建议。包括到文档相关部分的链接。
- 点对话框底部的 Create。
第 1 章 Ansible 术语
此标题中的章节使用官方 Ansible 术语。如果您不熟悉术语,请先阅读 Ansible 上游官方文档,然后再继续,特别是以下部分:
- Ansible 部分中的基本概念 概述了 Ansible 中最常使用的概念。
- 用户指南概述了开始使用 Ansible 时最常见的情况和问题,例如使用命令行;使用清单;与数据交互;编写任务、play 和 playbook;以及执行 playbook。
- 如何构建您的清单,提供了有关如何设计清单的提示。清单 (inventory) 是 Ansible 用于针对基础架构中的多个受管节点或主机的一组列表。
- Playbook 简介引入了 Ansible playbook 的概念,作为可重复和可重复使用的系统来管理配置、部署机器和部署复杂应用。
- Ansible roles 部分中介绍如何根据已知的文件结构自动加载变量、任务和处理程序。
- Glossary 解释了 Ansible 文档其中使用的术语。
第 2 章 使用 Ansible playbook 来安装身份管理服务器
了解如何使用 Ansible 将系统配置为 IdM 服务器。将系统配置为 IdM 服务器建立 IdM 域并让系统向 IdM 客户端提供 IdM 服务。您可以使用 ipaserver
Ansible 角色来管理部署。
先决条件
- 您了解了一般的 Ansible 和 IdM 概念。
2.1. Ansible 及其安装 IdM 的优点
Ansible 是一个自动化工具,用于配置系统、部署软件和执行滚动更新。Ansible 包含对身份验证(IdM)的支持,您可以使用 Ansible 模块来自动执行安装任务,如 IdM 服务器、副本、客户端或整个 IdM 拓扑的设置。
使用 Ansible 安装 IdM 的优点
以下列表提供了使用 Ansible 安装身份管理与手动安装的优点。
- 您不需要登录受管节点。
- 您不需要配置每个主机上的设置来单独部署。反之,您可以有一个清单文件来部署完整的集群。
- 您可以稍后重复将清单文件用于管理任务,例如添加用户和主机。即使与 IdM 相关的任务,也可以重复使用清单文件。
2.2. 安装 ansible-freeipa 软件包
按照以下流程安装 ansible-freeipa
软件包,该软件包为安装和管理身份管理(IdM)提供 Ansible 角色和模块。
先决条件
- 确定控制器是一个带有有效订阅的 Red Hat Enterprise Linux 系统。否则,请参阅官方 Ansible 文档 安装指南 来获取替代安装说明。
-
确保您可以通过
SSH
协议,从控制器访问受管节点。检查该受管节点是否已列在控制器的/root/.ssh/known_hosts
文件中。
流程
在 Ansible 控制器上使用以下步骤。
如果您的系统在 RHEL 8.5 及更早版本中运行,请启用所需的软件仓库:
# subscription-manager repos --enable ansible-2.8-for-rhel-8-x86_64-rpms
如果您的系统在 RHEL 8.5 及更早版本中运行,请安装
ansible
软件包:# yum install ansible
安装
ansible-freeipa
软件包:# yum install ansible-freeipa
角色和模块安装到
/usr/share/ansible/roles/
和/usr/share/ansible/plugins/modules
目录中。
2.3. 在文件系统中的 Ansible 角色位置
默认情况下,ansible-freeipa
角色安装到 /usr/share/ansible/roles/
目录。ansible-freeipa
软件包的结构如下:
/usr/share/ansible/roles/
目录将ipaserver
、ipareplica
和ipaclient
角色存储在 Ansible 控制器上。每个角色目录都会在README.md
Markdown 文件中保存示例、基本概述、有关角色的许可证和文档。[root@server]# ls -1 /usr/share/ansible/roles/ ipaclient ipareplica ipaserver
/usr/share/doc/ansible-freeipa/
目录将有关各个角色和拓扑的文档存储在README.md
Markdown 文件中。它还存储了playbooks/
子目录。[root@server]# ls -1 /usr/share/doc/ansible-freeipa/ playbooks README-client.md README.md README-replica.md README-server.md README-topology.md
/usr/share/doc/ansible-freeipa/playbooks/
目录存储示例 playbook:[root@server]# ls -1 /usr/share/doc/ansible-freeipa/playbooks/ install-client.yml install-cluster.yml install-replica.yml install-server.yml uninstall-client.yml uninstall-cluster.yml uninstall-replica.yml uninstall-server.yml
2.4. 为带有集成 DNS 和集成 CA 作为根 CA 的部署设置参数
完成这个流程,来在使用 IdM 集成 DNS 解决方案的环境中为安装带有集成 CA 作为根 CA 的 IdM 服务器配置清单文件。
此流程中的清单使用 INI
格式。或者,也可以使用 YAML
或 JSON
格式。
流程
创建
~/MyPlaybooks/
目录:$ mkdir MyPlaybooks
-
创建
~/MyPlaybooks/inventory
文件。 打开清单文件进行编辑。指定您要用作 IdM 服务器的主机的完全限定域名(
FQDN
)。确保FQDN
满足以下条件:- 只允许字母数字字符和连字符(-)。例如,不允许使用下划线,这可能导致 DNS 失败。
- 主机名必须都是小写。
- 指定 IdM 域和域信息。
通过添加以下选项来指定您要使用集成的 DNS:
ipaserver_setup_dns=true
指定 DNS 转发设置。选择以下选项之一:
-
如果您希望安装程序使用
/etc/resolv.conf
文件中的正向解析器,请使用ipaserver_auto_forwarders=true
选项。如果在/etc/resolv.conf
文件中指定的名称服务器是 localhost 127.0.0.1 地址,或者位于虚拟私有网络中,并且您使用的 DNS 服务器通常无法从公共互联网访问,则不要使用这个选项。 -
使用
ipaserver_forwarders
选项手动指定您的转发器。安装过程将转发器 IP 地址添加到安装的 IdM 服务器上的/etc/named.conf
文件中。 使用
ipaserver_no_forwarders=true
选项配置要使用的根 DNS 服务器。注意如果没有 DNS 转发器,您的环境会被隔离,且基础架构中的其他 DNS 域的名称不会被解析。
-
如果您希望安装程序使用
指定 DNS 反向记录和区域设置。从以下选项中选择:
-
使用
ipaserver_allow_zone_overlap=true
选项来允许创建(反向)区域,即使区已经可解析。 -
使用
ipaserver_reverse_zones
选项来手动指定反向区域。 如果您不希望安装程序创建反向 DNS 区域,请使用
ipaserver_no_reverse=true
选项。注意使用 IdM 管理反向区是可选的。您可以改为使用外部 DNS 服务来实现这一目的。
-
使用
-
指定
admin
和Directory Manager
的密码。使用 Ansible Vault 来存储密码,并从 playbook 文件中引用 Vault 文件。另外,也可以更安全地指定清单文件中直接的密码。 可选:指定一个 IdM 服务器使用的自定义
firewalld
区。如果您没有设置自定义区,IdM 会将其服务添加到默认的firewalld
区域中。预定义的默认区域是public
。重要指定的
firewalld
区域必须存在,并且是永久的。包含所需服务器信息的清单文件示例(密码除外)
[ipaserver] server.idm.example.com [ipaserver:vars] ipaserver_domain=idm.example.com ipaserver_realm=IDM.EXAMPLE.COM ipaserver_setup_dns=true ipaserver_auto_forwarders=true [...]
包含所需服务器信息(包括密码)的清单文件示例
[ipaserver] server.idm.example.com [ipaserver:vars] ipaserver_domain=idm.example.com ipaserver_realm=IDM.EXAMPLE.COM ipaserver_setup_dns=true ipaserver_auto_forwarders=true ipaadmin_password=MySecretPassword123 ipadm_password=MySecretPassword234 [...]
带有自定义
firewalld
区的清单文件示例[ipaserver] server.idm.example.com [ipaserver:vars] ipaserver_domain=idm.example.com ipaserver_realm=IDM.EXAMPLE.COM ipaserver_setup_dns=true ipaserver_auto_forwarders=true ipaadmin_password=MySecretPassword123 ipadm_password=MySecretPassword234 ipaserver_firewalld_zone=custom zone
使用存储在 Ansible Vault 文件中的 admin 和 Directory Manager 密码设置 IdM 服务器的 playbook 示例
--- - name: Playbook to configure IPA server hosts: ipaserver become: true vars_files: - playbook_sensitive_data.yml roles: - role: ipaserver state: present
使用清单文件中的 admin 和 Directory Manager 密码来设置 IdM 服务器的 playbook 示例
--- - name: Playbook to configure IPA server hosts: ipaserver become: true roles: - role: ipaserver state: present
其它资源
-
man
ipa-server-install(1)
-
/usr/share/doc/ansible-freeipa/README-server.md
2.5. 为带有外部 DNS 和集成 CA 作为根 CA 的部署设置参数
完成这个流程,来为在使用外部 DNS 解决方案的环境中安装带有集成 CA 作为根 CA 的 IdM 服务器配置清单文件。
此流程中的清单文件使用 INI
格式。或者,也可以使用 YAML
或 JSON
格式。
流程
创建
~/MyPlaybooks/
目录:$ mkdir MyPlaybooks
-
创建
~/MyPlaybooks/inventory
文件。 打开清单文件进行编辑。指定您要用作 IdM 服务器的主机的完全限定域名(
FQDN
)。确保FQDN
满足以下条件:- 只允许字母数字字符和连字符(-)。例如,不允许使用下划线,这可能导致 DNS 失败。
- 主机名必须都是小写。
- 指定 IdM 域和域信息。
-
确保
ipaserver_setup_dns
选项被设为no
或空缺。 -
指定
admin
和Directory Manager
的密码。使用 Ansible Vault 来存储密码,并从 playbook 文件中引用 Vault 文件。另外,也可以更安全地指定清单文件中直接的密码。 可选:指定一个 IdM 服务器使用的自定义
firewalld
区。如果您没有设置自定义区,IdM 会将其服务添加到默认的firewalld
区域中。预定义的默认区域是public
。重要指定的
firewalld
区域必须存在,并且是永久的。包含所需服务器信息的清单文件示例(密码除外)
[ipaserver] server.idm.example.com [ipaserver:vars] ipaserver_domain=idm.example.com ipaserver_realm=IDM.EXAMPLE.COM ipaserver_setup_dns=no [...]
包含所需服务器信息(包括密码)的清单文件示例
[ipaserver] server.idm.example.com [ipaserver:vars] ipaserver_domain=idm.example.com ipaserver_realm=IDM.EXAMPLE.COM ipaserver_setup_dns=no ipaadmin_password=MySecretPassword123 ipadm_password=MySecretPassword234 [...]
带有自定义
firewalld
区的清单文件示例[ipaserver] server.idm.example.com [ipaserver:vars] ipaserver_domain=idm.example.com ipaserver_realm=IDM.EXAMPLE.COM ipaserver_setup_dns=no ipaadmin_password=MySecretPassword123 ipadm_password=MySecretPassword234 ipaserver_firewalld_zone=custom zone
使用存储在 Ansible Vault 文件中的 admin 和 Directory Manager 密码设置 IdM 服务器的 playbook 示例
--- - name: Playbook to configure IPA server hosts: ipaserver become: true vars_files: - playbook_sensitive_data.yml roles: - role: ipaserver state: present
使用清单文件中的 admin 和 Directory Manager 密码来设置 IdM 服务器的 playbook 示例
--- - name: Playbook to configure IPA server hosts: ipaserver become: true roles: - role: ipaserver state: present
其它资源
-
man
ipa-server-install(1)
-
/usr/share/doc/ansible-freeipa/README-server.md
2.6. 使用 Ansible playbook 将集成 CA 的 IdM 服务器部署为 root CA
完成此流程,来使用 Ansible playbook 部署带有集成证书颁发机构(CA)作为根 CA 的 IdM 服务器。
先决条件
- 受管节点是一个具有静态 IP 地址和可正常工作的软件包管理器的 Red Hat Enterprise Linux 8 系统。
您已通过选择以下流程之一设置了与您的场景相应的参数:
流程
运行 Ansible playbook:
$ ansible-playbook -i ~/MyPlaybooks/inventory ~/MyPlaybooks/install-server.yml
选择以下选项之一:
如果您的 IdM 部署使用外部 DNS:将包含在
/tmp/ipa.system.records.UFRPto.db
文件中的 DNS 资源记录添加到现有的外部 DNS 服务器中。更新 DNS 记录的过程因特定的 DNS 解决方案而异。... Restarting the KDC Please add records in this file to your DNS system: /tmp/ipa.system.records.UFRBto.db Restarting the web server ...
重要在将 DNS 记录添加到现有 DNS 服务器之前,服务器安装不会完成。
如果您的 IdM 部署使用集成的 DNS:
将父域中的 DNS 委托程序添加到 IdM DNS 域。例如,如果 IdM DNS 域是
idm.example.com
,请在example.com
父域中添加一个名字服务器(NS)记录。重要每次安装 IdM DNS 服务器后都会重复这个步骤。
-
将时间服务器的
_ntp._udp
服务(SRV)记录添加到您的 IdM DNS。IdM DNS 中新安装的 IdM 服务器的时间服务器的 SRV 记录可确保将来的副本和客户端安装会自动配置为与此主 IdM 服务器使用的时间服务器同步。
2.7. 为带有集成 DNS 和外部 CA 作为根 CA 的部署设置参数
完成这个流程,来为在使用 IdM 集成 DNS 解决方案的环境中安装带有外部 CA 作为根 CA 的 IdM 服务器配置清单文件。
此流程中的清单文件使用 INI
格式。或者,也可以使用 YAML
或 JSON
格式。
流程
创建
~/MyPlaybooks/
目录:$ mkdir MyPlaybooks
-
创建
~/MyPlaybooks/inventory
文件。 打开清单文件进行编辑。指定您要用作 IdM 服务器的主机的完全限定域名(
FQDN
)。确保FQDN
满足以下条件:- 只允许字母数字字符和连字符(-)。例如,不允许使用下划线,这可能导致 DNS 失败。
- 主机名必须都是小写。
- 指定 IdM 域和域信息。
通过添加以下选项来指定您要使用集成的 DNS:
ipaserver_setup_dns=true
指定 DNS 转发设置。选择以下选项之一:
-
如果您希望安装过程使用
/etc/resolv.conf
文件中的正向解析器,请使用ipaserver_auto_forwarders=true
选项。如果/etc/resolv.conf
文件中指定的名字服务器是 localhost 127.0.0.1 地址,或者如果您在虚拟私有网络中,并且您使用的 DNS 服务器通常无法从公共互联网访问,则不建议使用此选项。 -
使用
ipaserver_forwarders
选项手动指定您的转发器。安装过程将转发器 IP 地址添加到安装的 IdM 服务器上的/etc/named.conf
文件中。 使用
ipaserver_no_forwarders=true
选项配置要使用的根 DNS 服务器。注意如果没有 DNS 转发器,您的环境会被隔离,且基础架构中的其他 DNS 域的名称不会被解析。
-
如果您希望安装过程使用
指定 DNS 反向记录和区域设置。从以下选项中选择:
-
使用
ipaserver_allow_zone_overlap=true
选项来允许创建(反向)区域,即使区已经可解析。 -
使用
ipaserver_reverse_zones
选项来手动指定反向区域。 如果您不希望安装过程创建反向 DNS 区域,请使用
ipaserver_no_reverse=true
选项。注意使用 IdM 管理反向区是可选的。您可以改为使用外部 DNS 服务来实现这一目的。
-
使用
-
指定
admin
和Directory Manager
的密码。使用 Ansible Vault 来存储密码,并从 playbook 文件中引用 Vault 文件。另外,也可以更安全地指定清单文件中直接的密码。 可选:指定一个 IdM 服务器使用的自定义
firewalld
区。如果您没有设置自定义区,IdM 会将其服务添加到默认的firewalld
区中。预定义的默认区域是public
。重要指定的
firewalld
区域必须存在,并且是永久的。包含所需服务器信息的清单文件示例(密码除外)
[ipaserver] server.idm.example.com [ipaserver:vars] ipaserver_domain=idm.example.com ipaserver_realm=IDM.EXAMPLE.COM ipaserver_setup_dns=true ipaserver_auto_forwarders=true [...]
包含所需服务器信息(包括密码)的清单文件示例
[ipaserver] server.idm.example.com [ipaserver:vars] ipaserver_domain=idm.example.com ipaserver_realm=IDM.EXAMPLE.COM ipaserver_setup_dns=true ipaserver_auto_forwarders=true ipaadmin_password=MySecretPassword123 ipadm_password=MySecretPassword234 [...]
带有自定义
firewalld
区的清单文件示例[ipaserver] server.idm.example.com [ipaserver:vars] ipaserver_domain=idm.example.com ipaserver_realm=IDM.EXAMPLE.COM ipaserver_setup_dns=true ipaserver_auto_forwarders=true ipaadmin_password=MySecretPassword123 ipadm_password=MySecretPassword234 ipaserver_firewalld_zone=custom zone [...]
为安装的第一个步骤创建一个 playbook。输入有关生成证书签名请求(CSR),并将其从控制器复制到受管节点的说明。
--- - name: Playbook to configure IPA server Step 1 hosts: ipaserver become: true vars_files: - playbook_sensitive_data.yml vars: ipaserver_external_ca: true roles: - role: ipaserver state: present post_tasks: - name: Copy CSR /root/ipa.csr from node to "{{ groups.ipaserver[0] + '-ipa.csr' }}" fetch: src: /root/ipa.csr dest: "{{ groups.ipaserver[0] + '-ipa.csr' }}" flat: true
为安装的最后步骤创建另一个 playbook。
--- - name: Playbook to configure IPA server Step 2 hosts: ipaserver become: true vars_files: - playbook_sensitive_data.yml vars: ipaserver_external_cert_files: - "/root/servercert20240601.pem" - "/root/cacert.pem" pre_tasks: - name: Copy "{{ groups.ipaserver[0] }}-{{ item }}" to "/root/{{ item }}" on node ansible.builtin.copy: src: "{{ groups.ipaserver[0] }}-{{ item }}" dest: "/root/{{ item }}" force: true with_items: - servercert20240601.pem - cacert.pem roles: - role: ipaserver state: present
其它资源
-
man
ipa-server-install(1)
-
/usr/share/doc/ansible-freeipa/README-server.md
2.8. 为带有外部 DNS 和外部 CA 作为根 CA 的部署设置参数
完成这个流程,来为在使用外部 DNS 解决方案的环境中安装带有外部 CA 作为根 CA 的 IdM 服务器配置清单文件。
此流程中的清单文件使用 INI
格式。或者,也可以使用 YAML
或 JSON
格式。
流程
创建
~/MyPlaybooks/
目录:$ mkdir MyPlaybooks
-
创建
~/MyPlaybooks/inventory
文件。 打开清单文件进行编辑。指定您要用作 IdM 服务器的主机的完全限定域名(
FQDN
)。确保FQDN
满足以下条件:- 只允许字母数字字符和连字符(-)。例如,不允许使用下划线,这可能导致 DNS 失败。
- 主机名必须都是小写。
- 指定 IdM 域和域信息。
-
确保
ipaserver_setup_dns
选项被设为no
或空缺。 -
指定
admin
和Directory Manager
的密码。使用 Ansible Vault 来存储密码,并从 playbook 文件中引用 Vault 文件。另外,也可以更安全地指定清单文件中直接的密码。 可选:指定一个 IdM 服务器使用的自定义
firewalld
区。如果您没有设置自定义区,IdM 会将其服务添加到默认的firewalld
区域中。预定义的默认区域是public
。重要指定的
firewalld
区域必须存在,并且是永久的。包含所需服务器信息的清单文件示例(密码除外)
[ipaserver] server.idm.example.com [ipaserver:vars] ipaserver_domain=idm.example.com ipaserver_realm=IDM.EXAMPLE.COM ipaserver_setup_dns=no [...]
包含所需服务器信息(包括密码)的清单文件示例
[ipaserver] server.idm.example.com [ipaserver:vars] ipaserver_domain=idm.example.com ipaserver_realm=IDM.EXAMPLE.COM ipaserver_setup_dns=no ipaadmin_password=MySecretPassword123 ipadm_password=MySecretPassword234 [...]
带有自定义
firewalld
区的清单文件示例[ipaserver] server.idm.example.com [ipaserver:vars] ipaserver_domain=idm.example.com ipaserver_realm=IDM.EXAMPLE.COM ipaserver_setup_dns=no ipaadmin_password=MySecretPassword123 ipadm_password=MySecretPassword234 ipaserver_firewalld_zone=custom zone [...]
为安装的第一个步骤创建一个 playbook。输入有关生成证书签名请求(CSR),并将其从控制器复制到受管节点的说明。
--- - name: Playbook to configure IPA server Step 1 hosts: ipaserver become: true vars_files: - playbook_sensitive_data.yml vars: ipaserver_external_ca: true roles: - role: ipaserver state: present post_tasks: - name: Copy CSR /root/ipa.csr from node to "{{ groups.ipaserver[0] + '-ipa.csr' }}" fetch: src: /root/ipa.csr dest: "{{ groups.ipaserver[0] + '-ipa.csr' }}" flat: true
为安装的最后步骤创建另一个 playbook。
--- - name: Playbook to configure IPA server Step 2 hosts: ipaserver become: true vars_files: - playbook_sensitive_data.yml vars: ipaserver_external_cert_files: - "/root/servercert20240601.pem" - "/root/cacert.pem" pre_tasks: - name: Copy "{{ groups.ipaserver[0] }}-{{ item }}" to "/root/{{ item }}" on node ansible.builtin.copy: src: "{{ groups.ipaserver[0] }}-{{ item }}" dest: "/root/{{ item }}" force: true with_items: - servercert20240601.pem - cacert.pem roles: - role: ipaserver state: present
其它资源
- 安装 IdM 服务器: 在不集成 DNS 的情况下,使用外部 CA 作为 root CA
-
man
ipa-server-install(1)
-
/usr/share/doc/ansible-freeipa/README-server.md
2.9. 使用 Ansible playbook 将外部 CA 部署 IdM 服务器作为 root CA
完成此流程,来使用 Ansible playbook 部署具有外部证书颁发机构(CA)作为根 CA 的 IdM 服务器。
先决条件
- 受管节点是一个具有静态 IP 地址和可正常工作的软件包管理器的 Red Hat Enterprise Linux 8 系统。
您已通过选择以下流程之一设置了与您的场景相应的参数:
流程
使用安装第一步的说明运行 Ansible playbook,如
install-server-step1.yml
:$ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory ~/MyPlaybooks/install-server-step1.yml
-
在控制器上找到
ipa.csr
证书签名请求文件,并提交给外部的 CA。 - 将外部 CA 签名的 IdM CA 证书放在控制器文件系统中,以便下一步中的 playbook 可以找到它。
使用安装最后一步的说明运行 Ansible playbook,如
install-server-step2.yml
:$ ansible-playbook -v -i ~/MyPlaybooks/inventory ~/MyPlaybooks/install-server-step2.yml
选择以下选项之一:
如果您的 IdM 部署使用外部 DNS:将包含在
/tmp/ipa.system.records.UFRPto.db
文件中的 DNS 资源记录添加到现有的外部 DNS 服务器中。更新 DNS 记录的过程因特定的 DNS 解决方案而异。... Restarting the KDC Please add records in this file to your DNS system: /tmp/ipa.system.records.UFRBto.db Restarting the web server ...
重要在将 DNS 记录添加到现有 DNS 服务器之前,服务器安装不会完成。
如果您的 IdM 部署使用集成的 DNS:
将父域中的 DNS 委托程序添加到 IdM DNS 域。例如,如果 IdM DNS 域是
idm.example.com
,请在example.com
父域中添加一个名字服务器(NS)记录。重要每次安装 IdM DNS 服务器后都会重复这个步骤。
-
将时间服务器的
_ntp._udp
服务(SRV)记录添加到您的 IdM DNS。IdM DNS 中新安装的 IdM 服务器的时间服务器的 SRV 记录可确保将来的副本和客户端安装会自动配置为与此主 IdM 服务器使用的时间服务器同步。
2.10. 使用 Ansible playbook 卸载 IdM 服务器
在现有的身份管理(IdM)部署中,副本 和 服务器 是可交换的术语。
完成此流程,使用 Ansible playbook 来卸载 IdM 副本。在本例中:
- 从 server123.idm.example.com 卸载 IdM 配置。
- server123.idm.example.com 和关联的主机条目从 IdM 拓扑中删除。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装
ansible-freeipa
软件包。 - 您已在 ~/MyPlaybooks/ 目录中创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。在本例中,FQDN 是 server123.idm.example.com。
-
您已将
ipaadmin_password
存储在 secret.yml Ansible vault 中。 -
要使
ipaserver_remove_from_topology
选项可以工作,系统必须运行在 RHEL 8.9 或更高版本上。
在受管节点上:
- 系统在 RHEL 8 上运行。
流程
使用以下内容创建 Ansible playbook 文件 uninstall-server.yml :
--- - name: Playbook to uninstall an IdM replica hosts: ipaserver become: true roles: - role: ipaserver ipaserver_remove_from_domain: true state: absent
ipaserver_remove_from_domain
选项从 IdM 拓扑中取消主机注册。注意如果 server123.idm.example.com 的删除导致断开连接的拓扑,则删除操作将被中止。如需更多信息,请参阅 如果这会导致断开连接的拓扑,请使用 Ansible playbook 卸载 IdM 服务器。
卸载副本:
$ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/inventory <path_to_playbooks_directory>/uninstall-server.yml
- 确保指向 server123.idm.example.com 的所有名称服务器(NS) DNS 记录都从 DNS 区域中删除。无论您使用由 IdM 还是外部 DNS 管理的集成 DNS,这个均适用。有关如何从 IdM 中删除 DNS 记录的更多信息,请参阅 在 IdM CLI 中删除 DNS 记录。
2.11. 如果这会导致断开连接的拓扑,请使用 Ansible playbook 卸载 IdM 服务器
在现有的身份管理(IdM)部署中,副本 和 服务器 是可交换的术语。
完成此流程,使用 Ansible playbook 卸载 IdM 副本,即使这会导致断开连接的 IdM 拓扑。在示例中,server456.idm.example.com 用于从拓扑中删除副本和 FQDN 为 server123.idm.example.com server123.idm.example.com 的相关的主机条目,使某些副本与 server456.idm.example.com 以及拓扑的其余部分断开连接。
如果只使用 remove_server_from_domain
从拓扑中删除副本不会导致断开连接的拓扑,则不需要其他选项。如果结果是断开连接的拓扑,您必须指定您要保留域的哪一部分。在这种情况下,您必须执行以下操作:
-
指定
ipaserver_remove_on_server
值。 -
将
ipaserver_ignore_topology_disconnect
设置为 True。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
- 系统运行在 RHEL 8.9 或更高版本上。
-
您已安装了
ansible-freeipa
软件包。 - 您已在 ~/MyPlaybooks/ 目录中创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。在本例中,FQDN 是 server123.idm.example.com。
-
您已将
ipaadmin_password
存储在 secret.yml Ansible vault 中。
在受管节点上:
- 系统在 8 或更高版本中运行。
流程
使用以下内容创建 Ansible playbook 文件 uninstall-server.yml :
--- - name: Playbook to uninstall an IdM replica hosts: ipaserver become: true roles: - role: ipaserver ipaserver_remove_from_domain: true ipaserver_remove_on_server: server456.idm.example.com ipaserver_ignore_topology_disconnect: true state: absent
注意正常情况下,如果删除 server123 不会造成断开连接的拓扑:如果
ipaserver_remove_on_server
的值没有设置,则 server123 上的副本会使用 server123 的复制协议自动删除。卸载副本:
$ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/uninstall-server.yml
- 确保指向 server123.idm.example.com 的所有名称服务器(NS) DNS 记录都从 DNS 区域中删除。无论您使用由 IdM 还是外部 DNS 管理的集成 DNS,这个均适用。有关如何从 IdM 中删除 DNS 记录的更多信息,请参阅 在 IdM CLI 中删除 DNS 记录。
2.12. 其它资源
第 3 章 使用 Ansible playbook 安装身份管理副本
使用 Ansible 将其注册到 IdM 域来将系统配置为 IdM 副本,并让系统在域中的 IdM 服务器上使用 IdM 服务。
部署是由 ipareplica
Ansible 角色来管理的。该角色可以使用自动发现模式来识别 IdM 服务器、域和其他设置。但是,如果您在类似层的模式中部署多个副本,在不同时间部署不同的副本组,则必须为每个组定义特定的服务器或副本。
先决条件
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您了解了一般的 Ansible 和 IdM 概念。
- 您已 计划部署中的副本拓扑。
3.1. 指定用于安装 IdM 副本的基础、服务器和客户端变量
完成这个步骤来配置用于安装 IdM 副本的清单文件。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已在 Ansible 控制器上安装了
ansible-freeipa
软件包。
流程
打开清单文件进行编辑。指定主机的完全限定域名(FQDN)来成为 IdM 副本。FQDN 必须是有效的 DNS 名称:
-
仅允许数字、字母字符和连字符(
-
)。例如,不允许使用下划线,这可能导致 DNS 失败。 主机名必须都是小写。
仅定义副本 FQDN 的简单清单主机文件示例
[ipareplicas] replica1.idm.example.com replica2.idm.example.com replica3.idm.example.com [...]
如果 IdM 服务器已经部署,且在 IdM DNS 区中正确设置了 SRV 记录,那么脚本会自动发现所有其他必需的值。
-
仅允许数字、字母字符和连字符(
可选:根据您设计拓扑的方式在清单文件中提供额外的信息:
- 场景 1
如果要避免自动发现,并且使
[ipareplicas]
部分中列出的所有副本都使用特定的 IdM 服务器,请在清单文件的[ipaservers]
部分中设置服务器。带有 IdM 服务器 FQDN 和定义的副本的清单主机文件示例
[ipaservers] server.idm.example.com [ipareplicas] replica1.idm.example.com replica2.idm.example.com replica3.idm.example.com [...]
- 场景 2
或者,如果您想避免自动发现,但希望使用特定的服务器来部署特定副本,请分别在清单文件的
[ipareplicas]
部分中为特定副本设置服务器。为特定副本定义了特定 IdM 服务器的清单文件示例
[ipaservers] server.idm.example.com replica1.idm.example.com [ipareplicas] replica2.idm.example.com replica3.idm.example.com ipareplica_servers=replica1.idm.example.com
在上例中,
replica3.idm.example.com
使用已部署的replica1.idm.example.com
作为其复制源。- 场景 3
如果您在一个批处理中部署多个副本,并且时间是您关心的问题,那么多层副本部署可能对您很有用。在清单文件中定义特定的副本组,如
[ipareplicas_tier1]
和[ipareplicas_tier2]
,并在install-replica.yml
playbook 中为每个组设计单独的 play。定义了副本层的清单文件示例
[ipaservers] server.idm.example.com [ipareplicas_tier1] replica1.idm.example.com [ipareplicas_tier2] replica2.idm.example.com \ ipareplica_servers=replica1.idm.example.com,server.idm.example.com
将使用
ipareplica_servers
中的第一个条目。第二个条目将用作回退选项。在使用多个层来部署 IdM 副本时,您必须在 playbook 中有单独的任务来首先从 tier1 部署副本,然后从 tier2 部署副本。为不同副本组使用不同 play 的 playbook 文件示例
--- - name: Playbook to configure IPA replicas (tier1) hosts: ipareplicas_tier1 become: true roles: - role: ipareplica state: present - name: Playbook to configure IPA replicas (tier2) hosts: ipareplicas_tier2 become: true roles: - role: ipareplica state: present
可选:提供有关
firewalld
和 DNS 的更多信息:- 场景 1
如果您希望副本使用指定的
firewalld
区,如内部区,您可以在清单文件中指定它。如果您没有设置自定义区,IdM 会将其服务添加到默认的firewalld
区域中。预定义的默认区域是public
。重要指定的
firewalld
区域必须存在,并且是永久的。带有自定义
firewalld
区域的简单清单主机文件示例[ipaservers] server.idm.example.com [ipareplicas] replica1.idm.example.com replica2.idm.example.com replica3.idm.example.com [...] [ipareplicas:vars] ipareplica_firewalld_zone=custom zone
- 场景 2
如果您希望副本托管 IdM DNS 服务,请将 ipareplica_setup_dns=true 行添加到
[ipareplicas:vars]
部分。另外,请指定您是否要使用每服务器 DNS 转发器:-
要配置每服务器转发器,请将
ipareplica_forwarders
变量和字符串列表添加到[ipareplicas:vars]
部分,例如:ipareplica_forwarders=192.0.2.1,192.0.2.2 -
若要配置无每服务器转发器,请将以下行添加到
[ipareplicas:vars]
部分: ipareplica_no_forwarders=true。 -
要根据副本的
/etc/resolv.conf
文件中列出的转发器配置每服务器转发器,请将ipareplica_auto_forwarders
变量添加到[ipareplicas:vars]
部分。
带有在副本上设置 DNS 和每个服务器转发器的指令的清单文件示例
[ipaservers] server.idm.example.com [ipareplicas] replica1.idm.example.com replica2.idm.example.com replica3.idm.example.com [...] [ipareplicas:vars] ipareplica_setup_dns=true ipareplica_forwarders=192.0.2.1,192.0.2.2
-
要配置每服务器转发器,请将
- 场景 3
使用
ipaclient_configure_dns_resolve
和ipaclient_dns_servers
选项指定 DNS 解析器,以简化集群部署。这在您的 IdM 部署使用集成的 DNS 时特别有用:指定 DNS 解析器的清单文件片段:
[...] [ipaclient:vars] ipaclient_configure_dns_resolver=true ipaclient_dns_servers=192.168.100.1
注意ipaclient_dns_servers
列表必须仅包含 IP 地址。主机名不允许。
其它资源
-
/usr/share/ansible/roles/ipareplica/README.md
3.2. 使用 Ansible playbook 指定用于安装 IdM 副本的凭证
完成这个步骤来配置安装 IdM 副本的授权。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已在 Ansible 控制器上安装了
ansible-freeipa
软件包。
流程
指定 授权部署副本的用户的密码,如 IdM
admin
。红帽建议使用 Ansible Vault 来存储密码,并从 playbook 文件引用 Vault 文件,如
install-replica.yml
:使用来自清单文件和 Ansible Vault 文件中的密码的主体的 playbook 文件示例
- name: Playbook to configure IPA replicas hosts: ipareplicas become: true vars_files: -
playbook_sensitive_data.yml
roles: - role: ipareplica state: present有关如何使用 Ansible Vault 的详细信息,请参阅官方 Ansible Vault 文档。
直接在清单文件中提供
admin
的凭证不太安全。请在清单文件的[ipareplicas:vars]
部分中使用ipaadmin_password
选项。然后,清单文件和install-replica.yml
playbook 文件类似如下:清单 hosts.replica 文件示例
[...] [ipareplicas:vars] ipaadmin_password=Secret123
使用清单文件中的主体和密码的 playbook 示例
- name: Playbook to configure IPA replicas hosts: ipareplicas become: true roles: - role: ipareplica state: present
或者,在清单文件中提供授权直接部署副本的另一个用户的凭证也不太安全。要指定不同的授权用户,请使用
ipaadmin_principal
选项作为用户名,使用ipaadmin_password
选项作为密码。然后,清单文件和install-replica.yml
playbook 文件类似如下:清单 hosts.replica 文件示例
[...] [ipareplicas:vars] ipaadmin_principal=my_admin ipaadmin_password=my_admin_secret123
使用清单文件中的主体和密码的 playbook 示例
- name: Playbook to configure IPA replicas hosts: ipareplicas become: true roles: - role: ipareplica state: present
其它资源
-
/usr/share/ansible/roles/ipareplica/README.md
3.3. 使用 Ansible playbook 部署 IdM 副本
完成此流程,使用 Ansible playbook 来部署 IdM 副本。
先决条件
- 受管节点是一个具有静态 IP 地址和可正常工作的软件包管理器的 Red Hat Enterprise Linux 8 系统。
- 您已经配置了 安装 IdM 副本的清单文件。
- 您已经配置了 安装 IdM 副本的授权。
流程
运行 Ansible playbook:
$ ansible-playbook -i ~/MyPlaybooks/inventory ~/MyPlaybooks/install-replica.yml
3.4. 使用 Ansible playbook 卸载 IdM 副本
在现有的身份管理(IdM)部署中,副本 和 服务器 是可交换的术语。有关如何卸载 IdM 服务器的详情,请参考 使用 Ansible playbook 卸载 IdM 服务器,或 使用 Ansible playbook 卸载 IdM 服务器,即使这会导致断开连接的拓扑。
其它资源
第 4 章 使用 Ansible playbook 安装身份管理客户端
了解如何使用 Ansible 将系统配置为身份管理(IdM)客户端。将系统配置为 IdM 客户端将其注册到 IdM 域中,并让系统在域中的 IdM 服务器中使用 IdM 服务。
部署是由 ipaclient
Ansible 角色来管理的。默认情况下,该角色使用 autodiscovery 模式来识别 IdM 服务器、域和其他设置。角色可以被修改为使用 Ansible playbook 使用指定的设置,例如在清单文件中。
先决条件
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您使用 Ansible 版本 2.15 或更高版本。
- 您了解了一般的 Ansible 和 IdM 概念。
4.1. 为自动发现客户端安装模式设置清单文件的参数
要使用 Ansible playbook 安装身份管理(IdM)客户端,请在清单文件中配置目标主机参数,如 inventory
:
- 有关主机的信息
- 任务的授权
根据您拥有的清单插件,清单文件可以采用多种格式。INI
格式是 Ansible 的默认值之一,如下例中使用。
要在 RHEL 中将智能卡与图形用户界面搭配使用,请确保在 Ansible playbook 中包含 ipaclient_mkhomedir
变量。
流程
-
打开清单文件
进行编辑。 指定主机的完全限定主机名(FQDN),使其成为 IdM 客户端。完全限定域名必须是有效的 DNS 名称:
-
仅允许数字、字母字符和连字符(
-
)。例如,不允许使用下划线,这可能导致 DNS 失败。 - 主机名必须都是小写。不允许使用大写字母。
如果在 IdM DNS 区域中正确设置了 SRV 记录,该脚本会自动发现所有其他必要的值。
只带有客户端 FQDN 定义的简单的清单主机文件示例
[ipaclients] client.idm.example.com [...]
-
仅允许数字、字母字符和连字符(
指定注册客户端的凭证。可用的验证方法如下:
注册 客户端的用户权限的密码。这是默认选项。
红帽建议使用 Ansible Vault 来存储密码,并从 playbook 文件引用 Vault 文件,如
install-client.yml
:使用来自清单文件和 Ansible Vault 文件中的密码的主体的 playbook 文件示例
- name: Playbook to configure IPA clients with username/password hosts: ipaclients become: true vars_files: - playbook_sensitive_data.yml roles: - role: ipaclient state: present
在
inventory/hosts
文件的[ipaclients:vars]
部分中使用ipaadmin_password
选项来提供admin
的凭证不太安全。或者,指定不同的授权用户,请使用ipaadmin_principal
选项作为用户名,使用ipaadmin_password
选项作为密码。然后,inventory/hosts
清单文件和install-client.yml
playbook 文件类似如下:清单主机文件示例
[...] [ipaclients:vars] ipaadmin_principal=my_admin ipaadmin_password=Secret123
使用清单文件中的主体和密码的 Playbook 示例
- name: Playbook to unconfigure IPA clients hosts: ipaclients become: true roles: - role: ipaclient state: true
之前注册的客户端 keytab,(如果其仍然可用):
如果系统之前作为身份管理客户端注册,则可以使用这个选项。要使用此身份验证方法,请取消
#ipaclient_keytab
选项的注释,指定存储 keytab 的文件的路径,例如在inventory/hosts
的[ipaclient:vars]
部分。在注册过程中生成的随机一次性密码 (OTP)。要使用此身份验证方法,请在清单文件中使用
ipaclient_use_otp=true
选项。例如,您可以取消inventory/hosts
文件的[ipaclients:vars]
部分中的ipaclient_use_otp=true
选项的注释。请注意,对于 OTP,还必须指定以下选项之一:-
授权注册客户端的用户的密码 ,例如,为
inventory/hosts
文件的[ipaclients:vars]
部分的ipaadmin_password
提供值。 -
admin keytab,例如,为
inventory/hosts
的[ipaclients:vars]
部分中的ipaadmin_keytab
提供值。
-
授权注册客户端的用户的密码 ,例如,为
可选:使用
ipaclient_configure_dns_resolve
和ipaclient_dns_servers
选项(如果可用)指定 DNS 解析器来简化集群部署。这在您的 IdM 部署使用集成的 DNS 时特别有用:指定 DNS 解析器的清单文件片段:
[...] [ipaclients:vars] ipaadmin_password: "{{ ipaadmin_password }}" ipaclient_domain=idm.example.com ipaclient_configure_dns_resolver=true ipaclient_dns_servers=192.168.100.1
注意ipaclient_dns_servers
列表必须仅包含 IP 地址。主机名不允许。-
从 RHEL 8.9 开始,您还可以指定
ipaclient_subid: true
选项,以便为 IdM 级别上的 IdM 用户配置 subid 范围。
其它资源
-
/usr/share/ansible/roles/ipaclient/README.md
- 手动管理 subID 范围
4.2. 当在客户端安装过程中无法自动发现时设置清单文件的参数
要使用 Ansible playbook 安装身份管理客户端,请在清单文件,如 inventory/hosts
中配置目标主机参数:
- 有关主机、IdM 服务器和 IdM 域或 IdM 领域的信息
- 任务的授权
根据您拥有的清单插件,清单文件可以采用多种格式。INI
格式是 Ansible 的默认值之一,如下例中使用。
要在 RHEL 中将智能卡与图形用户界面搭配使用,请确保在 Ansible playbook 中包含 ipaclient_mkhomedir
变量。
流程
指定主机的完全限定主机名(FQDN),使其成为 IdM 客户端。完全限定域名必须是有效的 DNS 名称:
-
仅允许数字、字母字符和连字符(
-
)。例如,不允许使用下划线,这可能导致 DNS 失败。 - 主机名必须都是小写。不允许使用大写字母。
-
仅允许数字、字母字符和连字符(
在
inventory/hosts
文件的相关部分中指定其他选项:-
[ipaservers]
部分中服务器的 FQDN,用于指示客户端将注册到哪个 IdM 服务器 以下两个选项之一:
-
[ipaclients:vars]
部分中的ipaclient_domain
选项,用来指示客户端将注册到的 IdM 服务器的 DNS 域名 [ipaclients:vars]
部分中的ipaclient_realm
选项,用于指示 IdM 服务器控制的 Kerberos 域的名称带有客户端 FQDN、服务器 FQDN 和定义的域的清单主机文件示例
[ipaclients] client.idm.example.com [ipaservers] server.idm.example.com [ipaclients:vars] ipaclient_domain=idm.example.com [...]
-
-
指定注册客户端的凭证。可用的验证方法如下:
注册 客户端的用户权限的密码。这是默认选项。
红帽建议使用 Ansible Vault 来存储密码,并从 playbook 文件引用 Vault 文件,如
install-client.yml
:使用来自清单文件和 Ansible Vault 文件中的密码的主体的 playbook 文件示例
- name: Playbook to configure IPA clients with username/password hosts: ipaclients become: true vars_files: - playbook_sensitive_data.yml roles: - role: ipaclient state: present
不太安全的是,使用
inventory/hosts
文件的[ipaclients:vars]
部分中的ipaadmin_password
选项提供admin
的凭证。或者,指定不同的授权用户,请使用ipaadmin_principal
选项作为用户名,使用ipaadmin_password
选项作为密码。install-client.yml
playbook 文件类似如下:清单主机文件示例
[...] [ipaclients:vars] ipaadmin_principal=my_admin ipaadmin_password=Secret123
使用清单文件中的主体和密码的 Playbook 示例
- name: Playbook to unconfigure IPA clients hosts: ipaclients become: true roles: - role: ipaclient state: true
之前注册的客户端 keytab,如果仍然可用:
如果系统之前作为身份管理客户端注册,则可以使用这个选项。要使用此身份验证方法,请取消
ipaclient_keytab
选项的注释,指定存储 keytab 的文件的路径,例如在inventory/hosts
的[ipaclient:vars]
部分。在注册过程中生成的随机一次性密码 (OTP)。要使用此身份验证方法,请在清单文件中使用
ipaclient_use_otp=true
选项。例如,您可以取消inventory/hosts
文件的[ipaclients:vars]
部分中的#ipaclient_use_otp=true
选项的注释。请注意,对于 OTP,还必须指定以下选项之一:-
授权注册客户端的用户的密码 ,例如,为
inventory/hosts
文件的[ipaclients:vars]
部分的ipaadmin_password
提供值。 -
admin keytab,例如,为
inventory/hosts
的[ipaclients:vars]
部分中的ipaadmin_keytab
提供值。
-
授权注册客户端的用户的密码 ,例如,为
-
从 RHEL 8.9 开始,您还可以指定
ipaclient_subid: true
选项,以便为 IdM 级别上的 IdM 用户配置 subid 范围。
其它资源
-
/usr/share/ansible/roles/ipaclient/README.md
- 手动管理 subID 范围
4.3. 使用 Ansible playbook 进行 IdM 客户端注册的授权选项
您可以使用以下任一方法授权 IdM 客户端注册:
- 一个随机的一次性密码(OTP)+ 管理员密码
- 一个随机的一次性密码(OTP)+ admin keytab
- 之前注册中的客户端 keytab
-
授权注册清单文件中的客户端(
管理员
)的用户密码 -
授权注册存储在 Ansible vault 中的客户端(
管理员
)的用户密码
在 IdM 客户端安装前,可以让 IdM 管理员生成的 OTP。在这种情况下,您不需要在 OTP 本身以外的安装的任何凭证。
以下是这些方法的清单文件示例:
授权选项 | 清单文件 |
---|---|
一个随机的一次性密码(OTP)+ 管理员密码 |
[ipaclients:vars] ipaadmin_password=Secret123 ipaclient_use_otp=true |
一个随机的一次性密码(OTP) |
[ipaclients:vars] ipaclient_otp=<W5YpARl=7M.>
这个场景假定 OTP 已在安装前由 IdM |
一个随机的一次性密码(OTP)+ admin keytab |
[ipaclients:vars] ipaadmin_keytab=/root/admin.keytab ipaclient_use_otp=true |
之前注册中的客户端 keytab |
[ipaclients:vars] ipaclient_keytab=/root/krb5.keytab |
存储在清单文件中的 |
[ipaclients:vars] ipaadmin_password=Secret123 |
存储在 Ansible vault 文件中的 |
[ipaclients:vars] [...] |
如果您使用存储在 Ansible vault 文件中的 admin
用户的密码,则对应的 playbook 文件必须具有额外的 vars_files
指令:
清单文件 | Playbook 文件 |
---|---|
[ipaclients:vars] [...] |
- name: Playbook to configure IPA clients hosts: ipaclients become: true vars_files: - ansible_vault_file.yml roles: - role: ipaclient state: present |
在上述所有其他授权场景中,基本的 playbook 文件可能如下所示:
- name: Playbook to configure IPA clients hosts: ipaclients become: true roles: - role: ipaclient state: true
从 RHEL 8.8 开始,在上述两个 OTP 授权场景中,使用 kinit
命令的管理员的 TGT 请求发生在第一个指定或发现的 IdM 服务器上。因此,不需要对 Ansible 控制节点进行额外的修改。在 RHEL 8.8 之前,控制节点上需要 krb5-workstation
软件包。
4.4. 使用 Ansible playbook 部署 IdM 客户端
完成此流程,使用 Ansible playbook 在 IdM 环境中部署 IdM 客户端。
先决条件
- 受管节点是一个具有静态 IP 地址和可正常工作的软件包管理器的 Red Hat Enterprise Linux 8 系统。
您已将 IdM 客户端部署的参数设置为与您的部署场景相对应:
流程
运行 Ansible playbook:
$ ansible-playbook -v -i ~/MyPlaybooks/inventory ~/MyPlaybooks/install-client.yml
4.5. 在 Ansible 中使用一次性密码方法安装 IdM 客户端
您可以为身份管理(IdM)中的新主机生成一次性密码(OTP),并使用它来将系统注册到 IdM 域中。此流程描述了如何在为另一个 IdM 主机生成 OTP 后使用 Ansible 安装 IdM 客户端。
如果机构中存在具有不同权限的两个系统管理员,则安装 IdM 客户端的这个方法非常方便:
- 一个具有 IdM 管理员凭证。
-
另一个具有所需的 Ansible 凭据,包括主机
root
访问权限,成为 IdM 客户端。
IdM 管理员执行生成 OTP 密码的步骤的第一个部分。Ansible 管理员执行流程的剩余部分,其中 OTP 用于安装 IdM 客户端。
先决条件
-
您有 IdM
admin
凭证或至少具有Host Enrollment
特权以及在 IdM 中添加 DNS 记录的权限。 - 您已在 Ansible 受管节点上配置了用户升级方法,以便您安装 IdM 客户端。
- 如果您的 Ansible 控制节点在 RHEL 8.7 或更早版本上运行,则必须能够在 Ansible 控制节点上安装软件包。
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已在 Ansible 控制器上安装了
ansible-freeipa
软件包。 - 您已创建了带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
- 受管节点是一个具有静态 IP 地址和可正常工作的软件包管理器的 Red Hat Enterprise Linux 8 系统。
流程
以具有
Host Enrollment
权限和添加 DNS 记录权限的 IdM 用户身份SSH
到 IdM 主机:$ ssh admin@server.idm.example.com
为新客户端生成 OTP:
[admin@server ~]$ ipa host-add client.idm.example.com --ip-address=172.25.250.11 --random -------------------------------------------------- Added host "client.idm.example.com" -------------------------------------------------- Host name: client.idm.example.com Random password: W5YpARl=7M.n Password: True Keytab: False Managed by: server.idm.example.com
--ip-address= <your_host_ip_address > 选项将主机添加到带有指定 IP 地址的 IdM DNS 中。
退出 IdM 主机:
$ exit logout Connection to server.idm.example.com closed.
在 ansible 控制器上,更新清单文件使其包含随机密码:
[...] [ipaclients] client.idm.example.com [ipaclients:vars] ipaclient_domain=idm.example.com ipaclient_otp=W5YpARl=7M.n [...]
如果您的 ansible 控制器正在运行 RHEL 8.7 或更早版本,请安装
krb5-workstation
软件包提供的kinit
工具:$ sudo dnf install krb5-workstation
运行 playbook 来安装客户端:
$ ansible-playbook -i inventory install-client.yml
4.6. Ansible 安装后测试身份管理客户端
命令行界面(CLI)告知您 ansible-playbook
命令已成功完成,但您也可以自行进行测试。
要测试身份管理客户端是否可以获取服务器上定义的用户的信息,请检查您是否能够解析服务器上定义的用户。例如,检查默认的 admin
用户:
[user@client1 ~]$ id admin
uid=1254400000(admin) gid=1254400000(admins) groups=1254400000(admins)
要测试身份验证是否正常工作,请su -
为另一个已存在的 IdM 用户:
[user@client1 ~]$ su - idm_user
Last login: Thu Oct 18 18:39:11 CEST 2018 from 192.168.122.1 on pts/0
[idm_user@client1 ~]$
4.7. 使用 Ansible playbook 卸载 IdM 客户端
完成此流程,使用 Ansible playbook 将主机卸载为 IdM 客户端。
先决条件
- IdM 管理员凭证。
- 受管节点是一个具有静态 IP 地址的 Red Hat Enterprise Linux 8 系统。
流程
使用说明运行 Ansible playbook 来卸载客户端,如
uninstall-client.yml
:$ ansible-playbook -v -i ~/MyPlaybooks/inventory ~/MyPlaybooks/uninstall-client.yml
卸载客户端只从主机中删除基本的 IdM 配置,但会在主机上保留配置文件,以防您决定重新安装客户端。另外,卸载有以下限制:
- 它不会从 IdM LDAP 服务器中删除客户端主机条目。卸载仅是将主机取消注册。
- 它不会从 IdM 中删除任何位于客户端的服务。
- 它不会从 IdM 服务器中删除客户端的 DNS 条目。
-
它不会删除
/etc/krb5.keytab
之外的 keytab 的旧主体。
请注意,卸载会删除 IdM CA 为主机发布的所有证书。
其它资源
第 5 章 准备您的环境以使用 Ansible playbook 管理 IdM
作为管理身份管理(IdM)的系统管理员,在使用 Red Hat Ansible Engine 时,最好执行以下操作:
- 在您的主目录中保留一个专用于 Ansible playbook 的子目录,如 ~/MyPlaybooks。
-
将
/usr/share/doc/ansible-freeipa/*
和/usr/share/doc/rhel-system-roles/*
目录和子目录中的示例 Ansible playbook 复制到 ~/MyPlaybooks 目录中。 - 将清单文件包含在 ~/MyPlaybooks 目录中。
使用这个实践,您可以在一个地方找到所有 playbook。
您可以在受管节点上运行 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 密码文件。
还要考虑 其他安全配置。
5.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
管理员
密码。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks
使用以下内容创建 ~/MyPlaybooks/ansible.cfg 文件:
[defaults] inventory = /home/your_username/MyPlaybooks/inventory remote_user = admin
使用以下内容创建 ~/MyPlaybooks/inventory 文件:
[eu] server.idm.example.com [us] replica.idm.example.com [ipaserver:children] eu us
此配置定义了两个主机组,即eu 和 us,用于这些位置中的主机。此外,此配置定义了 ipaserver 主机组,它包含来自 eu 和 us 的所有主机。
可选:创建一个 SSH 公钥和私钥。要在测试环境中简化访问,请不要在私钥中设置密码:
$ ssh-keygen
将 SSH 公钥复制到每个受管节点上的 IdM
admin
帐户:$ ssh-copy-id admin@server.idm.example.com $ ssh-copy-id admin@replica.idm.example.com
这些命令要求您输入 IdM
admin
密码。创建一个包含 vault 密码的 password_file 文件:
redhat
更改权限以修改文件:
$ chmod 0600 password_file
创建一个 secret.yml Ansible vault 来存储 IdM
admin
密码:配置 password_file 以存储 vault 密码:
$ ansible-vault create --vault-password-file=password_file secret.yml
出现提示时,输入 secret.yml 文件的内容:
ipaadmin_password: Secret123
要在 playbook 中使用加密的 ipaadmin_password
,您必须使用 vars_file
指令。例如,一个删除 IdM 用户的简单 playbook 如下所示:
--- - name: Playbook to handle users hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Delete user robot ipauser: ipaadmin_password: "{{ ipaadmin_password }}" name: robot state: absent
在执行 playbook 时,通过添加 --vault-password-file=password_file
选项来指示 Ansible 使用 vault 密码来解密 ipaadmin_password
。例如:
ansible-playbook -i inventory --vault-password-file=password_file del-user.yml
为安全起见,在每次会话结束时删除 vault 密码文件,并在每个新会话开始时重复步骤 6-8。
5.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 的密码很方便。
缺点 :
- 通过文件权限和其他安全措施保护包含敏感纯文本密码的文件很重要。
将密码存储在 Ansible vault中,并以交互方式输入 vault 密码
优点 :
- 用户密码以加密方式存储。
- 无人可以窃取 vault 密码,因为它不存储在任何地方。
- 您可以通过创建一个新的 Ansible vault 来轻松地更新用户密码。
-
您还可以使用
ansible-vault rekey file_name
命令轻松地更新 vault 密码。
缺点 :
- 如果您在脚本中使用 Ansible playbook,则需要以交互方式输入 vault 密码很不方便。
第 6 章 使用 Ansible playbook 配置全局 IdM 设置
使用 Ansible config
模块,您可以检索和设置 Identity Management (IdM) 的全局配置参数。
6.1. 使用 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 客户端、服务器或副本的一部分。
流程
打开
/usr/share/doc/ansible-freeipa/playbooks/config/retrieve-config.yml
Ansible playbook 文件进行编辑:--- - name: Playbook to handle global IdM configuration hosts: ipaserver become: no gather_facts: no vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Query IPA global configuration ipaconfig: ipaadmin_password: "{{ ipaadmin_password }}" register: serverconfig - debug: msg: "{{ serverconfig }}"
通过更改以下内容来调整文件:
- IdM 管理员的密码。
- 其他值(如有必要)。
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/config/retrieve-config.yml [...] TASK [debug] ok: [server.idm.example.com] => { "msg": { "ansible_facts": { "discovered_interpreter_ }, "changed": false, "config": { "ca_renewal_master_server": "server.idm.example.com", "configstring": [ "AllowNThash", "KDC:Disable Last Success" ], "defaultgroup": "ipausers", "defaultshell": "/bin/bash", "emaildomain": "idm.example.com", "enable_migration": false, "groupsearch": [ "cn", "description" ], "homedirectory": "/home", "maxhostname": "64", "maxusername": "64", "pac_type": [ "MS-PAC", "nfs:NONE" ], "pwdexpnotify": "4", "searchrecordslimit": "100", "searchtimelimit": "2", "selinuxusermapdefault": "unconfined_u:s0-s0:c0.c1023", "selinuxusermaporder": [ "guest_u:s0$xguest_u:s0$user_ ], "usersearch": [ "uid", "givenname", "sn", "telephonenumber", "ou", "title" ] }, "failed": false } }
6.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
可选:识别当前 IdM CA 续订服务器:
$ ipa config-show | grep 'CA renewal' IPA CA renewal master: server.idm.example.com
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
打开
/usr/share/doc/ansible-freeipa/playbooks/config/set-ca-renewal-master-server.yml
Ansible playbook 文件进行编辑:--- - name: Playbook to handle global DNS configuration hosts: ipaserver become: no gather_facts: no vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: set ca_renewal_master_server ipaconfig: ipaadmin_password: "{{ ipaadmin_password }}" ca_renewal_master_server: carenewal.idm.example.com
通过更改调整文件:
-
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
验证
您可以验证 CA 续订服务器是否已更改:
以 IdM 管理员身份登录到
ipaserver
:$ ssh admin@server.idm.example.com Password: [admin@server /]$
请求 IdM CA 续订服务器的身份:
$ ipa config-show | grep ‘CA renewal’ IPA CA renewal master: carenewal.idm.example.com
输出显示 watchnewal.idm.example.com 服务器是新的 CA 续订服务器。
6.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.yml
Ansible playbook 来识别 IdM 用户的当前 shell。详情请参阅 使用 Ansible playbook 检索 IdM 配置。 创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
打开
/usr/share/doc/ansible-freeipa/playbooks/config/ensure-config-options-are-set.yml
Ansible playbook 文件进行编辑:--- - name: Playbook to ensure some config options are set hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: # Set defaultlogin and maxusername - ipaconfig: ipaadmin_password: "{{ ipaadmin_password }}" defaultshell: /bin/bash maxusername: 64
通过更改以下内容来调整文件:
-
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
验证
您可以通过在 IdM 中启动一个新会话来验证默认用户 shell 是否已更改:
以 IdM 管理员身份登录到
ipaserver
:$ ssh admin@server.idm.example.com Password: [admin@server /]$
显示当前的 shell:
[admin@server /]$ echo "$SHELL" /bin/sh
登录用户正在使用
sh
shell。
6.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/
- 创建一个 netbios-domain-name-present.yml Ansible playbook 文件。
在文件中添加以下内容:
--- - name: Playbook to change IdM domain netbios name hosts: ipaserver become: no gather_facts: no vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Set IdM domain netbios name ipaconfig: ipaadmin_password: "{{ ipaadmin_password }}" netbios_name: IPADOM
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory netbios-domain-name-present.yml
出现提示时,提供 vault 文件密码。
其它资源
6.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/
- 创建一个 sids-for-users-and-groups-present.yml Ansible playbook 文件。
在文件中添加以下内容:
--- - name: Playbook to ensure SIDs are enabled and users and groups have SIDs hosts: ipaserver become: no gather_facts: no vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Enable SID and generate users and groups SIDS ipaconfig: ipaadmin_password: "{{ ipaadmin_password }}" enable_sid: true add_sids: true
enable_sid
变量为将来的 IdM 用户和组启用 SID 生成。add_sids
变量为现有的 IdM 用户和组生成 SID。注意使用
add_sids: true
时,您还必须将enable_sid
变量设置为true
。- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory sids-for-users-and-groups-present.yml
出现提示时,提供 vault 文件密码。
其它资源
6.6. 其它资源
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-config.md
。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/config
目录中的 playbook 示例。
第 7 章 使用 Ansible playbook 管理用户帐户
您可以使用 Ansible playbook 管理 IdM 中的用户。在介绍了用户生命周期后,本章将介绍如何将 Ansible playbook 用于以下操作:
7.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 组成员资格不适用于本地用户。
7.2. 使用 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
创建一个 Ansible playbook 文件,其中包含您要确保的 IdM 中存在的用户数据。要简化此步骤,您可以复制并修改
/usr/share/doc/ansible-freeipa/playbooks/user/add-user.yml
文件中的示例。例如,创建名为 idm_user 的用户并添加 Password123 作为用户密码:--- - name: Playbook to handle users hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Create user idm_user ipauser: ipaadmin_password: "{{ ipaadmin_password }}" name: idm_user first: Alice last: Acme uid: 1000111 gid: 10011 phone: "+555123457" email: idm_user@acme.com passwordexpiration: "2023-01-19 23:59:59" password: "Password123" update_password: on_create
您必须使用以下选项来添加用户:
- name:登录名称
- first:名(字符串)
- last:姓(字符串)
有关可用用户选项的完整列表,请参阅
/usr/share/doc/ansible-freeipa/README-user.md
Markdown 文件。注意如果您使用
update_password: on_create
选项,Ansible 仅在创建用户时创建用户密码。如果已使用密码创建了用户,Ansible 不会生成新的密码。运行 playbook:
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-IdM-user.yml
验证
您可以使用
ipa user-show
命令验证 IdM 中是否存在新用户帐户:以 admin 用户身份登录
ipaserver
:$ ssh admin@server.idm.example.com Password: [admin@server /]$
为 admin 请求一个 Kerberos ticket:
$ kinit admin Password for admin@IDM.EXAMPLE.COM:
请求有关 idm_user 的信息:
$ ipa user-show idm_user User login: idm_user First name: Alice Last name: Acme ....
IdM 中存在名为 idm_user 的用户。
7.3. 使用 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
创建一个 Ansible playbook 文件,其中包含您要在 IdM 中确保存在的用户的数据。要简化此步骤,您可以复制并修改
/usr/share/doc/ansible-freeipa/playbooks/user/ensure-users-present.yml
文件中的示例。例如,要创建用户 idm_user_1、idm_user_2 和 idm_user_3,并添加 Password123 作为密码 idm_user_1 :--- - name: Playbook to handle users hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Create user idm_users ipauser: ipaadmin_password: "{{ ipaadmin_password }}" users: - name: idm_user_1 first: Alice last: Acme uid: 10001 gid: 10011 phone: "+555123457" email: idm_user@acme.com passwordexpiration: "2023-01-19 23:59:59" password: "Password123" - name: idm_user_2 first: Bob last: Acme uid: 100011 gid: 10011 - name: idm_user_3 first: Eve last: Acme uid: 1000111 gid: 10011
注意如果没有指定 update_password: on_create 选项,Ansible 每次运行 playbook 时都会重新设置用户密码:如果用户自上次运行 playbook 起更改了密码,则 Ansible 重新设置密码。
运行 playbook:
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-users.yml
验证
您可以使用
ipa user-show
命令验证用户帐户是否存在于 IdM 中:以管理员身份登录到
ipaserver
:$ ssh administrator@server.idm.example.com Password: [admin@server /]$
显示有关 idm_user_1 的信息:
$ ipa user-show idm_user_1 User login: idm_user_1 First name: Alice Last name: Acme Password: True ....
IdM 中存在名为 idm_user_1 的用户。
7.4. 使用 Ansible playbook 确保存在 JSON 文件中的多个 IdM 用户
以下流程描述了如何使用 Ansible playbook 确保在 IdM 中存在多个用户。用户存储在 JSON
文件中。
先决条件
在控制节点上:
- 您使用 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
创建包含必要任务的 Ansible playbook 文件。使用您要确保存在的用户数据引用
JSON
文件。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/README-user.md
文件中的示例:--- - name: Ensure users' presence hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Include users_present.json include_vars: file: users_present.json - name: Users present ipauser: ipaadmin_password: "{{ ipaadmin_password }}" users: "{{ users }}"
创建
users.json
文件,并将 IdM 用户添加到其中。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/README-user.md
文件中的示例。例如,要创建用户 idm_user_1、idm_user_2 和 idm_user_3,并添加 Password123 作为密码 idm_user_1 :{ "users": [ { "name": "idm_user_1", "first": "First 1", "last": "Last 1", "password": "Password123" }, { "name": "idm_user_2", "first": "First 2", "last": "Last 2" }, { "name": "idm_user_3", "first": "First 3", "last": "Last 3" } ] }
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-users-present-jsonfile.yml
验证
您可以使用
ipa user-show
命令验证 IdM 中是否存在用户帐户:以管理员身份登录到
ipaserver
:$ ssh administrator@server.idm.example.com Password: [admin@server /]$
显示有关 idm_user_1 的信息:
$ ipa user-show idm_user_1 User login: idm_user_1 First name: Alice Last name: Acme Password: True ....
IdM 中存在名为 idm_user_1 的用户。
7.5. 确保没有用户使用 Ansible playbook
以下流程描述了如何使用 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
创建 Ansible playbook 文件,使其包含没有 IdM 的用户。要简化此步骤,您可以复制并修改
/usr/share/doc/ansible-freeipa/playbooks/user/ensure-users-present.yml
文件中的示例。例如,要删除用户 idm_user_1、idm_user_2 和 idm_user_3 :--- - name: Playbook to handle users hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Delete users idm_user_1, idm_user_2, idm_user_3 ipauser: ipaadmin_password: "{{ ipaadmin_password }}" users: - name: idm_user_1 - name: idm_user_2 - name: idm_user_3 state: absent
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/delete-users.yml
验证
您可以使用 ipa user-show
命令验证 IdM 中是否不存在用户帐户:
以管理员身份登录到
ipaserver
:$ ssh administrator@server.idm.example.com Password: [admin@server /]$
请求有关 idm_user_1 的信息:
$ ipa user-show idm_user_1 ipa: ERROR: idm_user_1: user not found
IdM 中不存在名为 idm_user_1 的用户。
7.6. 其它资源
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-user.md
Markdown 文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/user
目录中的 Ansible playbook 示例。
第 8 章 使用 Ansible playbook 管理用户组
本节介绍使用 Ansible playbook 进行用户组管理。
用户组是一组具有常见特权、密码策略和其他特征的用户。
Identity Management (IdM) 中的用户组可以包括:
- IdM 用户
- 其他 IdM 用户组
- 外部用户,即 IdM 之外的用户
本节包括以下主题:
8.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 默认会创建用户私有组。有关私有组的更多信息,请参阅在没有私有组的情况下添加用户。
8.2. 直接和间接组成员
IdM 中的用户组属性适用于直接和间接成员:当组 B 是组 A 的成员时,组 B 中的所有用户都被视为组 A 的间接成员。
例如,在下图中:
- 用户 1 和用户 2 是组 A 的直接成员。
- 用户 3、用户 4 和用户 5 是组 A 的间接成员。
图 8.1. 直接和间接组成员身份
如果您为用户组 A 设置密码策略,该策略也适用于用户组 B 中的所有用户。
8.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 存在用户的详细信息,请参阅使用 Ansible playbook 管理用户帐户。
流程
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
使用必要的用户和组信息创建一个 Ansible playbook 文件:
--- - name: Playbook to handle groups hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Create group ops with gid 1234 ipagroup: ipaadmin_password: "{{ ipaadmin_password }}" name: ops gidnumber: 1234 - name: Create group sysops ipagroup: ipaadmin_password: "{{ ipaadmin_password }}" name: sysops user: - idm_user - name: Create group appops ipagroup: ipaadmin_password: "{{ ipaadmin_password }}" name: appops - name: Add group members sysops and appops to group ops ipagroup: ipaadmin_password: "{{ ipaadmin_password }}" name: ops group: - sysops - appops
运行 playbook:
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-group-members.yml
验证
您可以使用 ipa group-show
命令验证 ops 组是否包含 sysops 和 appops 作为直接成员,idm_user 作为间接成员:
以管理员身份登录到
ipaserver
:$ ssh admin@server.idm.example.com Password: [admin@server /]$
显示关于 ops 的信息:
ipaserver]$ ipa group-show ops Group name: ops GID: 1234 Member groups: sysops, appops Indirect Member users: idm_user
IdM 中已存在 appops 和 sysops 组,后者包括 idm_user 用户。
其它资源
-
请参阅
/usr/share/doc/ansible-freeipa/README-group.md
Markdown 文件。
8.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 :
--- - name: Playbook to add nonposix and external groups hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Add nonposix group sysops and external group appops ipagroup: ipaadmin_password: "{{ ipaadmin_password }}" groups: - name: sysops nonposix: true - name: appops external: true
运行 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
8.5. 使用 Ansible 启用 AD 用户管理 IdM
按照以下流程,使用 Ansible playbook 确保用户 ID 覆盖在身份管理(IdM)组中存在。用户 ID 覆盖是您在使用 AD 建立信任视图中创建的 Active Directory (AD) 用户覆盖。因此,运行 playbook (如 AD 用户)能够完全管理 IdM,而无需两个不同的帐户和密码。
先决条件
-
您知道 IdM
管理员
密码。 - 安装了使用 AD 的信任。
-
IdM 中已存在 AD 用户的用户 ID 覆盖。如果没有,使用
ipa idoverrideuser-add 'default trust view' ad_user@ad.example.com
命令创建它。 - 您要向其添加用户 ID 覆盖的组在 IdM 中已存在。
-
您可以使用 IdM 或更高版本的 4.8.7 版本。要查看您在服务器上安装的 IdM 版本,请输入
ipa --version
。 您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入您的 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
使用以下内容创建
add-useridoverride-to-group.yml
playbook:--- - name: Playbook to ensure presence of users in a group hosts: ipaserver - name: Ensure the ad_user@ad.example.com user ID override is a member of the admins group: ipagroup: ipaadmin_password: "{{ ipaadmin_password }}" name: admins idoverrideuser: - ad_user@ad.example.com
在示例中:
-
Secret123 是 IdM
admin
密码。 -
admins
是您要添加 ad_user@ad.example.com ID 覆盖的 IdM POSIX 组的名称。此组中的成员具有全部的管理员特权。 - ad_user@ad.example.com 是 AD 管理员的用户 ID 覆盖。用户存储在已建立信任的 AD 域中。
-
Secret123 是 IdM
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory add-useridoverride-to-group.yml
其它资源
- AD 用户的 ID 覆盖
- /usr/share/doc/ansible-freeipa/README-group.md
- /usr/share/doc/ansible-freeipa/playbooks/user
- 在 Active Directory 环境中使用 ID 视图
- 启用 AD 用户管理 IdM
8.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
使用必要的用户和组成员管理信息创建一个 Ansible playbook 文件:
--- - name: Playbook to handle membership management hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure user test is present for group_a ipagroup: ipaadmin_password: "{{ ipaadmin_password }}" name: group_a membermanager_user: test - name: Ensure group_admins is present for group_a ipagroup: ipaadmin_password: "{{ ipaadmin_password }}" name: group_a membermanager_group: group_admins
运行 playbook:
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-member-managers-user-groups.yml
验证
您可以使用 ipa group-show
命令验证 group_a 组是否包含 test 作为成员管理者,以及 group_admins 为 group_a 的成员管理者:
以管理员身份登录到
ipaserver
:$ ssh admin@server.idm.example.com Password: [admin@server /]$
显示 managergroup1 的信息:
ipaserver]$ ipa group-show group_a Group name: group_a GID: 1133400009 Membership managed by groups: group_admins Membership managed by users: test
其它资源
-
请参阅
ipa host-add-member-manager --help
。 -
请参阅系统中的
ipa
手册页。
8.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
使用必要的用户和组成员管理信息创建一个 Ansible playbook 文件:
--- - name: Playbook to handle membership management hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure member manager user and group members are absent for group_a ipagroup: ipaadmin_password: "{{ ipaadmin_password }}" name: group_a membermanager_user: test membermanager_group: group_admins action: member state: absent
运行 playbook:
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-member-managers-are-absent.yml
验证
您可以使用 ipa group-show
命令验证 group_a 组不包含 test 作为成员管理者,以及 group_admins 为 group_a 的成员管理者:
以管理员身份登录到
ipaserver
:$ ssh admin@server.idm.example.com Password: [admin@server /]$
显示 group_a 的信息:
ipaserver]$ ipa group-show group_a Group name: group_a GID: 1133400009
其它资源
-
请参阅
ipa host-remove-member-manager --help
。 -
请参阅系统中的
ipa
手册页。
第 9 章 使用 Ansible 在 IdM 中自动化组成员资格
通过自动化组成员资格,您可以根据其属性自动分配用户、主机用户组和主机组。例如,您可以:
-
根据员工的经理、地点、职位或任何其他属性将员工的用户条目分成不同的组。您可以通过在命令行中输入
ipa user-add --help
来列出所有属性。 -
根据它们的类、位置或任何其他属性,将主机分成不同的组。您可以通过在命令行中输入
ipa host-add --help
来列出所有属性。 - 将所有用户或全部主机添加到单个全局组。
您可以使用 Red Hat Ansible Engine 来自动管理身份管理(IdM)中的自动化组成员资格。
本节涵盖了以下主题:
9.1. 使用 Ansible 确保 IdM 用户组的自动成员规则存在
以下流程描述了如何使用 Ansible playbook 确保身份管理(IdM)组的 自动成员
规则存在。在示例中,确保 testing_group 用户组的 自动成员
规则存在。
先决条件
-
您知道 IdM
管理员
密码。 - IdM 中存在 testing_group 用户组。
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入您的 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
复制位于
/usr/share/doc/ansible-freeipa/playbooks/automember/
目录中的automember-group-present.yml
Ansible playbook 文件:$ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-group-present.yml automember-group-present-copy.yml
-
打开
automember-group-present-copy.yml
文件进行编辑。 通过在
ipaautomember
任务部分中设置以下变量来调整该文件:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 -
将
name
变量设为 testing_group。 -
将
automember_type
变量设为 group。 -
确保
state
变量设置为present
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Automember group present example hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure group automember rule admins is present ipaautomember: ipaadmin_password: "{{ ipaadmin_password }}" name: testing_group automember_type: group state: present
-
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory automember-group-present-copy.yml
9.2. 使用 Ansible 确保指定的条件在 IdM 用户组自动成员规则中存在
其它资源
以下流程描述了如何使用 Ansible playbook 来确保指定的条件在身份管理(IdM)组的 自动成员
规则中存在。在示例中,确保 testing_group 组的 自动成员
规则中存在与 UID 相关的条件。通过指定 .* 条件,您可以确保所有将来的 IdM 用户都自动成为 testing_group 的成员。
先决条件
-
您知道 IdM
管理员
密码。 - testing_group 用户组和自动成员用户组规则在 IdM 中存在。
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入您的 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
复制位于
/usr/share/doc/ansible-freeipa/playbooks/automember/
目录中的automember-hostgroup-rule-present.yml
Ansible playbook 文件,并将它命名为 automember-usergroup-rule-present.yml :$ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-hostgroup-rule-present.yml automember-usergroup-rule-present.yml
-
打开
automember-usergroup-rule-present.yml
文件进行编辑。 通过修改以下参数来调整文件:
- 重命名 playbook 以便对应于您的用例,例如:自动成员用户组规则成员存在。
- 重命名任务以便对应于您的用例,例如:确保用户组的自动成员条件存在。
在
ipaautomember
任务部分中设置以下变量:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 -
将
name
变量设为 testing_group。 -
将
automember_type
变量设为group
。 -
确保
state
变量设置为present
。 -
确保
action
变量设为member
。 -
将
inclusive
key
变量设为UID
。 -
将
inclusive
expression
变量设为 .*
-
将
这是当前示例修改的 Ansible playbook 文件:
--- - name: Automember user group rule member present hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure an automember condition for a user group is present ipaautomember: ipaadmin_password: "{{ ipaadmin_password }}" name: testing_group automember_type: group state: present action: member inclusive: - key: UID expression: .*
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory automember-usergroup-rule-present.yml
验证
以 IdM 管理员身份登录。
$ kinit admin
例如,添加用户:
$ ipa user-add user101 --first user --last 101 ----------------------- Added user "user101" ----------------------- User login: user101 First name: user Last name: 101 ... Member of groups: ipausers, testing_group ...
9.3. 使用 Ansible 确保条件在 IdM 用户组自动成员规则中不存在
其它资源
以下流程描述了如何使用 Ansible playbook 确保条件在身份管理(IdM)组的 自动成员
规则中不存在。在示例中,条件在 自动成员
规则中不存在确保了应包含指定 首字母
为 dp 的用户。将自动成员规则应用到 testing_group 组。通过应用条件,您可以确保将来首字母为 dp 的用户不会成为 testing_group 的成员。
先决条件
-
您知道 IdM
管理员
密码。 - testing_group 用户组和自动成员用户组规则在 IdM 中存在。
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入您的 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
复制位于
/usr/share/doc/ansible-freeipa/playbooks/automember/
目录中的automember-hostgroup-rule-absent.yml
Ansible playbook 文件,并将其命名为 automember-usergroup-rule-absent.yml :$ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-hostgroup-rule-absent.yml automember-usergroup-rule-absent.yml
-
打开
automember-usergroup-rule-absent.yml
文件进行编辑。 通过修改以下参数来调整文件:
- 重命名 playbook 以对应于您的用例,例如:自动成员用户组规则成员不存在。
- 重命名任务以对应于您的用例,例如:确保用户组的自动成员条件不存在。
在
ipaautomember
任务部分中设置以下变量:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 -
将
name
变量设为 testing_group。 -
将
automember_type
变量设为 group。 -
确保
state
变量设置为absent
。 -
确保
action
变量设为member
。 -
将
inclusive
key
变量设为initials
。 -
将
inclusive
expression
变量设为 dp。
-
将
这是当前示例修改的 Ansible playbook 文件:
--- - name: Automember user group rule member absent hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure an automember condition for a user group is absent ipaautomember: ipaadmin_password: "{{ ipaadmin_password }}" name: testing_group automember_type: group state: absent action: member inclusive: - key: initials expression: dp
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory automember-usergroup-rule-absent.yml
验证
以 IdM 管理员身份登录。
$ kinit admin
查看自动成员组:
$ ipa automember-show --type=group testing_group Automember Rule: testing_group
输出中没有 Inclusive Regex: initials=dp
条目确认 testing_group 自动成员规则不包含指定的条件。
9.4. 使用 Ansible 确保 IdM 用户组的自动成员规则不存在
其它资源
以下流程描述了如何使用 Ansible playbook 确保身份管理(IdM)组的 自动成员
规则不存在。在示例中,确保 testing_group 组的 automember
规则不存在。
删除自动成员规则也会删除与规则相关的所有条件。要从规则中只删除特定的条件,请参阅 使用 Ansible 确保条件在 IdM 用户组自动成员规则中不存在。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入您的 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
复制位于
/usr/share/doc/ansible-freeipa/playbooks/automember/
目录中的automember-group-absent.yml
Ansible playbook 文件:$ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-group-absent.yml automember-group-absent-copy.yml
-
打开
automember-group-absent-copy.yml
文件进行编辑。 通过在
ipaautomember
任务部分中设置以下变量来调整该文件:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 -
将
name
变量设为 testing_group。 -
将
automember_type
变量设为 group。 -
确保
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Automember group absent example hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure group automember rule admins is absent ipaautomember: ipaadmin_password: "{{ ipaadmin_password }}" name: testing_group automember_type: group state: absent
-
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory automember-group-absent.yml
其它资源
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-automember.md
文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/automember
目录。
9.5. 使用 Ansible 确保 IdM 主机组自动成员规则中存在条件
按照以下流程,使用 Ansible 确保 IdM 主机组自动成员规则中存在一个条件。示例描述了如何确保 FQDN
为 .*.idm.example.com 的主机是 primary_dns_domain_hosts 主机组的成员,以及 FQDN
为 .*.example.org 的主机不是 primary_dns_domain_hosts 主机组的成员。
先决条件
-
您知道 IdM
管理员
密码。 - IdM 中存在 primary_dns_domain_hosts 主机组和自动成员主机组规则。
您已配置了 Ansible 控制节点以满足以下要求:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入您的 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
复制位于
/usr/share/doc/ansible-freeipa/playbooks/automember/
目录中的automember-hostgroup-rule-present.yml
Ansible playbook 文件:$ cp /usr/share/doc/ansible-freeipa/playbooks/automember/automember-hostgroup-rule-present.yml automember-hostgroup-rule-present-copy.yml
-
打开
automember-hostgroup-rule-present-copy.yml
文件进行编辑。 通过在
ipaautomember
任务部分中设置以下变量来调整该文件:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 -
将
name
变量设为 primary_dns_domain_hosts。 -
将
automember_type
变量设为 hostgroup。 -
确保
state
变量设置为present
。 -
确保
action
变量设为member
。 -
确保
inclusive
key
变量设为fqdn
。 -
将对应的
inclusive
expression
变量设为 .*.idm.example.com。 -
将
exclusive
key
变量设为fqdn
。 -
将对应的
exclusive
expression
变量设为 .*.example.org。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Automember user group rule member present hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure an automember condition for a user group is present ipaautomember: ipaadmin_password: "{{ ipaadmin_password }}" name: primary_dns_domain_hosts automember_type: hostgroup state: present action: member inclusive: - key: fqdn expression: .*.idm.example.com exclusive: - key: fqdn expression: .*.example.org
-
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory automember-hostgroup-rule-present-copy.yml
其它资源
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-automember.md
文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/automember
目录。
第 10 章 使用 Ansible playbook 管理 IdM 中的自助服务规则
本节介绍 Identity Management (IdM) 中的自助服务规则,并介绍如何使用 Ansible playbook 创建和编辑自助服务访问规则。自助服务访问控制规则允许 IdM 实体在其 IdM 目录服务器条目上执行指定操作。
10.1. IdM 中的自助服务访问控制
自助服务访问控制规则定义 Identity Management (IdM) 实体可以在其 IdM 目录服务器条目上执行的操作:例如,IdM 用户能够更新自己的密码。
这种控制方法允许经过身份验证的 IdM 实体编辑其 LDAP 条目中的特定属性,但不允许对整个条目的 add
或 delete
操作。
使用自助服务访问控制规则时要小心:不当配置访问控制规则可能会意外地提升实体的特权。
10.2. 使用 Ansible 确保存在自助服务规则
以下流程描述了如何使用 Ansible playbook 定义自助服务规则并确保它们在身份管理 (IdM) 服务器上存在。在本例中,新的 Users can manage their own name details 规则会授予用户更改其 givenname
、displayname
、title
和 initials
属性的权限。例如,这允许他们更改其显示名称或缩写(如果想更改)。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
复制位于
/usr/share/doc/ansible-freeipa/playbooks/selfservice/
目录中的selfservice-present.yml
文件副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/selfservice/selfservice-present.yml selfservice-present-copy.yml
-
打开
selfservice-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipaselfservice
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为新自助服务规则的名称。 -
将
permission
变量设置为以逗号分隔的权限列表,以授予:read
和write
。 -
将
attribute
变量设置为用户可以自己管理的属性列表:givenname
、displayname
、title
和initials
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Self-service present hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure self-service rule "Users can manage their own name details" is present ipaselfservice: ipaadmin_password: "{{ ipaadmin_password }}" name: "Users can manage their own name details" permission: read, write attribute: - givenname - displayname - title - initials
-
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-present-copy.yml
其它资源
- IdM 中的自助服务访问控制
-
/usr/share/doc/ansible-freeipa/
目录中的README-selfservice.md
文件 -
/usr/share/doc/ansible-freeipa/playbooks/selfservice
目录
10.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
创建位于
/usr/share/doc/ansible-freeipa/playbooks/selfservice/
目录中的selfservice-absent.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/selfservice/selfservice-absent.yml selfservice-absent-copy.yml
-
打开
selfservice-absent-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipaselfservice
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为自助服务规则的名称。 -
将
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Self-service absent hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure self-service rule "Users can manage their own name details" is absent ipaselfservice: ipaadmin_password: "{{ ipaadmin_password }}" name: "Users can manage their own name details" state: absent
-
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-absent-copy.yml
其它资源
- IdM 中的自助服务访问控制
-
/usr/share/doc/ansible-freeipa/
目录中的README-selfservice.md
文件 -
/usr/share/doc/ansible-freeipa/playbooks/selfservice
目录中的 playbook 示例
10.4. 使用 Ansible 确保自助服务规则具有特定属性
以下流程描述了如何使用 Ansible playbook 确保现有自助服务规则具有特定的设置。在示例中,您可以确认 Users can manage their own name details 自助服务规则也具有 surname
成员属性。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - Users can manage their own name details 自助服务规则存在于 IdM 中。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
创建位于
/usr/share/doc/ansible-freeipa/playbooks/selfservice/
目录中的selfservice-member-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/selfservice/selfservice-member-present.yml selfservice-member-present-copy.yml
-
打开
selfservice-member-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipaselfservice
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为要修改的自助服务规则的名称。 -
将
attribute
变量设置为surname
。 -
将
action
变量设置为member
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Self-service member present hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure selfservice "Users can manage their own name details" member attribute surname is present ipaselfservice: ipaadmin_password: "{{ ipaadmin_password }}" name: "Users can manage their own name details" attribute: - surname action: member
-
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-member-present-copy.yml
其它资源
- IdM 中的自助服务访问控制
-
README-selfservice.md
文件位于/usr/share/doc/ansible-freeipa/
目录中 -
/usr/share/doc/ansible-freeipa/playbooks/selfservice
目录中的 playbook 示例
10.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - Users can manage their own name details 自助服务规则存在于 IdM 中。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
创建位于
/usr/share/doc/ansible-freeipa/playbooks/selfservice/
目录中的selfservice-member-absent.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/selfservice/selfservice-member-absent.yml selfservice-member-absent-copy.yml
-
打开
selfservice-member-absent-copy.yml
Ansible playbook 文件进行编辑。 通过在
ipaselfservice
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为您要修改的自助服务规则的名称。 -
将
attribute
变量设置为givenname
和 topname
。 -
将
action
变量设置为member
。 -
将
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Self-service member absent hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure selfservice "Users can manage their own name details" member attributes givenname and surname are absent ipaselfservice: ipaadmin_password: "{{ ipaadmin_password }}" name: "Users can manage their own name details" attribute: - givenname - surname action: member state: absent
-
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory selfservice-member-absent-copy.yml
其它资源
- IdM 中的自助服务访问控制
-
/usr/share/doc/ansible-freeipa/
目录中的README-selfservice.md
文件 -
/usr/share/doc/ansible-freeipa/playbooks/selfservice
目录中的 playbook 示例
第 11 章 委派权限到用户组,以使用 Ansible playbook 管理用户
委派是 IdM 中的访问控制方法之一,以及自助服务规则和基于角色的访问控制 (RBAC)。您可以使用委派(delegation)为一组用户分配权限,以管理另一组用户的条目。
本节涵盖了以下主题:
11.1. 委派规则
您可以通过创建委派规则,将权限委派给用户组来管理用户。
委派规则允许特定用户组对另一用户组中用户的特定属性执行写入(编辑)操作。这种形式的访问控制规则仅限于编辑您在委派规则中指定的属性子集的值;它不授予添加或删除整个条目或控制未指定属性的权限。
委派规则向 IdM 中的现有用户组授予权限。例如,您可以使用委派功能,允许 managers
用户组管理 employees
用户组中的选定用户属性。
11.2. 为 IdM 创建 Ansible 清单文件
在使用 Ansible 时,最好在主目录中创建一个专用于 Ansible playbook 的子目录,您可复制 /usr/share/doc/ansible-freeipa/*
和 /usr/share/doc/rhel-system-roles/*
子目录并进行相应的调整。这种做法有以下优点:
- 您可以在一个位置找到所有 playbook。
-
您可以运行 playbook,而无需调用
root
特权。
流程
在主目录中为您的 Ansible 配置和 playbook 创建目录:
$ mkdir ~/MyPlaybooks/
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks
使用以下内容创建 ~/MyPlaybooks/ansible.cfg 文件:
[defaults] inventory = /home/<username>/MyPlaybooks/inventory [privilege_escalation] become=True
使用以下内容创建 ~/MyPlaybooks/inventory 文件:
[eu] server.idm.example.com [us] replica.idm.example.com [ipaserver:children] eu us
此配置定义了两个主机组,即eu 和 us,用于这些位置中的主机。此外,此配置定义了 ipaserver 主机组,它包含来自 eu 和 us 组的所有主机。
11.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
制作位于
/usr/share/doc/ansible-freeipa/playbooks/delegation/
目录中的delegation-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-present.yml delegation-present-copy.yml
-
打开
delegation-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipadelegation
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为新委派规则的名称。 -
将
permission
变量设置为以逗号分隔的权限列表,以授予:read
和write
。 -
将
attribute
变量设置为委派的用户组可以管理的属性列表:businesscategory
、departmentnumber
、employeenumber
和employeetype
。 -
将
group
变量设置为被授予查看或修改属性访问权限的组名称。 -
将
membergroup
变量设置为组的名称,其属性可以查看或修改。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage a delegation rule hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure delegation "basic manager attributes" is present ipadelegation: ipaadmin_password: "{{ ipaadmin_password }}" name: "basic manager attributes" permission: read, write attribute: - businesscategory - departmentnumber - employeenumber - employeetype group: managers membergroup: employees
-
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-present-copy.yml
其它资源
- 委派规则
-
/usr/share/doc/ansible-freeipa/
目录中的README-delegation.md
文件 -
/usr/share/doc/ansible-freeipa/playbooks/ipadelegation
目录中的 playbook 示例
11.4. 使用 Ansible 确保没有委派规则
以下流程描述了如何使用 Ansible playbook 来确保您的 IdM 配置中没有指定的委托规则。以下示例描述了如何确保 IdM 中没有存在自定义 basic manager attributes 委派规则。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks>/
制作位于
/usr/share/doc/ansible-freeipa/playbooks/delegation/
目录中的delegation-absent.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-present.yml delegation-absent-copy.yml
-
打开
delegation-absent-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipadelegation
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为委派规则的名称。 -
将
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Delegation absent hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure delegation "basic manager attributes" is absent ipadelegation: ipaadmin_password: "{{ ipaadmin_password }}" name: "basic manager attributes" state: absent
-
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-absent-copy.yml
其它资源
- 委派规则
-
/usr/share/doc/ansible-freeipa/
目录中的README-delegation.md
文件 -
/usr/share/doc/ansible-freeipa/playbooks/ipadelegation
目录中的 playbook 示例
11.5. 使用 Ansible 确保委派规则具有特定属性
以下流程描述了如何使用 Ansible playbook 确保委派规则具有特定的设置。您可以使用此 playbook 修改您之前创建的委派角色。在示例中,您可以确保 basic manager attributes 委派规则仅具有 departmentnumber
成员属性。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - IdM 中存在 basic manager attributes委派规则。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
制作位于
/usr/share/doc/ansible-freeipa/playbooks/delegation/
目录中的delegation-member-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-member-present.yml delegation-member-present-copy.yml
-
打开
delegation-member-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipadelegation
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为要修改的委派规则的名称。 -
将
attribute
变量设置为departmentnumber
。 -
将
action
变量设置为member
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Delegation member present hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure delegation "basic manager attributes" member attribute departmentnumber is present ipadelegation: ipaadmin_password: "{{ ipaadmin_password }}" name: "basic manager attributes" attribute: - departmentnumber action: member
-
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-member-present-copy.yml
其它资源
- 委派规则
-
/usr/share/doc/ansible-freeipa/
目录中的README-delegation.md
文件 -
/usr/share/doc/ansible-freeipa/playbooks/ipadelegation
目录中的 playbook 示例
11.6. 使用 Ansible 确保委派规则没有特定属性
以下流程描述了如何使用 Ansible playbook 来确保委派规则没有特定的设置。您可以使用此 playbook 确保委派角色不授予不需要的访问权限。在该示例中,您可以确保 basic manager attributes 委派规则没有 employeenumber
和 employeetype
成员属性。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - IdM 中存在 basic manager attributes委派规则。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
制作位于
/usr/share/doc/ansible-freeipa/playbooks/delegation/
目录中的delegation-member-absent.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/delegation/delegation-member-absent.yml delegation-member-absent-copy.yml
-
打开
delegation-member-absent-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipadelegation
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为要修改的委派规则的名称。 -
将
attribute
变量设置为employeenumber
和employeetype
。 -
将
action
变量设置为member
。 -
将
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Delegation member absent hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure delegation "basic manager attributes" member attributes employeenumber and employeetype are absent ipadelegation: ipaadmin_password: "{{ ipaadmin_password }}" name: "basic manager attributes" attribute: - employeenumber - employeetype action: member state: absent
-
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i ~/MyPlaybooks/inventory delegation-member-absent-copy.yml
其它资源
- 委派规则
-
/usr/share/doc/ansible-freeipa/
目录中的README-delegation.md
文件。 -
/usr/share/doc/ansible-freeipa/playbooks/ipadelegation
目录中的 playbook 示例
第 12 章 在 IdM 中使用 Ansible playbook 管理基于角色的访问控制
基于角色的访问控制 (RBAC) 是一种基于角色和特权定义的策略中立访问控制机制。在 Identity Management (IdM) 中的 RBAC 组件是角色、权限和权限:
- Permissions 授予执行特定任务的权利,如添加或删除用户、修改组并启用 读权限。
- Privileges(特权) 结合了权限,例如添加新用户所需的所有权限。
- Roles(角色) 向用户、用户组、主机或主机组授予一组特权。
尤其是在大型公司,使用 RBAC 可以帮助创建具有各个职责领域的管理员分层系统。
本章介绍了使用 Ansible playbook 管理 RBAC 时执行的以下操作:
12.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)的所有可见性,适用于所有匿名用户、所有经过身份验证的用户,或者只更改一组特定的特权用户。
例如,如果管理员只想将用户或组的访问权限限制到这些用户或组需要访问的特定部分,并且使其他部分完全隐藏于他们,此方法的灵活性对管理员很有用。
权限不能包含其他权限。
12.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 修改受管权限,则无法修改的属性将被禁用。
12.3. IdM 中的特权
特权是一组适用于角色的权限。
虽然权限提供了执行单个操作的权限,但某些 IdM 任务需要多个权限才能成功。因此,特权组合了执行特定任务所需的不同权限。
例如,为新 IdM 用户设置帐户需要以下权限:
- 创建新用户条目
- 重置用户密码
- 将新用户添加到默认 IPA 用户组
将这三个低级别任务合并到一个更高级别的任务中,例如名为 Add User,可使系统管理员更加轻松地管理角色。IdM 已包含几个默认权限。除了用户和用户组外,还将特权分配到主机和主机组,以及网络服务。这种方法允许精细控制一组主机上使用特定网络服务的操作。
特权可能不包含其他特权。
12.4. IdM 中的角色
角色是用户为角色指定的特权列表。
实际上,权限授予执行给定的低级别任务(如创建用户条目和向组添加条目)的能力,特权组合了更高级别任务所需的一个或多个这些权限(如在给定组中创建新用户)。角色根据需要收集权限:例如,用户管理员角色能够添加、修改和删除用户。
角色用于对允许的操作进行分类。它们不用作实施特权升级或防止特权升级的工具。
角色不能包含其他角色。
12.5. Identity Management 中的预定义角色
Red Hat Identity Management 提供以下预定义角色范围:
角色 | 特权 | Description |
---|---|---|
Enrollment Administrator | 主机注册 | 负责客户端或主机、注册 |
helpdesk | Modify Users and Reset passwords, Modify Group membership | 负责执行简单的用户管理任务 |
IT Security Specialist | Netgroups Administrators, HBAC Administrator, Sudo Administrator | 负责管理安全策略,如基于主机的访问控制、sudo 规则 |
IT Specialist | Host Administrators, Host Group Administrators, Service Administrators, Automount Administrators | 负责管理主机 |
Security Architect | Delegation Administrator, Replication Administrators, Write IPA Configuration, Password Policy Administrator | 负责管理身份管理环境、创建信任、创建复制协议 |
User Administrator | User Administrators, Group Administrators, Stage User Administrators | 负责创建用户和组 |
12.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/<MyPlaybooks>/ 目录:
$ cd ~/<MyPlaybooks>/
创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/
目录的role-member-user-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-user-present.yml role-member-user-present-copy.yml
-
打开
role-member-user-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
iparole
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为新角色的名称。 -
将
privilege
列表设置为您要包含在新角色中的 IdM 权限的名称。 -
(可选)将
user
变量设置为您要授予新角色的用户名称。 -
(可选)将
group
变量设置为要授予新角色的组的名称。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage IPA role with members. hosts: ipaserver become: true gather_facts: no vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - iparole: ipaadmin_password: "{{ ipaadmin_password }}" name: user_and_host_administrator user: idm_user01 group: idm_group01 privilege: - Group Administrators - User Administrators - Stage User Administrators - Group Administrators
-
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-user-present-copy.yml
其它资源
- 使用 Ansible Vault 加密内容
- IdM 中的角色
-
/usr/share/doc/ansible-freeipa/
目录中的README-role
文件 -
/usr/share/doc/ansible-freeipa/playbooks/iparole
目录中的 playbook 示例
12.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/<MyPlaybooks>/ 目录:
$ cd ~/<MyPlaybooks>/
创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/
目录的role-is-absent.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-is-absent.yml role-is-absent-copy.yml
-
打开
role-is-absent-copy.yml
Ansible playbook 文件以进行编辑。 通过在
iparole
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为角色的名称。 -
确保
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage IPA role with members. hosts: ipaserver become: true gather_facts: no vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - iparole: ipaadmin_password: "{{ ipaadmin_password }}" name: user_and_host_administrator state: absent
-
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-is-absent-copy.yml
其它资源
- 使用 Ansible Vault 加密内容
- IdM 中的角色
-
/usr/share/doc/ansible-freeipa/
目录中的README-role
Markdown 文件 -
/usr/share/doc/ansible-freeipa/playbooks/iparole
目录中的 playbook 示例
12.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/<MyPlaybooks>/ 目录:
$ cd ~/<MyPlaybooks>/
创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/
目录的role-member-group-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-group-present.yml role-member-group-present-copy.yml
-
打开
role-member-group-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
iparole
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为您要分配的角色的名称。 -
将
group
变量设置为组的名称。 -
将
action
变量设置为member
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage IPA role with members. hosts: ipaserver become: true gather_facts: no vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - iparole: ipaadmin_password: "{{ ipaadmin_password }}" name: helpdesk group: junior_sysadmins action: member
-
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-group-present-copy.yml
其它资源
- 使用 Ansible Vault 加密内容
- IdM 中的角色
-
/usr/share/doc/ansible-freeipa/
目录中的README-role
Markdown 文件 -
/usr/share/doc/ansible-freeipa/playbooks/iparole
目录中的 playbook 示例
12.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/<MyPlaybooks>/ 目录:
$ cd ~/<MyPlaybooks>/
创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/
目录的role-member-user-absent.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-user-absent.yml role-member-user-absent-copy.yml
-
打开
role-member-user-absent-copy.yml
Ansible playbook 文件以进行编辑。 通过在
iparole
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为您要分配的角色的名称。 -
将
user
列表设置为用户的名称。 -
将
action
变量设置为member
。 -
将
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage IPA role with members. hosts: ipaserver become: true gather_facts: no vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - iparole: ipaadmin_password: "{{ ipaadmin_password }}" name: helpdesk user - user_01 - user_02 action: member state: absent
-
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-user-absent-copy.yml
其它资源
- 使用 Ansible Vault 加密内容
- IdM 中的角色
-
/usr/share/doc/ansible-freeipa/
目录中的README-role
Markdown 文件 -
/usr/share/doc/ansible-freeipa/playbooks/iparole
目录中的 playbook 示例
12.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - web_administrator 角色存在于 IdM 中。
- IdM 中存在 HTTP/client01.idm.example.com@IDM.EXAMPLE.COM 服务。
流程
进入 ~/<MyPlaybooks>/ 目录:
$ cd ~/<MyPlaybooks>/
创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/
目录的role-member-service-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-service-present-absent.yml role-member-service-present-copy.yml
-
打开
role-member-service-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
iparole
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为您要分配的角色的名称。 -
将
service
列表设置为服务的名称。 -
将
action
变量设置为member
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage IPA role with members. hosts: ipaserver become: true gather_facts: no vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - iparole: ipaadmin_password: "{{ ipaadmin_password }}" name: web_administrator service: - HTTP/client01.idm.example.com action: member
-
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-service-present-copy.yml
其它资源
- 使用 Ansible Vault 加密内容
- IdM 中的角色
-
/usr/share/doc/ansible-freeipa/
目录中的README-role
Markdown 文件 -
/usr/share/doc/ansible-freeipa/playbooks/iparole
目录中的 playbook 示例
12.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - web_administrator 角色存在于 IdM 中。
- client01.idm.example.com 主机存在于 IdM 中。
流程
进入 ~/<MyPlaybooks>/ 目录:
$ cd ~/<MyPlaybooks>/
创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/
目录的role-member-host-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-host-present.yml role-member-host-present-copy.yml
-
打开
role-member-host-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
iparole
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为您要分配的角色的名称。 -
将
host
列表设置为主机的名称。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage IPA role with members. hosts: ipaserver become: true gather_facts: no vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - iparole: ipaadmin_password: "{{ ipaadmin_password }}" name: web_administrator host: - client01.idm.example.com action: member
-
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-host-present-copy.yml
其他资源
- 使用 Ansible Vault 加密内容
- IdM 中的角色
-
/usr/share/doc/ansible-freeipa/
目录中的README-role
Markdown 文件 -
/usr/share/doc/ansible-freeipa/playbooks/iparole
目录中的 playbook 示例
12.12. 使用 Ansible 确保主机组是 IdM RBAC 角色的成员
作为在身份管理 (IdM) 中管理基于角色的访问控制的系统管理员,您可能希望确保特定的主机或主机组与特定角色关联。以下示例描述了如何确保自定义 web_administrator 角色可以管理运行 HTTP
服务的 IdM 主机组的 web_servers 组。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - web_administrator 角色存在于 IdM 中。
- web_servers 主机组存在于 IdM 中。
流程
进入 ~/<MyPlaybooks>/ 目录:
$ cd ~/<MyPlaybooks>/
创建位于
/usr/share/doc/ansible-freeipa/playbooks/role/
目录的role-member-hostgroup-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/role/role-member-hostgroup-present.yml role-member-hostgroup-present-copy.yml
-
打开
role-member-hostgroup-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
iparole
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为您要分配的角色的名称。 -
将
hostgroup
列表设置为 hostgroup 的名称。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage IPA role with members. hosts: ipaserver become: true gather_facts: no vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - iparole: ipaadmin_password: "{{ ipaadmin_password }}" name: web_administrator hostgroup: - web_servers action: member
-
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i ~/<MyPlaybooks>/inventory role-member-hostgroup-present-copy.yml
其他资源
- 使用 Ansible Vault 加密内容
- IdM 中的角色
-
/usr/share/doc/ansible-freeipa/
目录中的README-role
Markdown 文件 -
/usr/share/doc/ansible-freeipa/playbooks/iparole
目录中的 playbook 示例
第 13 章 使用 Ansible playbook 管理 RBAC 特权
基于角色的访问控制 (RBAC) 是一种基于角色、特权和权限定义的策略中立访问控制机制。尤其是在大型公司,使用 RBAC 可以帮助创建具有各个职责领域的管理员分层系统。
本章介绍了以下操作,以使用 Ansible playbook 管理身份管理 (IdM) 中的 RBAC 特权:
先决条件
- 您已了解 RBAC 的概念和原则。
13.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
生成位于
/usr/share/doc/ansible-freeipa/playbooks/privilege/
目录中的privilege-present.yml
文件副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-present.yml privilege-present-copy.yml
-
打开
privilege-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipaprivilege
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为新特权 full_host_administration 的名称。 -
(可选)利用
description
变量描述特权。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Privilege present example hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure privilege full_host_administration is present ipaprivilege: ipaadmin_password: "{{ ipaadmin_password }}" name: full_host_administration description: This privilege combines all IdM permissions related to host administration
-
将
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory privilege-present-copy.yml
13.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - full_host_administration 特权存在。有关如何使用 Ansible 创建特权的详情,请参阅 使用 Ansible 确保自定义 IdM RBAC 特权存在。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
生成位于
/usr/share/doc/ansible-freeipa/playbooks/privilege/
目录中的privilege-member-present.yml
文件副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-member-present.yml privilege-member-present-copy.yml
-
打开
privilege-member-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipaprivilege
任务部分设置以下变量来调整文件:-
调整任务的
name
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为特权的名称。 -
将
permission
列表设置为您要包含在权限中的权限名称。 -
确保
action
变量设置为member
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Privilege member present example hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure that permissions are present for the "full_host_administration" privilege ipaprivilege: ipaadmin_password: "{{ ipaadmin_password }}" name: full_host_administration permission: - "System: Add krbPrincipalName to a Host" - "System: Enroll a Host" - "System: Manage Host Certificates" - "System: Manage Host Enrollment Password" - "System: Manage Host Keytab" - "System: Manage Host Principals" - "Retrieve Certificates from the CA" - "Revoke Certificate" - "System: Add Hosts" - "System: Add krbPrincipalName to a Host" - "System: Enroll a Host" - "System: Manage Host Certificates" - "System: Manage Host Enrollment Password" - "System: Manage Host Keytab" - "System: Manage Host Keytab Permissions" - "System: Manage Host Principals" - "System: Manage Host SSH Public Keys" - "System: Manage Service Keytab" - "System: Manage Service Keytab Permissions" - "System: Modify Hosts" - "System: Remove Hosts" - "System: Add Hostgroups" - "System: Modify Hostgroup Membership" - "System: Modify Hostgroups" - "System: Remove Hostgroups"
-
调整任务的
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory privilege-member-present-copy.yml
13.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
生成位于
/usr/share/doc/ansible-freeipa/playbooks/privilege/
目录中的privilege-member-present.yml
文件副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-member-absent.yml privilege-member-absent-copy.yml
-
打开
privilege-member-absent-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipaprivilege
任务部分设置以下变量来调整文件:-
调整任务的
name
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为特权的名称。 -
将
permission
列表设置为您要从特权中删除的权限名称。 -
确保
action
变量设置为member
。 -
确保
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Privilege absent example hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure that the "Request Certificate ignoring CA ACLs" permission is absent from the "Certificate Administrators" privilege ipaprivilege: ipaadmin_password: "{{ ipaadmin_password }}" name: Certificate Administrators permission: - "Request Certificate ignoring CA ACLs" action: member state: absent
-
调整任务的
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory privilege-member-absent-copy.yml
13.4. 使用 Ansible 重命名自定义 IdM RBAC 特权
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制。
以下流程描述了如何重命名权限,例如,您已从其中删除了一些权限。因此,特权的名称不再准确。在示例中,管理员将 full_host_administration 特权重命名为 limited_host_administration。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,来作为 IdM 客户端、服务器或副本。 - full_host_administration 特权存在。有关如何添加特权的更多信息,请参阅 使用 Ansible 确保自定义 IdM RBAC 特权存在。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
生成位于
/usr/share/doc/ansible-freeipa/playbooks/privilege/
目录中的privilege-present.yml
文件副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-present.yml rename-privilege.yml
-
打开
rename-privilege.yml
Ansible playbook 文件以进行编辑。 通过在
ipaprivilege
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为特权的当前名称。 -
添加
rename
变量,并将它设置为特权的新名称。 -
添加
state
变量,并将它设置为重命名
。
-
将
重新命名 playbook 本身,例如:
--- - name: Rename a privilege hosts: ipaserver
在 playbook 中重命名任务,例如:
[...] tasks: - name: Ensure the full_host_administration privilege is renamed to limited_host_administration ipaprivilege: [...]
这是当前示例修改的 Ansible playbook 文件:
--- - name: Rename a privilege hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure the full_host_administration privilege is renamed to limited_host_administration ipaprivilege: ipaadmin_password: "{{ ipaadmin_password }}" name: full_host_administration rename: limited_host_administration state: renamed
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory rename-privilege.yml
13.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
生成位于
/usr/share/doc/ansible-freeipa/playbooks/privilege/
目录中的privilege-absent.yml
文件副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/privilege/privilege-absent.yml privilege-absent-copy.yml
-
打开
privilege-absent-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipaprivilege
任务部分设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为您要删除的特权的名称。 -
确保
state
变量设置为absent
。
-
将
在 playbook 中重命名任务,例如:
[...] tasks: - name: Ensure privilege "CA administrator" is absent ipaprivilege: [...]
这是当前示例修改的 Ansible playbook 文件:
--- - name: Privilege absent example hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure privilege "CA administrator" is absent ipaprivilege: ipaadmin_password: "{{ ipaadmin_password }}" name: CA administrator state: absent
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory privilege-absent-copy.yml
13.6. 其它资源
第 14 章 使用 Ansible playbook 在 IdM 中管理 RBAC 权限
基于角色的访问控制 (RBAC) 是一种基于角色、特权和权限定义的策略中立访问控制机制。尤其是在大型公司,使用 RBAC 可以帮助创建具有各个职责领域的管理员分层系统。
本章介绍了使用 Ansible playbook 管理身份管理 (IdM) 中 RBAC 权限时执行的以下操作:
先决条件
14.1. 使用 Ansible 确保存在 RBAC 权限
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制 (RBAC)。
以下流程描述了如何使用 Ansible playbook 确保 IdM 中存在权限,以便它可以添加到特权中。这个示例描述了如何确保以下目标状态:
-
MyPermission
权限存在。 -
MyPermission
权限只能应用到主机。 授予了包含权限的用户可以对条目执行以下所有可能的操作:
- 写
- 读
- 搜索
- 比较
- 添加
- 删除
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
制作位于
/usr/share/doc/ansible-freeipa/playbooks/permission/
目录中的permission-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-present.yml permission-present-copy.yml
-
打开
permission-present-copy.yml
Ansible playbook 文件进行编辑。 通过在
ipapermission
任务部分中设置以下变量来调整文件:-
调整任务的
name
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为权限的名称。 -
将
object_type
变量设置为host
。 -
将
right
变量设置为all
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Permission present example hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure that the "MyPermission" permission is present ipapermission: ipaadmin_password: "{{ ipaadmin_password }}" name: MyPermission object_type: host right: all
-
调整任务的
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory permission-present-copy.yml
14.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
制作位于
/usr/share/doc/ansible-freeipa/playbooks/permission/
目录中的permission-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-present.yml permission-present-with-attribute.yml
-
打开
permission-present-with-attribute.yml
Ansible playbook 文件进行编辑。 通过在
ipapermission
任务部分中设置以下变量来调整文件:-
调整任务的
name
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为权限的名称。 -
将
object_type
变量设置为host
。 -
将
right
变量设置为all
。 -
将
attrs
变量设置为description
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Permission present example hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure that the "MyPermission" permission is present with an attribute ipapermission: ipaadmin_password: "{{ ipaadmin_password }}" name: MyPermission object_type: host right: all attrs: description
-
调整任务的
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory permission-present-with-attribute.yml
其它资源
- 请参阅 RHEL 7 中的 Linux 域身份、身份验证和策略指南 中的 用户和组模式。
14.3. 使用 Ansible 确保缺少 RBAC 权限
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制 (RBAC)。
以下流程描述了如何使用 Ansible playbook 确保 IdM 中缺少权限,因此无法将其添加到特权中。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
制作位于
/usr/share/doc/ansible-freeipa/playbooks/permission/
目录中的permission-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-absent.yml permission-absent-copy.yml
-
打开
permission-absent-copy.yml
Ansible playbook 文件进行编辑。 通过在
ipapermission
任务部分中设置以下变量来调整文件:-
调整任务的
name
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为权限的名称。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Permission absent example hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure that the "MyPermission" permission is absent ipapermission: ipaadmin_password: "{{ ipaadmin_password }}" name: MyPermission state: absent
-
调整任务的
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory permission-absent-copy.yml
14.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - MyPermission 权限存在。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
制作位于
/usr/share/doc/ansible-freeipa/playbooks/permission/
目录中的permission-member-present.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-member-present.yml permission-member-present-copy.yml
-
打开
permission-member-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipapermission
任务部分中设置以下变量来调整文件:-
调整任务的
name
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为权限的名称。 -
将
attrs
列表设置为description
和gecos
变量。 -
确保
action
变量设置为member
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Permission member present example hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure that the "gecos" and "description" attributes are present in "MyPermission" ipapermission: ipaadmin_password: "{{ ipaadmin_password }}" name: MyPermission attrs: - description - gecos action: member
-
调整任务的
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory permission-member-present-copy.yml
14.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - MyPermission 权限存在。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
制作位于
/usr/share/doc/ansible-freeipa/playbooks/permission/
目录中的permission-member-absent.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-member-absent.yml permission-member-absent-copy.yml
-
打开
permission-member-absent-copy.yml
Ansible playbook 文件进行编辑。 通过在
ipapermission
任务部分中设置以下变量来调整文件:-
调整任务的
name
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为权限的名称。 -
将
attrs
变量设置为description
。 -
将
action
变量设置为member
。 -
确保
state
变量设置为absent
这是当前示例修改的 Ansible playbook 文件:
--- - name: Permission absent example hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure that an attribute is not a member of "MyPermission" ipapermission: ipaadmin_password: "{{ ipaadmin_password }}" name: MyPermission attrs: description action: member state: absent
-
调整任务的
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory permission-member-absent-copy.yml
14.6. 使用 Ansible 重命名 IdM RBAC 权限
作为身份管理系统管理员 (IdM),您可以自定义 IdM 基于角色的访问控制。
以下流程描述了如何使用 Ansible playbook 重新命名权限。这个示例描述了如何将 MyPermission 重命名为 MyNewPermission。
先决条件
在控制节点上:
- 您使用 Ansible 版本 2.13 或更高版本。
-
您已安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。 - MyPermission 存在于 IdM 中。
- IdM 中不存在 MyNewPermission。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
制作位于
/usr/share/doc/ansible-freeipa/playbooks/permission/
目录中的permission-renamed.yml
文件的副本:$ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-renamed.yml permission-renamed-copy.yml
-
打开
permission-renamed-copy.yml
Ansible playbook 文件进行编辑。 通过在
ipapermission
任务部分中设置以下变量来调整文件:-
调整任务的
name
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为权限的名称。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Permission present example hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Rename the "MyPermission" permission ipapermission: ipaadmin_password: "{{ ipaadmin_password }}" name: MyPermission rename: MyNewPermission state: renamed
-
调整任务的
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory permission-renamed-copy.yml
14.7. 其它资源
第 15 章 使用 Ansible 管理 IdM 中的复制拓扑
您可以维护多个身份管理 (IdM) 服务器,并使它们相互复制,以实现冗余目的,以减少或防止服务器丢失。例如,如果一个服务器失败,其他服务器就会为域提供服务。您还可以根据剩余的服务器创建新副本来恢复丢失的服务器。
存储在 IdM 服务器上的数据会根据复制协议复制:当两台服务器配置了复制协议时,它们将共享其数据。复制的数据存储在拓扑后缀
中。当两个副本在其后缀之间具有复制协议时,后缀组成一个拓扑片段(segment)
。
本章论述了如何使用 Ansible 管理 IdM 复制协议、拓扑片段和拓扑后缀。
15.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/
复制
ansible-freeipa
软件包提供的add-topologysegment.yml
Ansible playbook 文件:$ cp /usr/share/doc/ansible-freeipa/playbooks/topology/add-topologysegment.yml add-topologysegment-copy.yml
-
打开
add-topologysegment-copy.yml
文件进行编辑。 通过在
ipatopologysegment
任务部分设置以下变量来调整文件:-
指明
ipaadmin_password
变量的值在 secret.yml Ansible vault 文件中定义。 -
根据您要添加的分段类型,将
suffix
变量设置为domain
或ca
。 -
将
left
变量设置为您要作为复制协议左侧节点的 IdM 服务器的名称。 -
将
right
变量设置为您要作为复制协议正确节点的 IdM 服务器的名称。 -
确保
state
变量设置为present
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to handle topologysegment hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Add topology segment ipatopologysegment: ipaadmin_password: "{{ ipaadmin_password }}" suffix: domain left: server.idm.example.com right: replica.idm.example.com state: present
-
指明
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory add-topologysegment-copy.yml
其它资源
- 解释复制协议、拓扑后缀和拓扑段
-
/usr/share/doc/ansible-freeipa/README-topology.md
-
/usr/share/doc/ansible-freeipa/playbooks/topology
中的 playbook 示例
15.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/
复制
ansible-freeipa
软件包提供的add-topologysegments.yml
Ansible playbook 文件:$ cp /usr/share/doc/ansible-freeipa/playbooks/topology/add-topologysegments.yml add-topologysegments-copy.yml
-
打开
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 文件:
--- - name: Add topology segments hosts: ipaserver gather_facts: false vars: ipaadmin_password: "{{ ipaadmin_password }}" ipatopology_segments: - {suffix: domain, left: replica1.idm.example.com , right: replica2.idm.example.com } - {suffix: domain, left: replica2.idm.example.com , right: replica3.idm.example.com } - {suffix: domain, left: replica3.idm.example.com , right: replica4.idm.example.com } - {suffix: domain+ca, left: replica4.idm.example.com , right: replica1.idm.example.com } vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Add topology segment ipatopologysegment: ipaadmin_password: "{{ ipaadmin_password }}" suffix: "{{ item.suffix }}" name: "{{ item.name | default(omit) }}" left: "{{ item.left }}" right: "{{ item.right }}" state: present loop: "{{ ipatopology_segments | default([]) }}"
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory add-topologysegments-copy.yml
其它资源
- 解释复制协议、拓扑后缀和拓扑段
-
/usr/share/doc/ansible-freeipa/README-topology.md
-
/usr/share/doc/ansible-freeipa/playbooks/topology
中的 playbook 示例
15.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/
复制
ansible-freeipa
软件包提供的check-topologysegments.yml
Ansible playbook 文件:$ cp /usr/share/doc/ansible-freeipa/playbooks/topology/check-topologysegments.yml check-topologysegments-copy.yml
-
打开
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 文件:
--- - name: Add topology segments hosts: ipaserver gather_facts: false vars: ipaadmin_password: "{{ ipaadmin_password }}" ipatopology_segments: - {suffix: domain, left: replica1.idm.example.com, right: replica2.idm.example.com } - {suffix: domain, left: replica2.idm.example.com , right: replica3.idm.example.com } - {suffix: domain, left: replica3.idm.example.com , right: replica4.idm.example.com } - {suffix: domain+ca, left: replica4.idm.example.com , right: replica1.idm.example.com } vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Check topology segment ipatopologysegment: ipaadmin_password: "{{ ipaadmin_password }}" suffix: "{{ item.suffix }}" name: "{{ item.name | default(omit) }}" left: "{{ item.left }}" right: "{{ item.right }}" state: checked loop: "{{ ipatopology_segments | default([]) }}"
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory check-topologysegments-copy.yml
其它资源
- 解释复制协议、拓扑后缀和拓扑段
-
/usr/share/doc/ansible-freeipa/README-topology.md
-
/usr/share/doc/ansible-freeipa/playbooks/topology
中的 playbook 示例
15.4. 使用 Ansible 验证 IdM 中是否存在拓扑后缀
在身份管理 (IdM) 中的复制协议中,拓扑后缀存储要复制的数据。IdM 支持两种类型的拓扑后缀:domain
和 ca
。每个后缀代表一个单独的后端,即一个单独的复制拓扑。配置复制协议时,它会在两个不同的服务器上加入同一类型的两个拓扑后缀。
域
后缀包含与域相关的所有数据,如有关用户、组和策略的数据。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/
复制
ansible-freeipa
软件包提供的verify-topologysuffix.yml
Ansible playbook 文件:$ cp /usr/share/doc/ansible-freeipa/playbooks/topology/ verify-topologysuffix.yml verify-topologysuffix-copy.yml
-
打开
verify-topologysuffix-copy.yml
Ansible playbook 文件进行编辑。 通过在
ipatopologysuffix
部分中设置以下变量来调整文件:-
指明
ipaadmin_password
变量的值在 secret.yml Ansible vault 文件中定义。 -
将
suffix
变量设置为domain
。如果您要验证ca
后缀是否存在,请将 变量设置为ca
。 -
确保
state
变量设置为verify
。不允许使用其他选项。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to handle topologysuffix hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Verify topology suffix ipatopologysuffix: ipaadmin_password: "{{ ipaadmin_password }}" suffix: domain state: verified
-
指明
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory verify-topologysuffix-copy.yml
其它资源
- 解释复制协议、拓扑后缀和拓扑段
-
/usr/share/doc/ansible-freeipa/README-topology.md
-
/usr/share/doc/ansible-freeipa/playbooks/topology
中的 playbook 示例
15.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/
复制
ansible-freeipa
软件包提供的reinitialize-topologysegment.yml
Ansible playbook 文件:$ cp /usr/share/doc/ansible-freeipa/playbooks/topology/reinitialize-topologysegment.yml reinitialize-topologysegment-copy.yml
-
打开
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 文件:
--- - name: Playbook to handle topologysegment hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Reinitialize topology segment ipatopologysegment: ipaadmin_password: "{{ ipaadmin_password }}" suffix: domain left: server.idm.example.com right: replica.idm.example.com direction: left-to-right state: reinitialized
-
指明
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory reinitialize-topologysegment-copy.yml
其它资源
- 解释复制协议、拓扑后缀和拓扑段
-
/usr/share/doc/ansible-freeipa/README-topology.md
-
/usr/share/doc/ansible-freeipa/playbooks/topology
中的 playbook 示例
15.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/
复制
ansible-freeipa
软件包提供的delete-topologysegment.yml
Ansible playbook 文件:$ cp /usr/share/doc/ansible-freeipa/playbooks/topology/delete-topologysegment.yml delete-topologysegment-copy.yml
-
打开
delete-topologysegment-copy.yml
文件进行编辑。 通过在
ipatopologysegment
任务部分设置以下变量来调整文件:-
指明
ipaadmin_password
变量的值在 secret.yml Ansible vault 文件中定义。 -
将
suffix
变量设置为domain
。或者,如果您确保ca
数据不在左侧和右侧节点之间复制,请将变量设置为ca
。 -
将
left
变量设置为您要作为复制协议左侧节点的 IdM 服务器的名称。 -
将
right
变量设置为 IdM 服务器的名称,该服务器是复制协议的右节点。 -
确保
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to handle topologysegment hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Delete topology segment ipatopologysegment: ipaadmin_password: "{{ ipaadmin_password }}" suffix: domain left: replica01.idm.example.com right: replica02.idm.example.com: state: absent
-
指明
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory delete-topologysegment-copy.yml
其它资源
- 解释复制协议、拓扑后缀和拓扑段
-
/usr/share/doc/ansible-freeipa/README-topology.md
-
/usr/share/doc/ansible-freeipa/playbooks/topology
中的 playbook 示例
15.7. 其它资源
第 16 章 使用 Ansible 管理 IdM 服务器
您可以使用 Red Hat Ansible Engine
来管理身份管理(IdM)拓扑中的服务器。您可以使用 ansible-freeipa
软件包中的 server
模块来检查 IdM 拓扑中是否存在服务器。您还可以隐藏任何副本或使副本可见。
这部分包含以下主题:
16.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/
复制位于
/usr/share/doc/ansible-freeipa/playbooks/server/
目录中的server-present.yml
Ansible playbook 文件:$ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-present.yml server-present-copy.yml
-
打开
server-present-copy.yml
文件进行编辑。 通过在
ipaserver
任务部分中设置以下变量来调整文件,并保存文件:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 -
将
name
变量设为服务器的FQDN
。示例服务器的FQDN
是 server123.idm.example.com。
--- - name: Server present example hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure server server123.idm.example.com is present ipaserver: ipaadmin_password: "{{ ipaadmin_password }}" name: server123.idm.example.com
-
将
运行 Ansible playbook ,并指定 playbook 文件和清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory server-present-copy.yml
其它资源
- 使用 Ansible playbook 来安装身份管理服务器
-
/usr/share/doc/ansible-freeipa/
目录中的README-server.md
文件 -
/usr/share/doc/ansible-freeipa/playbooks/server
目录中的 playbook 示例
16.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/
复制位于
/usr/share/doc/ansible-freeipa/playbooks/server/
目录中的server-absent.yml
Ansible playbook 文件:$ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-absent.yml server-absent-copy.yml
-
打开
server-absent-copy.yml
文件进行编辑。 通过在
ipaserver
任务部分中设置以下变量来调整文件,并保存文件:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 -
将
name
变量设为服务器的FQDN
。示例服务器的FQDN
是 server123.idm.example.com。 -
确保
state
变量设置为absent
。
--- - name: Server absent example hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure server server123.idm.example.com is absent ipaserver: ipaadmin_password: "{{ ipaadmin_password }}" name: server123.idm.example.com state: absent
-
将
运行 Ansible playbook ,并指定 playbook 文件和清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory server-absent-copy.yml
- 确保指向 server123.idm.example.com 的所有名称服务器(NS)DNS 记录都已从 DNS 区域中删除。无论您使用由 IdM 还是外部 DNS 管理的集成 DNS,这个均适用。
其它资源
- 卸载 IdM 服务器
-
/usr/share/doc/ansible-freeipa/
目录中的README-server.md
文件 -
/usr/share/doc/ansible-freeipa/playbooks/server
目录中的 playbook 示例
16.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/
复制位于
/usr/share/doc/ansible-freeipa/playbooks/server/
目录中的server-absent-ignore-last-of-role.yml
Ansible playbook 文件:$ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-absent-ignore-last-of-role.yml server-absent-ignore-last-of-role-copy.yml
-
打开
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
。
--- - name: Server absent with last of role skip example hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure server “server123.idm.example.com” is absent with last of role skip ipaserver: ipaadmin_password: "{{ ipaadmin_password }}" name: server123.idm.example.com ignore_last_of_role: true state: absent
-
将
运行 Ansible playbook ,并指定 playbook 文件和清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory server-absent-ignore-last-of-role-copy.yml
- 确保指向 server123.idm.example.com 的所有名称服务器(NS)DNS 记录已从 DNS 区域中删除。无论您使用由 IdM 还是外部 DNS 管理的集成 DNS,这个均适用。
其它资源
- 卸载 IdM 服务器
-
/usr/share/doc/ansible-freeipa/
目录中的README-server.md
文件 -
/usr/share/doc/ansible-freeipa/playbooks/server
目录中的 playbook 示例
16.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/
复制位于
/usr/share/doc/ansible-freeipa/playbooks/server/
目录中的server-absent-ignore_topology_disconnect.yml
Ansible playbook 文件:$ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-absent-ignore_topology_disconnect.yml server-absent-ignore_topology_disconnect-copy.yml
-
打开
server-absent-ignore_topology_disconnect-copy.yml
文件进行编辑。 通过在
ipaserver
任务部分中设置以下变量来调整文件,并保存文件:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 -
将
name
变量设为服务器的FQDN
。示例服务器的FQDN
是 server123.idm.example.com。 -
确保
ignore_topology_disconnect
变量设为true
。 -
确保
state
变量设置为absent
。
--- - name: Server absent with ignoring topology disconnects example hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure server “server123.idm.example.com” with ignoring topology disconnects ipaserver: ipaadmin_password: "{{ ipaadmin_password }}" name: server123.idm.example.com ignore_topology_disconnect: true state: absent
-
将
运行 Ansible playbook ,并指定 playbook 文件和清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory server-absent-ignore_topology_disconnect-copy.yml
- 可选:确保指向 server123.idm.example.com 的所有名称服务器(NS) DNS 记录已从 DNS 区域中删除。无论您使用由 IdM 还是外部 DNS 管理的集成 DNS,这个均适用。
其它资源
- 卸载 IdM 服务器
-
/usr/share/doc/ansible-freeipa/
目录中的README-server.md
文件 -
/usr/share/doc/ansible-freeipa/playbooks/server
目录中的 playbook 示例。
16.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/
复制位于
/usr/share/doc/ansible-freeipa/playbooks/server/
目录中的server-not-hidden.yml
Ansible playbook 文件:$ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-not-hidden.yml server-not-hidden-copy.yml
-
打开
server-not-hidden-copy.yml
文件进行编辑。 通过在
ipaserver
任务部分中设置以下变量来调整文件,并保存文件:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 -
将
name
变量设为服务器的FQDN
。示例服务器的FQDN
是 server123.idm.example.com。 -
确保
hidden
变量设为no
。
--- - name: Server not hidden example hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure server server123.idm.example.com is not hidden ipaserver: ipaadmin_password: "{{ ipaadmin_password }}" name: server123.idm.example.com hidden: no
-
将
运行 Ansible playbook ,并指定 playbook 文件和清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory server-not-hidden-copy.yml
其它资源
- 使用 Ansible playbook 来安装身份管理服务器
- 隐藏的副本模式
-
/usr/share/doc/ansible-freeipa/
目录中的README-server.md
文件 -
/usr/share/doc/ansible-freeipa/playbooks/server
目录中的 playbook 示例
16.7. 确保现有的 IdM 服务器被分配了 IdM DNS 位置
使用 Ansible playbook 中的 ipaserver
ansible-freeipa
模块来确保为现有身份管理(IdM)服务器分配了特定的 IdM DNS 位置。
请注意,ipaserver
Ansible 模块没有安装 IdM 服务器。
先决条件
-
您知道 IdM
管理员
密码。 - 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/
复制位于
/usr/share/doc/ansible-freeipa/playbooks/server/
目录中的server-location.yml
Ansible playbook 文件:$ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-location.yml server-location-copy.yml
-
打开
server-location-copy.yml
文件进行编辑。 通过在
ipaserver
任务部分中设置以下变量来调整文件,并保存文件:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 -
将
name
变量设为 server123.idm.example.com。 -
将
location
变量设为 germany。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Server enabled example hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure server server123.idm.example.com with location “germany” is present ipaserver: ipaadmin_password: "{{ ipaadmin_password }}" name: server123.idm.example.com location: germany
-
将
运行 Ansible playbook ,并指定 playbook 文件和清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory server-location-copy.yml
以
root
用户身份使用SSH
连接到 server123.idm.example.com :ssh root@server123.idm.example.com
重新启动服务器上的
named-pkcs11
服务,以使更新立即生效:[root@server123.idm.example.com ~]# systemctl restart named-pkcs11
其它资源
- 使用 Ansible playbook 来安装身份管理服务器
- 使用 Ansible 来确保 IdM 位置存在
-
/usr/share/doc/ansible-freeipa/
目录中的README-server.md
文件 -
/usr/share/doc/ansible-freeipa/playbooks/server
目录中的 playbook 示例
16.8. 确保现有的 IdM 服务器没有分配 IdM DNS 位置
使用 Ansible playbook 中的 ipaserver
ansible-freeipa
模块,来确保现有身份管理(IdM)服务器没有为其分配的 IdM DNS 位置。不要将 DNS 位置分配给经常更改地理位置的服务器。请注意,playbook 不安装 IdM 服务器。
先决条件
-
您知道 IdM
管理员
密码。 -
您有访问服务器的
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/
复制位于
/usr/share/doc/ansible-freeipa/playbooks/server/
目录中的server-no-location.yml
Ansible playbook 文件:$ cp /usr/share/doc/ansible-freeipa/playbooks/server/server-no-location.yml server-no-location-copy.yml
-
打开
server-no-location-copy.yml
文件进行编辑。 通过在
ipaserver
任务部分中设置以下变量来调整文件,并保存文件:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 -
将
name
变量设为 server123.idm.example.com。 -
确保
location
变量设为 ""。
--- - name: Server no location example hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure server server123.idm.example.com is present with no location ipaserver: ipaadmin_password: "{{ ipaadmin_password }}" name: server123.idm.example.com location: “”
-
将
运行 Ansible playbook ,并指定 playbook 文件和清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory server-no-location-copy.yml
以
root
用户身份使用SSH
连接到 server123.idm.example.com :ssh root@server123.idm.example.com
重新启动服务器上的
named-pkcs11
服务,以使更新立即生效:[root@server123.idm.example.com ~]# systemctl restart named-pkcs11
其它资源
- 使用 Ansible playbook 来安装身份管理服务器
- 使用 Ansible 管理 IdM 中的 DNS 位置
-
/usr/share/doc/ansible-freeipa/
目录中的README-server.md
文件 -
/usr/share/doc/ansible-freeipa/playbooks/server
目录中的 playbook 示例
第 17 章 使用 Ansible playbook 管理主机
Ansible 是一个自动化工具,用于配置系统、部署软件和执行滚动更新。Ansible 包含对身份管理 (IdM) 的支持,您可以使用 Ansible 模块自动执行主机管理。
在使用 Ansible playbook 管理主机和主机条目时,将执行以下概念和操作:
17.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
创建一个 Ansible playbook 文件,其中包含您要确保的 IdM 中的
FQDN
。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/host/add-host.yml
文件中的示例:--- - name: Host present hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Host host01.idm.example.com present ipahost: ipaadmin_password: "{{ ipaadmin_password }}" name: host01.idm.example.com state: present force: true
运行 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
这个过程会导致在 IdM LDAP 服务器中创建主机条目,但不将主机注册到 IdM Kerberos 域。为此,您必须将主机部署为 IdM 客户端。详情请参阅使用 Ansible playbook 安装身份管理客户端。
验证
以 admin 用户身份登录您的 IdM 服务器:
$ ssh admin@server.idm.example.com Password:
输入
ipa host-show
命令并指定主机名称:$ ipa host-show host01.idm.example.com Host name: host01.idm.example.com Principal name: host/host01.idm.example.com@IDM.EXAMPLE.COM Principal alias: host/host01.idm.example.com@IDM.EXAMPLE.COM Password: False Keytab: False Managed by: host01.idm.example.com
输出确认 IdM 中存在 host01.idm.example.com。
17.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
创建一个 Ansible playbook 文件,其中包含您要确保的 IdM 中的
完全限定域名
(FQDN)。另外,如果 IdM 服务器配置为管理 DNS,并且您知道主机的 IP 地址,请为ip_address
参数指定一个值。主机需要 IP 地址才能存在于 DNS 资源记录中。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/host/host-present.yml
文件中的示例。您还可以包含其他附加信息:--- - name: Host present hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure host01.idm.example.com is present ipahost: ipaadmin_password: "{{ ipaadmin_password }}" name: host01.idm.example.com description: Example host ip_address: 192.168.0.123 locality: Lab ns_host_location: Lab ns_os_version: CentOS 7 ns_hardware_platform: Lenovo T61 mac_address: - "08:00:27:E3:B1:2D" - "52:54:00:BD:97:1E" state: present
运行 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
这个过程会导致在 IdM LDAP 服务器中创建主机条目,但不将主机注册到 IdM Kerberos 域。为此,您必须将主机部署为 IdM 客户端。详情请参阅使用 Ansible playbook 安装身份管理客户端。
验证
以 admin 用户身份登录您的 IdM 服务器:
$ ssh admin@server.idm.example.com Password:
输入
ipa host-show
命令并指定主机名称:$ ipa host-show host01.idm.example.com Host name: host01.idm.example.com Description: Example host Locality: Lab Location: Lab Platform: Lenovo T61 Operating system: CentOS 7 Principal name: host/host01.idm.example.com@IDM.EXAMPLE.COM Principal alias: host/host01.idm.example.com@IDM.EXAMPLE.COM MAC address: 08:00:27:E3:B1:2D, 52:54:00:BD:97:1E Password: False Keytab: False Managed by: host01.idm.example.com
输出确认 IdM 中存在 host01.idm.example.com。
17.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
创建一个 Ansible playbook 文件,其中包含您要确保的 IdM 中的
完全限定域名
(FQDN)。要使 Ansible playbook 为每个主机生成随机密码,即使主机已存在于 IdM 中,并且update_password
仅限于on_create
,请添加random: true
和force: true
选项。要简化此步骤,您可以复制/usr/share/doc/ansible-freeipa/README-host.md
Markdown 文件并对其进行相应的修改:--- - name: Ensure hosts with random password hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Hosts host01.idm.example.com and host02.idm.example.com present with random passwords ipahost: ipaadmin_password: "{{ ipaadmin_password }}" hosts: - name: host01.idm.example.com random: true force: true - name: host02.idm.example.com random: true force: true register: ipahost
运行 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"}}}
要使用随机的、一次性密码(OTP)来将主机部署为 IdM 客户端,请参阅 使用 Ansible playbook 进行 IdM 客户端注册的授权选项 或 使用一次性密码安装客户端:交互式安装。
验证
以 admin 用户身份登录您的 IdM 服务器:
$ ssh admin@server.idm.example.com Password:
输入
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
输出确认 IdM 中存在 host01.idm.example.com,并带有随机密码。
17.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
创建 Ansible playbook 文件。将主机的
完全限定域名
(FQDN) 指定为ipahost
变量的name
,用于确保主机的 IdM 中存在。使用ip_address
语法在单独的行中指定多个 IPv4 和 IPv6 ip_address 值。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/host/host-member-ipaddresses-present.yml
文件中的示例。您还可以包含附加信息:--- - name: Host member IP addresses present hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure host101.example.com IP addresses present ipahost: ipaadmin_password: "{{ ipaadmin_password }}" name: host01.idm.example.com ip_address: - 192.168.0.123 - fe80::20c:29ff:fe02:a1b3 - 192.168.0.124 - fe80::20c:29ff:fe02:a1b4 force: true
运行 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
这个过程在 IdM LDAP 服务器中创建主机条目,但不将主机注册到 IdM Kerberos 域。为此,您必须将主机部署为 IdM 客户端。详情请参阅使用 Ansible playbook 安装身份管理客户端。
验证
以 admin 用户身份登录您的 IdM 服务器:
$ ssh admin@server.idm.example.com Password:
输入
ipa host-show
命令并指定主机名称:$ ipa host-show host01.idm.example.com Principal name: host/host01.idm.example.com@IDM.EXAMPLE.COM Principal alias: host/host01.idm.example.com@IDM.EXAMPLE.COM Password: False Keytab: False Managed by: host01.idm.example.com
输出确认 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
输出确认 playbook 中指定的所有 IPv4 和 IPv6 地址都已与 host01.idm.example.com 主机条目正确关联。
17.5. 使用 Ansible playbook 确保没有 IdM 主机条目
按照以下流程,使用 Ansible playbook 确保主机条目在身份管理(IdM)中不存在。
先决条件
- IdM 管理员凭证
流程
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
创建 Ansible playbook 文件,使其包含没有存在于 IdM 中的主机的
完全限定域名
(FQDN)。如果您的 IdM 域集成了 DNS,请使用updatedns: true
选项从 DNS 中删除主机任何类型的关联记录。要简化此步骤,您可以复制并修改
/usr/share/doc/ansible-freeipa/playbooks/host/delete-host.yml
文件中的示例:--- - name: Host absent hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Host host01.idm.example.com absent ipahost: ipaadmin_password: "{{ ipaadmin_password }}" name: host01.idm.example.com updatedns: true state: absent
运行 playbook:
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-host-absent.yml
这个过程会产生:
- IdM Kerberos 域中没有的主机。
- IdM LDAP 服务器中不存在主机条目。
要从客户端主机本身中删除系统服务的特定 IdM 配置,如系统安全服务守护进程 (SSSD),您必须在客户端上运行 ipa-client-install --uninstall
命令。详情请参阅卸载 IdM 客户端。
验证
以 admin 用户身份登录
ipaserver
:$ ssh admin@server.idm.example.com Password: [admin@server /]$
显示 host01.idm.example.com 的信息:
$ ipa host-show host01.idm.example.com ipa: ERROR: host01.idm.example.com: host not found
输出确认 IdM 中不存在该主机。
17.6. 其它资源
-
请参阅
/usr/share/doc/ansible-freeipa/README-host.md
Markdown 文件。 -
请参阅
/usr/share/doc/ansible-freeipa/playbooks/host
目录中的其它 playbook。
第 18 章 使用 Ansible playbook 管理主机组
要了解更多有关 身份管理(IdM)中的主机组 的信息,并使用 Ansible 来执行涉及身份管理(IdM)中主机组的操作,请参阅:
18.1. IdM 中的主机组
IdM 主机组可用于集中控制重要管理任务,特别是访问控制。
主机组的定义
主机组是包含一组具有通用访问控制规则和其他特征的 IdM 主机的实体。例如,您可以根据公司部门、物理位置或访问控制要求来定义主机组。
IdM 中的主机组可以包括:
- IdM 服务器和客户端
- 其他 IdM 主机组
默认创建的主机组
默认情况下,IdM 服务器为所有 IdM 服务器主机创建主机组 ipaservers
。
直接和间接组成员
IdM 中的组属性同时适用于直接和间接成员:当主机组 B 是主机组 A 的成员时,主机组 B 的所有成员都被视为主机组 A 的间接成员。
18.2. 使用 Ansible playbook 确保存在 IdM 主机组
按照以下流程,使用 Ansible playbook 确保主机组在身份管理(IdM)中存在。
如果没有 Ansible,则使用 ipa hostgroup-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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
创建一个清单文件,如
inventory.file
,并使用目标 IdM 服务器列表定义ipaserver
:[ipaserver] server.idm.example.com
使用必要的主机组信息,创建 Ansible playbook 文件。例如,若要确保存在名为 databases 的主机组,可在
- ipahostgroup
任务中指定name: databases
。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/user/ensure-hostgroup-is-present.yml
文件中的示例。--- - name: Playbook to handle hostgroups hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: # Ensure host-group databases is present - ipahostgroup: ipaadmin_password: "{{ ipaadmin_password }}" name: databases state: present
在 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
验证
以 admin 用户身份登录
ipaserver
:$ ssh admin@server.idm.example.com Password: [admin@server /]$
为 admin 请求一个 Kerberos ticket:
$ kinit admin Password for admin@IDM.EXAMPLE.COM:
显示在 IdM 中存在的主机组的信息,以确保:
$ ipa hostgroup-show databases Host-group: databases
IdM 中存在 databases 主机组。
18.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
使用必要的主机信息,创建 Ansible playbook 文件。使用
ipahostgroup
变量的name
参数,指定主机组的名称。使用ipahostgroup
变量的host
参数指定主机名称。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/hostgroup/ensure-hosts-and-hostgroups-are-present-in-hostgroup.yml
文件中的示例:--- - name: Playbook to handle hostgroups hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: # Ensure host-group databases is present - ipahostgroup: ipaadmin_password: "{{ ipaadmin_password }}" name: databases host: - db.idm.example.com action: member
此 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
验证
以 admin 用户身份登录
ipaserver
:$ ssh admin@server.idm.example.com Password: [admin@server /]$
为 admin 请求一个 Kerberos ticket:
$ kinit admin Password for admin@IDM.EXAMPLE.COM:
显示主机组的信息以查看其中存在哪些主机:
$ ipa hostgroup-show databases Host-group: databases Member hosts: db.idm.example.com
db.idm.example.com 主机显示为 databases 主机组的成员。
18.4. 使用 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 文件中引用的主机组。详情请参阅确保使用 Ansible playbook 确保 IdM 主机组存在。
流程
创建一个清单文件,如
inventory.file
,并使用目标 IdM 服务器列表定义ipaserver
:[ipaserver] server.idm.example.com
使用必要的主机组信息,创建 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
文件中的示例:--- - name: Playbook to handle hostgroups hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: # Ensure hosts and hostgroups are present in existing databases hostgroup - ipahostgroup: ipaadmin_password: "{{ ipaadmin_password }}" name: databases hostgroup: - mysql-server - oracle-server action: member
此 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
验证
以 admin 用户身份登录
ipaserver
:$ ssh admin@server.idm.example.com Password: [admin@server /]$
为 admin 请求一个 Kerberos ticket:
$ kinit admin Password for admin@IDM.EXAMPLE.COM:
显示有关存在嵌套主机组的主机组的信息:
$ ipa hostgroup-show databases Host-group: databases Member hosts: db.idm.example.com Member host-groups: mysql-server, oracle-server
mysql-server 和 oracle-server 主机组存在于 databases 主机组中。
18.5. 使用 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
使用必要的主机和主机组成员管理信息创建一个 Ansible playbook 文件:
--- - name: Playbook to handle host group membership management hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure member manager user example_member is present for group_name ipahostgroup: ipaadmin_password: "{{ ipaadmin_password }}" name: group_name membermanager_user: example_member - name: Ensure member manager group project_admins is present for group_name ipahostgroup: ipaadmin_password: "{{ ipaadmin_password }}" name: group_name membermanager_group: project_admins
运行 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
验证
您可以使用 ipa group-show
命令来验证 group_name 组是否包含 example_member ,并且 project_admins 作为成员管理者:
以管理员身份登录到
ipaserver
:$ ssh admin@server.idm.example.com Password: [admin@server /]$
显示有关 testhostgroup 的信息:
ipaserver]$ ipa hostgroup-show group_name Host-group: group_name Member hosts: server.idm.example.com Member host-groups: testhostgroup2 Membership managed by groups: project_admins Membership managed by users: example_member
其它资源
-
请参阅
ipa hostgroup-add-member-manager --help
。 -
请参阅系统中的
ipa
手册页。
18.6. 使用 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 主机条目。
- IdM 中已存在您从 Ansible playbook 文件中引用的主机组。详情请参阅确保使用 Ansible playbook 确保 IdM 主机组存在。
流程
创建一个清单文件,如
inventory.file
,并使用目标 IdM 服务器列表定义ipaserver
:[ipaserver] server.idm.example.com
创建含有必要的主机和主机组信息的 Ansible playbook 文件。使用
ipahostgroup
变量的name
参数,指定主机组的名称。使用ipahostgroup
变量的host
参数指定要确保其不存在于主机组中的主机名称。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/hostgroup/ensure-hosts-and-hostgroups-are-absent-in-hostgroup.yml
文件中的示例:--- - name: Playbook to handle hostgroups hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: # Ensure host-group databases is absent - ipahostgroup: ipaadmin_password: "{{ ipaadmin_password }}" name: databases host: - db.idm.example.com action: member state: absent
此 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
验证
以 admin 用户身份登录
ipaserver
:$ ssh admin@server.idm.example.com Password: [admin@server /]$
为 admin 请求一个 Kerberos ticket:
$ kinit admin Password for admin@IDM.EXAMPLE.COM:
显示主机组及其包含的主机的信息:
$ ipa hostgroup-show databases Host-group: databases Member host-groups: mysql-server, oracle-server
在 databases 主机组中不存在 db.idm.example.com 主机。
18.7. 使用 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 文件中引用的主机组。详情请参阅确保使用 Ansible playbook 确保 IdM 主机组存在。
流程
创建一个清单文件,如
inventory.file
,并使用目标 IdM 服务器列表定义ipaserver
:[ipaserver] server.idm.example.com
使用必要的主机组信息,创建 Ansible playbook 文件。在
- ipahostgroup
变量中使用name
变量指定外部主机组的名称。使用hostgroup
变量指定嵌套主机组的名称。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/hostgroup/ensure-hosts-and-hostgroups-are-absent-in-hostgroup.yml
文件中的示例:--- - name: Playbook to handle hostgroups hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: # Ensure hosts and hostgroups are absent in existing databases hostgroup - ipahostgroup: ipaadmin_password: "{{ ipaadmin_password }}" name: databases hostgroup: - mysql-server - oracle-server action: member state: absent
此 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
验证
以 admin 用户身份登录
ipaserver
:$ ssh admin@server.idm.example.com Password: [admin@server /]$
为 admin 请求一个 Kerberos ticket:
$ kinit admin Password for admin@IDM.EXAMPLE.COM:
显示应当缺少嵌套主机组的主机组的信息:
$ ipa hostgroup-show databases Host-group: databases
输出确认,外部 databases 主机组中没有mysql-server 和 oracle-server 嵌套式主机组。
18.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 vault 存储了
ipaadmin_password
。
-
目标节点(这是执行
ansible-freeipa
模块的节点)是 IdM 域的一部分,作为 IdM 客户端、服务器或副本的一部分。
流程
创建一个清单文件,如
inventory.file
,并使用目标 IdM 服务器列表定义ipaserver
:[ipaserver] server.idm.example.com
使用必要的主机组信息,创建 Ansible playbook 文件。要简化此步骤,您可以复制并修改
/usr/share/doc/ansible-freeipa/playbooks/user/ensure-hostgroup-is-absent.yml
文件中的示例。--- - name: Playbook to handle hostgroups hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - Ensure host-group databases is absent ipahostgroup: ipaadmin_password: "{{ ipaadmin_password }}" name: databases state: absent
此 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
验证
以 admin 用户身份登录
ipaserver
:$ ssh admin@server.idm.example.com Password: [admin@server /]$
为 admin 请求一个 Kerberos ticket:
$ kinit admin Password for admin@IDM.EXAMPLE.COM:
显示您没有保证的主机组的信息:
$ ipa hostgroup-show databases ipa: ERROR: databases: host group not found
IdM 中不存在 databases 主机组。
18.9. 使用 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
使用必要的主机和主机组成员管理信息创建一个 Ansible playbook 文件:
--- - name: Playbook to handle host group membership management hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure member manager host and host group members are absent for group_name ipahostgroup: ipaadmin_password: "{{ ipaadmin_password }}" name: group_name membermanager_user: example_member membermanager_group: project_admins action: member state: absent
运行 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
验证
您可以使用 ipa group-show
命令来验证 group_name 组是否不包含 example_member 或不包含 project_admins 作为成员管理者:
以管理员身份登录到
ipaserver
:$ ssh admin@server.idm.example.com Password: [admin@server /]$
显示有关 testhostgroup 的信息:
ipaserver]$ ipa hostgroup-show group_name Host-group: group_name Member hosts: server.idm.example.com Member host-groups: testhostgroup2
其它资源
-
请参阅
ipa hostgroup-add-member-manager --help
。 -
请参阅系统中的
ipa
手册页。
第 19 章 定义 IdM 密码策略
本章论述了 Identity Management (IdM) 密码策略,以及如何使用 Ansible playbook 在 IdM 中添加新的密码策略。
19.1. 什么是密码策略
密码策略是密码必须满足的一组规则。例如,password 策略可以定义最小密码长度和最大密码生命周期。受此策略影响的所有用户都必须设置足够长的密码,并经常更改密码以满足指定条件。这样,密码策略有助于降低某人发现和滥用用户密码的风险。
19.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 分钟内无法登录。 |
如果您一组不同的硬件可能不能使用国际字符和符号,则字符类要求应为英语字母和常用符号。有关密码中的字符类策略的更多信息,请参阅红帽知识库解决方案在 密码中有效哪些字符?
19.3. IdM 中的密码策略优先级
密码策略有助于降低某人发现和滥用用户密码的风险。默认密码策略是 全局密码策略。您还可以创建额外的组密码策略。全局策略规则适用于所有没有组密码策略的用户。组密码策略适用于对应用户组的所有成员。
请注意,对于任何用户,一个密码策略一次只能生效。如果用户分配了多个密码策略,则根据以下规则根据优先级来优先使用:
-
每个组密码策略都有一个优先级集。值越低,策略的优先级越高。最低支持的值是
0。
- 如果多个密码策略适用于用户,则具有最低优先级值的策略具有优先权。其他策略中定义的所有规则都会被忽略。
- 优先级值最低的密码策略适用于所有密码策略属性,即使策略中没有定义的属性。
全局密码策略没有设置优先级值。当用户没有设置组策略时,它充当回退策略。全局策略永远不会优先于组策略。
ipa pwpolicy-show --user=user_name
命令显示哪个策略当前对特定用户生效。
19.4. 使用 Ansible playbook 在 IdM 中存在密码策略
按照以下流程,使用 Ansible playbook 确保密码策略在身份管理(IdM)中存在。
在 IdM 中的默认 global_policy
密码策略中,密码中不同字符类的数量设置为 0。历史记录大小也设置为 0。
完成此步骤,以使用 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 管理员密码。
- 正在确保 IdM 中存在密码策略的组。
流程
创建一个清单文件,如
inventory.file
,并在[ipaserver]
部分中定义 IdM 服务器的FQDN
:[ipaserver] server.idm.example.com
创建 Ansible playbook 文件,以定义您要确保的密码策略。要简化此步骤,请复制并修改
/usr/share/doc/ansible-freeipa/playbooks/pwpolicy/pwpolicy_present.yml
文件中的示例:--- - name: Tests hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure presence of pwpolicy for group ops ipapwpolicy: ipaadmin_password: "{{ ipaadmin_password }}" name: ops minlife: 7 maxlife: 49 history: 5 priority: 1 lockouttime: 300 minlength: 8 minclasses: 4 maxfail: 3 failinterval: 5
有关单个变量含义的详情,请参阅密码策略属性。
运行 playbook:
$ ansible-playbook --vault-password-file=password_file -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory_/new_pwpolicy_present.yml
您已成功使用 Ansible playbook 确保 IdM 中存在 ops 组的密码策略。
ops 密码策略的优先级设置为 1,而 global_policy 密码策略没有设置优先级。因此,ops 策略会自动取代 ops 组的 global_policy,并立即强制执行。
当没有为用户设置任何组策略时,global_policy 充当备份策略,并且永远不会优先于组策略。
其它资源
-
请参阅
/usr/share/doc/ansible-freeipa/
目录中的README-pwpolicy.md
文件。 - 请参阅 IdM 中的密码策略优先级。
19.5. 使用 WebUI 或 CLI 在 IdM 中添加新密码策略
密码策略有助于降低某人发现和滥用用户密码的风险。默认密码策略是 全局密码策略。您还可以创建额外的组密码策略。
19.5.1. 在 IdM WebUI 中添加新密码策略
密码策略有助于降低某人发现和滥用用户密码的风险。默认密码策略是 全局密码策略。您还可以创建额外的组密码策略。
先决条件
- 策略应用到的用户组。
- 分配给策略的优先级
流程
登录到 IdM Web UI。
详情请参阅 在 Web 浏览器中访问 IdM Web UI。
- 选择 Policy>Password Policies。
- 点击 Add。
- 定义用户组和优先级。
- 单击 Add 确认。
要配置新密码策略的属性,请参阅 IdM 中的 密码策略。
其它资源
- 请参阅 IdM 中的密码策略优先级。
19.5.2. 在 IdM CLI 中添加新密码策略
密码策略有助于降低某人发现和滥用用户密码的风险。默认密码策略是 全局密码策略。您还可以创建额外的组密码策略。
先决条件
- 策略应用到的用户组。
- 分配给策略的优先级
流程
- 打开终端并连接到 IdM 服务器。
使用 ipa pwpolicy-add 命令。指定用户组和优先级:
$ ipa pwpolicy-add Group: group_name Priority: priority_level
可选。使用 ipa pwpolicy-find 命令来验证策略是否已成功添加:
$ ipa pwpolicy-find
要配置新密码策略的属性,请参阅 IdM 中的 密码策略。
其它资源
- 请参阅 IdM 中的密码策略优先级。
19.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 及更新的版本。
其他资源:
- 将额外密码策略应用到 IdM 组
-
系统上的
pwquality (3)
手册页
19.7. 将其他密码策略选项应用到 IdM 组
按照以下流程,在身份管理(IdM)中应用额外的密码策略选项。这个示例描述了如何通过确保新密码不包含用户相应的用户名以及密码不包含两个以上相同的字符来增强 managers 组的密码策略。
先决条件
- 您以 IdM 管理员身份登录。
- managers 组存在于 IdM 中。
- IdM 中存在 managers 密码策略。
流程
将用户名检查应用到 managers 组中用户建议的所有新密码:
$ ipa pwpolicy-mod --usercheck=True managers
注意如果没有指定密码策略的名称,则会修改默认的
global_policy
。在 manager 密码策略中,将相同连续字符的最大数量设置为 2:
$ ipa pwpolicy-mod --maxrepeat=2 managers
现在不接受包含两个以上连续相同的字符的密码。例如,eR873mUi111YJQ 组合是不可接受的,因为它包含三个连续的 1。
验证
添加名为 test_user 的测试用户:
$ ipa user-add test_user First name: test Last name: user ---------------------------- Added user "test_user" ----------------------------
将 test 用户添加到 managers 组:
- 在 IdM Web UI 中,点 → → 。
- 点 managers。
-
单击
Add
。 - 在 Add users to user group 'managers' 页面中,检查 test_user。
-
点击
>
箭头将用户移到 Prospective
列中。 -
单击
Add
。
重置测试用户的密码:
- 进入 → 。
- 单击 test_user。
-
在
Actions
菜单中,单击Reset Password
。 - 输入用户的临时密码。
在命令行中,尝试为 test_user 获取 Kerberos 票据授予票据 (TGT):
$ kinit test_user
- 输入临时密码。
系