使用 Ansible 安装和管理身份管理
使用 Red Hat Ansible Engine 在 Red Hat Enterprise Linux 8 中安装、配置、管理和维护身份管理
摘要
使开源包含更多
红帽承诺替换我们的代码、文档和网页属性中存在问题的语言。我们从这四个术语开始: master、slave、blacklist 和 whitelist。这些更改将在即将发行的几个发行本中逐渐实施。如需了解更多详细信息,请参阅 CTO Chris Wright 信息。
在身份管理中,计划中的术语变化包括:
- 使用 block list 替换 blacklist
- 使用 allow list 替换 whitelist
- 使用 secondary 替换 slave
master 会根据上下文被替换为其他更适当的术语:
- 使用 IdM server 替换 IdM master
- 使用 CA renewal server 替换 CA renewal master
- 使用 CRL publisher server 替换 CRL master
- 使用 multi-supplier 替换 multi-master
对红帽文档提供反馈
我们感谢您对文档提供反馈信息。请让我们了解如何改进文档。要做到这一点:
关于特定内容的简单评论:
- 请确定您使用 Multi-page HTML 格式查看文档。另外,确定 Feedback 按钮出现在文档页的右上方。
- 用鼠标指针高亮显示您想评论的文本部分。
- 点在高亮文本上弹出的 Add Feedback。
- 按照显示的步骤操作。
要提交更复杂的反馈,请创建一个 Bugzilla ticket:
- 进入 Bugzilla 网站。
- 在 Component 中选择 Documentation。
- 在 Description 中输入您要提供的信息。包括文档相关部分的链接。
- 点 Submit Bug。
第 1 章 Ansible 术语
此标题中的章节使用官方 Ansible 术语。如果您不熟悉术语,请先阅读 Ansible 上游官方文档,然后再继续,特别是以下部分:
- Ansible 部分中的基本概念 概述了 Ansible 中最常使用的概念。
- 用户指南 概述了开始使用 Ansible 时最常见的情况和问题,例如使用命令行;使用清单;与数据交互;编写任务、play 和 playbook;以及执行 playbook。
- 如何构建您的清单,提供了有关如何设计清单的提示。清单是 Ansible 用于针对基础架构中的多个受管节点或主机的一组列表。
- Playbook 简介引入了 Ansible playbook 的概念,作为可重复和可重复使用的系统来管理配置、部署机器和部署复杂应用。
- Ansible roles 部分中介绍如何根据已知的文件结构自动加载变量、任务和处理程序。
- Glossary 解释了 Ansible 文档其他位置中使用的术语。
第 2 章 使用 Ansible playbook 安装身份管理服务器
2.1. Ansible 及其安装 IdM 的优点
Ansible 是一个自动化工具,用于配置系统、部署软件和执行滚动更新。Ansible 包含对 Identity Management(IdM)的支持,您可以使用 Ansible 模块自动执行安装任务,如设置 IdM 服务器、副本、客户端或整个 IdM 拓扑。
使用 Ansible 安装 IdM 的优点
以下列表提供了使用 Ansible 安装身份管理与手动安装的优点。
- 您不需要登录受管节点。
- 您不需要配置每个主机上的设置来单独部署。反之,您可以有一个清单文件来部署完整的集群。
- 您可以稍后重复将清单文件用于管理任务,例如添加用户和主机。即使与 IdM 相关的任务,也可以重复使用清单文件。
2.2. 使用 Ansible playbook 安装 IdM 服务器
以下小节介绍了如何使用 Ansible 将系统配置为 IdM 服务器。将系统配置为 IdM 服务器建立 IdM 域并让系统向 IdM 客户端提供 IdM 服务。部署由 ipaserver
Ansible 角色管理。
在使用 Ansible 安装 IdM 服务器前,请确保了解 Ansible 和 IdM 概念。请确定您理解本章中使用的以下术语:
- Ansible 角色
- Ansible 节点
- Ansible 清单
- Ansible 任务
- Ansible 模块
- Ansible play 和 playbook
概述
安装由以下部分组成:
2.3. 安装 ansible-freeipa 软件包
先决条件
在受管节点上 :
- 确保受管节点是一个带有静态 IP 地址和可正常工作的软件包管理器的 Red Hat Enterprise Linux 8 系统。
在控制器中 :
- 确定控制器是一个带有有效订阅的 Red Hat Enterprise Linux 系统。否则,请参阅官方 Ansible 文档安装指南来获取替代安装说明。
-
确保您可以通过控制器的
SSH
协议访问受管节点。检查该受管节点是否已列在控制器的/root/.ssh/known_hosts
文件中。
流程
在 Ansible 控制器上运行以下步骤。
启用所需的仓库:
# subscription-manager repos --enable ansible-2.8-for-rhel-8-x86_64-rpms
安装 Ansible:
# yum install ansible
安装 IdM Ansible 角色:
# yum install ansible-freeipa
角色安装到
/usr/share/ansible/roles/
目录中。
2.4. 在文件系统中的 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.5. 使用 Ansible playbook 将集成 CA 的 IdM 服务器部署为 root CA
2.5.1. 使用集成的 CA 作为 root CA 设置部署的参数
完成此流程,以配置清单文件,以安装带有集成 CA 作为 root CA 的 IdM 服务器。
流程
打开清单文件进行编辑。指定您要用作 IdM 服务器的
主机的
完全限定域名(FQDN)。确保FQDN
满足以下条件:- 只允许字母数字字符和连字符(-)。例如,不允许使用下划线,这可能导致 DNS 失败。
- 主机名必须都是小写。
- 指定 IdM 域和域信息。
-
如果您希望 IdM 服务器具有集成 DNS 以及是否希望使用
/etc/resolv.conf
文件中的转发器,请指定它。 -
指定
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=yes ipaserver_auto_forwarders=yes [...]
包含所需服务器信息(包括密码)的清单文件示例
[ipaserver] server.idm.example.com [ipaserver:vars] ipaserver_domain=idm.example.com ipaserver_realm=IDM.EXAMPLE.COM ipaserver_setup_dns=yes ipaserver_auto_forwarders=yes 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=yes ipaserver_auto_forwarders=yes 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
有关安装 IdM 服务器和可用选项的详情请参考 https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/installing_identity_management/index#installing-idm。
2.5.2. 使用 Ansible playbook 将集成 CA 的 IdM 服务器部署为 root CA
完成此流程,以使用 Ansible playbook 部署带有集成证书颁发机构(CA)作为 root CA 的 IdM 服务器。
流程
使用 playbook 文件的名称运行
ansible-playbook
命令,如install-server.yml
。使用-i
选项指定清单文件:$ ansible-playbook -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/install-server.yml
使用
-v、-vv
或 -v
vv
选项指定详细程度。您可以在命令行界面(CLI)上查看 Ansible playbook 脚本的输出。以下输出显示该脚本运行成功,有 0 个任务失败:
PLAY RECAP server.idm.example.com : ok=18 changed=10 unreachable=0 failed=0 skipped=21 rescued=0 ignored=0
已使用 Ansible playbook 在主机上安装了 IdM 服务器。
2.6. 使用 Ansible playbook 将外部 CA 部署 IdM 服务器作为 root CA
2.6.1. 使用外部 CA 作为 root CA 设置部署的参数
完成此流程,以配置清单文件,以安装使用外部 CA 作为 root CA 的 IdM 服务器。
流程
打开清单文件进行编辑。指定您要用作 IdM 服务器的
主机的
完全限定域名(FQDN)。确保FQDN
满足以下条件:- 只允许字母数字字符和连字符(-)。例如,不允许使用下划线,这可能导致 DNS 失败。
- 主机名必须都是小写。
- 指定 IdM 域和域信息。
-
如果您希望 IdM 服务器具有集成 DNS 以及是否希望使用
/etc/resolv.conf
文件中的转发器,请指定它。 -
指定
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=yes ipaserver_auto_forwarders=yes [...]
包含所需服务器信息(包括密码)的清单文件示例
[ipaserver] server.idm.example.com [ipaserver:vars] ipaserver_domain=idm.example.com ipaserver_realm=IDM.EXAMPLE.COM ipaserver_setup_dns=yes ipaserver_auto_forwarders=yes 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=yes ipaserver_auto_forwarders=yes 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: yes 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: yes
为安装的最后步骤创建另一个 playbook。
--- - name: Playbook to configure IPA server Step -1 hosts: ipaserver become: true vars_files: - playbook_sensitive_data.yml vars: ipaserver_external_cert_files: "/root/chain.crt" pre_tasks: - name: Copy "{{ groups.ipaserver[0] + '-chain.crt' }}" to /root/chain.crt on node copy: src: "{{ groups.ipaserver[0] + '-chain.crt' }}" dest: "/root/chain.crt" force: yes roles: - role: ipaserver state: present
有关您在使用外部签名的 CA 安装 IdM 服务器时可用的选项的详情,请参考 https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/installing_identity_management/index#installing-an-ipa-server-with-external-ca_installing-identity-management。
2.6.2. 使用 Ansible playbook 将外部 CA 部署 IdM 服务器作为 root CA
完成此流程,以使用 Ansible playbook 部署带有外部证书颁发机构(CA)作为 root CA 的 IdM 服务器。
流程
使用 playbook 文件的名称运行
ansible-playbook
命令,其中包含安装第一步的说明,如install-server-step1.yml
。使用-i
选项指定清单文件:$ ansible-playbook -v -i <path_to_inventory_directory>/host.server <path_to_playbooks_directory>/install-server-step1.yml
使用 -v、
-vv
或-vv
v
选项指定详细程度。您可以在命令行界面(CLI)上查看 Ansible playbook 脚本的输出。以下输出显示该脚本运行成功,有 0 个任务失败:
PLAY RECAP server.idm.example.com : ok=18 changed=10 unreachable=0 failed=0 skipped=21 rescued=0 ignored=0
-
在控制器
上找到 ipa.csr
证书签名请求文件,并将它提交到外部 CA。 - 将外部 CA 签名的 IdM CA 证书放在控制器文件系统中,以便下一步中的 playbook 可以找到它。
使用 playbook 文件的名称运行
ansible-playbook
命令,其中包含安装最终步骤的说明,如install-server-step2.yml
。使用-i
选项指定清单文件:$ ansible-playbook -v -i <path_to_inventory_directory>/host.server <path_to_playbooks_directory>/install-server-step2.yml
已使用 Ansible playbook 在主机上安装了带有外部签名 CA 的 IdM 服务器。
第 3 章 使用 Ansible playbook 安装身份管理副本
3.1. 使用 Ansible playbook 安装 IdM 副本
以下小节论述了如何使用 Ansible 将系统配置为 IdM 副本。将系统配置为 IdM 副本将它注册到 IdM 域中,并让系统在域中的 IdM 服务器中使用 IdM 服务。
部署由 ipareplica
Ansible 角色管理。该角色可以使用自动发现模式来识别 IdM 服务器、域和其他设置。但是,如果您以类似分层的模式部署多个副本,在不同时间部署不同的副本组,您必须为每个组定义特定的服务器或副本。
在使用 Ansible 安装 IdM 副本前,请确保您理解 Ansible 和 IdM 概念。请确定您理解本章中使用的以下术语:
- Ansible 角色
- Ansible 节点
- Ansible 清单
- Ansible 任务
- Ansible 模块
- Ansible play 和 playbook
概述
安装由以下部分组成:
先决条件
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
3.2. 设置 IdM 副本部署的参数
在将目标主机部署为 IdM 副本之前,请配置以下设置:
3.2.1. 指定用于安装 IdM 副本的基础、服务器和客户端变量
完成这个步骤来配置用于安装 IdM 副本的清单文件。
流程
打开清单文件进行编辑。指定要成为 IdM 副本的完全限定域名
(
FQDN)。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
在上例中,replica
3.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
场景 4
如果您希望副本使用指定的
firewalld
区域而不是默认区域,您可以在清单文件中指定它。例如,当您要为您的 IdM 安装使用内部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
3.2.2. 使用 Ansible playbook 指定用于安装 IdM 副本的凭证
完成这个步骤来配置安装 IdM 副本的授权。
流程
指定 授权部署副本的用户密码,如 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
其它资源
-
有关
ipareplica
Ansible 角色接受的选项的详情,请查看/usr/share/ansible/roles/ipareplica/README.md
Markdown 文件。
3.3. 使用 Ansible playbook 部署 IdM 副本
完成此流程,使用 Ansible playbook 来部署 IdM 副本。
流程
要使用 Ansible playbook 安装 IdM 副本,请使用
ansible-playbook
命令及 playbook 文件的名称,如install-replica.yml
。使用-i
选项指定清单文件:$ ansible-playbook -v -i <path_to_inventory_directory>/hosts.replica <path_to_playbooks_directory>/install-replica.yml
使用 -v、
-vv
或-vv
v
选项指定详细程度。Ansible 告知您执行 Ansible playbook 脚本。以下输出显示该脚本运行成功,有 0 个任务失败:
PLAY RECAP replica.idm.example.com : ok=18 changed=10 unreachable=0 failed=0 skipped=21 rescued=0 ignored=0
您现在已安装了 IdM 副本。
第 4 章 使用 Ansible playbook 安装身份管理客户端
4.1. 使用 Ansible playbook 安装 IdM 客户端
以下小节介绍了如何使用 Ansible 将系统配置为身份管理(IdM)客户端。将系统配置为 IdM 客户端将其注册到 IdM 域中,并让系统在域中的 IdM 服务器中使用 IdM 服务。
部署由 ipaclient
Ansible 角色管理。默认情况下,该角色使用 autodiscovery 模式来识别 IdM 服务器、域和其他设置。角色可以被修改为使用 Ansible playbook 使用指定的设置,例如在清单文件中。
在使用 Ansible 安装 IdM 客户端前,请确保您理解 Ansible 和 IdM 概念。请确定您理解本章中使用的以下术语:
- Ansible 角色
- Ansible 节点
- Ansible 清单
- Ansible 任务
- Ansible 模块
- Ansible play 和 playbook
概述
安装由以下部分组成:
先决条件
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
4.2. 设置 IdM 客户端部署的参数
在将目标主机部署为 IdM 客户端之前,请在控制节点上配置部署指令。另外,根据您要规划的以下选项,配置目标主机参数:
4.2.1. 为自动发现客户端安装模式设置清单文件的参数
要使用 Ansible playbook 安装身份管理客户端,请在清单文件中提供以下信息,如 inventory/hosts
:
- 有关主机的信息
- 任务授权
根据您拥有的清单插件,清单文件可以采用多种格式。类似于 INI 的格式
是 Ansible 的默认值之一,如下例中使用。
要在 RHEL 中将智能卡与图形用户界面搭配使用,请确保在 Ansible playbook 中包含 ipaclient_mkhomedir
变量。
流程
指定要成为 IdM 客户端的主机的完全限定主机名
(
FQDN)。完全限定域名必须是有效的 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=yes
选项。例如,您可以取消注释inventory/hosts
文件的[ipa
选项。请注意,对于 OTP,还必须指定以下选项之一:clients:vars] 部分中的 ipaclient
_use_otp=yes-
授权注册客户端的用户密码, 例如,在
inventory/hosts
文件的[ipaclients:vars]
部分中为ipaadmin_password
提供值。 -
admin keytab,例如,在
inventory/hosts
的[ipaclients:vars]
部分中为ipaadmin_keytab
提供值。
-
授权注册客户端的用户密码, 例如,在
其它资源
-
有关
ipaclient
Ansible 角色接受的选项的详情,请查看/usr/share/ansible/roles/ipaclient/README.md
README 文件。
4.2.2. 在客户端安装过程中无法自动发现时设置清单文件的参数
要使用 Ansible playbook 安装身份管理客户端,请在清单文件中提供以下信息,如 inventory/hosts
:
- 有关主机、IdM 服务器和 IdM 域或 IdM 域的信息
- 任务授权
根据您拥有的清单插件,清单文件可以采用多种格式。类似于 INI 的格式
是 Ansible 的默认值之一,如下例中使用。
要在 RHEL 中将智能卡与图形用户界面搭配使用,请确保在 Ansible playbook 中包含 ipaclient_mkhomedir
变量。
流程
指定要成为 IdM 客户端的主机的完全限定主机名
(
FQDN)。完全限定域名必须是有效的 DNS 名称:- 只允许数字、字母字符和连字符(-)。例如,不允许使用下划线,这可能导致 DNS 失败。
- 主机名必须都是小写。不允许使用大写字母。
在
inventory/hosts
文件相关部分中指定其他选项:-
[ipaservers]
部分中服务器的FQDN
,以指示客户端将注册的 IdM 服务器 以下两个选项之一:
-
[ipa
选项,用于指示客户端将注册的 IdM 服务器的 DNS 域名clients:vars] 部分中的 ipaclient
_domain [ipa
选项,用于指示 IdM 服务器控制的 Kerberos 域的名称clients:vars] 部分中的 ipaclient
_realm带有客户端 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=yes
选项。例如,您可以在inventory/hosts
文件的[
选项。请注意,对于 OTP,还必须指定以下选项之一:ipaclients:vars] 部分中取消注释 #ipaclient
_use_otp=yes-
授权注册客户端的用户密码, 例如,在
inventory/hosts
文件的[ipaclients:vars]
部分中为ipaadmin_password
提供值。 -
admin keytab,例如,在
inventory/hosts
的[ipaclients:vars]
部分中为ipaadmin_keytab
提供值。
-
授权注册客户端的用户密码, 例如,在
其它资源
-
有关
ipaclient
Ansible 角色接受的选项的详情,请查看/usr/share/ansible/roles/ipaclient/README.md
README 文件。
4.2.3. 检查 install-client.yml 文件中的参数
install-client.yml
playbook 文件包含 IdM 客户端部署的指令。
打开该文件,检查 playbook 中的说明是否与您计划部署的内容对应。通常,内容类似如下:
--- - name: Playbook to configure IPA clients with username/password hosts: ipaclients become: true roles: - role: ipaclient state: present
这代表单个条目:
-
hosts 条目指定
inventory/hosts
文件的 部分,ansible 脚本在该文件中搜索运行ipa-client-install
脚本的主机的 FQDN
。 -
become: true
条目指定在执行ipa-client-install
脚本期间将调用 root 的凭据。 -
role: ipaclient
条目指定主机上要安装的角色:本例中为 ipa 客户端角色。 -
state: present
条目指定应安装客户端,而不是卸载 (不存在
)。
-
hosts 条目指定
4.2.4. 使用 Ansible playbook 进行 IdM 客户端注册的授权选项
本参考部分提供了 IdM 客户端注册的单独授权选项,以及清单和 playbook 文件示例。
表 4.1. 使用 Ansible 的 IdM 客户端注册的授权选项
授权选项 | 备注 | 清单文件示例 | install-client.yml playbook 文件示例 |
---|---|---|---|
有权注册客户端的用户密码:选项 1 | 存储在 Ansible vault 中的密码 |
[ipaclients:vars] [...] |
- name: Playbook to configure IPA clients with username/password hosts: ipaclients become: true vars_files: - playbook_sensitive_data.yml roles: - role: ipaclient state: present |
有权注册客户端的用户密码:选项 2 | 保存在清单文件中的密码 |
[ipaclients:vars] ipaadmin_password=Secret123 |
- name: Playbook to configure IPA clients hosts: ipaclients become: true roles: - role: ipaclient state: true |
一个随机的一次性密码(OTP):选项 1 | OTP + 管理员密码 |
[ipaclients:vars] ipaadmin_password=Secret123 ipaclient_use_otp=yes |
- name: Playbook to configure IPA clients hosts: ipaclients become: true roles: - role: ipaclient state: true |
一个随机的一次性密码(OTP):选项 2 | OTP + admin keytab |
[ipaclients:vars] ipaadmin_keytab=/tmp/admin.keytab ipaclient_use_otp=yes |
- name: Playbook to configure IPA clients hosts: ipaclients become: true roles: - role: ipaclient state: true |
之前注册中的客户端 keytab |
[ipaclients:vars] ipaclient_keytab=/tmp/krb5.keytab |
- name: Playbook to configure IPA clients hosts: ipaclients become: true roles: - role: ipaclient state: true |
4.3. 使用 Ansible playbook 部署 IdM 客户端
完成此流程,使用 Ansible playbook 在 IdM 环境中部署 IdM 客户端。
流程
要使用 Ansible playbook 安装 IdM 客户端,请使用
ansible-playbook
命令及 playbook 文件的名称,如install-client.yml
。使用-i
选项指定清单文件:$ ansible-playbook -v -i inventory/hosts install-client.yml
使用 -v、
-vv
或-vv
v
选项指定详细程度。Ansible 告知您执行 Ansible playbook 脚本。以下输出显示,该脚本因为没有失败而成功运行:
PLAY RECAP client1.idm.example.com : ok=18 changed=10 unreachable=0 failed=0 skipped=21 rescued=0 ignored=0
注意Ansible 使用不同的颜色来提供有关运行中过程的不同类型信息。您可以修改
/etc/ansible/ansible.cfg
文件的[colors]
部分中的默认颜色:[colors] [...] #error = red #debug = dark gray #deprecate = purple #skip = cyan #unreachable = red #ok = green #changed = yellow [...]
现在,您已使用 Ansible playbook 在主机上安装了 IdM 客户端。
4.4. 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.5. 使用 Ansible playbook 卸载 IdM 客户端
完成此流程,使用 Ansible playbook 将主机卸载为 IdM 客户端。
先决条件
- IdM 管理员凭证。
流程
要卸载 IdM 客户端,请使用
ansible-playbook
命令及 playbook 文件的名称,如uninstall-client.yml
。使用-i
选项指定清单文件,也可选择使用 -v、-vv 或
-vv
v
选项指定详细程度:$ ansible-playbook -v -i inventory/hosts uninstall-client.yml
卸载客户端仅从主机中删除基本 IdM 配置,但在您决定重新安装客户端时保留主机上的配置文件。另外,卸载有以下限制:
- 它不会从 IdM LDAP 服务器中删除客户端主机条目。卸载仅是将主机取消注册。
- 它不会从 IdM 中删除任何位于客户端的服务。
- 它不会从 IdM 服务器中删除客户端的 DNS 条目。
-
它不会删除
/etc/krb5.keytab 之外的 keytab
的旧主体。
请注意,卸载会删除 IdM CA 为主机发布的所有证书。
其它资源
- 有关如何从主机和 IdM 环境完全删除 IdM 客户端配置的更多信息,请参阅卸载 IdM 客户端的手动步骤。
第 5 章 准备您的环境以使用 Ansible playbook 管理 IdM
作为管理身份管理(IdM)的系统管理员,在使用 Red Hat Ansible Engine 时,最好执行以下操作:
- 在您的主目录中,创建专用于 Ansible playbook 的子目录,如 ~/MyPlaybooks。
-
将
/usr/share/doc/ansible-freeipa/* 和
目录中的示例 Ansible playbook 复制到 ~/MyPlaybooks 目录中。/usr/
share/doc/rhel-system-roles/* 目录和* - 将清单文件包含在 ~/MyPlaybooks 目录中。
使用此练习,您可以在一个位置找到所有 playbook,您可以在不调用 root 特权的前提下运行 playbook。
您只需要在受管节点上具有 root
特权,即可执行 ipaserver
、ipareplica
、ipaclient
和 ipabackup
ansible-freeipa
角色。这些角色需要具有目录和 dnf
软件包管理器的特权访问权限。
本节论述了如何创建 ~/MyPlaybooks 目录并进行配置,以便您可以使用它来存储和运行 Ansible playbook。
先决条件
- 您已在受管节点上安装了 IdM 服务器server.idm.example.com 和replica.idm.example.com。
- 您已配置了 DNS 和网络,以便您可以直接从控制节点登录到受管节点server.idm.example.com 和replica.idm.example.com。
-
您知道 IdM
管理员
密码。
流程
在主目录中为您的 Ansible 配置和 playbook 创建目录:
$ mkdir ~/MyPlaybooks/
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks
使用以下内容创建 ~/MyPlaybooks/ansible.cfg 文件:
[defaults] inventory = /home/your_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 主机组,它包含来自 theeu 和 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
密码。
其它资源
- 有关使用 Ansible playbook 安装 IdM 服务器的更多信息,请参阅使用 Ansible playbook 安装身份管理服务器。
- 有关 Ansible 清单文件的可用格式概述,包括示例,请参阅如何构建您的清单。
第 6 章 使用 Ansible playbook 配置全局 IdM 设置
使用 Ansible config
模块,您可以检索和设置 Identity Management(IdM)的全局配置参数。
本章包括以下部分:
6.1. 使用 Ansible playbook 检索 IdM 配置
以下流程描述了如何使用 Ansible playbook 来检索有关当前全局 IdM 配置的信息。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
流程
创建一个清单文件,如
inventory.file
,并在[ipaserver]
部分中定义要从中检索 IdM 配置的 IdM 服务器。例如,要指示 Ansible 从 server.idm.example.com 检索数据,请输入:[ipaserver] server.idm.example.com
打开
/usr/share/doc/ansible-freeipa/playbooks/config/retrieve-config.yml
Ansible playbook 文件进行编辑:--- - name: Playbook to handle global IdM configuration hosts: ipaserver become: no gather_facts: no tasks: - name: Query IPA global configuration ipaconfig: ipaadmin_password: Secret123 register: serverconfig - debug: msg: "{{ serverconfig }}"
通过更改以下内容来调整文件:
- IdM 管理员的密码。
- 其他值(如有必要)。
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/config/retrieve-config.yml [...] TASK [debug] ok: [server.idm.example.com] => { "msg": { "ansible_facts": { "discovered_interpreter_ }, "changed": false, "config": { "ca_renewal_master_server": "server.idm.example.com", "configstring": [ "AllowNThash", "KDC:Disable Last Success" ], "defaultgroup": "ipausers", "defaultshell": "/bin/bash", "emaildomain": "idm.example.com", "enable_migration": false, "groupsearch": [ "cn", "description" ], "homedirectory": "/home", "maxhostname": "64", "maxusername": "64", "pac_type": [ "MS-PAC", "nfs:NONE" ], "pwdexpnotify": "4", "searchrecordslimit": "100", "searchtimelimit": "2", "selinuxusermapdefault": "unconfined_u:s0-s0:c0.c1023", "selinuxusermaporder": [ "guest_u:s0$xguest_u:s0$user_ ], "usersearch": [ "uid", "givenname", "sn", "telephonenumber", "ou", "title" ] }, "failed": false } }
6.2. 使用 Ansible playbook 配置 IdM CA 续订服务器
在使用嵌入式证书颁发机构(CA)的 Identity Management(IdM)部署中,CA 续订服务器维护并更新 IdM 系统证书。它确保了强大的 IdM 部署。
有关 IdM CA 续订服务器角色的详情,请参阅 使用 IdM CA 续订服务器。
以下流程描述了如何使用 Ansible playbook 配置 IdM CA 续订服务器。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
流程
可选:识别当前 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 tasks: - name: set ca_renewal_master_server ipaconfig: ipaadmin_password: SomeADMINpassword ca_renewal_master_server: carenewal.idm.example.com
通过更改调整文件:
-
ipaadmin_password
变量设置的 IdM 管理员密码。 -
ca_renewal_master_server
变量所设置的 CA 续订服务器的名称。
-
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件和清单文件:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/config/set-ca-renewal-master-server.yml
验证步骤
您可以验证 CA 续订服务器是否已更改:
以 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
、zsh
、玻璃鱼
缸式等。Bash
或 /bin/bash
是大多数 Linux 系统中常用的 shell,它通常是 RHEL 上用户帐户的默认 shell。
以下流程描述了如何使用 Ansible playbook 将 sh
(替代 shell)配置为 IdM 用户的默认 shell。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
流程
-
可选: 使用
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 become: true tasks: # Set defaultlogin and maxusername - ipaconfig: ipaadmin_password: Secret123 defaultshell: /bin/bash maxusername: 64
通过更改以下内容来调整文件:
-
ipaadmin_password
变量设置的 IdM 管理员密码。 -
IdM 用户的默认 shell,
默认 shell
变量设置为/bin/sh
。
-
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件和清单文件:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/config/ensure-config-options-are-set.yml
验证步骤
您可以通过在 IdM 中启动一个新会话来验证默认用户 shell 是否已更改:
以 IdM 管理员身份登录到
ipaserver
:$ ssh admin@server.idm.example.com Password: [admin@server /]$
显示当前的 shell:
[admin@server /]$ echo "$SHELL" /bin/sh
登录用户正在使用
sh
shell。
其它资源
-
您可以在
/usr/share/doc/ansible
Markdown 文件中可能的变量列表。-freeipa/ 目录中看到用于配置全局 IdM 设置的 Ansible playbook 示例,以及README-
config.md -
您可以在
/usr/share/doc/ansible-freeipa/playbooks/config
目录中看到各种 IdM 配置相关操作的 Ansible playbook 示例。
第 7 章 使用 Ansible playbook 管理用户帐户
您可以使用 Ansible playbook 管理 IdM 中的用户。介绍用户生命周期后,本章将介绍如何将 Ansible playbook 用于以下操作:
-
确保存在直接列在
YML
文件中的单个用户。 -
确保存在直接列在
YML 文件中的多个用户
。 -
确保存在从
YML
文件引用的JSON
文件中列出的多个用户。 -
确保没有直接在
YML
文件中列出的用户。
7.1. 用户生命周期
IdM(身份管理)支持三个用户帐户状态:
- 阶段用户不允许进行身份验证。这是初始状态。无法设置活动用户所需的一些用户帐户属性,例如组成员资格。
- 活动用户被允许进行身份验证。所有必需的用户帐户属性都必须设置为此状态。
- 保留的用户是以前被视为不活跃且无法向 IdM 进行身份验证的活动用户。保留的用户保留他们作为活动用户的大多数帐户属性,但它们不属于任何用户组。
您可以从 IdM 数据库永久删除用户条目。
删除的用户帐户无法恢复。当您删除用户帐户时,与帐户相关的所有信息都将永久丢失。
新管理员只能由具备管理员权限的用户创建,如默认的 admin 用户。如果您意外删除所有管理员帐户,目录管理器必须在 Directory 服务器中手动创建新管理员。
不要删除 admin
用户。由于 admin
是 IdM 所需的预定义用户,因此此操作会导致某些命令出现问题。如果要定义和使用备选 admin 用户,请在为至少一个其他用户授予 admin
权限后,使用 ipa user-disable admin
来禁用预定义的 admin 用户。
不要将本地用户添加到 IdM。在解析本地用户和组前,名称服务切换(NSS)总是解析 IdM 用户和组。这意味着 IdM 组成员资格不适用于本地用户。
7.2. 使用 Ansible playbook 确保存在 IdM 用户
以下流程描述了确保使用 Ansible playbook 在 IdM 中存在用户。
先决条件
- 您知道 IdM 管理器密码。
- ansible-freeipa 软件包安装在 Ansible 控制器上。
流程
创建一个清单文件,如
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 become: true tasks: - name: Create user idm_user ipauser: ipaadmin_password: MySecret123 name: idm_user first: Alice last: Acme uid: 1000111 gid: 10011 phone: "+555123457" email: idm_user@acme.com passwordexpiration: "2023-01-19 23:59:59" password: "Password123" update_password: on_create
您必须使用以下选项来添加用户:
- name :登录名称
- 首先 :第一个名称字符串
- 最后 :姓氏字符串
有关可用用户选项的完整列表,请参阅
/usr/share/doc/ansible-freeipa/README-user.md
Markdown 文件。注意如果您使用
update_password: on_create
选项,Ansible 仅在创建用户时创建用户密码。如果已使用密码创建了用户,Ansible 不会生成新的密码。运行 playbook:
$ ansible-playbook -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 中存在多个用户。
先决条件
- 您知道 IdM 管理器密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
流程
创建一个清单文件,如
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 become: true tasks: - name: Create user idm_users ipauser: ipaadmin_password: MySecret123 users: - name: idm_user_1 first: Alice last: Acme uid: 10001 gid: 10011 phone: "+555123457" email: idm_user@acme.com passwordexpiration: "2023-01-19 23:59:59" password: "Password123" - name: idm_user_2 first: Bob last: Acme uid: 100011 gid: 10011 - name: idm_user_3 first: Eve last: Acme uid: 1000111 gid: 10011
注意如果没有指定 update_password: on_create 选项,Ansible 每次运行 playbook 时都会重新设置用户密码:如果用户自上次运行 playbook 起更改了密码,则 Ansible 重新设置密码。
运行 playbook:
$ ansible-playbook -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
文件中。
先决条件
- 您知道 IdM 管理器密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
流程
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
创建包含必要任务的 Ansible playbook 文件。使用您要确保存在的用户数据引用
JSON
文件。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/ensure-users-present-ymlfile.yml
文件中的示例:--- - name: Ensure users' presence hosts: ipaserver become: true tasks: - name: Include users.json include_vars: file: users.json - name: Users present ipauser: ipaadmin_password: MySecret123 users: "{{ users }}"
创建
users.json
文件,并将 IdM 用户添加到其中。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/user/users.json
文件中的示例。例如,要创建用户 idm_user_1、idm_user_2 和 idm_user_3,并添加 Password123 作为密码 idm_user_1 :{ "users": [ { "name": "idm_user_1", "first": "Alice", "last": "Acme", "password": "Password123" }, { "name": "idm_user_2", "first": "Bob", "last": "Acme" }, { "name": "idm_user_3", "first": "Eve", "last": "Acme" } ] }
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-users-present-jsonfile.yml
验证步骤
您可以使用
ipa user-show
命令验证 IdM 中是否存在用户帐户:以管理员身份登录到
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 中没有特定用户。
先决条件
- 您知道 IdM 管理器密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
流程
创建一个清单文件,如
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 become: true tasks: - name: Delete users idm_user_1, idm_user_2, idm_user_3 ipauser: ipaadmin_password: MySecret123 users: - name: idm_user_1 - name: idm_user_2 - name: idm_user_3 state: absent
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -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 的用户。
其它资源
-
您可以看到有关其他 IdM 用户相关操作的 Ansible playbook 示例,如保留、删除、启用、禁用、解锁和取消删除用户,该文件位于
/usr/share/doc/ansible-freeipa/ 目录中的 README-
user.md Markdown 文件中。该文件还包含ipauser
变量的定义。 -
您还可以在
/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。
表 8.1. 默认创建的用户组
组名称 | 默认组成员 |
---|---|
| 所有 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-freeipa 软件包。
- IdM 中已存在您想要引用的用户。如需有关确保用户使用 Ansible 存在用户的详细信息,请参阅使用 Ansible playbook 管理用户帐户。
流程
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
使用必要的用户和组信息创建一个 Ansible playbook 文件:
--- - name: Playbook to handle groups hosts: ipaserver become: true tasks: - name: Create group ops with gid 1234 ipagroup: ipaadmin_password: MySecret123 name: ops gidnumber: 1234 - name: Create group sysops ipagroup: ipaadmin_password: MySecret123 name: sysops user: - idm_user - name: Create group appops ipagroup: ipaadmin_password: MySecret123 name: appops - name: Add group members sysops and appops to group ops ipagroup: ipaadmin_password: MySecret123 name: ops group: - sysops - appops
运行 playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-group-members.yml
验证步骤
您可以使用 ipa group-show
命令验证 ops 组是否包含 sysops 和 appops 作为直接成员,idm_user 作为间接成员:
以管理员身份登录到
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 用户。
其它资源
-
有关确保存在使用 Ansible 的用户组的更多信息,请参阅
/usr/share/doc/ansible-freeipa/README-group.md
Markdown 文件。
8.4. 使用 Ansible playbook 确保 IdM 用户组中存在成员管理器
以下流程描述了使用 Ansible playbook 确保存在 IdM 成员管理器(用户和用户组)。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
- 您必须具有要添加为成员管理器的用户名以及您要管理的组的名称。
流程
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
使用必要的用户和组成员管理信息创建一个 Ansible playbook 文件:
--- - name: Playbook to handle membership management hosts: ipaserver become: true tasks: - name: Ensure user test is present for group_a ipagroup: ipaadmin_password: MySecret123 name: group_a membermanager_user: test - name: Ensure group_admins is present for group_a ipagroup: ipaadmin_password: MySecret123 name: group_a membermanager_group: group_admins
运行 playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/add-member-managers-user-groups.yml
验证步骤
您可以使用 ipa group-show 命令验证 group_a 组是否包含 test 作为成员管理器,而 group_admins 是否是 group _a
的成员管理器:
以管理员身份登录到
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
man page。
8.5. 使用 Ansible playbook 确保 IdM 用户组中没有成员管理器
以下流程描述了在使用 Ansible playbook 时确保 IdM 成员管理器(用户和用户组)不存在。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
- 您必须具有要删除的现有成员管理器用户或组的名称,以及它们要管理的组的名称。
流程
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
使用必要的用户和组成员管理信息创建一个 Ansible playbook 文件:
--- - name: Playbook to handle membership management hosts: ipaserver become: true tasks: - name: Ensure member manager user and group members are absent for group_a ipagroup: ipaadmin_password: MySecret123 name: group_a membermanager_user: test membermanager_group: group_admins action: member state: absent
运行 playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-member-managers-are-absent.yml
验证步骤
您可以使用 ipa group-show 命令验证 group_a 组是否不包含作为成员管理器和 group_admins 作为 group_a 的成员
管理器 的测试 :
以管理员身份登录到
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
man page。
第 9 章 使用 Ansible playbook 管理 IdM 中的自助服务规则
本节介绍 Identity Management(IdM)中的自助服务规则,并介绍如何使用 Ansible playbook 创建和编辑自助服务访问规则。自助服务访问控制规则允许 IdM 实体在其 IdM 目录服务器条目上执行指定操作。
本节涵盖了以下主题:
9.1. IdM 中的自助服务访问控制
自助服务访问控制规则定义 Identity Management(IdM)实体可以在其 IdM 目录服务器条目上执行的操作:例如,IdM 用户能够更新自己的密码。
这种控制方法允许经过身份验证的 IdM 实体编辑其 LDAP 条目中的特定属性,但不允许对整个条目 添加
或删除
操作。
使用自助服务访问控制规则时要小心: 不当配置访问控制规则可能会意外地提升实体的特权。
9.2. 使用 Ansible 确保存在自助服务规则
以下流程描述了如何使用 Ansible playbook 定义自助服务规则并确保它们在身份管理(IdM)服务器上存在。在本例中,新用户可以管理自己的名称详细信息 规则,授予用户更改其 指定名称、
显示
名称、
标题和初始
属性的权限。例如,这允许他们更改其显示名称或首字母(如果他们想更改)。
先决条件
- 您知道 IdM 管理员密码。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 在 ~/MyPlaybooks/ 目录中,您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
流程
进入 ~/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
变量设置为新自助服务规则的名称。 -
将
权限
变量设置为以逗号分隔的权限列表,以授予:读取和写入
。
-
将
属性
变量设置为用户可以自己管理的属性列表:givenname
、displayname、name
和
initials
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Self-service present hosts: ipaserver become: true tasks: - name: Ensure self-service rule "Users can manage their own name details" is present ipaselfservice: ipaadmin_password: Secret123 name: "Users can manage their own name details" permission: read, write attribute: - givenname - displayname - title - initials
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory selfservice-present-copy.yml
其它资源
- 有关自助服务规则概念的更多信息,请参阅 IdM 中的自助服务访问控制。
有关使用
ipaselfservice
模块的更多 Ansible playbook 示例,请参阅:-
The
README-selfservice.md
文件位于/usr/share/doc/ansible-freeipa/
目录中。此文件还包含ipaselfservice
变量的定义。 -
/usr/share/doc/ansible-freeipa/playbooks/selfservice
目录。
-
The
9.3. 使用 Ansible 确保缺少自助服务规则
以下流程描述了如何使用 Ansible playbook 来确保 IdM 配置中没有指定的自助服务规则。以下示例描述了如何确保用户可以管理自己的名称详情自助服务规则在 IdM 中不存在。这将确保用户无法更改自己的显示名称或首字母。
先决条件
- 您知道 IdM 管理员密码。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 在 ~/MyPlaybooks/ 目录中,您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
流程
进入 ~/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 become: true tasks: - name: Ensure self-service rule "Users can manage their own name details" is absent ipaselfservice: ipaadmin_password: Secret123 name: "Users can manage their own name details" state: absent
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory selfservice-absent-copy.yml
其它资源
- 有关自助服务规则概念的更多信息,请参阅 IdM 中的自助服务访问控制。
有关使用
ipaselfservice
模块的更多 Ansible playbook 示例,请参阅:-
The
README-selfservice.md
文件位于/usr/share/doc/ansible-freeipa/
目录中。此文件还包含ipaselfservice
变量的定义。 -
/usr/share/doc/ansible-freeipa/playbooks/selfservice
目录。
-
The
9.4. 使用 Ansible 确保自助服务规则具有特定属性
以下流程描述了如何使用 Ansible playbook 确保现有自助服务规则具有特定的设置。在示例中,您可以确保用户可以管理自己的名称详细信息 自助服务规则,也具有urname member
属性。
先决条件
- 您知道 IdM 管理员密码。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 在 ~/MyPlaybooks/ 目录中,您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
- 用户可以在 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
变量设置为要修改的自助服务规则的名称。 -
将
属性
变量设置为urname
。 -
将
action
变量设置为member
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Self-service member present hosts: ipaserver become: true tasks: - name: Ensure selfservice "Users can manage their own name details" member attribute surname is present ipaselfservice: ipaadmin_password: Secret123 name: "Users can manage their own name details" attribute: - surname action: member
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory selfservice-member-present-copy.yml
其它资源
- 有关自助服务规则概念的更多信息,请参阅 IdM 中的自助服务访问控制。
有关使用
ipaselfservice
模块的更多 Ansible playbook 示例,请参阅:-
The
README-selfservice.md
文件位于/usr/share/doc/ansible-freeipa/
目录中。此文件还包含ipaselfservice
变量的定义。 -
/usr/share/doc/ansible-freeipa/playbooks/selfservice
目录。
-
The
9.5. 使用 Ansible 确保自助服务规则没有特定属性
以下流程描述了如何使用 Ansible playbook 来确保自助服务规则没有特定的设置。您可以使用此 playbook 确保自助服务规则不授予不需要的访问权限。在示例中,您可以确保用户可以管理自己的名称详细信息 自助服务规则没有 给定的name 和urname
成员
属性。
先决条件
- 您知道 IdM 管理员密码。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 在 ~/MyPlaybooks/ 目录中,您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
- 用户可以在 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
变量设置为您要修改的自助服务规则的名称。 -
将
属性
变量设置为givenname
和 topname
。 -
将
action
变量设置为member
。 -
将
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Self-service member absent hosts: ipaserver become: true tasks: - name: Ensure selfservice "Users can manage their own name details" member attributes givenname and surname are absent ipaselfservice: ipaadmin_password: Secret123 name: "Users can manage their own name details" attribute: - givenname - surname action: member state: absent
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory selfservice-member-absent-copy.yml
其它资源
- 有关自助服务规则概念的更多信息,请参阅 IdM 中的自助服务访问控制。
有关使用
ipaselfservice
模块的更多 Ansible playbook 示例,请参阅:-
The
README-selfservice.md
文件位于/usr/share/doc/ansible-freeipa/
目录中。此文件还包含ipaselfservice
变量的定义。 -
/usr/share/doc/ansible-freeipa/playbooks/selfservice
目录。
-
The
第 10 章 委派权限到用户组,以使用 Ansible playbook 管理用户
委派是 IdM 中的访问控制方法之一,以及自助服务规则和基于角色的访问控制(RBAC)。您可以使用 delegation 为一组用户分配权限,以管理另一组用户的条目。
本节涵盖了以下主题:
10.1. 委派规则
您可以通过创建委派规则,将权限委派给用户组来管理用户。
委派规则允许特定用户组对另一用户组中用户的特定属性执行写入(编辑)操作。这种形式的访问控制规则仅限于编辑您在委派规则中指定的属性子集的值;它不授予添加或删除整个条目或控制未指定属性的权限。
委派规则向 IdM 中的现有用户组授予权限。例如,您可以使用 delegation,允许 managers
用户组管理 employees 用户
组中的选定用户属性。
10.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 主机组,它包含来自 theeu 和 us 组的所有主机。
10.3. 使用 Ansible 确保存在委派规则
以下流程描述了如何使用 Ansible playbook 为新的 IdM 委派规则定义特权并确保其存在。在这个示例中,新的 基本管理器属性 委派规则授予 managers
组为 employees 组成员读取和写入以下属性 的权限
:
-
businesscategory
-
departmentnumber
-
employeenumber
-
employeetype
先决条件
- 您知道 IdM 管理员密码。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
- 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。
流程
进入 ~/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
变量设置为新委派规则的名称。 -
将
权限
变量设置为以逗号分隔的权限列表,以授予:读取和写入
。
-
将
属性
变量设置为委派的用户组可以管理的属性列表: Businesscategory
、Departmentnumber
、workernumber
和 employeestype
。 -
将
group
变量设置为被授予查看或修改属性访问权限的组名称。 -
将
membergroup
变量设置为组的名称,其属性可以查看或修改。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage a delegation rule hosts: ipaserver become: true tasks: - name: Ensure delegation "basic manager attributes" is present ipadelegation: ipaadmin_password: Secret123 name: "basic manager attributes" permission: read, write attribute: - businesscategory - departmentnumber - employeenumber - employeetype group: managers membergroup: employees
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/MyPlaybooks/inventory delegation-present-copy.yml
其它资源
- 有关委派规则概念的更多信息,请参阅委派规则。
有关使用
ipadelegation
模块的更多 Ansible playbook 示例,请参阅:-
The
README-delegation.md
文件位于/usr/share/doc/ansible-freeipa/
目录中。此文件还包含ipadelegation
变量的定义。 -
/usr/share/doc/ansible-freeipa/playbooks/ipadelegation
目录。
-
The
10.4. 使用 Ansible 确保缺少委派规则
以下流程描述了如何使用 Ansible playbook 来确保您的 IdM 配置中没有指定的委托规则。以下示例描述了如何确保 IdM 中不存在自定义基本管理器属性委派规则。
先决条件
- 您知道 IdM 管理员密码。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
- 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。
流程
进入 ~/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 become: true tasks: - name: Ensure delegation "basic manager attributes" is absent ipadelegation: ipaadmin_password: Secret123 name: "basic manager attributes" state: absent
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/MyPlaybooks/inventory delegation-absent-copy.yml
其它资源
- 有关委派规则概念的更多信息,请参阅委派规则。
有关使用
ipadelegation
模块的更多 Ansible playbook 示例,请参阅:-
The
README-delegation.md
文件位于/usr/share/doc/ansible-freeipa/
目录中。此文件还包含ipadelegation
变量的定义。 -
/usr/share/doc/ansible-freeipa/playbooks/ipadelegation
目录。
-
The
10.5. 使用 Ansible 确保委派规则具有特定属性
以下流程描述了如何使用 Ansible playbook 确保委派规则具有特定的设置。您可以使用此 playbook 修改您之前创建的委派角色。在示例中,您可以确保 基本的管理器属性 委派规则仅具有 Department number
member 属性。
先决条件
- 您知道 IdM 管理员密码。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
- 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。
- IdM 中存在基本的管理器属性委派规则。
流程
进入 ~/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
变量设置为要修改的委派规则的名称。 -
将
属性
变量设置为Departmentnumber
。 -
将
action
变量设置为member
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Delegation member present hosts: ipaserver become: true tasks: - name: Ensure delegation "basic manager attributes" member attribute departmentnumber is present ipadelegation: ipaadmin_password: Secret123 name: "basic manager attributes" attribute: - departmentnumber action: member
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/MyPlaybooks/inventory delegation-member-present-copy.yml
其它资源
- 有关委派规则概念的更多信息,请参阅委派规则。
有关使用
ipadelegation
模块的更多 Ansible playbook 示例,请参阅:-
The
README-delegation.md
文件位于/usr/share/doc/ansible-freeipa/
目录中。此文件还包含ipadelegation
变量的定义。 -
/usr/share/doc/ansible-freeipa/playbooks/ipadelegation
目录。
-
The
10.6. 使用 Ansible 确保委派规则没有特定属性
以下流程描述了如何使用 Ansible playbook 来确保委派规则没有特定的设置。您可以使用此 playbook 确保委派角色不授予不需要的访问权限。在该示例中,您可以确保 基本管理器属性 委派规则没有 employees number
和 employees type
成员属性。
先决条件
- 您知道 IdM 管理员密码。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
- 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。
- IdM 中存在基本的管理器属性委派规则。
流程
进入 ~/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
变量设置为要修改的委派规则的名称。 -
将
属性
变量设置为employeesnumber
和employeestype
。 -
将
action
变量设置为member
。 -
将
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Delegation member absent hosts: ipaserver become: true tasks: - name: Ensure delegation "basic manager attributes" member attributes employeenumber and employeetype are absent ipadelegation: ipaadmin_password: Secret123 name: "basic manager attributes" attribute: - employeenumber - employeetype action: member state: absent
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/MyPlaybooks/inventory delegation-member-absent-copy.yml
其它资源
- 有关委派规则概念的更多信息,请参阅委派规则。
有关使用
ipadelegation
模块的更多 Ansible playbook 示例,请参阅:-
The
README-delegation.md
文件位于/usr/share/doc/ansible-freeipa/
目录中。此文件还包含ipadelegation
变量的定义。 -
/usr/share/doc/ansible-freeipa/playbooks/ipadelegation
目录。
-
The
第 11 章 在 IdM 中使用 Ansible playbook 管理基于角色的访问控制
基于角色的访问控制(RBAC)是一种基于角色和特权定义的策略中立访问控制机制。在 Identity Management(IdM)中的 RBAC 组件是角色、权限和权限:
- 权限授予执行特定任务的权利,如添加或删除用户、修改组、启用读取访问等。
- 权限结合权限,例如添加新用户所需的所有权限。
- 角色向用户、用户组、主机或主机组授予一组特权。
尤其是在大型公司,使用 RBAC 可以帮助创建具有各个职责领域的管理员分层系统。
本章介绍了使用 Ansible playbook 管理 RBAC 时执行的以下操作:
11.1. IdM 中的权限
权限是基于角色的访问控制的最低级别单元,它们定义这些操作所应用到的 LDAP 条目。与构建块类似,可以根据需要对尽可能多的权限分配权限。
一个或多个权利定义了允许的操作 :
-
写入
-
读取
-
search
-
compare
-
add
-
delete
-
all
这些操作适用于三个基本目标 :
-
子树
:域名(DN);此 DN 下的子树 -
目标过滤器
:LDAP 过滤器 -
目标
:带有可能通配符的 DN 指定条目
此外,以下方便选项可设置对应的属性:
-
类型
:对象类型(用户、组等);设置子树
和目标过滤器
-
member
Of:组成员;设置目标过滤器
-
TargetGroup:
授予修改特定组的权限(如授予管理组成员资格的权限);设置目标
使用 IdM 权限,您可以控制哪些用户有权访问哪些对象,甚至控制这些对象的属性。IdM 允许您允许或阻止单个属性,或更改特定 IdM 功能(如用户、组或 sudo)的所有可见性,适用于所有匿名用户、所有经过身份验证的用户,或者只更改一组特定的特权用户。
例如,如果管理员只想将用户或组的访问权限限制到这些用户或组需要访问的特定部分,并且使其他部分完全隐藏于他们,此方法的灵活性对管理员很有用。
权限不能包含其他权限。
11.2. 默认管理权限
管理的权限是 IdM 默认附带的权限。它们的行为与用户创建的其他权限类似,但有以下区别:
- 您无法删除它们或修改其名称、位置和目标属性。
它们有三组属性:
- 默认属性,用户无法修改它们,因为它们由 IdM 管理
- 包含的属性,它们是用户添加的额外属性
- 排除的属性,这些属性由用户删除
管理的权限适用于 default 和 included 属性集中显示的所有属性,但不应用到排除集中的所有属性。
虽然您无法删除受管权限,但将其绑定类型设置为权限并从所有特权中删除托管权限会有效地禁用该权限。
所有受管权限的名称都以 System:
开头,例如 System: 添加 Sudo 规则或
System: Modify Services
。IdM 的早期版本将不同的方案用于默认权限。例如,用户无法删除它们,而只能将它们分配到特权。这些默认权限大部分已转换为受管权限,但以下权限仍使用以前的方案:
- 添加 Automember Rebuild Membership 任务
- 添加配置子条目
- 添加复制协议
- 证书删除冻结
- 从 CA 获取证书状态
- 读取 DNA 范围
- 修改 DNA 范围
- 读取 PassSync Manager 配置
- 修改 PassSync Manager 配置
- 阅读复制协议
- 修改复制协议
- 删除复制协议
- 读取 LDBM 数据库配置
- 请求证书
- 请求证书忽略 CA ACL
- 从不同主机请求证书
- 从 CA 检索证书
- 撤销证书
- 写入 IPA 配置
如果您试图通过命令行修改受管权限,系统不允许更改您无法修改的属性,命令会失败。如果您试图从 Web UI 修改受管权限,则无法修改的属性将被禁用。
11.3. IdM 中的权限
特权是一组适用于角色的权限。
虽然权限提供了执行单个操作的权限,但某些 IdM 任务需要多个权限才能成功。因此,特权组合了执行特定任务所需的不同权限。
例如,为新 IdM 用户设置帐户需要以下权限:
- 创建新用户条目
- 重置用户密码
- 将新用户添加到默认 IPA 用户组
以名为 的自定义特权的形式将这三个低级别任务合并到更高级别的任务中,例如,添加用户可使系统管理员更加轻松地管理角色。IdM 已包含几个默认权限。除了用户和用户组外,还将特权分配到主机和主机组,以及网络服务。这种方法允许精细控制一组主机上使用特定网络服务的操作。
特权可能不包含其他特权。
11.4. IdM 中的角色
角色是用户为角色指定的特权列表。
实际上,权限授予执行给定低级别任务(创建用户条目、向组添加条目等)的权限,权限组合了更高级别任务(如在给定组中创建新用户)所需的一个或多个这些权限。角色根据需要收集权限:例如,用户管理员角色能够添加、修改和删除用户。
角色用于对允许的操作进行分类。它们不用作实施特权升级或防止特权升级的工具。
角色不能包含其他角色。
11.5. Identity Management 中的预定义角色
Red Hat Identity Management 提供以下预定义角色范围:
表 11.1. Identity Management 中的预定义角色
角色 | 权限 | 描述 |
---|---|---|
helpdesk | 修改用户和重置密码,修改组成员资格 | 负责执行简单的用户管理任务 |
IT 安全专家 | Netgroups 管理员, HBAC 管理员, Sudo Administrator | 负责管理安全策略,如基于主机的访问控制、sudo 规则 |
IT 专家 | 主机管理员、主机组管理员、服务管理员、自动挂载管理员 | 负责管理主机 |
安全架构师 | 委派管理员、复制管理员、写入 IPA 配置、密码策略管理员 | 负责管理身份管理环境、创建信任、创建复制协议 |
用户管理员 | 用户管理员, 组管理员, Stage User Administrators | 负责创建用户和组 |
11.6. 使用 Ansible 确保存在带有特权的 IdM RBAC 角色
要对身份管理(IdM)中的资源(IdM)中的资源进行更加精细的控制,请创建自定义角色。
以下流程描述了如何使用 Ansible playbook 为新的 IdM 自定义角色定义特权并确保其存在。在这个示例中,新的 user_and_host_administrator 角色默认包含 IdM 中的以下权限的唯一组合:
-
组管理员
-
用户管理员
-
阶段用户管理员
-
组管理员
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。
流程
进入 ~/<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
变量设置为新角色的名称。 -
将
特权
列表设置为您要包含在新角色中的 IdM 权限的名称。 -
(可选)将
user
变量设置为您要授予新角色的用户名称。 -
(可选)将
group
变量设置为要授予新角色的组的名称。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage IPA role with members. hosts: ipaserver become: yes gather_facts: no tasks: - iparole: ipaadmin_password: Secret123 name: user_and_host_administrator user: idm_user01 group: idm_group01 privilege: - Group Administrators - User Administrators - Stage User Administrators - Group Administrators
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-member-user-present-copy.yml
其它资源
- 有关如何使用 Ansible Vault 将密码存储在单独的文件中的更多信息,或者将其加密为 playbook 文件中的变量,请参阅使用 Ansible Vault 加密内容。
- 有关 IdM 中角色概念的更多信息,请参阅 IdM 中的角色。
有关使用
iparole
模块的更多 Ansible playbook 示例,请参阅:-
/usr/share/doc/ansible
文件。此文件还包含-freeipa/ 目录中可用的README-
roleiparole
变量的定义。 -
/usr/share/doc/ansible-freeipa/playbooks/iparole
目录。
-
11.7. 使用 Ansible 确保缺少 IdM RBAC 角色
作为管理身份管理(IdM)中基于角色的访问控制(RBAC)的系统管理员,您可能希望确保没有过时的角色,以便任何管理员不会意外将它分配给任何用户。
以下流程描述了如何使用 Ansible playbook 来确保缺少角色。以下示例描述了如何确保 IdM 中不存在自定义 user_and_host_administrator 角色。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。
流程
进入 ~/<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: yes gather_facts: no tasks: - iparole: ipaadmin_password: Secret123 name: user_and_host_administrator state: absent
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-is-absent-copy.yml
其它资源
- 有关如何使用 Ansible Vault 将密码存储在单独的文件中的更多信息,或者将其加密为 playbook 文件中的变量,请参阅使用 Ansible Vault 加密内容。
- 有关 IdM 中角色概念的更多信息,请参阅 IdM 中的角色。
有关使用
iparole
模块的更多 Ansible playbook 示例,请参阅:-
The
README-role
Markdown 文件位于/usr/share/doc/ansible-freeipa/
目录中。此文件还包含iparole
变量的定义。 -
/usr/share/doc/ansible-freeipa/playbooks/iparole
目录。
-
The
11.8. 使用 Ansible 确保为一组用户分配 IdM RBAC 角色
作为管理身份管理(IdM)中基于角色的访问控制(RBAC)的系统管理员,您可能希望为一组特定的用户(如初级管理员)分配角色。
以下示例描述了如何使用 Ansible playbook 来确保为 Micro_sysadmins 分配内置 IdM RBAC 帮助 台角色。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。
流程
进入 ~/<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: yes gather_facts: no tasks: - iparole: ipaadmin_password: Secret123 name: helpdesk group: junior_sysadmins action: member
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-member-group-present-copy.yml
其它资源
- 有关如何使用 Ansible Vault 将密码存储在单独的文件中的更多信息,或者将其加密为 playbook 文件中的变量,请参阅使用 Ansible Vault 加密内容。
- 有关 IdM 中角色概念的更多信息,请参阅 IdM 中的角色。
-
有关使用
iparole
模块的更多 Ansible playbook 示例,请参阅/usr/share/doc/ansible
Markdown 文件。该文件还包含-freeipa/ 目录中的README-
roleiparole
变量的定义。 -
有关使用
iparole
模块的更多 Ansible playbook 示例,请参阅/usr/share/doc/ansible-freeipa/playbooks/iparole
目录。
11.9. 使用 Ansible 确保没有将特定用户分配给 IdM RBAC 角色
作为系统管理员,在身份管理(IdM)中管理基于角色的访问控制(RBAC),您可能需要确保在特定用户已移至公司内的不同位置后,不会为其分配 RBAC 角色。
以下流程描述了如何使用 Ansible playbook 来确保没有将名为 user_01 和 user_02 的用户分配到 helpdesk 角色。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。
流程
进入 ~/<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
变量设置为您要分配的角色的名称。 -
将
用户
列表设置为用户的名称。 -
将
action
变量设置为member
。 -
将
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage IPA role with members. hosts: ipaserver become: yes gather_facts: no tasks: - iparole: ipaadmin_password: Secret123 name: helpdesk user - user_01 - user_02 action: member state: absent
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-member-user-absent-copy.yml
其它资源
- 有关如何使用 Ansible Vault 将密码存储在单独的文件中的更多信息,或者将其加密为 playbook 文件中的变量,请参阅使用 Ansible Vault 加密内容。
- 有关 IdM 中角色概念的更多信息,请参阅 IdM 中的角色。
-
有关使用
iparole
模块的更多 Ansible playbook 示例,请参阅/usr/share/doc/ansible
Markdown 文件。该文件还包含-freeipa/ 目录中的README-
roleiparole
变量的定义。 -
有关使用
iparole
模块的更多 Ansible playbook 示例,请参阅/usr/share/doc/ansible-freeipa/playbooks/iparole
目录。
11.10. 使用 Ansible 确保服务是 IdM RBAC 角色的成员
作为管理身份管理(IdM)中基于角色的访问控制(RBAC)的系统管理员,您可能希望确保注册 IdM 的特定服务是特定角色的成员。以下示例描述了如何确保自定义 web_administrator 角色可以管理 client01.idm.example.com 服务器上运行的 HTTP
服务。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。
- web_administrator 角色存在于 IdM 中。
- IdM 中存在 HTTP/client01.idm.example.com@IDM.EXAMPLE.COM 服务。
流程
进入 ~/<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
变量设置为您要分配的角色的名称。 -
将
服务
列表设置为服务的名称。 -
将
action
变量设置为member
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage IPA role with members. hosts: ipaserver become: yes gather_facts: no tasks: - iparole: ipaadmin_password: Secret123 name: web_administrator service: - HTTP/client01.idm.example.com action: member
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-member-service-present-copy.yml
其它资源
- 有关如何使用 Ansible Vault 将密码存储在单独的文件中的更多信息,或者将其加密为 playbook 文件中的变量,请参阅使用 Ansible Vault 加密内容。
- 有关 IdM 中角色概念的更多信息,请参阅 IdM 中的角色。
-
有关使用
iparole
模块的更多 Ansible playbook 示例,请参阅/usr/share/doc/ansible
Markdown 文件。该文件还包含-freeipa/ 目录中的README-
roleiparole
变量的定义。 -
有关使用
iparole
模块的更多 Ansible playbook 示例,请参阅/usr/share/doc/ansible-freeipa/playbooks/iparole
目录。
11.11. 使用 Ansible 确保主机是 IdM RBAC 角色的成员
作为在身份管理(IdM)中管理基于角色的访问控制的系统管理员,您可能希望确保特定的主机或主机组与特定角色关联。以下示例描述了如何确保自定义 web_administrator 角色可以管理运行 HTTP
服务的 client01.idm.example.com IdM 主机。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。
- web_administrator 角色存在于 IdM 中。
- client01.idm.example.com 主机存在于 IdM 中。
流程
进入 ~/<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
变量设置为您要分配的角色的名称。 -
将主机
列表设置为主机的名称。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to manage IPA role with members. hosts: ipaserver become: yes gather_facts: no tasks: - iparole: ipaadmin_password: Secret123 name: web_administrator host: - client01.idm.example.com action: member
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-member-host-present-copy.yml
其它资源
- 有关如何使用 Ansible Vault 将密码存储在单独的文件中的更多信息,或者将其加密为 playbook 文件中的变量,请参阅使用 Ansible Vault 加密内容。
- 有关 IdM 中角色概念的更多信息,请参阅 IdM 中的角色。
-
有关使用
iparole
模块的更多 Ansible playbook 示例,请参阅/usr/share/doc/ansible
Markdown 文件。该文件还包含-freeipa/ 目录中的README-
roleiparole
变量的定义。 -
有关使用
iparole
模块的更多 Ansible playbook 示例,请参阅/usr/share/doc/ansible-freeipa/playbooks/iparole
目录。
11.12. 使用 Ansible 确保主机组是 IdM RBAC 角色的成员
作为在身份管理(IdM)中管理基于角色的访问控制的系统管理员,您可能希望确保特定的主机或主机组与特定角色关联。以下示例描述了如何确保自定义 web_administrator 角色可以管理运行 HTTP
服务的 IdM 主机组的 web_servers 组。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/<MyPlaybooks>/ 目录中。
- web_administrator 角色存在于 IdM 中。
- web_servers 主机组存在于 IdM 中。
流程
进入 ~/<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: yes gather_facts: no tasks: - iparole: ipaadmin_password: Secret123 name: web_administrator hostgroup: - web_servers action: member
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i ~/<MyPlaybooks>/inventory role-member-hostgroup-present-copy.yml
其它资源
- 有关如何使用 Ansible Vault 将密码存储在单独的文件中的更多信息,或者将其加密为 playbook 文件中的变量,请参阅使用 Ansible Vault 加密内容。
- 有关 IdM 中角色概念的更多信息,请参阅 IdM 中的角色。
-
有关使用
iparole
模块的更多 Ansible playbook 示例,请参阅/usr/share/doc/ansible
Markdown 文件。该文件还包含-freeipa/ 目录中的README-
roleiparole
变量的定义。 -
有关使用
iparole
模块的更多 Ansible playbook 示例,请参阅/usr/share/doc/ansible-freeipa/playbooks/iparole
目录。
第 12 章 使用 Ansible playbook 管理 RBAC 特权
基于角色的访问控制(RBAC)是一种基于角色、特权和权限定义的策略中立访问控制机制。尤其是在大型公司,使用 RBAC 可以帮助创建具有各个职责领域的管理员分层系统。
本章介绍了以下操作,以使用 Ansible playbook 管理身份管理(IdM)中的 RBAC 特权:
先决条件
12.1. 使用 Ansible 确保存在自定义 IdM RBAC 特权
要在 Identity Management(IdM)基于角色的访问控制(RBAC)中有一个完全设计的自定义权限,您需要逐步进行:
- 创建没有附加权限的特权。
- 将您选择的权限添加到特权。
以下流程描述了如何使用 Ansible playbook 创建空特权,以便稍后您可以向它添加权限。这个示例描述了如何创建名为 full_host_administration 的特权,它旨在组合与主机管理相关的所有 IdM 权限。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。
流程
进入 ~/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 become: true tasks: - name: Ensure privilege full_host_administration is present ipaprivilege: ipaadmin_password: Secret123 name: full_host_administration description: This privilege combines all IdM permissions related to host administration
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory privilege-present-copy.yml
12.2. 使用 Ansible 确保自定义 IdM RBAC 特权中存在成员权限
要在 Identity Management(IdM)基于角色的访问控制(RBAC)中有一个完全设计的自定义权限,您需要逐步进行:
- 创建没有附加权限的特权。
- 将您选择的权限添加到特权。
以下流程描述了如何使用 Ansible playbook 向上一步中创建的特权添加权限。这个示例描述了如何将与主机管理相关的所有 IdM 权限添加到名为 full_host_administration 的特权中。默认情况下,权限在 主机注册、
HostAdministrators 和
权限之间分发。
Host Group
Administrator
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。
- 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
任务部分设置以下变量来调整文件:-
调整任务
的名称
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为特权的名称。 -
将
权限
列表设置为您要包含在权限中的权限名称。 -
确保
action
变量设置为member
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Privilege member present example hosts: ipaserver become: true tasks: - name: Ensure that permissions are present for the "full_host_administration" privilege ipaprivilege: ipaadmin_password: Secret123 name: full_host_administration permission: - "System: Add krbPrincipalName to a Host" - "System: Enroll a Host" - "System: Manage Host Certificates" - "System: Manage Host Enrollment Password" - "System: Manage Host Keytab" - "System: Manage Host Principals" - "Retrieve Certificates from the CA" - "Revoke Certificate" - "System: Add Hosts" - "System: Add krbPrincipalName to a Host" - "System: Enroll a Host" - "System: Manage Host Certificates" - "System: Manage Host Enrollment Password" - "System: Manage Host Keytab" - "System: Manage Host Keytab Permissions" - "System: Manage Host Principals" - "System: Manage Host SSH Public Keys" - "System: Manage Service Keytab" - "System: Manage Service Keytab Permissions" - "System: Modify Hosts" - "System: Remove Hosts" - "System: Add Hostgroups" - "System: Modify Hostgroup Membership" - "System: Modify Hostgroups" - "System: Remove Hostgroups"
-
调整任务
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory privilege-member-present-copy.yml
12.3. 使用 Ansible 确保 IdM RBAC 特权不包括权限
作为身份管理系统管理员(IdM),您可以自定义 IdM 基于角色的访问控制。
以下流程描述了如何使用 Ansible playbook 从特权中删除权限。示例描述了如何从默认 证书
权限,例如,管理员认为它存在安全风险。
管理员权限中删除请求证书
忽略 CA ACL
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。
流程
进入 ~/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
任务部分设置以下变量来调整文件:-
调整任务
的名称
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为特权的名称。 -
将
权限
列表设置为您要从特权中删除的权限名称。 -
确保
action
变量设置为member
。 -
确保
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Privilege absent example hosts: ipaserver become: true tasks: - name: Ensure that the "Request Certificate ignoring CA ACLs" permission is absent from the "Certificate Administrators" privilege ipaprivilege: ipaadmin_password: Secret123 name: Certificate Administrators permission: - "Request Certificate ignoring CA ACLs" action: member state: absent
-
调整任务
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory privilege-member-absent-copy.yml
12.4. 使用 Ansible 重命名自定义 IdM RBAC 特权
作为身份管理系统管理员(IdM),您可以自定义 IdM 基于角色的访问控制。
以下流程描述了如何重命名权限,例如,您已从其中删除了一些权限。因此,特权的名称不再准确。在示例中,管理员将 full_host_administration 特权重命名为 limited_host_administration。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。
- 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
变量设置为特权的当前名称。 -
添加
重命名
变量,并将它设置为特权的新名称。 -
添加
state
变量,并将它设置为重命名
。
-
将
重新命名 playbook 本身,例如:
--- - name: Rename a privilege hosts: ipaserver become: true
在 playbook 中重命名任务,例如:
[...] tasks: - name: Ensure the full_host_administration privilege is renamed to limited_host_administration ipaprivilege: [...]
这是当前示例修改的 Ansible playbook 文件:
--- - name: Rename a privilege hosts: ipaserver become: true tasks: - name: Ensure the full_host_administration privilege is renamed to limited_host_administration ipaprivilege: ipaadmin_password: Secret123 name: full_host_administration rename: limited_host_administration state: renamed
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory rename-privilege.yml
12.5. 使用 Ansible 确保缺少 IdM RBAC 特权
作为身份管理系统管理员(IdM),您可以自定义 IdM 基于角色的访问控制。以下流程描述了如何使用 Ansible playbook 来确保缺少 RBAC 特权。这个示例描述了如何确保缺少 CA 管理员特权
。因此,管理员
成为在 IdM 中管理证书颁发机构的唯一用户。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 您已创建了一个 Ansible 清单文件,其中包含要在其上配置 IdM 服务器的完全限定域名(FQDN)。
- 您的 Ansible 清单文件位于 ~/MyPlaybooks/ 目录中。
流程
进入 ~/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 become: true tasks: - name: Ensure privilege "CA administrator" is absent ipaprivilege: ipaadmin_password: Secret123 name: CA administrator state: absent
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory privilege-absent-copy.yml
其它资源
- 有关 IdM RBAC 中权限概念的更多信息,请参阅 IdM 中的特权。
- 有关 IdM RBAC 中权限概念的更多信息,请参阅 IdM 中的权限。
-
有关使用
ipaprivilege
模块的更多 Ansible playbook 示例,请参阅/usr/share/doc/ansible
文件。该文件还包含-freeipa/ 目录中的README-
privilegeipaprivilege
变量的定义。 -
有关使用
ipaprivilege
模块的更多 Ansible playbook 示例,请参阅/usr/share/doc/ansible-freeipa/playbooks/ipaprivilege
目录。
第 13 章 使用 Ansible playbook 在 IdM 中管理 RBAC 权限
基于角色的访问控制(RBAC)是一种基于角色、特权和权限定义的策略中立访问控制机制。尤其是在大型公司,使用 RBAC 可以帮助创建具有各个职责领域的管理员分层系统。
本章介绍了使用 Ansible playbook 管理身份管理(IdM)中 RBAC 权限时执行的以下操作:
先决条件
13.1. 使用 Ansible 确保存在 RBAC 权限
作为身份管理系统管理员(IdM),您可以自定义 IdM 基于角色的访问控制(RBAC)。
以下流程描述了如何使用 Ansible playbook 确保 IdM 中存在权限,以便它可以添加到特权中。这个示例描述了如何确保以下目标状态:
-
MyPermission
权限存在。 -
MyPermission
权限只能应用到主机。 授予了包含权限的用户可以对条目执行以下所有可能的操作:
- 写
- 读
- 搜索
- 比较
- 添加
- 删除
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 示例假定您已创建并配置了 ~/MyPlaybooks/ 目录,作为存储示例 playbook 副本的中央位置。
流程
进入 ~/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
任务部分中设置以下变量来调整文件:-
调整任务
的名称
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为权限的名称。 -
将
object_type
变量设置为host
。 -
将
正确的
变量设置为all
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Permission present example hosts: ipaserver become: true tasks: - name: Ensure that the "MyPermission" permission is present ipapermission: ipaadmin_password: Secret123 name: MyPermission object_type: host right: all
-
调整任务
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory permission-present-copy.yml
13.2. 使用 Ansible 确保存在带有属性的 RBAC 权限
作为身份管理系统管理员(IdM),您可以自定义 IdM 基于角色的访问控制(RBAC)。
以下流程描述了如何使用 Ansible playbook 确保 IdM 中存在权限,以便它可以添加到特权中。这个示例描述了如何确保以下目标状态:
- MyPermission 权限存在。
- MyPermission 权限只能用于添加主机。
获得了包含权限的用户可以在主机条目上执行以下所有可能的操作:
- 写
- 读
- 搜索
- 比较
- 添加
- 删除
-
被授予特权的用户创建的主机条目包含 MyPermission 权限,可以具有
描述
值。
创建或修改权限时可以指定的属性类型不受 IdM LDAP 模式的限制。但是,指定 attrs: car_licence(如果
object_type
是 host
)会导致 ipa: ERROR: 属性"car-license"在尝试执行该权限时不允许出现
错误消息,并为主机添加特定的车辆许可证值。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 示例假定您已创建并配置了 ~/MyPlaybooks/ 目录,作为存储示例 playbook 副本的中央位置。
流程
进入 ~/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
任务部分中设置以下变量来调整文件:-
调整任务
的名称
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为权限的名称。 -
将
object_type
变量设置为host
。 -
将
正确的
变量设置为all
。 -
将
attrs
变量设置为description
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Permission present example hosts: ipaserver become: true tasks: - name: Ensure that the "MyPermission" permission is present with an attribute ipapermission: ipaadmin_password: Secret123 name: MyPermission object_type: host right: all attrs: description
-
调整任务
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory permission-present-with-attribute.yml
其它资源
- 如需有关 IdM 模式的更多信息,请参阅 RHEL 7 中的 Linux 域身份、身份验证和策略中的 https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/linux_domain_identity_authentication_and_policy_guide/index#user-schema 用户和组模式。
13.3. 使用 Ansible 确保缺少 RBAC 权限
作为身份管理系统管理员(IdM),您可以自定义 IdM 基于角色的访问控制(RBAC)。
以下流程描述了如何使用 Ansible playbook 确保 IdM 中缺少权限,因此无法将其添加到特权中。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 示例假定您已创建并配置了 ~/MyPlaybooks/ 目录,作为存储示例 playbook 副本的中央位置。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
制作位于
/usr/share/doc/ansible
文件的副本:-freeipa/playbooks/permission/ 目录中的 permission-
absent.yml$ cp /usr/share/doc/ansible-freeipa/playbooks/permission/permission-absent.yml permission-absent-copy.yml
-
打开
permission-absent-copy.yml
Ansible playbook 文件进行编辑。 通过在
ipapermission
任务部分中设置以下变量来调整文件:-
调整任务
的名称
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为权限的名称。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Permission absent example hosts: ipaserver become: true tasks: - name: Ensure that the "MyPermission" permission is absent ipapermission: ipaadmin_password: Secret123 name: MyPermission state: absent
-
调整任务
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory permission-absent-copy.yml
13.4. 使用 Ansible 确保属性是 IdM RBAC 权限的成员
作为身份管理系统管理员(IdM),您可以自定义 IdM 基于角色的访问控制(RBAC)。
以下流程描述了如何使用 Ansible playbook 确保属性是 IdM 中 RBAC 权限的成员。因此,拥有 权限的用户可以创建具有 属性的条目。
示例描述了如何确保特权包含 MyPermission 权限的用户创建的主机条目可以具有 gecos
和 description
值。
创建或修改权限时可以指定的属性类型不受 IdM LDAP 模式的限制。但是,指定 attrs: car_licence(如果
object_type
是 host
)会导致 ipa: ERROR: 属性"car-license"在尝试执行该权限时不允许出现
错误消息,并为主机添加特定的车辆许可证值。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 示例假定您已创建并配置了 ~/MyPlaybooks/ 目录,作为存储示例 playbook 副本的中央位置。
- 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
任务部分中设置以下变量来调整文件:-
调整任务
的名称
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为权限的名称。 -
将
attrs
列表设置为description
和gecos
变量。 -
确保
action
变量设置为member
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Permission member present example hosts: ipaserver become: true tasks: - name: Ensure that the "gecos" and "description" attributes are present in "MyPermission" ipapermission: ipaadmin_password: Secret123 name: MyPermission attrs: - description - gecos action: member
-
调整任务
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory permission-member-present-copy.yml
13.5. 使用 Ansible 确保属性不是 IdM RBAC 权限的成员
作为身份管理系统管理员(IdM),您可以自定义 IdM 基于角色的访问控制(RBAC)。
以下流程描述了如何使用 Ansible playbook 确保属性不是 IdM 中 RBAC 权限的成员。因此,当拥有权限的用户在 IdM LDAP 中创建条目时,该条目不能具有与 属性关联的值。
这个示例描述了如何确保以下目标状态:
- MyPermission 权限存在。
-
具有特权的用户创建的主机条目包含 MyPermission 权限,不能具有
description
属性。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 示例假定您已创建并配置了 ~/MyPlaybooks/ 目录,作为存储示例 playbook 副本的中央位置。
- 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
任务部分中设置以下变量来调整文件:-
调整任务
的名称
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为权限的名称。 -
将
attrs
变量设置为description
。 -
将
action
变量设置为member
。 -
确保
state
变量设置为absent
这是当前示例修改的 Ansible playbook 文件:
--- - name: Permission absent example hosts: ipaserver become: true tasks: - name: Ensure that an attribute is not a member of "MyPermission" ipapermission: ipaadmin_password: Secret123 name: MyPermission attrs: description action: member state: absent
-
调整任务
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory permission-member-absent-copy.yml
13.6. 使用 Ansible 重命名 IdM RBAC 权限
作为身份管理系统管理员(IdM),您可以自定义 IdM 基于角色的访问控制。
以下流程描述了如何使用 Ansible playbook 重新命名权限。这个示例描述了如何将 MyPermission 重命名为 MyNewPermission。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 示例假定您已创建并配置了 ~/MyPlaybooks/ 目录,作为存储示例 playbook 副本的中央位置。
- 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
任务部分中设置以下变量来调整文件:-
调整任务
的名称
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为权限的名称。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Permission present example hosts: ipaserver become: true tasks: - name: Rename the "MyPermission" permission ipapermission: ipaadmin_password: Secret123 name: MyPermission rename: MyNewPermission state: renamed
-
调整任务
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory permission-renamed-copy.yml
13.7. 其它资源
- 有关 IdM RBAC 中权限概念的更多信息,请参阅 IdM 中的权限。
- 有关 IdM RBAC 中权限概念的更多信息,请参阅 IdM 中的特权。
-
有关使用
ipapermission
模块的更多 Ansible playbook 示例,请参阅/usr/share/doc/ansible
文件。文件还包含-freeipa/ 目录中的README-
permissionipapermission
变量的定义。 -
有关使用
ipapermission
模块的更多 Ansible playbook 示例,请参阅/usr/share/doc/ansible-freeipa/playbooks/ipapermission
目录。
第 14 章 使用 Ansible 管理 IdM 中的复制拓扑
您可以维护多个身份管理(IdM)服务器,并使它们相互复制,以实现冗余目的,以减少或防止服务器丢失。例如,如果一个服务器失败,其他服务器就会为域提供服务。您还可以根据剩余的服务器创建新副本来恢复丢失的服务器。
存储在 IdM 服务器上的数据会根据复制协议复制:当两台服务器配置了复制协议时,它们将共享其数据。复制的数据存储在拓扑 后缀中
。当两个副本在其后缀之间具有复制协议时,后缀组成一个拓扑 片段
。
本章论述了如何使用 Red Hat Ansible Engine 管理 IdM 复制协议、拓扑片段和拓扑后缀。本章包含以下部分:
14.1. 使用 Ansible 确保 IdM 中存在复制协议
存储在身份管理(IdM)服务器上的数据存储基于复制协议:配置了两个服务器时,它们共享其数据。复制协议始终为现实:数据从第一个副本复制到另一个副本,另一个副本复制到第一个副本。
本节介绍如何使用 Ansible playbook 确保 server.idm.example.com 和 replica.idm.example.com 之间存在 域
类型的复制协议。
先决条件
- 确保您了解了设计拓扑中在连接副本中列出的 IdM 拓扑的建议。
-
您知道 IdM
管理员
密码。 您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 在 ~/MyPlaybooks/ 目录中,您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
流程
进入您的 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
复制位于
/usr/share/doc/ansible
Ansible playbook 文件:-freeipa/playbooks/topology/ 目录中的 add-topology
segment.yml$ cp /usr/share/doc/ansible-freeipa/playbooks/topology/add-topologysegment.yml add-topologysegment-copy.yml
-
打开
add-topologysegment-copy.yml
文件进行编辑。 通过在
ipatopologysegment 任务部分
设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 -
根据您要添加的分段类型,将
后缀
变量设置为domain
或ca
。 -
将
左侧
变量设置为您要作为复制协议左侧节点的 IdM 服务器的名称。 -
将
right
变量设置为您要作为复制协议正确节点的 IdM 服务器的名称。 -
确保
state
变量设置为present
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to handle topologysegment hosts: ipaserver become: true tasks: - name: Add topology segment ipatopologysegment: ipaadmin_password: Secret123 suffix: domain left: server.idm.example.com right: replica.idm.example.com state: present
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory add-topologysegment-copy.yml
其它资源
- 如需有关拓扑协议、后缀和片段概念的更多信息,请参阅解释复制协议、拓扑后缀和拓扑分段。
有关使用
ipatopologysegment
模块的更多 Ansible playbook 示例,请参阅:-
/usr/share/doc/ansible
文件。此文件还包含-freeipa/ 目录中的 TheREADME-
topology.mdipatopologysegment
变量的定义。 -
/usr/share/doc/ansible-freeipa/playbooks/topology
目录。
-
14.2. 使用 Ansible 确保多个 IdM 副本之间存在复制协议
存储在身份管理(IdM)服务器上的数据存储基于复制协议:配置了两个服务器时,它们共享其数据。复制协议始终为现实:数据从第一个副本复制到另一个副本,另一个副本复制到第一个副本。
本节论述了如何确保 IdM 中的多个副本对存在复制协议。
先决条件
- 确保您了解了设计拓扑中在连接副本中列出的 IdM 拓扑的建议
-
您知道 IdM
管理员
密码。 您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 在 ~/MyPlaybooks/ 目录中,您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
流程
进入您的 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
复制位于
/usr/share/doc/ansible
Ansible playbook 文件:-freeipa/playbooks/topology/ 目录中的 add-topologysegments
.yml$ cp /usr/share/doc/ansible-freeipa/playbooks/topology/add-topologysegments.yml add-topologysegments-copy.yml
-
打开
add-topologysegments-copy.yml
文件进行编辑。 通过在
vars 部分中
设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 对于每个拓扑片段,在
ipatopology_segments
部分添加一个行并设置以下变量:-
根据您要添加的分段类型,将
后缀
变量设置为domain
或ca
。 -
将
左侧
变量设置为您要作为复制协议左侧节点的 IdM 服务器的名称。 -
将
right
变量设置为您要作为复制协议正确节点的 IdM 服务器的名称。
-
根据您要添加的分段类型,将
-
将
在
add-topologysegments-copy.yml
文件的tasks
部分中,确保state
变量设置为present
。这是当前示例修改的 Ansible playbook 文件:
--- - name: Add topology segments hosts: ipaserver become: true gather_facts: false vars: ipaadmin_password: Secret123 ipatopology_segments: - {suffix: domain, left: replica1.idm.example.com , right: replica2.idm.example.com } - {suffix: domain, left: replica2.idm.example.com , right: replica3.idm.example.com } - {suffix: domain, left: replica3.idm.example.com , right: replica4.idm.example.com } - {suffix: domain+ca, left: replica4.idm.example.com , right: replica1.idm.example.com } tasks: - name: Add topology segment ipatopologysegment: ipaadmin_password: "{{ ipaadmin_password }}" suffix: "{{ item.suffix }}" name: "{{ item.name | default(omit) }}" left: "{{ item.left }}" right: "{{ item.right }}" state: present #state: absent #state: checked #state: reinitialized loop: "{{ ipatopology_segments | default([]) }}"
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory add-topologysegments-copy.yml
其它资源
- 如需有关拓扑协议、后缀和片段概念的更多信息,请参阅解释复制协议、拓扑后缀和拓扑分段。
有关使用
ipatopologysegment
模块的更多 Ansible playbook 示例,请参阅:-
/usr/share/doc/ansible
文件。此文件还包含-freeipa/ 目录中的 TheREADME-
topology.mdipatopologysegment
变量的定义。 -
/usr/share/doc/ansible-freeipa/playbooks/topology
目录。
-
14.3. 使用 Ansible 检查两个副本之间是否存在复制协议
存储在身份管理(IdM)服务器上的数据存储基于复制协议:配置了两个服务器时,它们共享其数据。复制协议始终为现实:数据从第一个副本复制到另一个副本,另一个副本复制到第一个副本。
本节论述了如何验证 IdM 中的多个副本对是否存在复制协议。
先决条件
- 确保您了解了设计拓扑中连接副本中列出的 Identity Management(IdM)拓扑的建议。
-
您知道 IdM
管理员
密码。 您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 在 ~/MyPlaybooks/ 目录中,您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
流程
进入您的 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
复制位于
/usr/share/doc/ansible
Ansible playbook 文件:-freeipa/playbooks/topology/ 目录中的 check-topologysegments
.yml$ cp /usr/share/doc/ansible-freeipa/playbooks/topology/check-topologysegments.yml check-topologysegments-copy.yml
-
打开
check-topologysegments-copy.yml
文件进行编辑。 通过在
vars 部分中
设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 对于每个拓扑片段,在
ipatopology_segments
部分添加一个行并设置以下变量:-
根据您要添加的分段类型,将
后缀
变量设置为域
或ca
。 -
将
左侧
变量设置为您要作为复制协议左侧节点的 IdM 服务器的名称。 -
将
right
变量设置为您要作为复制协议正确节点的 IdM 服务器的名称。
-
根据您要添加的分段类型,将
-
将
在
check-topologysegments-copy.yml
文件的tasks
部分中,确保state
变量设置为present
。这是当前示例修改的 Ansible playbook 文件:
--- - name: Add topology segments hosts: ipaserver become: true gather_facts: false vars: ipaadmin_password: Secret123 ipatopology_segments: - {suffix: domain, left: replica1.idm.example.com, right: replica2.idm.example.com } - {suffix: domain, left: replica2.idm.example.com , right: replica3.idm.example.com } - {suffix: domain, left: replica3.idm.example.com , right: replica4.idm.example.com } - {suffix: domain+ca, left: replica4.idm.example.com , right: replica1.idm.example.com } tasks: - name: Check topology segment ipatopologysegment: ipaadmin_password: "{{ ipaadmin_password }}" suffix: "{{ item.suffix }}" name: "{{ item.name | default(omit) }}" left: "{{ item.left }}" right: "{{ item.right }}" state: checked loop: "{{ ipatopology_segments | default([]) }}"
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory check-topologysegments-copy.yml
其它资源
- 如需有关拓扑协议、后缀和片段概念的更多信息,请参阅解释复制协议、拓扑后缀和拓扑分段。
有关使用
ipatopologysegment
模块的更多 Ansible playbook 示例,请参阅:-
/usr/share/doc/ansible
文件。此文件还包含-freeipa/ 目录中的 TheREADME-
topology.mdipatopologysegment
变量的定义。 -
/usr/share/doc/ansible-freeipa/playbooks/topology
目录。
-
14.4. 使用 Ansible 验证 IdM 中是否存在拓扑后缀
在身份管理(IdM)中的复制协议中,拓扑后缀存储要复制的数据。IdM 支持两种类型的拓扑后缀: domain
和 ca
。每个后缀代表一个单独的后端,即一个单独的复制拓扑。配置复制协议时,它会在两个不同的服务器上加入同一类型的两个拓扑后缀。
域
后缀包含与域相关的所有数据,如用户、组和策略。ca
后缀包含证书系统组件的数据。它仅存在于安装有证书颁发机构(CA)的服务器上。
本节论述了如何使用 Ansible playbook 来确保 IdM 中存在拓扑后缀。这个示例描述了如何确保 IdM 中存在 域
后缀。
先决条件
-
您知道 IdM
管理员
密码。 您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 在 ~/MyPlaybooks/ 目录中,您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
流程
进入您的 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
复制位于
/usr/share/doc/ansible
Ansible playbook 文件:-freeipa/playbooks/topology/ 目录中的 verify-topologys
uffix.yml$ cp /usr/share/doc/ansible-freeipa/playbooks/topology/ verify-topologysuffix.yml verify-topologysuffix-copy.yml
-
打开
verify-topologysuffix-copy.yml
Ansible playbook 文件进行编辑。 通过在
ipatopologysuffix
部分中设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 -
将
suffix
变量设置为domain
。如果您要验证ca
后缀是否存在,请将 变量设置为ca
。 -
确保
state
变量设置为verify
。不允许使用其他选项。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to handle topologysuffix hosts: ipaserver become: true tasks: - name: Verify topology suffix ipatopologysuffix: ipaadmin_password: Secret123 suffix: domain state: verified
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory verify-topologysuffix-copy.yml
其它资源
- 如需有关拓扑协议、后缀和片段概念的更多信息,请参阅解释复制协议、拓扑后缀和拓扑分段。
有关使用
ipatopologysegment
模块的更多 Ansible playbook 示例,请参阅:-
/usr/share/doc/ansible
文件。此文件还包含-freeipa/ 目录中的 TheREADME-
topology.mdipatopologysuffix
变量的定义。 -
/usr/share/doc/ansible-freeipa/playbooks/topology
目录。
-
14.5. 使用 Ansible 重新初始化 IdM 副本
如果副本已长时间离线或者其数据库已损坏,您可以重新初始化它。重新初始化会使用更新的一组数据来刷新副本。例如,如果需要从备份进行权威恢复,则可以使用重新初始化。
与复制更新不同,副本仅互相发送更改的条目,重新初始化会刷新整个数据库。
运行 命令的本地主机是重新初始化的副本。要指定从中获取数据的副本,请使用 方向
选项。
本节介绍如何使用 Ansible playbook 从 server .idm.example.com 中重新初始化 replica.idm.example.com 上的 域
数据。
先决条件
-
您知道 IdM
管理员
密码。 您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 在 ~/MyPlaybooks/ 目录中,您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
流程
进入您的 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
复制位于
/usr/share/doc/ansible
Ansible playbook 文件:-freeipa/playbooks/topology/ 目录下的 reinitialize-topology
segment.yml$ cp /usr/share/doc/ansible-freeipa/playbooks/topology/reinitialize-topologysegment.yml reinitialize-topologysegment-copy.yml
-
打开
reinitialize-topologysegment-copy.yml
文件进行编辑。 通过在
ipatopologysegment
部分中设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 -
将
suffix
变量设置为domain
。如果您要重新初始化ca
数据,请将 变量设置为ca
。 -
将
左侧
变量设置为复制协议的左侧节点。 -
将
正确的
变量设置为复制协议的正确节点。 -
将
方向
变量设置为重新初始化数据的方向。左向向右
方向表示数据从左侧节点流到右侧节点。 确保将
state
变量设置为重新初始化
。这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to handle topologysegment hosts: ipaserver become: true tasks: - name: Reinitialize topology segment ipatopologysegment: ipaadmin_password: Secret123 suffix: domain left: server.idm.example.com right: replica.idm.example.com direction: left-to-right state: reinitialized
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory reinitialize-topologysegment-copy.yml
其它资源
- 如需有关拓扑协议、后缀和片段概念的更多信息,请参阅解释复制协议、拓扑后缀和拓扑分段。
有关使用
ipatopologysegment
模块的更多 Ansible playbook 示例,请参阅:-
/usr/share/doc/ansible
文件。此文件还包含-freeipa/ 目录中的 TheREADME-
topology.mdipatopologysegment
变量的定义。 -
/usr/share/doc/ansible-freeipa/playbooks/topology
目录。
-
14.6. 使用 Ansible 确保 IdM 中没有复制协议
存储在身份管理(IdM)服务器上的数据存储基于复制协议:配置了两个服务器时,它们共享其数据。复制协议始终为现实:数据从第一个副本复制到另一个副本,另一个副本复制到第一个副本。
本节论述了如何确保 IdM 中不存在两个副本之间的复制协议。这个示例描述了如何确保在 replica01.idm.example.com 和 replica02.idm.example.com IdM 服务器之间不存在 域
类型的复制协议。
先决条件
- 确保您了解了设计拓扑中在连接副本中列出的 IdM 拓扑的建议
-
您知道 IdM
管理员
密码。 您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 在 ~/MyPlaybooks/ 目录中,您已创建了带有您要配置这些选项的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
流程
进入您的 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
复制位于
/usr/share/doc/ansible
Ansible playbook 文件:-freeipa/playbooks/topology/ 目录中的 delete-topology
segment.yml$ cp /usr/share/doc/ansible-freeipa/playbooks/topology/delete-topologysegment.yml delete-topologysegment-copy.yml
-
打开
delete-topologysegment-copy.yml
文件进行编辑。 通过在
ipatopologysegment 任务部分
设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdMadmin
的密码。 -
将
suffix
变量设置为domain
。或者,如果您确保ca 数据
不在左侧和右侧节点之间复制,请将 变量设置为ca
。 -
将
左侧
变量设置为 IdM 服务器的名称,该服务器是复制协议的左侧节点。 -
将
right
变量设置为 IdM 服务器的名称,该服务器是复制协议的正确节点。 -
确保
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to handle topologysegment hosts: ipaserver become: true tasks: - name: Delete topology segment ipatopologysegment: ipaadmin_password: Secret123 suffix: domain left: replica01.idm.example.com right: replica02.idm.example.com: state: absent
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory delete-topologysegment-copy.yml
其它资源
- 如需有关拓扑协议、后缀和片段概念的更多信息,请参阅解释复制协议、拓扑后缀和拓扑分段。
有关使用
ipatopologysegment
模块的更多 Ansible playbook 示例,请参阅:-
/usr/share/doc/ansible
文件。此文件还包含-freeipa/ 目录中的 TheREADME-
topology.mdipatopologysegment
变量的定义。 -
/usr/share/doc/ansible-freeipa/playbooks/topology
目录。
-
14.7. 其它资源
- 有关如何规划 IdM 部署拓扑的更多信息,请参阅规划副本拓扑。
- 有关如何安装 IdM 副本的更多信息,请参阅安装 IdM 副本。
第 15 章 使用 Ansible playbook 管理主机
Ansible 是一个自动化工具,用于配置系统、部署软件和执行滚动更新。Ansible 包含对身份管理(IdM)的支持,您可以使用 Ansible 模块自动执行主机管理。
本章介绍了使用 Ansible playbook 管理主机和主机条目时执行的以下概念和操作:
15.1. IdM 中的主机
Identity Management(IdM)管理这些身份:
- 用户
- 服务
- 主机
主机表示计算机。作为 IdM 身份,主机在 IdM LDAP 中有一个条目,即 IdM 服务器的 389 Directory Server 实例。
IdM LDAP 中的主机条目用于在域中的其他主机甚至服务之间建立关系。这些关系是将授权和控制委派给域中的主机的一部分。任何主机都可以 在基于主机的访问控制(
HBAC)规则中使用。
IdM 域在计算机之间建立一个通用性,具有通用身份信息、通用策略和共享服务。属于域的任何计算机充当域的客户端,这意味着它使用域所提供的服务。IdM 域为机器提供三个主要服务:
- DNS
- Kerberos
- 证书管理
IdM 中的主机与在其中运行的服务紧密相连:
- 服务条目与主机关联。
- 主机同时存储主机和服务 Kerberos 主体。
15.2. 主机注册
本节论述了将主机注册为 IdM 客户端以及注册期间和之后发生的情况。部分比较 IdM 主机和 IdM 用户的注册。部分还概述了可供主机使用的其他身份验证类型。
注册主机包括:
-
在 IdM LDAP 中创建主机条目:可以在 IdM CLI
中使用 ipa host-add
命令,或者等同的 IdM Web UI 操作。 - 在主机上配置 IdM 服务,如系统安全服务守护进程(SSSD)、Kerberos 和 certmonger,并将主机加入 IdM 域。
这两个操作可以单独或一起执行。
如果单独执行,它们允许在具有不同特权级别的两个用户之间划分这两个任务。这对批量部署非常有用。
ipa-client-install
命令可以一起执行两个操作。如果该条目尚不存在,该命令会在 IdM LDAP 中创建主机条目,并为主机配置 Kerberos 和 SSSD 服务。命令将主机引入 IdM 域,并允许它识别它将连接的 IdM 服务器。如果主机属于 IdM 管理的 DNS 区域,ipa -client-install
也为主机添加 DNS 记录。命令必须在客户端上运行。
15.2.1. 主机注册所需的用户权限
主机注册操作需要进行身份验证,以防止非特权用户将不需要的计算机添加到 IdM 域。所需的权限取决于几个因素,例如:
-
如果创建主机条目与运行
ipa-client-install
分开 - 如果使用一次性密码(OTP)进行注册
在 IdM LDAP 中手动创建主机条目的用户权限
使用 ipa host-add
CLI 命令或 IdM Web UI 在 IdM LDAP 中创建主机条目所需的用户权限是 Host Administrators
。主机管理员特权
可通过 IT 专家
角色获得。
将客户端加入 IdM 域的用户特权
在执行 ipa-client-install
命令期间,主机被配置为 IdM 客户端。执行 ipa-client-install
命令所需的凭证级别取决于您发现的以下注册场景:
-
IdM LDAP 中的主机条目不存在。在这种情况下,您需要完整的管理员凭据或
主机管理员
角色。完整的管理员是admins
组的成员。Host Administrators
角色提供添加主机和注册主机的特权。有关这种情况的详情,请参阅使用用户凭证安装客户端:交互式安装。 -
IdM LDAP 中的主机条目存在。在这种情况下,您需要有限的管理员凭证才能成功执行
ipa-client-install
。本例中的有限管理员具有注册管理员
角色,该角色提供主机注册特权
。详情请参阅使用用户凭证安装客户端:交互式安装。 -
IdM LDAP 中的主机条目存在,并且由完整或有限的管理员为主机生成了一个 OTP。在这种情况下,如果您使用
--password
选项运行ipa-client-install
命令,并提供正确的 OTP,则可以普通用户安装 IdM 客户端。详情请查看使用一次性密码安装客户端:交互式安装。
注册后,IdM 主机验证每个新会话,以便能访问 IdM 资源。IdM 服务器需要机器身份验证才能信任机器并接受来自该机器上安装的客户端软件的 IdM 连接。验证客户端后,IdM 服务器可以响应其请求。
15.2.2. IdM 主机和用户的注册和身份验证:比较
IdM 中的用户和主机之间存在许多相似性。本节介绍了注册阶段中可以看到的一些相似点,以及部署阶段中涉及身份验证的部分相似点。
注册阶段(表 15.1 “用户和主机注册”):
-
管理员可以在用户或主机实际加入 IdM: 之前为用户和主机创建 LDAP 条目,该命令是
ipa stageuser-add
;对于主机,命令为ipa host-add
。 -
在主机上执行 ipa-client-install 命令期间会创建一个包含 密钥表 或缩写、keytab、对称密钥(重装为一定程度的用户密码)的文件,从而在主机上执行
ipa-client-install
命令时创建该文件,从而让主机加入 IdM 域。类似地,用户在激活其帐户时需要创建密码,从而加入 IdM 域。 - 虽然用户密码是用户的默认身份验证方法,但 keytab 是主机的默认身份验证方法。keytab 存储在主机上的文件中。
表 15.1. 用户和主机注册
操作 用户 主机 预注册
$ IPA stageuser-add user_name [--password]
$ ipa host-add host_name [--random]
激活帐户
$ ipa stageuser-activate user_name
$ ipa-client install [--password] (必须在主机本身上运行)
-
管理员可以在用户或主机实际加入 IdM: 之前为用户和主机创建 LDAP 条目,该命令是
部署阶段(表 15.2 “用户和主机会话身份验证”):
- 当用户启动新会话时,用户使用密码进行身份验证;类似地,每次打开密码时,主机都会通过显示其 keytab 文件进行身份验证。系统安全服务守护进程(SSSD)在后台管理此过程。
- 如果身份验证成功,用户或主机会获得 Kerberos 票据授予票据(TGT)。
- 然后,使用 TGT 获取特定服务的特定票据。
表 15.2. 用户和主机会话身份验证
用户 主机 默认身份验证方式
密码
keytabs
启动会话(普通用户)
$ kinit user_name
[交换机在主机上]
身份验证成功的结果
用于获取特定服务访问权限的 TGT
用于获取特定服务访问权限的 TGT
TGT 和其他 Kerberos 票据作为服务器定义的 Kerberos 服务和策略的一部分生成。IdM 服务会自动授予 Kerberos ticket、更新 Kerberos 凭证甚至销毁 Kerberos 会话。
15.2.3. IdM 主机的替代身份验证选项
除了 keytabs 外,IdM 还支持两种其他类型的机器验证:
- SSH 密钥.主机的 SSH 公钥已创建并上传到主机条目。从那里,系统安全服务守护进程(SSSD)使用 IdM 作为身份提供程序,并可与 OpenSSH 和其他服务一起引用位于 IdM 中的公钥。
- 计算机证书.在这种情况下,计算机使用由 IdM 服务器的证书认证机构签发的 SSL 证书,然后存储在 IdM 的目录服务器中。证书然后发送到计算机,当它向服务器进行身份验证时会存在该证书。在客户端上,证书由名为 certmonger 的服务管理。
15.3. 使用 Ansible playbook 确保存在带有 FQDN 的 IdM 主机条目
本节介绍使用 Ansible playbook 在 Identity Management(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-freeipa 软件包安装在 Ansible 控制器上。
流程
创建一个清单文件,如
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 become: true tasks: - name: Host host01.idm.example.com present ipahost: ipaadmin_password: MySecret123 name: host01.idm.example.com state: present force: yes
运行 playbook:
$ ansible-playbook -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。
15.4. 使用 Ansible playbook 确保存在含有 DNS 信息的 IdM 主机条目
本节介绍使用 Ansible playbook 在 Identity Management(IdM)中存在主机条目。主机条目通过其 完全限定域名
(FQDN)及其 IP 地址定义。
如果没有 Ansible,则使用 ipa host-add
命令在 IdM 中创建主机条目。将主机添加到 IdM 的结果是 IdM 中存在的主机状态。由于 Ansible 依赖于 idempotence,要使用 Ansible 将主机添加到 IdM,您必须创建一个 playbook,将主机的状态定义为 present: state: present。
先决条件
- 您知道 IdM 管理员密码。
- ansible-freeipa 软件包安装在 Ansible 控制器上。
流程
创建一个清单文件,如
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 become: true tasks: - name: Ensure host01.idm.example.com is present ipahost: ipaadmin_password: MySecret123 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 -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。
15.5. 使用 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-freeipa 软件包安装在 Ansible 控制器上。
流程
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
使用您要确保的 IdM 中存在的主机的
完全限定域名
(FQDN)创建一个 Ansible playbook 文件。要使 Ansible playbook 为各个主机生成随机密码,即使 IdM 中已存在主机,并且update_password
仅限于on_create
,请添加random: yes
和force: yes
选项。要简化此步骤,您可以从/usr/share/doc/ansible-freeipa/README-host.md
Markdown 文件中复制并修改示例:--- - name: Ensure hosts with random password hosts: ipaserver become: true tasks: - name: Hosts host01.idm.example.com and host02.idm.example.com present with random passwords ipahost: ipaadmin_password: MySecret123 hosts: - name: host01.idm.example.com random: yes force: yes - name: host02.idm.example.com random: yes force: yes register: ipahost
运行 playbook:
$ ansible-playbook -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"}}}
验证步骤
以 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,并带有随机密码。
15.6. 使用 Ansible playbook 确保存在具有多个 IP 地址的 IdM 主机条目
本节论述了如何使用 Ansible playbook 在 Identity Management(IdM)中存在主机条目。主机条目通过其 完全限定域名
(FQDN)及其多个 IP 地址来定义。
与 ipa 主机
实用程序相比,Ansible ipahost
模块可以确保主机存在或不存在多个 IPv4 和 IPv6 地址。ipa host-mod
命令无法处理 IP 地址。
先决条件
- 您知道 IdM 管理员密码。
- ansible-freeipa 软件包安装在 Ansible 控制器上。
流程
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
创建 Ansible playbook 文件。将主机的
完全限定域名(FQDN)指定为
,用于确保主机的 IdM 中存在。使用 -ipa
host
变量的名称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 become: true tasks: - name: Ensure host101.example.com IP addresses present ipahost: ipaadmin_password: MySecret123 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: yes
运行 playbook:
$ ansible-playbook -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 主机条目正确关联。
15.7. 使用 Ansible playbook 确保没有 IdM 主机条目
本节论述了如何使用 Ansible playbook 确保 Identity Management(IdM)中没有主机条目。
先决条件
- IdM 管理员凭证
流程
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
创建 Ansible playbook 文件,使其包含主机的
完全限定域名
(FQDN),但不来自 IdM。如果您的 IdM 域集成了 DNS,请使用updatedns: yes
选项从 DNS 中删除主机任意类型的关联记录。要简化此步骤,您可以复制并修改
/usr/share/doc/ansible-freeipa/playbooks/host/delete-host.yml
文件中的示例:--- - name: Host absent hosts: ipaserver become: true tasks: - name: Host host01.idm.example.com absent ipahost: ipaadmin_password: MySecret123 name: host01.idm.example.com updatedns: yes state: absent
运行 playbook:
$ ansible-playbook -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 中不存在该主机。
其它资源
-
您可以查看 ipahost 变量的定义,以及示例 Ansible playbook,以确保
/usr/share/doc/ansible-freeipa/README-host.md
Markdown 文件中存在、不存在和禁用主机。 -
其他 playbook 位于
/usr/share/doc/ansible-freeipa/playbooks/host
目录中。
第 16 章 使用 Ansible playbook 管理主机组
本章在身份管理(IdM)中介绍主机组,并描述使用 Ansible 执行与身份管理中的主机组(IdM)相关的以下操作:
16.1. IdM 中的主机组
IdM 主机组可用于集中控制重要管理任务,特别是访问控制。
主机组的定义
主机组是包含一组具有通用访问控制规则和其他特征的 IdM 主机的实体。例如,您可以根据公司部门、物理位置或访问控制要求来定义主机组。
IdM 中的主机组可以包括:
- IdM 服务器和客户端
- 其他 IdM 主机组
默认创建的主机组
默认情况下,IdM 服务器为所有 IdM 服务器主机创建主机组 ipaservers
。
直接和间接组成员
IdM 中的组属性同时适用于直接和间接成员:当主机组 B 是主机组 A 的成员时,主机组 B 的所有成员都被视为主机组 A 的间接成员。
16.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-freeipa 软件包。
流程
创建一个清单文件,如
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 become: true tasks: # Ensure host-group databases is present - ipahostgroup: ipaadmin_password: MySecret123 name: databases state: present
在 playbook 中,state: present 表示将主机组添加到 IdM 的请求,除非该主机组在那里已存在。
运行 playbook:
$ ansible-playbook -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 主机组。
16.3. 确保使用 Ansible playbook 在 IdM 主机组中存在主机
本节介绍如何使用 Ansible playbook 在身份管理(IdM)中确保主机组中存在主机。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
- IdM 中已存在您要引用的主机。详情请参阅使用 Ansible playbook 确保存在 IdM 主机条目。
- 您从 Ansible playbook 文件中引用的主机组已添加到 IdM 中。详情请参阅确保使用 Ansible playbook 确保 IdM 主机组存在。
流程
创建一个清单文件,如
inventory.file
,并使用目标 IdM 服务器列表定义ipaserver
:[ipaserver] server.idm.example.com
使用必要的主机信息,创建 Ansible playbook 文件。使用
ipahostgroup
变量的name
参数,指定主机组的名称。使用ipahostgroup
变量的主机
参数指定主机名称。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/hostgroup/ensure-hosts-and-hostgroups-are-present-in-hostgroup.yml
文件中的示例:--- - name: Playbook to handle hostgroups hosts: ipaserver become: true tasks: # Ensure host-group databases is present - ipahostgroup: ipaadmin_password: MySecret123 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 -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 主机组的成员。
16.4. 使用 Ansible playbook 嵌套 IdM 主机组
本节介绍使用 Ansible playbook 在身份管理(IdM)主机组中存在嵌套的主机组。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
- IdM 中已存在您从 Ansible playbook 文件中引用的主机组。详情请参阅确保使用 Ansible playbook 确保 IdM 主机组存在。
流程
创建一个清单文件,如
inventory.file
,并使用目标 IdM 服务器列表定义ipaserver
:[ipaserver] server.idm.example.com
使用必要的主机组信息,创建 Ansible playbook 文件。为确保嵌套的主机组 A 存在于 Ansible playbook 中的主机组 B: 中,请使用 name 变量在
- ipahostgroup
变量中指定主机组 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 become: true tasks: # Ensure hosts and hostgroups are present in existing databases hostgroup - ipahostgroup: ipaadmin_password: MySecret123 name: databases hostgroup: - mysql-server - oracle-server action: member
此 Ansible playbook 确保 databases 主机组中存在 myqsl-server 和 oracle-server 主机组。
action: member
行表示在 playbook 运行时,不会尝试将 databases 组本身添加到 IdM。运行 playbook:
$ ansible-playbook -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 主机组中。
16.5. 使用 Ansible Playbook 在 IDM 主机组中存在成员管理器
以下流程描述了确保使用 Ansible playbook 在 IdM 主机和主机组中存在成员管理器。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
- 您必须具有要添加为成员管理器的主机或主机组的名称,以及您要管理的主机组的名称。
流程
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
使用必要的主机和主机组成员管理信息创建一个 Ansible playbook 文件:
--- - name: Playbook to handle host group membership management hosts: ipaserver become: true tasks: - name: Ensure member manager user example_member is present for group_name ipahostgroup: ipaadmin_password: MySecret123 name: group_name membermanager_user: example_member - name: Ensure member manager group project_admins is present for group_name ipahostgroup: ipaadmin_password: MySecret123 name: group_name membermanager_group: project_admins
运行 playbook:
$ ansible-playbook -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
man page。
16.6. 使用 Ansible playbook 确保 IdM 主机组中没有主机
本节介绍如何使用 Ansible playbook 确保 Identity Management(IdM)中主机组中不存在主机。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
- IdM 中已存在您要引用的主机。详情请参阅使用 Ansible playbook 确保存在 IdM 主机条目。
- IdM 中已存在您从 Ansible playbook 文件中引用的主机组。详情请参阅确保使用 Ansible playbook 确保 IdM 主机组存在。
流程
创建一个清单文件,如
inventory.file
,并使用目标 IdM 服务器列表定义ipaserver
:[ipaserver] server.idm.example.com
创建含有必要的主机和主机组信息的 Ansible playbook 文件。使用
ipahostgroup
变量的name
参数,指定主机组的名称。指定不使用您要确保使用ipahostgroup
变量的主机参数的主机
名称。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/hostgroup/ensure-hosts-and-hostgroups-are-absent-in-hostgroup.yml
文件中的示例:--- - name: Playbook to handle hostgroups hosts: ipaserver become: true tasks: # Ensure host-group databases is absent - ipahostgroup: ipaadmin_password: MySecret123 name: databases host: - db.idm.example.com action: member state: absent
此 playbook 确保缺少来自 databases 主机组的 db.idm.example.com 主机。action: member 行表示在 playbook 运行时,不会尝试删除 databases 组本身。
运行 playbook:
$ ansible-playbook -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
数据库主机组中不存在 db.idm.example.com 主机。
16.7. 使用 Ansible playbook 确保 IdM 主机组没有嵌套的主机组
本节介绍如何使用 Ansible playbook 在 Identity Management(IdM)中确保外部主机组中不存在嵌套的主机组。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
- 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 become: true tasks: # Ensure hosts and hostgroups are absent in existing databases hostgroup - ipahostgroup: ipaadmin_password: MySecret123 name: databases hostgroup: - mysql-server - oracle-server action: member state: absent
此 playbook 确保 databases 主机组中没有 mysql-server 和 oracle-server 主机组。
action: member
行表示在 playbook 运行时,不会尝试确保从 IdM 中删除 databases 组本身。运行 playbook:
$ ansible-playbook -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 嵌套式主机组。
16.8. 使用 Ansible playbook 确保没有 IdM 主机组
本节介绍如何使用 Ansible playbook 在 Identity Management(IdM)中存在主机组。
如果没有 Ansible,则使用 ipa hostgroup-del
命令从 IdM 中删除主机组条目。从 IdM 中删除主机组的结果是 IdM 中缺少主机组的状态。由于 Ansible 依赖于 idempotence,若要使用 Ansible 从 IdM 中删除主机组,您必须创建一个 playbook,它将主机组的状态定义为 absent: state: absent。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
流程
创建一个清单文件,如
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 become: true tasks: - Ensure host-group databases is absent ipahostgroup: ipaadmin_password: MySecret123 name: databases state: absent
此 playbook 确保 IdM 中缺少 databases 主机组。
state: absent
表示从 IdM 中删除主机组的请求,除非它已被删除。运行 playbook:
$ ansible-playbook -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 主机组。
16.9. 使用 Ansible playbook 确保 IdM 主机组中没有成员管理器
以下流程描述了确保使用 Ansible playbook 在 IdM 主机和主机组中存在成员管理器。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
- 您必须具有要作为成员管理器删除的用户或用户组的名称,以及它们所管理的主机组的名称。
流程
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
使用必要的主机和主机组成员管理信息创建一个 Ansible playbook 文件:
--- - name: Playbook to handle host group membership management hosts: ipaserver become: true tasks: - name: Ensure member manager host and host group members are absent for group_name ipahostgroup: ipaadmin_password: MySecret123 name: group_name membermanager_user: example_member membermanager_group: project_admins action: member state: absent
运行 playbook:
$ ansible-playbook -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
man page。
第 17 章 定义 IdM 密码策略
本章论述了 Identity Management(IdM)密码策略,以及如何使用 Ansible playbook 在 IdM 中添加新的密码策略。
17.1. 什么是密码策略
密码策略是密码必须满足的一组规则。例如,password 策略可以定义最小密码长度和最大密码生命周期。受此策略影响的所有用户都必须设置足够长的密码,并经常更改密码以满足指定条件。这样,密码策略有助于降低某人发现和滥用用户密码的风险。
17.2. IdM 中的密码策略
密码是 Identity Management(IdM)用户对 IdM Kerberos 域进行身份验证的最常用方式。密码策略定义了这些 IdM 用户密码必须满足的要求。
IdM 密码策略在底层 LDAP 目录中设置,但 Kerberos 密钥分发中心(KDC)强制执行密码策略。
密码策略属性列出了您可以在 IdM 中定义密码策略的属性。
表 17.1. 密码策略属性
属性 | 解释 | 示例 |
---|---|---|
最大生命周期 | 密码在必须重置密码之前有效的最长时间(以天为单位)。 | 最大生命周期 = 90 用户密码仅有效 90 天。之后,IdM 会提示用户更改它们。 |
Min 生命周期 | 两个密码更改操作之间必须经过的最短时间(以小时为单位)。 | Min Life = 1 用户更改密码后,他们必须至少等待 1 小时后再重新更改密码。 |
历史记录大小 | 存储的之前密码的数量。用户无法重复使用其密码历史记录中的密码,但可以重复利用未存储的旧密码。 | 历史记录大小 = 0 在这种情况下,密码历史记录为空,用户可以重复使用他们之前的任何密码。 |
字符类 | 用户必须在密码中使用的不同字符类别的数量。字符类为: * 大写字符 * 小写字符 * 数字 * 特殊字符,如逗号(,)、句点(.)、星号(*) * 其他 UTF-8 字符 当一个字符连续使用三次或更多次时,会将该字符类减一。例如:
*
* | 字符类 = 0
需要的默认类数为 0。要配置数字,请使用 另请参阅下表中的 重要 备注。 |
Min length | 密码中的最少字符数. 如果设置了任何其他密码策略选项,则无论设置 Min length 选项的值是什么,密码的最小长度为 6。 | Min length = 8 用户不能使用少于 8 个字符的密码。 |
最大故障数 | IdM 锁定用户帐户前尝试的最大失败登录次数。 | 最大失败数 = 6 当用户在一行中输入错误的密码时,IdM 会锁定用户帐户。 |
失败重置间隔 | IdM 重置当前失败登录尝试次数后的时间(以秒为单位)。 | 失败重置间隔 = 60
如果用户在 |
锁定持续时间 |
在 | 锁定持续时间 = 600 锁定帐户的用户在 10 分钟内无法登录。 |
如果您有一组不同的硬件不能访问国际字符和符号,则字符类要求应使用英语字母和常用符号。有关密码中字符类策略的更多信息,请参阅红帽知识库中的密码中哪些字符有效?
17.3. 使用 Ansible playbook 在 IdM 中存在密码策略
本节介绍如何使用 Ansible playbook 在 Identity Management(IdM)中确保存在密码策略。
在 IdM 中的默认 global_policy
密码策略中,密码中不同字符类的数量设置为 0。历史记录大小也设置为 0。
完成此步骤,以使用 Ansible playbook 为 IdM 组强制执行更强大的密码策略。
您只能为 IdM 组定义密码策略。您无法为单个用户定义密码策略。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
- 您知道 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 become: true tasks: - name: Ensure presence of pwpolicy for group ops ipapwpolicy: ipaadmin_password: MySecret123 name: ops minlife: 7 maxlife: 49 history: 5 priority: 1 lockouttime: 300 minlength: 8 minclasses: 4 maxfail: 3 failinterval: 5
运行 playbook:
$ ansible-playbook -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 充当回退策略,并且永远不会优先于组策略。
其它资源
-
有关使用 Ansible 在 IdM 中和 playbook 变量中定义密码策略的更多详细信息,请参阅
/usr/share/doc/ansible-freeipa/ 目录中的 README-
pwpolicy.md Markdown 文件。 - 有关 IdM 中密码策略优先级如何工作的更多详细信息,请参阅 RHEL 7 文档中的密码策略优先级。
17.4. IdM 中的附加密码策略选项
作为身份管理(IdM)管理员,您可以通过启用基于 libpwquality
功能集的额外密码策略选项来增强默认密码要求。额外的密码策略选项包括:
--maxrepeat
选项- 指定新密码中相同连续字符的最大可接受数。
maxsequence
选项- 指定新密码中单例字符序列的最大长度。此类序列的示例为 12345 或 fedcb。大多数此类密码都不会通过简单检查。唯一的例外是序列只是密码的次要部分。
--dictcheck
选项-
如果非零,则检查密码是否与字典中的词语匹配(如果可能修改)。目前,lib
pwquality
使用cracklib
库执行字典检查。 usercheck
选项- 如果非零,请检查密码是否以某种形式包含用户名,并可能进行修改。它不适用于少于 3 个字符的用户名。
您不能将额外的密码策略选项应用到现有密码。如果您应用了任何附加选项,IdM 会自动将 --minlength
选项(密码中的最少字符数)设置为 6 个字符。
在使用 RHEL 7 和 RHEL 8 服务器的混合环境中,您只能在在 RHEL 8.4 及更新版本上运行的服务器中强制实施额外的密码策略设置。
其他资源:
- 将额外密码策略应用到 IdM 组
-
pwquality(3)
man page
17.5. 将其他密码策略选项应用到 IdM 组
本节论述了如何在 Identity Management(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 组合是不可接受的,因为它包含三个 1s。
验证
添加名为 test_user 的测试用户 :
$ ipa user-add test_user First name: test Last name: user ---------------------------- Added user "test_user" ----------------------------
将 test 用户添加到 managers 组:
- 在 IdM Web UI Identity → Groups → User Groups。
- 单击 managers。
-
单击
Add
。 - 在 Add users to user group 'managers' 页面中,检查 test_user。
-
点击
>
箭头将用户移到 Prospective
列中。 -
单击
Add
。
重置测试用户的密码:
- 前往身份 用户.
- 单击 test_user。
-
在
Actions
菜单中,单击Reset Password
。 - 输入用户的临时密码。
在命令行中,尝试为 test_user 获取 Kerberos 票据授予票据(TGT):
$ kinit test_user
- 输入临时密码。
系统会通知您必须更改密码。输入包含用户名 test_user 的密码:
Password expired. You must change it now. Enter new password: Enter it again:
注意Kerberos 没有精细的错误密码策略报告,在某些情况下,没有提供拒绝密码的明确原因。
系统通知您输入的密码被拒绝。连续输入包含三个或多个相同字符的密码:
Password change rejected: Password not changed. Unspecified password quality failure while trying to change password. Please try again. Enter new password: Enter it again:
系统通知您输入的密码被拒绝。输入满足 managers 密码策略条件的密码:
Password change rejected: Password not changed. Unspecified password quality failure while trying to change password. Please try again. Enter new password: Enter it again:
查看获取的 TGT:
$ klist Ticket cache: KCM:0:33945 Default principal: test_user@IDM.EXAMPLE.COM Valid starting Expires Service principal 07/07/2021 12:44:44 07/08/2021 12:44:44 krbtgt@IDM.EXAMPLE.COM@IDM.EXAMPLE.COM
managers 密码策略现在可以为 managers 组中的用户正常工作。
其它资源
第 18 章 为 IdM 客户端上的 IdM 用户授予 sudo 访问权限
18.1. IdM 客户端上的 sudo 访问权限
系统管理员可以授予 sudo
访问权限,以允许非 root 用户执行通常为 root
用户保留的管理命令。因此,当用户需要执行通常为 root
用户保留的管理命令时,他们会在此命令前面使用 sudo
。输入密码后,将像 root
用户一样执行 命令。要将 sudo
命令作为另一个用户或组(如数据库服务帐户)执行,您可以为 sudo
规则配置 RunAs 别名。
如果 Red Hat Enterprise Linux(RHEL)8 主机注册为 Identity Management(IdM)客户端,您可以指定 sudo
规则来定义哪些 IdM 用户可以在主机上执行哪些命令:
-
本地的
/etc/sudoers
文件中 - 集中在 IdM 中
本节论述了使用命令行界面(CLI)和 IdM Web UI 为 IdM 客户端创建 中央 sudo
规则。
在 RHEL 8.4 及更高版本中,您还可以使用通用安全服务应用程序编程接口(GSSAPI)为 sudo
配置免密码身份验证,这是基于 UNIX 的操作系统访问和验证 Kerberos 服务的本地方式。您可以使用 pam_sss_gss.so
可插拔验证模块(PAM)通过 SSSD 服务调用 GSSAPI 身份验证,允许用户通过有效的 Kerberos 票据向 sudo
命令进行身份验证。
其它资源
-
有关在 RHEL 8 主机上创建本地
sudo
规则的详情,请参阅管理 sudo 访问。
18.2. 使用 CLI 向 IdM 客户端上的 IdM 用户授予 sudo 访问权限
在 Identity Management(IdM)中,您可以将特定命令的 sudo
访问权限授予特定 IdM 主机上的 IdM 用户帐户。首先,添加 sudo
命令,然后为一个或多个命令创建 sudo
规则。
例如,完成这个过程以创建 idm_user_reboot
sudo
规则,为 idm_user
帐户授予在 idmclient
机器上运行 /usr/sbin/reboot
命令的权限。
先决条件
- 以 IdM 管理员身份登录。
-
您已在 IdM 中创建
了 idm_user
的用户帐户,并通过为用户创建密码来解锁帐户。有关使用 CLI 添加新 IdM 用户的详情,请参阅使用命令行添加用户。 -
idm
帐户。client 主机上不存在本地 idm
_useridm_user
用户未列在本地/etc/passwd
文件中。
流程
检索作为 IdM
管理员
的 Kerberos 票据。[root@idmclient ~]# kinit admin
在
sudo
命令的 IdM 数据库中添加/usr/sbin/reboot
命令:[root@idmclient ~]# ipa sudocmd-add /usr/sbin/reboot ------------------------------------- Added Sudo Command "/usr/sbin/reboot" ------------------------------------- Sudo Command: /usr/sbin/reboot
创建名为
idm_user_reboot
的sudo
规则:[root@idmclient ~]# ipa sudorule-add idm_user_reboot --------------------------------- Added Sudo Rule "idm_user_reboot" --------------------------------- Rule name: idm_user_reboot Enabled: TRUE
在
idm_user_
命令:reboot 规则中添加 /usr/sbin/
reboot[root@idmclient ~]# ipa sudorule-add-allow-command idm_user_reboot --sudocmds '/usr/sbin/reboot' Rule name: idm_user_reboot Enabled: TRUE Sudo Allow Commands: /usr/sbin/reboot ------------------------- Number of members added 1 -------------------------
将
idm_user_reboot
规则应用到 IdMidmclient
主机:[root@idmclient ~]# ipa sudorule-add-host idm_user_reboot --hosts idmclient.idm.example.com Rule name: idm_user_reboot Enabled: TRUE Hosts: idmclient.idm.example.com Sudo Allow Commands: /usr/sbin/reboot ------------------------- Number of members added 1 -------------------------
在
idm_user_
reboot 规则中添加 idm_user
帐户:[root@idmclient ~]# ipa sudorule-add-user idm_user_reboot --users idm_user Rule name: idm_user_reboot Enabled: TRUE Users: idm_user Hosts: idmclient.idm.example.com Sudo Allow Commands: /usr/sbin/reboot ------------------------- Number of members added 1 -------------------------
将更改从服务器传播到客户端可能需要几分钟时间。
验证步骤
-
以
idm
主机。_user 帐户身份登录 idm
client 显示允许
idm_user
帐户执行的sudo
规则。[idm_user@idmclient ~]$ sudo -l Matching Defaults entries for idm_user on idmclient: !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY KRB5CCNAME", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin User idm_user may run the following commands on idmclient: (root) /usr/sbin/reboot
使用
sudo
重新启动计算机。在提示时输入idm_user
的密码:[idm_user@idmclient ~]$ sudo /usr/sbin/reboot [sudo] password for idm_user:
18.3. 使用 IdM Web UI 向 IdM 客户端上的 IdM 用户授予 sudo 访问权限
在 Identity Management(IdM)中,您可以将特定命令的 sudo
访问权限授予特定 IdM 主机上的 IdM 用户帐户。首先,添加 sudo
命令,然后为一个或多个命令创建 sudo
规则。
完成此步骤以创建 idm_user_reboot
sudo 规则,为 idm_user
帐户授予在 idmclient
计算机上运行 /usr/sbin/reboot
命令的权限。
先决条件
- 以 IdM 管理员身份登录。
-
您已在 IdM 中创建
了 idm_user
的用户帐户,并通过为用户创建密码来解锁帐户。有关使用命令行界面添加新 IdM 用户的详情,请参阅使用命令行添加用户。 -
idm
帐户。client 主机上不存在本地 idm
_useridm_user
用户未列在本地/etc/passwd
文件中。
流程
在
sudo
命令的 IdM 数据库中添加/usr/sbin/reboot
命令:- 导航到 Policy → Sudo → Sudo Commands。
- 单击右上角的 Add,以打开 Add sudo 命令对话框。
输入您希望用户能够使用
sudo
执行的命令:/usr/sbin/reboot
。图 18.1. 添加 IdM sudo 命令
- 点添加。
使用新的
sudo
命令条目创建一个 sudo 规则来允许 idm_user 重启 idmclient 机器:- 导航到 Policy → Sudo → Sudo rules。
- 单击右上角的 Add,以打开 Add sudo 规则对话框。
-
输入
sudo
规则的名称: idm_user_reboot。 - 点 Add and Edit。
指定用户:
- 在 Who 部分中,选中指定的用户和组单选按钮。
- 在用户类别中,单击该规则应用到子部分,单击 Add user to sudo rule "idm_user_reboot" 对话框。
- 在 Add users to sudo rule "idm_user_reboot" 对话框中,选中 idm_user 复选框,并将它移到 Prospective 列。
- 点添加。
指定主机:
- 在 Access this host 部分中,选中指定的 Hosts and Groups 单选按钮。
- 在 Host 类别中,此规则应用到子 部分,单击 Add hosts to sudo rule "idm_user_reboot" 对话框。
- 在 Available 列中的 Add hosts to sudo rule "idm_user_reboot" 对话框中,选中 idmclient.idm.example.com 复选框,并将它移到 Prospective 列。
- 点添加。
指定命令:
- 在命令类别中,该规则应用到 Run Commands 部分的子部分 ,检查指定的命令和组单选按钮。
- 在 Sudo Allow Commands 子章节中,单击 Add 以打开 Add allow sudo 命令进入 sudo 规则"idm_user_reboot"对话框。
-
在 Add allow sudo 命令的 sudo 规则"idm_user_reboot" 对话框中 , 选中
/usr/sbin/reboot
复选框,并将它移到 Prospect ive 列。 - 单击 Add 以返回到 idm_sudo_reboot 页面。
添加 IdM sudo 规则
+ image::IdM-sudo-rule-WebUI.png[一个添加的 sudo 规则概述的屏幕截图。有一个"Who"部分,其中包含适用于该规则的用户表。有一个"访问此主机"部分,其中包含该规则应用到的主机表。有一个"运行命令"部分,其中包含与规则相关的命令表。]
- 单击左上角的 Save。
新规则默认为启用。
将更改从服务器传播到客户端可能需要几分钟时间。
验证步骤
-
以
idm_user 用户身份登录 idmclient
使用
sudo
重新启动计算机。在提示时输入idm_user
的密码:$ sudo /usr/sbin/reboot [sudo] password for idm_user:
如果正确配置了 sudo
规则,机器将重启。
18.4. 在 CLI 上创建 sudo 规则,以作为 IdM 客户端上的服务帐户运行命令
在 IdM 中,您可以使用 RunAs 别名 配置 sudo
规则,以便以另一个用户或组身份运行 sudo
命令。例如,您可能有一个托管数据库应用的 IdM 客户端,您需要以与该应用对应的本地服务帐户运行命令。
使用这个示例在命令行上创建一个名为 run_third-parent-app_report
的 sudo
规则,以允许 idm_user
帐户作为 idmclient
主机上 的第三方app 服务帐户运行 /opt/third-
命令。
party-app
/bin/report
先决条件
- 以 IdM 管理员身份登录。
-
您已在 IdM 中创建
了 idm_user
的用户帐户,并通过为用户创建密码来解锁帐户。有关使用 CLI 添加新 IdM 用户的详情,请参阅使用命令行添加用户。 -
idm
帐户。client 主机上不存在本地 idm
_useridm_user
用户未列在本地/etc/passwd
文件中。 -
您已在
idmclient
主机上安装了名为第三方-app
的自定义应用程序。 -
用于
第三方应用程序
的报告
命令安装在/opt/third- party-app/bin/report
目录中。 -
您已创建了名为
thirdrdapp
的本地服务帐户,用于为第三方应用
执行命令。
流程
检索作为 IdM
管理员
的 Kerberos 票据。[root@idmclient ~]# kinit admin
将
/opt/第三方-app/bin/report
命令添加到sudo
命令的 IdM 数据库:[root@idmclient ~]# ipa sudocmd-add /opt/third-party-app/bin/report ---------------------------------------------------- Added Sudo Command "/opt/third-party-app/bin/report" ---------------------------------------------------- Sudo Command: /opt/third-party-app/bin/report
创建名为
run_third-party-app_report
的sudo
规则:[root@idmclient ~]# ipa sudorule-add run_third-party-app_report -------------------------------------------- Added Sudo Rule "run_third-party-app_report" -------------------------------------------- Rule name: run_third-party-app_report Enabled: TRUE
使用
--users=<user>
选项为sudorule-add-runasuser
命令指定 RunAs 用户:[root@idmclient ~]# ipa sudorule-add-runasuser run_third-party-app_report --users=thirdpartyapp Rule name: run_third-party-app_report Enabled: TRUE RunAs External User: thirdpartyapp ------------------------- Number of members added 1 -------------------------
使用
--groups=*
选项指定的用户(或组)可以来自 IdM 的外部,如本地服务帐户或 Active Directory 用户。不要为组名称添加%
前缀。将
/opt/第三方-app/bin/report
命令添加到idm_user_reboot
规则中:[root@idmclient ~]# ipa sudorule-add-allow-command run_third-party-app_report --sudocmds '/opt/third-party-app/bin/report' Rule name: run_third-party-app_report Enabled: TRUE Sudo Allow Commands: /opt/third-party-app/bin/report RunAs External User: thirdpartyapp ------------------------- Number of members added 1 -------------------------
将
run_third- party-app_report
规则应用到 IdMidmclient
主机:[root@idmclient ~]# ipa sudorule-add-host run_third-party-app_report --hosts idmclient.idm.example.com Rule name: run_third-party-app_report Enabled: TRUE Hosts: idmclient.idm.example.com Sudo Allow Commands: /opt/third-party-app/bin/report RunAs External User: thirdpartyapp ------------------------- Number of members added 1 -------------------------
将
idm_user
帐户添加到run_third- party-app_report
规则中:[root@idmclient ~]# ipa sudorule-add-user run_third-party-app_report --users idm_user Rule name: run_third-party-app_report Enabled: TRUE Users: idm_user Hosts: idmclient.idm.example.com Sudo Allow Commands: /opt/third-party-app/bin/report RunAs External User: thirdpartyapp ------------------------- Number of members added 1
将更改从服务器传播到客户端可能需要几分钟时间。
验证步骤
-
以
idm
主机。_user 帐户身份登录 idm
client 测试新的 sudo 规则:
显示允许
idm_user
帐户执行的sudo
规则。[idm_user@idmclient ~]$ sudo -l Matching Defaults entries for idm_user@idm.example.com on idmclient: !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY KRB5CCNAME", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin User idm_user@idm.example.com may run the following commands on idmclient: (thirdpartyapp) /opt/third-party-app/bin/report
作为
第三方app
服务帐户,运行report
命令。[idm_user@idmclient ~]$ sudo -u thirdpartyapp /opt/third-party-app/bin/report [sudo] password for idm_user@idm.example.com: Executing report... Report successful.
18.5. 在 IdM WebUI 中创建 sudo 规则,该规则作为 IdM 客户端上的服务帐户运行
在 IdM 中,您可以使用 RunAs 别名 配置 sudo
规则,以便以另一个用户或组身份运行 sudo
命令。例如,您可能有一个托管数据库应用的 IdM 客户端,您需要以与该应用对应的本地服务帐户运行命令。
使用这个示例在 IdM WebUI 中创建一个名为 run_third- party-app_report
的 sudo
规则,以允许 idm_user
帐户作为 idmclient
主机上 的第三方app 服务帐户运行 /opt/third-third
命令。
-app
/bin/report
先决条件
- 以 IdM 管理员身份登录。
-
您已在 IdM 中创建
了 idm_user
的用户帐户,并通过为用户创建密码来解锁帐户。有关使用 CLI 添加新 IdM 用户的详情,请参阅使用命令行添加用户。 -
idm
帐户。client 主机上不存在本地 idm
_useridm_user
用户未列在本地/etc/passwd
文件中。 -
您已在
idmclient
主机上安装了名为第三方-app
的自定义应用程序。 -
用于
第三方应用程序
的报告
命令安装在/opt/third- party-app/bin/report
目录中。 -
您已创建了名为
thirdrdapp
的本地服务帐户,用于为第三方应用
执行命令。
流程
将
/opt/第三方-app/bin/report
命令添加到sudo
命令的 IdM 数据库:- 导航到 Policy → Sudo → Sudo Commands。
- 单击右上角的 Add,以打开 Add sudo 命令对话框。
输入命令:
/opt/第三方-app/bin/report
.- 点添加。
使用新的
sudo
命令条目创建新的sudo
规则:- 导航到 Policy → Sudo → Sudo rules。
- 单击右上角的 Add,以打开 Add sudo 规则对话框。
输入
sudo
规则的名称:run _third- party-app_report。- 点 Add and Edit。
指定用户:
- 在 Who 部分中,选中指定的用户和组单选按钮。
- 在 User 类别中,该规则应用到子部分,单击 Add to open the sudo rule "run_third-party-app_report" 对话框。
在 Add users to sudo rule "run_third- party-app_report" 对话框中,选中 idm_user 复选框,并将它移到 Prospect ive 列。
- 点添加。
指定主机:
- 在 Access this host 部分中,选中指定的 Hosts and Groups 单选按钮。
- 在 Host 类别中,此规则应用到 子 部分,单击 Add hosts to sudo rule "run_third- party-app_report" 对话框。
在 Add hosts to sudo rule "run_third- party-app_report" 对话框中,选中 idmclient.idm.example.com 复选框,并将它移到 Prospect ive 列。
- 点添加。
指定命令:
- 在命令类别中,该规则应用到 Run Commands 部分的子部分 ,检查指定的命令和组单选按钮。
- 在 Sudo Allow Commands 子章节中,单击 Add 以打开 Add allow sudo 命令进入 sudo 规则"run_third- party-app_report" 对话框。
在 Add allow sudo 命令的 sudo 规则 "run_third- party-app_report" 对话框中,选中
/opt/third-party-app/bin/report
复选框,并将它移到 Prospect ive 列。- 单击 Add 以 返回到 run_third-party-app_report 页面。
指定 RunAs 用户:
- 在 As Whom 部分中,选中 指定的用户和组 单选按钮。
- 在 RunAs Users 子部分中,单击 Add 以将 Add RunAs 用户打开 sudo 规则 "run_third-party-app_report" 对话框。
在 Add RunAs users in sudo rule "run_third- party-app_report" 对话框中,在 External 框中输入
第三方app
服务帐户并将它移到 Prospect ive 列中。- 单击 Add 以 返回到 run_third-party-app_report 页面。
- 单击左上角的 Save。
新规则默认为启用。
图 18.2. sudo 规则的详细信息

将更改从服务器传播到客户端可能需要几分钟时间。
验证步骤
-
以
idm
主机。_user 帐户身份登录 idm
client 测试新的 sudo 规则:
显示允许
idm_user
帐户执行的sudo
规则。[idm_user@idmclient ~]$ sudo -l Matching Defaults entries for idm_user@idm.example.com on idmclient: !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY KRB5CCNAME", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin User idm_user@idm.example.com may run the following commands on idmclient: (thirdpartyapp) /opt/third-party-app/bin/report
作为
第三方app
服务帐户,运行report
命令。[idm_user@idmclient ~]$ sudo -u thirdpartyapp /opt/third-party-app/bin/report [sudo] password for idm_user@idm.example.com: Executing report... Report successful.
18.6. 在 IdM 客户端中为 sudo 启用 GSSAPI 身份验证
以下流程描述了通过 pam_sss_gss.so
PAM 模块在 IdM 客户端中为 sudo
和 sudo -i
命令启用 GSSAPI 身份验证。此配置允许 IdM 用户通过其 Kerberos 票据向 sudo
命令进行身份验证。
先决条件
-
您已为应用于 IdM 主机的 IdM 用户创建了
sudo
规则。在本例中,您已创建了idm_user_reboot
sudo
规则,为idm_user
帐户授予在idmclient
主机上运行/usr/sbin/reboot
命令的权限。 -
idmclient
主机正在运行 RHEL 8.4 或更高版本。 -
您需要
root
权限来修改/etc/sssd/sssd.conf
文件和/etc/pam.d/
目录中的 PAM 文件。
流程
-
打开
/etc/sssd/sssd.conf
配置文件: 在
[domain/<domain_name> ]部分
中添加以下条目。[domain/<domain_name>] pam_gssapi_services = sudo, sudo-i
-
保存并关闭
/etc/sssd/sssd.conf
文件。 重启 SSSD 服务以载入配置更改。
[root@idmclient ~]# systemctl restart sssd
-
打开
/etc/pam.d/sudo
PAM 配置文件。 添加下列条目,作为
/etc/pam.d/sudo
文件中的auth
部分的第一行。#%PAM-1.0 auth sufficient pam_sss_gss.so auth include system-auth account include system-auth password include system-auth session include system-auth
-
保存并关闭
/etc/pam.d/sudo
文件。 -
打开
/etc/pam.d/sudo-i
PAM 配置文件。 添加下列条目,作为
/etc/pam.d/sudo-i
文件中的auth
部分的第一行。#%PAM-1.0 auth sufficient pam_sss_gss.so auth include sudo account include sudo password include sudo session optional pam_keyinit.so force revoke session include sudo
-
保存并关闭
/etc/pam.d/sudo-i
文件。
验证步骤
以
idm_user
帐户身份登录主机。[root@idm-client ~]# ssh -l idm_user@idm.example.com localhost idm_user@idm.example.com's password:
验证您有一个 ticket-granting ticket 作为
idm_user
帐户。[idmuser@idmclient ~]$ klist Ticket cache: KCM:1366201107 Default principal: idm_user@IDM.EXAMPLE.COM Valid starting Expires Service principal 01/08/2021 09:11:48 01/08/2021 19:11:48 krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM renew until 01/15/2021 09:11:44
(可选) 如果您没有
idm_user
帐户的 Kerberos 凭证,请销毁您当前的 Kerberos 凭证并请求正确的凭证。[idm_user@idmclient ~]$ kdestroy -A [idm_user@idmclient ~]$ kinit idm_user@IDM.EXAMPLE.COM Password for idm_user@idm.example.com:
使用
sudo
重新启动计算机,而不指定密码。[idm_user@idmclient ~]$ sudo /usr/sbin/reboot
其它资源
- 使用 IdM Web UI 向 IdM 客户端上的 IdM 用户授予 sudo 访问权限
- 使用 CLI 向 IdM 客户端上的 IdM 用户授予 sudo 访问权限。
-
pam_sss_gss(8)
man page -
sssd.conf(5)
man page
18.7. 在 IdM 客户端中为 sudo 启用 GSSAPI 身份验证并强制实施 Kerberos 身份验证指示符
以下流程描述了通过 pam_sss_gss.so
PAM 模块在 IdM 客户端中为 sudo
和 sudo -i
命令启用 GSSAPI 身份验证。此外,只有已使用智能卡登录的用户才能使用 Kerberos 票据对这些命令进行身份验证。
您可以将此流程用作模板,以通过 SSSD 为其他 PAM 感知服务配置 GSSAPI 身份验证,并进一步限制对附加了特定身份验证指示符的用户访问。
先决条件
-
您已为应用于 IdM 主机的 IdM 用户创建了
sudo
规则。在本例中,您已创建了idm_user_reboot
sudo
规则,为idm_user
帐户授予在idmclient
主机上运行/usr/sbin/reboot
命令的权限。 -
您已为
idmclient
主机配置了智能卡验证。 -
idmclient
主机正在运行 RHEL 8.4 或更高版本。 -
您需要
root
权限来修改/etc/sssd/sssd.conf
文件和/etc/pam.d/
目录中的 PAM 文件。
流程
-
打开
/etc/sssd/sssd.conf
配置文件: 将以下条目添加到
[domain/<domain_name>]
部分中。[domain/<domain_name>] pam_gssapi_services = sudo, sudo-i pam_gssapi_indicators_map = sudo:pkinit, sudo-i:pkinit
-
保存并关闭
/etc/sssd/sssd.conf
文件。 重启 SSSD 服务以载入配置更改。
[root@idmclient ~]# systemctl restart sssd
-
打开
/etc/pam.d/sudo
PAM 配置文件。 添加下列条目,作为
/etc/pam.d/sudo
文件中的auth
部分的第一行。#%PAM-1.0 auth sufficient pam_sss_gss.so auth include system-auth account include system-auth password include system-auth session include system-auth
-
保存并关闭
/etc/pam.d/sudo
文件。 -
打开
/etc/pam.d/sudo-i
PAM 配置文件。 添加下列条目,作为
/etc/pam.d/sudo-i
文件中的auth
部分的第一行。#%PAM-1.0 auth sufficient pam_sss_gss.so auth include sudo account include sudo password include sudo session optional pam_keyinit.so force revoke session include sudo
-
保存并关闭
/etc/pam.d/sudo-i
文件。
验证步骤
以
idm_user
帐户登录主机,并使用智能卡进行身份验证。[root@idmclient ~]# ssh -l idm_user@idm.example.com localhost PIN for smart_card
以智能卡用户身份验证您有一个票据授予票据。
[idm_user@idmclient ~]$ klist Ticket cache: KEYRING:persistent:1358900015:krb_cache_TObtNMd Default principal: idm_user@IDM.EXAMPLE.COM Valid starting Expires Service principal 02/15/2021 16:29:48 02/16/2021 02:29:48 krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM renew until 02/22/2021 16:29:44
显示允许
idm_user
帐户执行的sudo
规则。[idm_user@idmclient ~]$ sudo -l Matching Defaults entries for idmuser on idmclient: !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY KRB5CCNAME", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin User idm_user may run the following commands on idmclient: (root) /usr/sbin/reboot
使用
sudo
重新启动计算机,而不指定密码。[idm_user@idmclient ~]$ sudo /usr/sbin/reboot
其它资源
- 为智能卡验证配置身份管理
- Kerberos 认证指示符
- 使用 IdM Web UI 向 IdM 客户端上的 IdM 用户授予 sudo 访问权限
- 使用 CLI 向 IdM 客户端上的 IdM 用户授予 sudo 访问权限。
-
pam_sss_gss(8)
man page -
sssd.conf(5)
man page
18.8. SSSD 选项控制 PAM 服务的 GSSAPI 身份验证
您可以在 /etc/sssd/sssd.conf
配置文件中使用以下选项来调整 SSSD 服务中的 GSSAPI 配置。
- pam_gssapi_services
-
默认情况下,禁用带有 SSSD 的 GSSAPI 身份验证。您可以使用此选项指定允许使用
pam_sss_gss.gss.so
PAM 模块尝试 GSSAPI 身份验证的 PAM 服务逗号分隔列表。要明确禁用 GSSAPI 身份验证,将这个选项设置为-
。 - pam_gssapi_indicators_map
这个选项只适用于 Identity Management(IdM)域。使用这个选项列出授予服务 PAM 访问权限所需的 Kerberos 身份验证指示符。对的格式必须是
<PAM_service>: _<required_authentication_indicator>_
。有效的验证指示符为:
-
OTP
用于双因素验证 -
用于
RADIUS 身份验证的 radius -
用于
PKINIT、智能卡或证书身份验证的 PKINIT -
强化强化
的密码
-
- pam_gssapi_check_upn
-
默认启用这个选项,并将其设置为
true
。如果启用这个选项,SSSD 服务要求用户名与 Kerberos 凭证匹配。如果为false
,pam_ss_gss.so
PAM 模块将验证能够获取所需服务票据的每个用户。
示例
以下选项为 sudo 和 sudo
-i
服务启用 Kerberos 身份验证,要求 sudo
用户通过一次性密码进行身份验证,并且用户名必须与 Kerberos 主体匹配。由于这些设置位于 [pam]
部分中,因此适用于所有域:
[pam] pam_gssapi_services = sudo, sudo-i pam_gssapi_indicators_map = sudo:otp pam_gssapi_check_upn = true
您还可以在单独的 [domain]
部分中设置这些选项,以覆盖 [pam]
部分中的任何全局值。以下选项在每个域中应用不同的 GSSAPI 设置:
idm.example.com
域-
为
sudo 和 sudo
-i
服务启用 GSSAPI 身份验证。 -
需要为
sudo
命令验证证书或智能卡验证器。 -
需要
sudo -i
命令的一次性密码身份验证器. - 强制实施匹配的用户名和 Kerberos 主体.
-
为
- 对于
ad.example.com
域 -
仅为
sudo
服务启用 GSSAPI 身份验证。 - 不要强制匹配用户名和主体。
-
仅为
[domain/idm.example.com] pam_gssapi_services = sudo, sudo-i pam_gssapi_indicators_map = sudo:pkinit, sudo-i:otp pam_gssapi_check_upn = true ... [domain/ad.example.com] pam_gssapi_services = sudo pam_gssapi_check_upn = false ...
其它资源
18.9. sudo 的 GSSAPI 身份验证故障排除
如果您无法使用 IdM 的 Kerberos ticket 对 sudo
服务进行身份验证,请使用以下情况对您的配置进行故障排除。
先决条件
-
您已为
sudo
服务启用了 GSSAPI 身份验证。请参阅在 IdM 客户端中为 sudo 启用 GSSAPI 身份验证。 -
您需要
root
权限来修改/etc/sssd/sssd.conf
文件和/etc/pam.d/
目录中的 PAM 文件。
流程
如果您看到以下错误,Kerberos 服务可能无法根据主机名为服务票据解析正确的域:
Server not found in Kerberos database
在这种情况下,将主机名直接添加到
/etc/krb5.conf
Kerberos 配置文件中的[domain_realm]
部分:[idm-user@idm-client ~]$ cat /etc/krb5.conf ... [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM server.example.com = EXAMPLE.COM
如果您看到以下错误,则没有任何 Kerberos 凭证:
No Kerberos credentials available
在这种情况下,使用
kinit
工具检索 Kerberos 凭证,或者通过 SSSD 验证:[idm-user@idm-client ~]$ kinit idm-user@IDM.EXAMPLE.COM Password for idm-user@idm.example.com:
如果您在
/var/log/sssd/sssd_pam.log
日志文件中看到以下错误之一,Kerberos 凭证与当前登录的用户的用户名不匹配:User with UPN [<UPN>] was not found. UPN [<UPN>] does not match target user [<username>].
在这种情况下,验证您使用 SSSD 进行身份验证,或考虑禁用
/etc/sssd/sssd.conf
文件中的pam_gssapi_check_upn
选项:[idm-user@idm-client ~]$ cat /etc/sssd/sssd.conf ... pam_gssapi_check_upn = false
若要进行额外的故障排除,您可以为
pam_sss_gss.so
PAM 模块启用调试输出。在 PAM 文件中所有
pam_sss_gss.so
条目的末尾添加debug
选项,如/etc/pam.d/sudo
和/etc/pam.d/sudo-i
:[root@idm-client ~]# cat /etc/pam.d/sudo #%PAM-1.0 auth sufficient pam_sss_gss.so debug auth include system-auth account include system-auth password include system-auth session include system-auth
[root@idm-client ~]# cat /etc/pam.d/sudo-i #%PAM-1.0 auth sufficient pam_sss_gss.so debug auth include sudo account include sudo password include sudo session optional pam_keyinit.so force revoke session include sudo
尝试使用
pam_sss_gss.so
模块进行身份验证,并查看控制台输出。在本例中,用户没有任何 Kerberos 凭据。[idm-user@idm-client ~]$ sudo ls -l /etc/sssd/sssd.conf pam_sss_gss: Initializing GSSAPI authentication with SSSD pam_sss_gss: Switching euid from 0 to 1366201107 pam_sss_gss: Trying to establish security context pam_sss_gss: SSSD User name: idm-user@idm.example.com pam_sss_gss: User domain: idm.example.com pam_sss_gss: User principal: pam_sss_gss: Target name: host@idm.example.com pam_sss_gss: Using ccache: KCM: pam_sss_gss: Acquiring credentials, principal name will be derived pam_sss_gss: Unable to read credentials from [KCM:] [maj:0xd0000, min:0x96c73ac3] pam_sss_gss: GSSAPI: Unspecified GSS failure. Minor code may provide more information pam_sss_gss: GSSAPI: No credentials cache found pam_sss_gss: Switching euid from 1366200907 to 0 pam_sss_gss: System error [5]: Input/output error
18.10. 使用 Ansible playbook 确保 IdM 客户端上的 IdM 用户具有 sudo 访问权限
在 Identity Management(IdM)中,您可以确保为特定 IdM 主机上的 IdM 用户帐户授予对特定命令的 sudo
访问权限。
完成此步骤以确保存在名为 idm_user_reboot 的 sudo
规则。该规则授予 idm_user 在 idmclient 计算机上运行 /usr/sbin/reboot
命令的权限。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
- 您知道 IdM 管理员密码。
- 您已确保 IdM 中存在 idm_user 的用户帐户,并通过为用户创建密码来解锁帐户。有关使用命令行界面添加新 IdM 用户的详情,请参阅使用命令行添加用户。
-
idmclient 中没有本地 idm_user 帐户。idm_user 用户未列在 idmclient 上的
/etc/passwd
文件中。
流程
创建一个清单文件,如
inventory.file
,并在其中定义ipaservers
:[ipaservers] server.idm.example.com
添加一个或多个
sudo
命令:创建一个
ensure-reboot-sudocmd-is-present.yml
Ansible playbook,以确保sudo
命令的 IdM 数据库中存在/usr/sbin/reboot
命令。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/sudocmd/ensure-sudocmd-is-present.yml
文件中的示例:--- - name: Playbook to manage sudo command hosts: ipaserver become: true tasks: # Ensure sudo command is present - ipasudocmd: ipaadmin_password: MySecret123 name: /usr/sbin/reboot state: present
运行 playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-reboot-sudocmd-is-present.yml
创建引用命令的
sudo
规则:创建一个
ensure-sudorule-for-idmuser-on-idmclient-is-present.yml
Ansible playbook,以使用sudo
命令条目来确保存在 sudo 规则。sudo 规则允许 idm_user 重新启动 idmclient 计算机。要简化此步骤,您可以复制并修改/usr/share/doc/ansible-freeipa/playbooks/sudorule/ensure-sudorule-is-present.yml
文件中的示例:--- - name: Tests hosts: ipaserver become: true tasks: # Ensure a sudorule is present granting idm_user the permission to run /usr/sbin/reboot on idmclient - ipasudorule: ipaadmin_password: MySecret123 name: idm_user_reboot description: A test sudo rule. allow_sudocmd: /usr/sbin/reboot host: idmclient.idm.example.com user: idm_user state: present
运行 playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-sudorule-for-idmuser-on-idmclient-is-present.yml
验证步骤
验证 idm _user 能够使用 sudo
重新启动 idmclient,以此测试您在 IdM 服务器上确认其存在性的 sudo
规则是否在 idmclient 上工作。请注意,可能需要过几分钟后,服务器上所做的更改才会对客户端生效。
- 以 idm_user 用户身份登录 idmclient 。
使用
sudo
重新启动计算机。在提示时输入 idm_user 的密码:$ sudo /usr/sbin/reboot [sudo] password for idm_user:
如果正确配置了 sudo
,则计算机将重新启动。
其它材料
-
有关如何使用 Ansible playbook 在 IdM 中应用
sudo
命令、命令组和规则的更多详细信息,请参阅/usr/share/doc/ansible-freeipa/ 目录中的 README-sudocmdgroup.md 和 README-sudorule.
md Markdown 文件。
第 19 章 确保使用 Ansible playbook 在 IdM 中存在基于主机的访问控制规则
本章论述了基于主机的身份管理(IdM)访问策略,以及如何使用 Ansible 定义它们。
Ansible 是一个自动化工具,用于配置系统、部署软件和执行滚动更新。它包括对 Identity Management(IdM)的支持。
19.1. IdM 中的基于主机的访问控制规则
基于主机的访问控制(HBAC)规则定义哪些用户或用户组可以通过服务组中的服务或服务来访问哪些主机或主机组。作为系统管理员,您可以使用 HBAC 规则来实现以下目标:
- 将您域中指定系统的访问权限限制为特定用户组的成员。
- 仅允许使用特定服务访问域中的系统。
默认情况下,IdM 配置有一个名为 allow_all 的默认 HBAC 规则,这意味着通过整个 IdM 域中每个相关服务对每个用户的每个主机进行通用访问。
您可以通过将默认 allow_all 规则替换为您自己的一组 HBAC 规则来微调对不同主机的访问。对于集中式和简化的访问控制管理,您可以将 HBAC 规则应用到用户组、主机组或服务组,而不是单个用户、主机或服务。
19.2. 使用 Ansible playbook 在 IdM 中存在 HBAC 规则
本节论述了如何使用 Ansible playbook 在 Identity Management(IdM)中确保存在基于主机的访问控制(HBAC)规则。
先决条件
- ansible-freeipa 软件包安装在 Ansible 控制器上。
- 您知道 IdM 管理员密码。
- IdM 中已存在您要用于 HBAC 规则的用户和用户组。详情请参阅使用 Ansible playbook 管理用户帐户,并使用 Ansible playbook 确保存在 IdM 组和组成员。
- IdM 中已存在要应用 HBAC 规则的主机和主机组。详情请参阅使用 Ansible playbook 管理主机和使用 Ansible playbook 管理主机组。
流程
创建一个清单文件,如
inventory.file
,并在该文件中定义ipaserver
:[ipaserver] server.idm.example.com
创建 Ansible playbook 文件,以定义您要确保的 HBAC 策略。要简化此步骤,您可以复制并修改
/usr/share/doc/ansible-freeipa/playbooks/hbacrule/ensure-hbacrule-allhosts-present.yml
文件中的示例:--- - name: Playbook to handle hbacrules hosts: ipaserver become: true tasks: # Ensure idm_user can access client.idm.example.com via the sshd service - ipahbacrule: ipaadmin_password: MySecret123 name: login user: idm_user host: client.idm.example.com hbacsvc: - sshd state: present
运行 playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file path_to_playbooks_directory/ensure-new-hbacrule-present.yml
验证步骤
- 以管理员身份登录 IdM Web UI。
- 导航到 Policy → Host-Based-Access-Control →HBAC Test。
- 在 Who 选项卡中,选择 idm_user。
- 在 Accessing 选项卡中,选择 client.idm.example.com。
- 在 Via 服务选项卡中,选择 sshd。
- 在 Rules 选项卡中,选择 login。
- 在 Run test 选项卡中,单击 Run test 按钮。如果您看到 ACCESS GRANTED,则 HBAC 规则会成功实施。
其它资源
-
有关使用 Ansible 配置 HBAC 服务、服务组和规则的详情,请查看 README-hbacsvc.md、README-hbacsvcgroup.md 和 README-hbacrule.md Markdown 文件。这些文件位于
/usr/share/doc/ansible-freeipa
目录中。另请参阅/usr/share/doc/ansible-freeipa/playbooks
目录相关子目录中的 playbook。
第 20 章 IdM 中的 vaults
本章论述了身份管理(IdM)中的密码库。它包括以下主题:
20.1. Vault 及其益处
对于希望将其所有敏感数据保存在一个位置,其身份管理(IdM)用户而言,密码库是一种非常有用的功能。 本节介绍各种类型的密码库及其使用,以及您应该根据您的要求选择哪些库。
密码库在(IdM)中是一个安全的位置,用于存储、检索、共享和恢复机密。secret 是安全敏感数据,通常是身份验证凭据,只有有限的人员或实体可以访问这些数据。例如,secret 包括:
- 密码
- pins
- 私有 SSH 密钥
密码库与密码管理器相当。正如密码管理器一样,密码库通常要求用户生成并记住一个主密码来解锁和访问密码库中存储的任何信息。但是,用户也可以决定拥有标准密码库。标准密码库不要求用户输入任何密码来访问密码库中存储的 secret。
IdM 中的密码库的目的是存储身份验证凭据,允许您向外部的非IdM 相关服务进行身份验证。
IdM 库的其他重要特征包括:
- Vault 只能供 vault 所有者和 vault 所有者选择为 vault 成员的 IdM 用户访问。此外,IdM 管理员还可以访问密码库。
- 如果用户没有足够的特权来创建密码库,IdM 管理员可以创建密码库并将该用户设置为其所有者。
- 用户和服务可从 IdM 域注册的任何机器访问存储在密码库中的 secret。
- 个密码库只能包含一个机密,例如一个文件。但是,文件本身可以包含多个机密,如密码、密钥选项卡或证书。
Vault 仅在 IdM 命令行(CLI)中可用,不能来自 IdM Web UI。
20.2. Vault 所有者、成员和管理员
身份管理(IdM)区分以下 vault 用户类型:
- Vault 所有者
vault 所有者是具有密码库基本管理权限的用户或服务。例如,密码库所有者可以修改密码库的属性或添加新的 vault 成员。
每个密码库必须至少有一个所有者。库也可以有多个所有者。
- Vault 成员
- vault 成员是可以访问由其他用户或服务创建的库的用户或服务。
- Vault 管理员
Vault 管理员不受限制地访问所有密码库,并有权执行所有密码库操作。
注意对称和非对称库通过密码或密钥进行保护,并应用特殊的访问控制规则(请参阅 Vault 类型)。管理员必须满足这些规则才能:
- 访问对称和非对称密码库中的机密。
- 更改或重置 vault 密码或密钥。
Vault 管理员是具有
Vault 管理员特权的任何用户
。在 IdM 中的基于角色的访问控制(RBAC)的上下文中,特权是您可以应用到角色的一组权限。- Vault 用户
vault 用户代表密码库所在的容器的用户。
Vault 用户信息
显示在特定命令的输出中,如ipa vault-show
:$ ipa vault-show my_vault Vault name: my_vault Type: standard Owner users: user Vault user: user
有关 vault 容器和用户密码库的详情,请参阅 Vault 容器。
其它资源
- 某些所有者和成员特权取决于密码库的类型。详情请参阅标准、对称和非对称密码库。
20.3. 标准、对称和非对称密码库
根据安全性和访问控制级别,IdM 将密码库分类为以下类型:
- 标准密码库
- Vault 所有者和密码库成员可以归档和检索机密,而不必使用密码或密钥。
- 对称密码库
- 库中的机密通过对称密钥进行保护。Vault 所有者和成员可以归档和检索机密,但必须提供 vault 密码。
- 非对称密码库
- 库中的机密通过非对称密钥进行保护。用户使用公钥存档机密,并使用私钥检索该机密。Vault 成员只能存档机密,而 vault 所有者则可同时执行归档和检索机密。
20.4. 用户、服务和共享密码库
根据所有权,IdM 将密码库分为几种类型。下表包含有关每种类型、其所有者和使用的信息。
表 20.1. 基于所有权的 IdM Vault
类型 | 描述 | 所有者 | 备注 |
---|---|---|---|
用户密码库 | 用户的私有库 | 单个用户 | 如果 IdM 管理员允许,任何用户都可以拥有一个或多个用户库 |
服务库 | 服务的私有库 | 单个服务 | 如果 IdM 管理员允许,任何服务都可以拥有一个或多个用户库 |
共享 vault | 由多个用户和服务共享的库 | 创建密码库的 vault 管理员 | 如果 IdM 管理员允许,用户和服务可以拥有一个或多个用户库。除创建密码库的 vault 管理员之外,还可具有对密码库的完全访问权限。 |
20.5. Vault 容器
vault 容器是密码库的集合。下表列出了 Identity Management(IdM)提供的默认 vault 容器。
表 20.2. IdM 中的默认 vault 容器
类型 | 描述 | 目的 |
---|---|---|
用户容器 | 用户的私有容器 | 为特定用户存储用户密码库 |
服务容器 | 服务的私有容器 | 为特定服务存储服务库 |
共享容器 | 用于多个用户和服务的容器 | 存储可由多个用户或服务共享的 vault |
当为用户或服务创建第一个私有密码库时,IdM 会自动为每个用户或服务创建用户和服务容器。删除用户或服务后,IdM 会删除容器及其内容。
20.6. 基本 IdM vault 命令
本节介绍可用于管理身份管理(IdM)密码库的基本命令。下表 包含 ipa vault-*
命令的列表,并解释了它们的用途。
在运行任何 ipa vault-*
命令前,请将密钥恢复授权(KRA)证书系统组件安装到 IdM 域中的一个或多个服务器上。详情请参阅在 IdM 中安装密钥恢复授权。
表 20.3. 基本 IdM vault 命令解释
命令 | 目的 |
---|---|
| 显示有关 IdM 库和示例密码库命令的概念信息。 |
|
在特定的 |
| 在将密码库作为 vault 成员访问时,您必须指定 vault 所有者。如果您没有指定 vault 所有者,IdM 会通知您没有找到密码库: [admin@server ~]$ ipa vault-show user_vault ipa: ERROR: user_vault: vault not found |
| 在访问共享密码库时,您必须指定您要访问的 vault 是共享密码库。否则,IdM 会通知您没有找到密码库: [admin@server ~]$ ipa vault-show shared_vault ipa: ERROR: shared_vault: vault not found |
20.7. 在 IdM 中安装密钥恢复授权
本节论述了如何通过安装密钥恢复授权机构(KRA)证书系统(CS)组件在身份管理(IdM)中启用密码库。
先决条件
- 以 IdM 管理员身份登录。
- 您以 root 用户身份登录 IdM 客户端。
流程
安装 KRA:
# ipa-kra-install
您可以在隐藏的副本上安装 IdM 集群的第一个 KRA。但是,在在非隐藏的副本上安装 KRA 克隆前,安装额外的 KRA 克隆需要临时激活隐藏的副本。然后您可以再次隐藏原始隐藏的副本。
要使密码库服务高度可用,请在两个 IdM 服务器或更多服务器上安装 KRA。
其它资源
- 有关如何激活 IdM 副本以及如何隐藏它的更多信息,请参阅演示或提升隐藏副本。
- 有关 IdM 中隐藏副本的更多信息,请参阅隐藏副本模式。
第 21 章 使用 Ansible 管理 IdM 用户库:存储和检索 secret
本章论述了如何使用 Ansible vault
模块在身份管理中管理用户密码库。具体来说,它描述了用户可以如何使用 Ansible playbook 执行以下三个连续操作:
- 在 IdM 中创建用户库。
- 在密码库中存储机密。
- 从密码库检索机密。
用户可以通过两个不同的 IdM 客户端进行存储和检索。
先决条件
- 密钥恢复授权中心(KRA)证书系统组件已安装在您的 IdM 域中的一个或多个服务器上。详情请参阅在 IdM 中安装密钥恢复授权。
21.1. 使用 Ansible 在 IdM 中存在标准用户库
本节介绍身份管理(IdM)用户如何使用 Ansible playbook 创建包含一个或多个私有密码库的 vault 容器,以安全地存储敏感信息。在以下步骤中使用的示例中,idm_user 用户创建名为 my_vault 的标准类型库。标准密码库类型确保无需 idm_user 在访问该文件时进行身份验证。idm_user 能够从用户登录的任何 IdM 客户端检索 文件。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包,这是您在该流程中执行步骤的主机。
- 您知道 idm_user 的密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/vault
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/vault
创建一个清单文件,如 inventory.file :
$ touch inventory.file
打开 inventory.file,并在
[ipaserver]
部分中定义您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
生成 ensure-standard-vault-is-present.yml Ansible playbook 文件的副本。例如:
$ cp ensure-standard-vault-is-present.yml ensure-standard-vault-is-present-copy.yml
- 打开 ensure-standard-vault-is-present-copy.yml 文件进行编辑。
通过在
ipavault
任务部分设置以下变量来调整文件:-
将
ipaadmin_principal
变量设置为 idm_user。 -
将
ipaadmin_password
变量设置为 idm_user 密码。 -
将
user
变量设置为 idm_user。 -
将
name
变量设置为 my_vault。 将
vault_type
变量设置为 standard。对于当前示例,此修改过的 Ansible playbook 文件:
--- - name: Tests hosts: ipaserver become: true gather_facts: false tasks: - ipavault: ipaadmin_principal: idm_user ipaadmin_password: idm_user_password user: idm_user name: my_vault vault_type: standard
-
将
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file ensure-standard-vault-is-present-copy.yml
21.2. 使用 Ansible 将 secret 归档到 IdM 中的标准用户库中
本节介绍身份管理(IdM)用户如何使用 Ansible playbook 将敏感信息存储在个人密码库中。在使用的示例中,idm_user 用户在名为 my_vault 的库中归档含有名为 password.txt 的敏感信息的文件。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包,这是您在该流程中执行步骤的主机。
- 您知道 idm_user 的密码。
- idm_user 是所有者,或者至少是 my_vault 的成员用户。
- 您可以访问 password.txt,这是要在 my_vault 中存档的机密。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/vault
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/vault
打开清单文件,并确保
[ipaserver]
部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
制作 data-archive-in-symmetric-vault.yml Ansible playbook 文件的副本,但将"symmetric"替换为 "standard"。例如:
$ cp data-archive-in-symmetric-vault.yml data-archive-in-standard-vault-copy.yml
- 打开 data-archive-in-standard-vault-copy.yml 文件进行编辑。
通过在
ipavault
任务部分设置以下变量来调整文件:-
将
ipaadmin_principal
变量设置为 idm_user。 -
将
ipaadmin_password
变量设置为 idm_user 密码。 -
将
user
变量设置为 idm_user。 -
将
name
变量设置为 my_vault。 -
将
变量设置为
包含敏感信息的文件的完整路径。 将
action
变量设置为 member。对于当前示例,此修改过的 Ansible playbook 文件:
--- - name: Tests hosts: ipaserver become: true gather_facts: false tasks: - ipavault: ipaadmin_principal: idm_user ipaadmin_password: idm_user_password user: idm_user name: my_vault in: /usr/share/doc/ansible-freeipa/playbooks/vault/password.txt action: member
-
将
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file data-archive-in-standard-vault-copy.yml
21.3. 使用 Ansible 从 IdM 中的标准用户库检索 secret
本节介绍身份管理(IdM)用户如何使用 Ansible playbook 从用户个人密码库检索机密。在以下步骤中使用的示例中,idm_user 用户从名为 my_vault 的标准类型库检索包含敏感数据的文件,并检索名为 host01 的 IdM 客户端。idm_user 在访问该文件时不必进行身份验证。idm_user 可以使用 Ansible 从安装 Ansible 的任何 IdM 客户端检索 文件。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。这是执行流程中步骤的主机。
- 您知道 idm_user 的密码。
- idm_user 是 my_vault 的所有者。
- idm_user 已将机密存储在 my_vault 中。
- Ansible 可以写入要检索该机密的 IdM 主机上的 目录。
- idm_user 可以从要检索机密的 IdM 主机上的 目录读取。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/vault
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/vault
打开清单文件,并在一个明确定义的部分中提到您要检索该机密的 IdM 客户端。例如,要指示 Ansible 在 host01.idm.example.com 上检索 secret,请输入:
[ipahost] host01.idm.example.com
生成 retrive-data-symmetric-vault.yml Ansible playbook 文件的副本。将"对称"替换为"标准"。例如:
$ cp retrive-data-symmetric-vault.yml retrieve-data-standard-vault.yml-copy.yml
- 打开 retrieve-data-standard-vault.yml-copy.yml 文件进行编辑。
-
通过将
hosts
变量设置为 ipahost 来调整 文件。 通过在
ipavault
任务部分设置以下变量来调整文件:-
将
ipaadmin_principal
变量设置为 idm_user。 -
将
ipaadmin_password
变量设置为 idm_user 密码。 -
将
user
变量设置为 idm_user。 -
将
name
变量设置为 my_vault。 -
将
变量设置为
您要将机密导出到的文件的完整路径。 将
state
变量设置为 retrieve。对于当前示例,此修改过的 Ansible playbook 文件:
--- - name: Tests hosts: ipahost become: true gather_facts: false tasks: - ipavault: ipaadmin_principal: idm_user ipaadmin_password: idm_user_password user: idm_user name: my_vault out: /tmp/password_exported.txt state: retrieved
-
将
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file retrieve-data-standard-vault.yml-copy.yml
验证步骤
以 user 01 身份通过
SSH
连接到 host 01:$ ssh user01@host01.idm.example.com
查看 Ansible playbook 文件中
out
变量指定的文件:$ vim /tmp/password_exported.txt
现在,您可以看到导出的 secret。
-
有关使用 Ansible 管理 IdM vaults 和用户 secret 以及 playbook 变量的更多信息,请参阅
/usr/share/doc/ansible-freeipa/ 目录中提供的 README-
vault.md Markdown 文件和/usr/share/doc/ansible-freeipa/playbooks/vault/
目录中的示例 playbook。
第 22 章 使用 Ansible 管理 IdM 服务库:存储和检索 secret
本节介绍管理员可以如何使用 ansible-freeipa
vault
模块安全地将服务机密存储在集中式位置。
示例中使用的密码库 是非对称的,这意味着为了使用它,管理员需要执行以下步骤:
-
使用
openssl
实用程序生成私钥。 - 根据私钥生成公钥。
当管理员将服务 secret 归档到密码库时,会用公钥对其进行加密。之后,托管在域中特定计算机上的服务实例使用私钥检索该机密。只有 服务和管理员可以访问该机密。
如果该机密泄露,管理员可以替换服务库中,然后将它重新分发到尚未遭入侵的个别服务实例。
先决条件
- 密钥恢复授权中心(KRA)证书系统组件已安装在您的 IdM 域中的一个或多个服务器上。详情请参阅在 IdM 中安装密钥恢复授权。
本节包括以下步骤:
在流程中:
- admin 是管理服务密码的管理员。
- private-key-to-an-externally-certificate.pem 是包含服务 secret 的文件,本例中为外部签名证书的私钥。请勿将此私钥与用于从密码库检索机密的私钥混淆。
- secret_vault 是为存储服务 secret 而创建的库。
- HTTP/webserver1.idm.example.com 是密码库的所有者服务。
- HTTP/webserver2.idm.example.com 和 HTTP/webserver3.idm.example.com 是 vault 成员服务。
- service-public.pem 是用于加密 password_vault 中存储的密码的服务公钥。
- service-private.pem 是用于解密 secret_vault 中存储的密码的服务私钥。
22.1. 使用 Ansible 在 IdM 中存在非对称服务库
本节介绍身份管理(IdM)管理员如何使用 Ansible playbook 创建包含一个或多个私有密码库容器的服务库容器,从而安全地存储敏感信息。在以下流程中使用的示例中,管理员创建名为 secret_vault 的非对称库。这样可确保 vault 成员必须使用私钥进行身份验证,才能检索密码库中的机密。vault 成员能够从任何 IdM 客户端检索 文件。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。这是执行流程中步骤的主机。
- 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/vault
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/vault
获取服务实例的公钥。例如,使用
openssl
工具:生成
service-private.pem
私钥。$ openssl genrsa -out service-private.pem 2048 Generating RSA private key, 2048 bit long modulus .+++ ...........................................+++ e is 65537 (0x10001)
根据私钥生成
service-public.pem
公钥。$ openssl rsa -in service-private.pem -out service-public.pem -pubout writing RSA key
可选:创建一个清单文件(如果 inventory.file )不存在。
$ touch inventory.file
打开清单文件,并在
[ipaserver]
部分中定义您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
生成 ensure-asymmetric-vault-is-present.yml Ansible playbook 文件的副本。例如:
$ cp ensure-asymmetric-vault-is-present.yml ensure-asymmetric-service-vault-is-present-copy.yml
- 打开 ensure-asymmetric-vault-is-present-copy.yml 文件进行编辑。
- 添加一个任务,该任务将 service-public.pem 公钥从 Ansible 控制器复制到 server.idm.example.com 服务器。
通过在
ipavault
任务部分设置以下变量来修改文件的其余部分:-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 -
使用
name
变量定义 vault 的名称,如 secret_vault。 -
将
vault_type
变量设置为非 对称。 -
将
service
变量设置为拥有密码库的服务主体,如 HTTP/webserver1.idm.example.com。 将
public_key_file
设置为您的公钥的位置。这是当前示例修改的 Ansible playbook 文件:
--- - name: Tests hosts: ipaserver become: true gather_facts: false tasks: - name: Copy public key to ipaserver. copy: src: /path/to/service-public.pem dest: /usr/share/doc/ansible-freeipa/playbooks/vault/service-public.pem mode: 0600 - name: Add data to vault, from a LOCAL file. ipavault: ipaadmin_password: Secret123 name: secret_vault vault_type: asymmetric service: HTTP/webserver1.idm.example.com public_key_file: /usr/share/doc/ansible-freeipa/playbooks/vault/service-public.pem
-
将
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file ensure-asymmetric-service-vault-is-present-copy.yml
22.2. 使用 Ansible 将成员服务添加到非对称库
本节演示身份管理(IdM)管理员如何使用 Ansible playbook 将成员服务添加到服务库中,以便他们都可以检索密码库中存储的机密。在以下流程中使用的示例中,IdM 管理员将 HTTP/webserver2.idm.example.com 和 HTTP/webserver3.idm.example.com 服务主体添加到由 HTTP/webserver1.idm.example.com 所有的 secret_vault vault 中。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。这是执行流程中步骤的主机。
- 您知道 IdM 管理员密码。
- 您已创建了用于存储服务机密的非对称密码库。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/vault
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/vault
可选:创建一个清单文件(如果 inventory.file )不存在。
$ touch inventory.file
打开清单文件,并在
[ipaserver]
部分中定义您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
生成 data-archive-in-asymmetric-vault.yml Ansible playbook 文件的副本。例如:
$ cp data-archive-in-asymmetric-vault.yml add-services-to-an-asymmetric-vault.yml
- 打开 data-archive-in-asymmetric-vault-copy.yml 文件进行编辑。
通过在
ipavault
任务部分设置以下变量来修改该文件:-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 -
将
name
变量设置为 vault 的名称,如 secret_vault。 -
将
service
变量设置为密码库的服务所有者,如 HTTP/webserver1.idm.example.com。 -
定义您要使用
services
变量访问 vault 机密的服务。 将
action
变量设置为member
。对于当前示例,此修改过的 Ansible playbook 文件:
--- - name: Tests hosts: ipaserver become: true gather_facts: false tasks: - ipavault: ipaadmin_password: Secret123 name: secret_vault service: HTTP/webserver1.idm.example.com services: - HTTP/webserver2.idm.example.com - HTTP/webserver3.idm.example.com action: member
-
将
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file add-services-to-an-asymmetric-vault.yml
22.3. 使用 Ansible 将 IdM 服务 secret 存储在非对称库中
本节演示身份管理(IdM)管理员如何使用 Ansible playbook 将机密存储在服务库中,以便稍后可由服务检索。在以下流程中使用的示例中,管理员将带有 secret 的 PEM
文件存储在名为 secret_vault 的非对称库中。这样可确保服务必须使用私钥进行身份验证,才能从密码库检索机密。vault 成员能够从任何 IdM 客户端检索 文件。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。这是执行流程中步骤的主机。
- 您知道 IdM 管理员密码。
- 您已创建了用于存储服务机密的非对称密码库。
- secret 存储在 Ansible 控制器上,例如 /usr/share/doc/ansible-freeipa/playbooks/vault/private-key-to-an-externally-certificate.pem 文件中。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/vault
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/vault
可选:创建一个清单文件(如果 inventory.file )不存在。
$ touch inventory.file
打开清单文件,并在
[ipaserver]
部分中定义您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
生成 data-archive-in-asymmetric-vault.yml Ansible playbook 文件的副本。例如:
$ cp data-archive-in-asymmetric-vault.yml data-archive-in-asymmetric-vault-copy.yml
- 打开 data-archive-in-asymmetric-vault-copy.yml 文件进行编辑。
通过在
ipavault
任务部分设置以下变量来修改该文件:-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 -
将
name
变量设置为 vault 的名称,如 secret_vault。 -
将
service
变量设置为密码库的服务所有者,如 HTTP/webserver1.idm.example.com。 -
将
中的变量
设置为 "{{ lookup('file', 'private-key-to-an-externally-certificate.pem')| b64encode }}"。这可确保 Ansible 使用私钥从 Ansible 控制器上的工作目录检索 文件,而不是从 IdM 服务器检索。 将
action
变量设置为member
。对于当前示例,此修改过的 Ansible playbook 文件:
--- - name: Tests hosts: ipaserver become: true gather_facts: false tasks: - ipavault: ipaadmin_password: Secret123 name: secret_vault service: HTTP/webserver1.idm.example.com in: "{{ lookup('file', 'private-key-to-an-externally-signed-certificate.pem') | b64encode }}" action: member
-
将
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file data-archive-in-asymmetric-vault-copy.yml
22.4. 使用 Ansible 为 IdM 服务检索服务 secret
本节演示身份管理(IdM)用户如何使用 Ansible playbook 代表服务从服务库检索机密。在以下流程中使用的示例中,运行 playbook 从名为 secret _vault 的非对称库检索带有 secret 的 PEM
文件,并将它存储在 Ansible 清单文件中列出的所有主机上的指定位置,存为 ipaservers
。
服务使用 keytabs 验证 IdM,并使用私钥与密码库进行身份验证。您可以代表 服务从安装 ansible-freeipa
的任何 IdM 客户端检索 文件。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。这是执行流程中步骤的主机。
- 您知道 IdM 管理员密码。
- 您已创建了用于存储服务机密的非对称密码库。
- 您已在密码库中存档了机密。
-
您已将用于检索服务 vault secret 的私钥存储在 Ansible 控制器上的
private_key_file
变量指定的位置。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/vault
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/vault
可选:创建一个清单文件(如果 inventory.file )不存在。
$ touch inventory.file
打开清单文件并定义以下主机:
-
在
[ipaserver]
部分中定义您的 IdM 服务器。 -
在
[webservers]
部分中定义要检索机密的主机。例如,要指示 Ansible 检索到 webserver1.idm.example.com、webserver2.idm.example.com 和webserver3.idm.example.com 的 secret,请输入:
[ipaserver] server.idm.example.com [webservers] webserver1.idm.example.com webserver2.idm.example.com webserver3.idm.example.com
-
在
生成 retrieve-data-asymmetric-vault.yml Ansible playbook 文件的副本。例如:
$ cp retrieve-data-asymmetric-vault.yml retrieve-data-asymmetric-vault-copy.yml
- 打开 retrieve-data-asymmetric-vault-copy.yml 文件进行编辑。
通过在
ipavault
任务部分设置以下变量来修改该文件:-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 -
将
name
变量设置为 vault 的名称,如 secret_vault。 -
将
service
变量设置为密码库的服务所有者,如 HTTP/webserver1.idm.example.com。 -
将
private_key_file
变量设置为用于检索服务 vault secret 的私钥的位置。 -
将
变量
设置为 IdM 服务器上您要检索 private-key-to-an-externally-certificate.pem 机密的位置,如当前工作目录。 将
action
变量设置为member
。对于当前示例,此修改过的 Ansible playbook 文件:
--- - name: Retrieve data from vault hosts: ipaserver become: no gather_facts: false tasks: - name: Retrieve data from the service vault ipavault: ipaadmin_password: Secret123 name: secret_vault service: HTTP/webserver1.idm.example.com vault_type: asymmetric private_key: "{{ lookup('file', 'service-private.pem') | b64encode }}" out: private-key-to-an-externally-signed-certificate.pem state: retrieved
-
将
在 playbook 中添加一个部分,它将从 IdM 服务器检索数据文件到 Ansible 控制器:
--- - name: Retrieve data from vault hosts: ipaserver become: no gather_facts: false tasks: [...] - name: Retrieve data file fetch: src: private-key-to-an-externally-signed-certificate.pem dest: ./ flat: yes mode: 0600
在 playbook 中添加一个部分,它将检索到的 private-key-to-an-externally-certificate.pem 文件从 上的 Ansible 控制器传输到清单文件的
webservers
部分:--- - name: Send data file to webservers become: no gather_facts: no hosts: webservers tasks: - name: Send data to webservers copy: src: private-key-to-an-externally-signed-certificate.pem dest: /etc/pki/tls/private/httpd.key mode: 0444
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml
22.5. 在使用 Ansible 泄露时更改 IdM 服务 vault secret
本节介绍当服务实例遭入侵时,身份管理(IdM)管理员可以如何重复利用 Ansible playbook 来更改服务库中存储的机密。以下示例中的情景假定 onwebserver3.idm.example.com 检索到的机密已被破坏,而不是存储该机密的非对称库的密钥。在示例中,管理员重复利用在非对称密码库中存储机密时使用的 Ansible playbook,并将 机密从非对称密码库检索到 IdM 主机。在流程开始时,IdM 管理员使用非对称密码库中的新 secret 存储一个新的 PEM
文件,调整清单文件,而不检索到被入侵的 Web 服务器 webserver3.idm.example.com,然后重新运行这两个程序。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。这是执行流程中步骤的主机。
- 您知道 IdM 管理员密码。
- 您已创建了用于存储服务机密的非对称密码库。
-
您已为在 IdM 主机上运行的 web 服务生成了新的
httpd
密钥,以替换泄露的旧密钥。 -
新的
httpd
密钥存储在 Ansible 控制器上,例如 /usr/share/doc/ansible-freeipa/playbooks/vault/private-key-to-an-externally-certificate.pem 文件中。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/vault
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/vault
打开清单文件,并确保正确定义了以下主机:
-
[ipaserver]
部分中的 IdM 服务器。 要检索
[webservers]
部分中的机密的主机。例如,要指示 Ansible 检索到 webserver1.idm.example.com 和webserver2.idm.example.com 的 secret,请输入:[ipaserver] server.idm.example.com [webservers] webserver1.idm.example.com webserver2.idm.example.com
重要确保列表不包含当前 examplewebserver3.idm.example.com 中被入侵的 web 服务器。
-
- 打开 data-archive-in-asymmetric-vault-copy.yml 文件进行编辑。
通过在
ipavault
任务部分设置以下变量来修改该文件:-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 -
将
name
变量设置为 vault 的名称,如 secret_vault。 -
将
service
变量设置为密码库的服务所有者,如 HTTP/webserver.idm.example.com。 -
将
中的变量
设置为 "{{ lookup('file', 'new-private-key-to-an-externally-certificate.pem')| b64encode }}"。这可确保 Ansible 使用私钥从 Ansible 控制器上的工作目录检索 文件,而不是从 IdM 服务器检索。 将
action
变量设置为member
。对于当前示例,此修改过的 Ansible playbook 文件:
--- - name: Tests hosts: ipaserver become: true gather_facts: false tasks: - ipavault: ipaadmin_password: Secret123 name: secret_vault service: HTTP/webserver.idm.example.com in: "{{ lookup('file', 'new-private-key-to-an-externally-signed-certificate.pem') | b64encode }}" action: member
-
将
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file data-archive-in-asymmetric-vault-copy.yml
- 打开 retrieve-data-asymmetric-vault-copy.yml 文件进行编辑。
通过在
ipavault
任务部分设置以下变量来修改该文件:-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 -
将
name
变量设置为 vault 的名称,如 secret_vault。 -
将
service
变量设置为密码库的服务所有者,如 HTTP/webserver1.idm.example.com。 -
将
private_key_file
变量设置为用于检索服务 vault secret 的私钥的位置。 -
将
变量
设置为 IdM 服务器上您要检索 new-private-key-to-an-externally-certificate.pem 机密的位置,如当前工作目录。 将
action
变量设置为member
。对于当前示例,此修改过的 Ansible playbook 文件:
--- - name: Retrieve data from vault hosts: ipaserver become: no gather_facts: false tasks: - name: Retrieve data from the service vault ipavault: ipaadmin_password: Secret123 name: secret_vault service: HTTP/webserver1.idm.example.com vault_type: asymmetric private_key: "{{ lookup('file', 'service-private.pem') | b64encode }}" out: new-private-key-to-an-externally-signed-certificate.pem state: retrieved
-
将
在 playbook 中添加一个部分,它将从 IdM 服务器检索数据文件到 Ansible 控制器:
--- - name: Retrieve data from vault hosts: ipaserver become: yes gather_facts: false tasks: [...] - name: Retrieve data file fetch: src: new-private-key-to-an-externally-signed-certificate.pem dest: ./ flat: yes mode: 0600
在 playbook 中添加一个部分,它将检索到的 new-private-key-to-an-externally-certificate.pem 文件从 上的 Ansible 控制器传输到清单文件的
webservers
部分:--- - name: Send data file to webservers become: yes gather_facts: no hosts: webservers tasks: - name: Send data to webservers copy: src: new-private-key-to-an-externally-signed-certificate.pem dest: /etc/pki/tls/private/httpd.key mode: 0444
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file retrieve-data-asymmetric-vault-copy.yml
其它资源
-
有关使用 Ansible 管理 IdM vaults 和服务 secret 以及 playbook 变量的更多信息,请参阅
/usr/share/doc/ansible-freeipa/ 目录中提供的 README-
vault.md Markdown 文件和/usr/share/doc/ansible-freeipa/playbooks/vault/
目录中的示例 playbook。
第 23 章 使用 Ansible 在 IdM 中确保存在或不存在服务
使用 Ansible service
模块时,管理员可以确保 IdM 中存在或不存在不原生 IdM 的特定服务。例如,您可以使用 service
模块:
检查 IdM 客户端中是否存在手动安装的服务,并在缺少该服务时自动安装该服务。详情请查看:
- 检查在 IdM 中注册的服务是否已附加证书,并在缺少该证书时自动安装该证书。详情请查看:
- 确保 IdM 服务条目中存在外部签名的证书。
允许 IdM 用户和主机检索并创建服务 keytab。详情请查看:
允许 IdM 用户和组向服务添加 Kerberos 别名。详情请查看:
检查 IdM 客户端中是否不存在服务,并在该服务存在时自动删除该服务。详情请查看:
23.1. 使用 Ansible playbook 在 IdM 中存在 HTTP 服务
本节论述了如何使用 Ansible playbook 在 IdM 中确保存在 HTTP 服务器。
先决条件
- 托管 HTTP 服务的系统是一个 IdM 客户端。
- 您有 IdM 管理员密码。
流程
创建一个清单文件,如
inventory.file
:$ touch inventory.file
打开
inventory.file
,并在[ipaserver]
部分中定义您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
生成
/usr/share/doc/ansible-freeipa/playbooks/service/service-is-present.yml
Ansible playbook 文件的副本。例如:$ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-copy.yml
打开
/usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-copy.yml
Ansible playbook 文件进行编辑:--- - name: Playbook to manage IPA service. hosts: ipaserver become: true gather_facts: false tasks: # Ensure service is present - ipaservice: ipaadmin_password: Secret123 name: HTTP/client.idm.example.com
调整文件:
-
更改
ipaadmin_password
变量定义的 IdM 管理员密码。 -
更改运行 HTTP 服务的 IdM 客户端的名称,如
ipaservice
任务的名称
变量所定义。
-
更改
- 保存并退出文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-copy.yml
验证步骤
- 以 IdM 管理员身份登录 IdM Web UI。
-
导航到
Identity
→Services
。
如果 Services 列表中列出了 HTTP/client.idm.example.com@IDM.EXAMPLE.COM,Ansible playbook 已成功添加到 IdM。
其它资源
- 您可以通过向 Apache HTTP 服务器添加 TLS 加密来保护 HTTP 服务器和浏览器客户端之间的通信。
- 您可以从 IdM 证书颁发机构请求 HTTP 服务的证书。如需更多信息,请参阅使用 certmonger 为服务获取 IdM 证书中所述的步骤。
23.2. 使用 Ansible playbook,确保在 IdM 中存在于非IdM 客户端中的 HTTP 服务
本节论述了如何确保在 IdM 中使用 Ansible playbook 在不属于 IdM 客户端的主机中存在 HTTP 服务器。通过将 HTTP 服务器添加到 IdM 中,您还会将主机添加到 IdM。
先决条件
- 您已在主机上安装了 HTTP 服务。
- 设置 HTTP 的主机不是 IdM 客户端。否则,请按照使用 Ansible playbook 在 IdM 中保证 HTTP 服务存在中的步骤进行操作。
- 您有 IdM 管理员密码。
- 主机的 DNS A 记录 - 或 AAAA 记录(如果使用 IPv6)
流程
创建一个清单文件,如
inventory.file
:$ touch inventory.file
打开
inventory.file
,并在[ipaserver]
部分中定义您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
生成
/usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-without-host-check.yml
Ansible playbook 文件的副本。例如:$ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-without-host-check.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-without-host-check-copy.yml
打开复制的文件
/usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-without-host-check-copy.yml
以进行编辑。在ipa
和service
任务中找到 ipaadmin_passwordname
变量:--- - name: Playbook to manage IPA service. hosts: ipaserver become: true gather_facts: false tasks: # Ensure service is present - ipaservice: ipaadmin_password: MyPassword123 name: HTTP/www2.example.com skip_host_check: yes
调整文件:
-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 -
将
name
变量设置为运行 HTTP 服务的主机的名称。
-
将
- 保存并退出文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-without-host-check-copy.yml
验证步骤
- 以 IdM 管理员身份登录 IdM Web UI。
-
导航到
Identity
→Services
。
现在,您可以看到 Services 列表中列出的 HTTP/client.idm.example.com@IDM.EXAMPLE.COM。
23.3. 使用 Ansible playbook 确保在没有 DNS 的 IdM 客户端上存在 HTTP 服务
本节论述了如何使用 Ansible playbook 确保存在在 IdM 客户端中运行的 HTTP 服务器。场景表示,如果使用 IPv6 而不是 IPv4,IdM 主机没有可用的 DNS A 条目 - 或没有 DNS AAAA 条目。
先决条件
- 托管 HTTP 服务的系统已在 IdM 中注册。
- 主机的 DNS A 或 DNS AAAA 记录可能不存在。否则,如果主机的 DNS 记录存在,请按照以下步骤确保使用 Ansible playbook 在 IdM 中存在 HTTP 服务。
- 您有 IdM 管理员密码。
流程
创建一个清单文件,如
inventory.file
:$ touch inventory.file
打开
inventory.file
,并在[ipaserver]
部分中定义您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
生成
/usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-with-host-force.yml
Ansible playbook 文件的副本。例如:$ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-with-host-force.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-with-host-force-copy.yml
打开复制的文件
/usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-with-host-force-copy.yml
,以进行编辑。在ipa
和service
任务中找到 ipaadmin_passwordname
变量:--- - name: Playbook to manage IPA service. hosts: ipaserver become: true gather_facts: false tasks: # Ensure service is present - ipaservice: ipaadmin_password: MyPassword123 name: HTTP/ihavenodns.info force: yes
调整文件:
-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 -
将
name
变量设置为运行 HTTP 服务的主机的名称。
-
将
- 保存并退出文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-is-present-with-host-force-copy.yml
验证步骤
- 以 IdM 管理员身份登录 IdM Web UI。
-
导航到
Identity
→Services
。
现在,您可以看到 Services 列表中列出的 HTTP/client.idm.example.com@IDM.EXAMPLE.COM。
23.4. 使用 Ansible playbook,确保 IdM 服务条目中存在外部签名的证书
本节论述了如何使用 ansible-freeipa
服务
模块来确保外部证书颁发机构(CA)发布的证书附加到 HTTP 服务的 IdM 条目。如果您的 IdM CA 使用自签名证书,则由外部 CA 而不是 IdM CA 签名的 HTTP 服务证书特别有用。
先决条件
- 您已在主机上安装了 HTTP 服务。
- 您已 将 HTTP 服务注册到 IdM。
- 您有 IdM 管理员密码。
- 您有一个外部签名的证书,其 Subject 对应于 HTTP 服务的主体。
流程
创建一个清单文件,如
inventory.file
:$ touch inventory.file
打开
inventory.file
,并在[ipaserver]
部分中定义您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
生成
/usr/share/doc/ansible-freeipa/playbooks/service/service-member-certificate-present.yml
文件的副本,例如:$ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-member-certificate-present.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-member-certificate-present-copy.yml
可选: 如果证书采用 Privacy Enhanced Mail(PEM)格式,请将证书转换为可辨识的编码规则(DER)格式,以便通过命令行界面(CLI)更轻松地处理:
$ openssl x509 -outform der -in cert1.pem -out cert1.der
使用
base64
命令将DER
文件解码为标准输出。使用-w0
选项禁用换行:$ base64 cert1.der -w0 MIIC/zCCAeegAwIBAgIUV74O+4kXeg21o4vxfRRtyJm...
- 将证书从标准输出复制到剪贴板。
打开
/usr/share/doc/ansible-freeipa/playbooks/service/service-member-certificate-present-copy.yml
文件进行编辑并查看其内容:--- - name: Service certificate present. hosts: ipaserver become: true gather_facts: false tasks: # Ensure service certificate is present - ipaservice: ipaadmin_password: MyPassword123 name: HTTP/www.example.com certificate: | - MIICBjCCAW8CFHnm32VcXaUDGfEGdDL/... [...] action: member state: present
调整文件:
-
将使用
证书
变量定义的证书替换为您从 CLI 复制的证书。请注意,如果您使用带有所示"|"管道字符的certificate:
变量,您可以输入证书 THIS WAY,而不是让它在一个行中输入。这样可以更轻松地读取证书。 -
更改由
ipaadmin_password
变量定义的 IdM 管理员密码。 -
更改运行 HTTP 服务的 IdM 客户端的名称,由
name
变量定义。 - 更改任何其他相关变量。
-
将使用
- 保存并退出文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-member-certificate-present-copy.yml
验证步骤
- 以 IdM 管理员身份登录 IdM Web UI。
-
导航到
Identity
→Services
。 - 使用新添加的证书,单击服务的名称,如 HTTP/client.idm.example.com。
在右侧的 Service Certificate
部分中,您现在可以看到新添加的证书。
23.5. 使用 Ansible playbook 来允许 IdM 用户、组、主机或主机组创建服务的 keytab
keytab 是一个包含 Kerberos 主体和加密密钥对的文件。keytab 文件通常用于允许脚本使用 Kerberos 自动进行身份验证,无需人工交互或访问存储在纯文本文件中的密码。然后,脚本可以使用获取的凭据来访问存储在远程系统上的文件。
作为身份管理(IdM)管理员,您可以允许其他用户为 IdM 中运行的服务检索甚至创建 keytab。通过允许特定用户和用户组创建 keytab,您可以将服务管理委派给他们,而无需共享 IdM 管理员密码。此委派提供了更加精细的系统管理。
本节论述了如何允许特定的 IdM 用户、用户组、主机和主机组为 IdM 客户端上运行的 HTTP 服务创建 keytab。具体来说,它描述了如何允许 user01 IdM 用户为名为 client.idm.example.com 的 IdM 客户端上运行的 HTTP 服务创建 keytab。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
- 您已 将 HTTP 服务注册到 IdM。
- 托管 HTTP 服务的系统是一个 IdM 客户端。
- IdM 中已存在您要允许创建 keytab 的 IdM 用户和用户组。
- IdM 中已存在您要允许创建 keytab 的 IdM 主机和主机组。
流程
创建一个清单文件,如
inventory.file
:$ touch inventory.file
打开
inventory.file
,并在[ipaserver]
部分中定义您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
生成
/usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_create_keytab-present.yml
Ansible playbook 文件的副本。例如:$ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_create_keytab-present.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_create_keytab-present-copy.yml
-
打开
/usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_create_keytab-present-copy.yml
Ansible playbook 文件进行编辑。 通过更改以下内容来调整文件:
-
由
ipaadmin_password
变量指定的 IdM 管理员密码。 - 运行 HTTP 服务的 IdM 客户端的名称。在当前示例中,它是 HTTP/client.idm.example.com
-
allow_create_keytab_user:
部分中列出的 IdM 用户名称。在当前示例中,是 user01。 -
allow_create_keytab_group:
部分中列出的 IdM 用户组名称。 -
allow_create_keytab_host:
部分中列出的 IdM 主机名称。 -
allow_create_keytab_hostgroup:
部分中所列的 IdM 主机组名称。 由
tasks
部分中name
变量指定的任务名称。在适应当前示例后,复制的文件类似如下:
--- - name: Service member allow_create_keytab present hosts: ipaserver become: true tasks: - name: Service HTTP/client.idm.example.com members allow_create_keytab present for user01 ipaservice: ipaadmin_password: Secret123 name: HTTP/client.idm.example.com allow_create_keytab_user: - user01 action: member
-
由
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_create_keytab-present-copy.yml
验证步骤
以 IdM 用户身份 SSH 到 IdM 服务器,该用户具有为特定 HTTP 服务创建 keytab 的权限:
$ ssh user01@server.idm.example.com Password:
使用
ipa-getkeytab
命令为 HTTP 服务生成新 keytab:$ ipa-getkeytab -s server.idm.example.com -p HTTP/client.idm.example.com -k /etc/httpd/conf/krb5.keytab
s 选项指定用于
生成 keytab 的密钥分发中心(KDC)服务器。p 选项指定
您要创建的 keytab 主体。k 选项指定
将新密钥附加到的 keytab 文件。如果文件不存在,则会创建此文件。
如果命令不产生错误,您以 user01 身份成功创建了 HTTP/client.idm.example.com 的 keytab。
23.6. 使用 Ansible playbook 来允许 IdM 用户、组、主机或主机组检索服务的 keytab
keytab 是一个包含 Kerberos 主体和加密密钥对的文件。keytab 文件通常用于允许脚本使用 Kerberos 自动进行身份验证,无需人工交互或访问存储在纯文本文件中的密码。然后,脚本可以使用获取的凭据来访问存储在远程系统上的文件。
作为 IdM 管理员,您可以允许其他用户为 IdM 中运行的服务检索甚至创建 keytab。
本节论述了如何允许特定的 IdM 用户、用户组、主机和主机组检索在 IdM 客户端上运行的 HTTP 服务的 keytab。具体来说,它描述了如何允许 user01 IdM 用户检索 client.idm.example.com 上运行的 HTTP 服务的 keytab。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
- 您已 将 HTTP 服务注册到 IdM。
- IdM 中已存在您要允许检索 keytab 的 IdM 用户和用户组。
- IdM 中已存在您要允许检索 keytab 的 IdM 主机和主机组。
流程
创建一个清单文件,如
inventory.file
:$ touch inventory.file
打开
inventory.file
,并在[ipaserver]
部分中定义您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
生成
/usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_retrieve_keytab-present.yml
Ansible playbook 文件的副本。例如:$ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_retrieve_keytab-present.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_retrieve_keytab-present-copy.yml
-
打开复制的文件
/usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_retrieve_keytab-present-copy.yml
以进行编辑: 调整文件:
-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 -
将
ipaservice
任务的name
变量设置为 HTTP 服务的主体。在当前示例中,它是 HTTP/client.idm.example.com -
在
allow_retrieve_keytab_group:
部分中指定 IdM 用户的名称。在当前示例中,是 user01。 -
在
allow_retrieve_keytab_group:
部分中指定 IdM 用户组的名称。 -
在
allow_retrieve_keytab_group:
部分中指定 IdM 主机的名称。 -
在
allow_retrieve_keytab_group:
部分中指定 IdM 主机组的名称。 使用
tasks
部分中的name 变量指定
任务的名称。在适应当前示例后,复制的文件类似如下:
--- - name: Service member allow_retrieve_keytab present hosts: ipaserver become: true tasks: - name: Service HTTP/client.idm.example.com members allow_retrieve_keytab present for user01 ipaservice: ipaadmin_password: Secret123 name: HTTP/client.idm.example.com allow_retrieve_keytab_user: - user01 action: member
-
将
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-member-allow_retrieve_keytab-present-copy.yml
验证步骤
以 IdM 用户身份 SSH 到 IdM 服务器,并具有权限检索 HTTP 服务的 keytab:
$ ssh user01@server.idm.example.com Password:
使用
ipa-getkeytab
命令和-r
选项来检索 keytab:$ ipa-getkeytab -r -s server.idm.example.com -p HTTP/client.idm.example.com -k /etc/httpd/conf/krb5.keytab
s 选项指定
您要从中检索 keytab 的密钥分发中心(KDC)服务器。p 选项指定
您要检索的 keytab 主体。k 选项指定
您要将检索到的密钥附加到的 keytab 文件。如果文件不存在,则会创建此文件。
如果命令不产生错误,您以 user01 身份成功检索了 HTTP/client.idm.example.com 的 keytab。
23.7. 使用 Ansible playbook 确保存在服务的 Kerberos 主体别名
在某些情况下,IdM 管理员可启用 IdM 用户、主机或服务使用 Kerberos 主体别名进行身份验证。这些情况包括:
- 用户名已更改,但该用户应该能够使用先前和新用户名登录系统。
- 即使 IdM Kerberos 域与电子邮件域不同,用户也需要使用电子邮件地址登录。
本节论述了如何为 client.idm.example.com 上运行的 HTTP/mycompany.idm.example.com 创建 HTTP/mycompany.example.com 主体别名。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。
- 您已在主机上设置了 HTTP 服务。
- 您已 将 HTTP 服务注册到 IdM。
- 设置 HTTP 的主机是一个 IdM 客户端。
流程
创建一个清单文件,如
inventory.file
:$ touch inventory.file
打开
inventory.file
,并在[ipaserver]
部分中定义您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
生成
/usr/share/doc/ansible-freeipa/playbooks/service/service-member-principal-present.yml
Ansible playbook 文件的副本。例如:$ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-member-principal-present.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-member-principal-present-copy.yml
-
打开
/usr/share/doc/ansible-freeipa/playbooks/service/service-member-principal-present-copy.yml
Ansible playbook 文件进行编辑。 通过更改以下内容来调整文件:
-
由
ipaadmin_password
变量指定的 IdM 管理员密码。 -
通过
name
变量指定的服务名称。这是服务的规范主体名称。在当前示例中,它是 HTTP/client.idm.example.com。 -
由主体变量指定的 Kerberos
主体
别名。这是您要添加到name
变量定义的服务的别名。在当前示例中,它是 host/mycompany.idm.example.com。 由
tasks
部分中name
变量指定的任务名称。在适应当前示例后,复制的文件类似如下:
--- - name: Service member principal present hosts: ipaserver become: true tasks: - name: Service HTTP/client.idm.example.com member principals host/mycompany.idm.exmaple.com present ipaservice: ipaadmin_password: Secret123 name: HTTP/client.idm.example.com principal: - host/mycompany.idm.example.com action: member
-
由
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-member-principal-present-copy.yml
如果运行 playbook 会导致 0 个无法访问和 0 个失败的任务,您已成功为 HTTP/client.idm.example.com 服务创建了 host/mycompany.idm.example.com Kerberos 主体。
其它资源
- 如需有关 Kerberos 主体别名并在不使用 Ansible 的情况下管理这些别名的更多信息,请参阅为用户、主机和服务管理 Kerberos 主体别名。
23.8. 使用 Ansible playbook 确保 IdM 中缺少 HTTP 服务
本节论述了如何从 IdM 取消滚动服务。更具体地说,它描述了如何使用 Ansible playbook 来确保 IdM 中缺少名为 HTTP/client.idm.example.com 的 HTTP 服务器。
先决条件
- 您有 IdM 管理员密码。
流程
创建一个清单文件,如
inventory.file
:$ touch inventory.file
打开
inventory.file
,并在[ipaserver]
部分中定义您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
生成
/usr/share/doc/ansible-freeipa/playbooks/service/service-is-absent.yml
Ansible playbook 文件的副本。例如:$ cp /usr/share/doc/ansible-freeipa/playbooks/service/service-is-absent.yml /usr/share/doc/ansible-freeipa/playbooks/service/service-is-absent-copy.yml
-
打开
/usr/share/doc/ansible-freeipa/playbooks/service/service-is-absent-copy.yml
Ansible playbook 文件进行编辑。 通过更改以下内容来调整文件:
-
由
ipaadmin_password
变量定义的 IdM 管理员密码。 HTTP 服务的 Kerberos 主体,由
ipaservice
任务的名称
变量定义。在适应当前示例后,复制的文件类似如下:
--- - name: Playbook to manage IPA service. hosts: ipaserver become: true gather_facts: false tasks: # Ensure service is absent - ipaservice: ipaadmin_password: Secret123 name: HTTP/client.idm.example.com state: absent
-
由
- 保存并退出文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i path_to_inventory_directory/inventory.file /usr/share/doc/ansible-freeipa/playbooks/service/service-is-absent-copy.yml
验证步骤
- 以 IdM 管理员身份登录 IdM Web UI。
-
导航到
Identity
→Services
。
如果您无法在 Services 列表中看到 HTTP/client.idm.example.com@IDM.EXAMPLE.COM 服务,则已成功确保了在 IdM 中缺少 HTTP/client.idm.example.com@IDM.EXAMPLE.COM 服务。
其它资源
-
您可以查看 Ansible playbook 示例,以确保 IdM 中是否存在服务,包括在
/usr/share/doc/ansible
Markdown 文件中可能的变量列表。-freeipa/ 目录中可用的README-
service.md -
您可以查看 Ansible playbook 示例,以确保
/usr/share/doc/ansible-freeipa/playbooks/config
目录中的 IdM 中存在和不存在服务。
第 24 章 使用 Ansible playbook 在 IdM 中管理全局 DNS 配置
使用 Red Hat Ansible Engine dnsconfig
模块,您可以配置 Identity Management(IdM)DNS 的全局配置。全局 DNS 配置中定义的设置应用到所有 IdM DNS 服务器。但是,全局配置优先于特定 IdM DNS 区的配置。
dnsconfig
模块支持以下变量:
- 全局转发器,特别是 IP 地址和用于通信的端口。
- 全局转发策略:只有、first 或 none。有关这些 DNS 转发策略类型的详情,请查看 IdM 中的 DNS 转发策略。
- 同步正向查找和反向查找区域。
先决条件
DNS 服务安装在 IdM 服务器上。有关如何使用集成 DNS 安装 IdM 服务器的详情,请查看以下链接之一:
本章包括以下部分:
24.1. IdM 如何确保 NetworkManager 不会删除 /etc/resolv.conf 中的全局转发器
使用集成 DNS 安装 Identity Management(IdM)将 /etc/resolv.conf
文件配置为指向 127.0.0.1
localhost 地址:
# Generated by NetworkManager search idm.example.com nameserver 127.0.0.1
在某些情况下,如使用 动态主机配置
协议(DHCP)的网络,NetworkManager
服务可能会恢复对 /etc/resolv.conf
文件的更改。为了使 DNS 配置持久,IdM DNS 安装过程还通过以下方式配置 NetworkManager
服务:
DNS 安装脚本会创建一个
/etc/NetworkManager/conf.d/zzz-ipa.conf
NetworkManager
配置文件来控制搜索顺序和 DNS 服务器列表:# auto-generated by IPA installer [main] dns=default [global-dns] searches=$DOMAIN [global-dns-domain-*] servers=127.0.0.1
-
NetworkManager
服务已重新加载,该服务始终使用/etc/
文件。这时为NetworkManager/conf.d/ 目录中最后一个文件中的设置创建 /etc/resolv
.confzzz-ipa.conf
文件。
不要手动修改 /etc/resolv.conf
文件。
24.2. 使用 Ansible 在 IdM 中存在 DNS 全局转发器
本节论述了 Identity Management(IdM)管理员可以如何使用 Ansible playbook 来确保 IdM 中存在 DNS 全局转发器。在下例中,IdM 管理员确保存在 DNS 全局转发器至 Internet 协议(IP)v4 地址为 7.7.9.9
,IP v6 地址为 2001:db8::1:0
的 DNS 服务器 。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。这是执行流程中步骤的主机。
- 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
打开清单文件,并确保
[ipaserver]
部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置server.idm.example.com
,请输入:[ipaserver] server.idm.example.com
制作
forwarders-absent.yml
Ansible playbook 文件的副本。例如:$ cp forwarders-absent.yml ensure-presence-of-a-global-forwarder.yml
-
打开
ensure-presence-global-forwarder.yml
文件进行编辑。 通过设置以下变量来调整文件:
-
将 playbook
的 name
变量更改为 Playbook,以确保 IdM DNS 中存在全局转发器
。 -
在
tasks
部分中,将任务的名称
更改为确保存在 DNS global forwarder 在端口 53 上存在 7.7.9.9 和 2001:db8::1:0
。 在
ipadnsconfig
部分的forwarders
部分:-
将第一个
ip_address
值更改为全局转发器的 IPv4 地址:7.7.9.9
。 -
将第二个
ip_address
值更改为全局转发器的 IPv6 地址:2001:db8::1:0
。 -
验证
端口
值是否已设置为53
。
-
将第一个
将
状态
更改为present
。对于当前示例,此修改过的 Ansible playbook 文件:
--- - name: Playbook to ensure the presence of a global forwarder in IdM DNS hosts: ipaserver become: true tasks: - name: Ensure the presence of a DNS global forwarder to 7.7.9.9 and 2001:db8::1:0 on port 53 ipadnsconfig: forwarders: - ip_address: 7.7.9.9 - ip_address: 2001:db8::1:0 port: 53 state: present
-
将 playbook
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file ensure-presence-of-a-global-forwarder.yml
其它资源
-
您可以在
/usr/share/doc/ansible
-freeipa/ 目录中的
-freeipaREADME-dnsconfig.md
Markdown 文件中看到 ansibleipadnsconfig 模块的
更多 Ansible playbook 示例。该文件还包含ipadnsconfig
变量的定义。
24.3. 使用 Ansible 确保 IdM 中没有 DNS 全局转发器
本节论述了 Identity Management(IdM)管理员可以如何使用 Ansible playbook 来确保 IdM 中缺少 DNS 全局转发器。在以下示例步骤中,IdM 管理员确保没有 DNS 全局转发程序到 Internet 协议(IP)v4 地址为 8.8.6.6
,IP v6 地址为 2001:4860:4860::8800
的 DNS 服务器 。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。这是执行流程中步骤的主机。
- 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
打开清单文件,并确保
[ipaserver]
部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置server.idm.example.com
,请输入:[ipaserver] server.idm.example.com
制作
forwarders-absent.yml
Ansible playbook 文件的副本。例如:$ cp forwarders-absent.yml ensure-absence-of-a-global-forwarder.yml
-
打开
ensure-absence-of-a-global-forwarder.yml
文件进行编辑。 通过设置以下变量来调整文件:
-
将 playbook
的 name
变量更改为 Playbook,以确保 IdM DNS 中缺少全局转发器
。 -
在
tasks
部分中,将任务的名称
更改为确保没有 DNS 全局转发器在端口 53 上为 8.8.6.6 和 2001:4860:4860::8800
。 在
ipadnsconfig
部分的forwarders
部分:-
将第一个
ip_address
值更改为全局转发器的 IPv4 地址:8.8.6.6
。 -
将第二个
ip_address
值更改为全局转发器的 IPv6 地址:2001:4860:4860::8800
。 -
验证
端口
值是否已设置为53
。
-
将第一个
验证
state
已设为absent
。对于当前示例,此修改过的 Ansible playbook 文件:
--- - name: Playbook to ensure the absence of a global forwarder in IdM DNS hosts: ipaserver become: true tasks: - name: Ensure the absence of a DNS global forwarder to 8.8.6.6 and 2001:4860:4860::8800 on port 53 ipadnsconfig: forwarders: - ip_address: 8.8.6.6 - ip_address: 2001:4860:4860::8800 port: 53 state: absent
-
将 playbook
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file ensure-absence-of-a-global-forwarder.yml
其它资源
-
您可以在
/usr/share/doc/ansible
-freeipa/ 目录中的
-freeipaREADME-dnsconfig.md
Markdown 文件中看到 ansibleipadnsconfig 模块的
更多 Ansible playbook 示例。该文件还包含ipadnsconfig
变量的定义。
24.4. IdM 中的 DNS 转发策略
IdM 支持 第一个
且 唯一的
标准 BIND 转发策略,以及任何 IdM
特定的转发策略。
- 首先转发(默认)
-
IdM BIND 服务将 DNS 查询转发到配置的转发器。如果因为服务器错误或超时查询失败,BIND 会使用 Internet 上的服务器回退到递归解析。
forward first
策略是默认策略,它适合优化 DNS 流量。 - 仅转发
-
IdM BIND 服务将 DNS 查询转发到配置的转发器。如果因为服务器错误或超时查询失败,BIND 会向客户端返回错误。建议在带有分割 DNS 配置的环境中使用
forward only
策略。 - none(转发禁用)
-
DNS 查询不会通过
none
转发策略转发。禁用转发仅作为全局转发配置的特定区覆盖。这个选项等同于在 BIND 配置中指定空转发器列表。
您不能使用转发将 IdM 中的数据与其他 DNS 服务器的数据组合。您只能在 IdM DNS 中转发主区的查询。
默认情况下,如果查询的 DNS 名称属于 IdM 服务器具有权威的区域,BIND 服务不会将查询转发到另一服务器。在这种情况下,如果无法在 IdM 数据库中找到查询的 DNS 名称,则会返回 NXDOMAIN
回答。未使用转发。
例 24.1. 场景示例
IdM 服务器对 test.example 具有权威。DNS 区域.BIND 配置为将查询转发到 IP 地址 192.0.2.254 的 DNS 服务器。
客户端发送对不存在.test.example的查询时。DNS 名称,BIND 检测到 IdM 服务器对 test.example. 区域具有权威,并且不会将查询转发到 192.0.2.254. 服务器。因此,DNS 客户端会收到 NXDomain
错误消息,通知用户查询的域不存在。
24.5. 使用 Ansible playbook 确保 IdM DNS 全局配置中设置了 forward first 策略
本节论述了 Identity Management(IdM)管理员可以如何使用 Ansible playbook 确保 IdM DNS 中的全局转发策略设置为首先转发。
如果您使用 forward first DNS 转发策略,DNS 查询将转发到配置的转发器。如果因为服务器错误或超时查询失败,BIND 会使用 Internet 上的服务器回退到递归解析。forward first 策略是默认策略。它适用于流量优化。
先决条件
-
您已在 Ansible 控制器上安装了
ansible-freeipa
软件包,即执行该流程的主机。如需更多信息,请参阅安装 ansible-freeipa 软件包。 - 您知道 IdM 管理员密码。
- 您的 IdM 环境包含一个集成的 DNS 服务器。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
打开清单文件,并确保
[ipaserver]
部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
复制 set-configuration.yml Ansible playbook 文件。例如:
$ cp set-configuration.yml set-forward-policy-to-first.yml
- 打开 set-forward-policy-to-first.yml 文件进行编辑。
通过在
ipadnsconfig
task 部分中设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 将
forward_policy
变量设置为 first。删除原始 playbook 的其他所有行。这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to set global forwarding policy to first hosts: ipaserver become: true tasks: - name: Set global forwarding policy to first. ipadnsconfig: ipaadmin_password: Secret123 forward_policy: first
-
将
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file set-forward-policy-to-first.yml
其它资源
- 有关 IdM DNS 中可用的转发策略类型的更多信息,请参阅 IdM 中的 DNS 转发策略。
-
有关使用
ansible-freeipa
ipadnsconfig
模块的更多 Ansible playbook 示例,请参阅/usr/share/doc/ansible
Markdown 文件。该文件还包含-freeipa/ 目录中提供的README-
dnsconfig.mdipadnsconfig
变量的定义。 -
有关使用
ipadnsconfig
模块的更多 Ansible playbook 示例,请参阅/usr/share/doc/ansible-freeipa/playbooks/dnsconfig
目录。
24.6. 使用 Ansible playbook 确保 IdM DNS 中禁用了全局转发器
本节论述了 Identity Management(IdM)管理员可以如何使用 Ansible playbook 来确保在 IdM DNS 中禁用全局转发器。禁用的方法是将 forward_policy
变量设置为 none。
禁用全局转发器会导致 DNS 查询不会被转发。禁用转发仅作为全局转发配置的特定区覆盖。此选项等同于在 BIND 配置中指定空转发器列表。
先决条件
-
您已在 Ansible 控制器上安装了
ansible-freeipa
软件包,即执行该流程的主机。如需更多信息,请参阅安装 ansible-freeipa 软件包。 - 您知道 IdM 管理员密码。
- 您的 IdM 环境包含一个集成的 DNS 服务器。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
打开清单文件,并确保
[ipaserver]
部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
生成 disable-global-forwarders.yml Ansible playbook 文件的副本。例如:
$ cp disable-global-forwarders.yml disable-global-forwarders-copy.yml
- 打开 disable-global-forwarders-copy.yml 文件进行编辑。
通过在
ipadnsconfig
task 部分中设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 将
forward_policy
变量设置为 none。这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to disable global DNS forwarders hosts: ipaserver become: true tasks: - name: Disable global forwarders. ipadnsconfig: ipaadmin_password: Secret123 forward_policy: none
-
将
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file disable-global-forwarders-copy.yml
其它资源
- 有关 IdM DNS 中可用的转发策略类型的更多信息,请参阅 IdM 中的 DNS 转发策略。
-
有关使用
ansible-freeipa
ipadnsconfig
模块的更多 Ansible playbook 示例,请参阅/usr/share/doc/ansible
Markdown 文件。该文件还包含-freeipa/ 目录中提供的README-
dnsconfig.mdipadnsconfig
变量的定义。 -
有关使用
ipadnsconfig
模块的更多 Ansible playbook 示例,请参阅/usr/share/doc/ansible-freeipa/playbooks/dnsconfig
目录。
24.7. 使用 Ansible playbook 确保 IdM DNS 中禁用了正向和反向查找区域的同步
本节论述了 Identity Management(IdM)管理员可以如何使用 Ansible playbook 来确保 IdM DNS 中不同步正向和反向查找区域。
先决条件
-
您已在 Ansible 控制器上安装了
ansible-freeipa
软件包,即执行该流程的主机。如需更多信息,请参阅安装 ansible-freeipa 软件包。 - 您知道 IdM 管理员密码。
- 您的 IdM 环境包含一个集成的 DNS 服务器。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
打开清单文件,并确保
[ipaserver]
部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
复制 disallow-reverse-sync.yml Ansible playbook 文件。例如:
$ cp disallow-reverse-sync.yml disallow-reverse-sync-copy.yml
- 打开 disallow-reverse-sync-copy.yml 文件进行编辑。
通过在
ipadnsconfig
task 部分中设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 将
allow_sync_ptr
变量设置为 no。这是当前示例修改的 Ansible playbook 文件:
--- - name: Playbook to disallow reverse record synchronization hosts: ipaserver become: true tasks: - name: Disallow reverse record synchronization. ipadnsconfig: ipaadmin_password: Secret123 allow_sync_ptr: no
-
将
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file disallow-reverse-sync-copy.yml
其它资源
-
有关使用
ansible-freeipa
ipadnsconfig
模块的更多 Ansible playbook 示例,请参阅/usr/share/doc/ansible
Markdown 文件。该文件还包含-freeipa/ 目录中提供的README-
dnsconfig.mdipadnsconfig
变量的定义。 -
有关使用
ipadnsconfig
模块的更多 Ansible playbook 示例,请参阅/usr/share/doc/ansible-freeipa/playbooks/dnsconfig
目录。
第 25 章 使用 Ansible playbook 管理 IdM DNS 区域
作为身份管理(IdM)管理员,您可以使用 ansible-freeipa
软件包中的 dnszone
模块来管理 IdM DNS 区域的工作方式。本章描述了以下主题和程序:
先决条件
- DNS 服务安装在 IdM 服务器上。有关如何使用 Red Hat Ansible Engine 安装带有集成 DNS 的 IdM 服务器的更多信息,请参阅使用 Ansible playbook 安装身份管理服务器。
25.1. 支持的 DNS 区类型
身份管理(IdM)支持两种类型的 DNS 区域:主区和 转发区域。这部分论述了这两个类型的区,并包括 DNS 转发的示例场景。
本指南对区域类型使用 BIND 术语,不同于用于 Microsoft Windows DNS 的术语。BIND 中的主要区域与 Microsoft Windows DNS 中的正向查找区域和 反向查找区域的作用相同。BIND 中的转发区域的作用与 Microsoft Windows DNS 中的条件转发器相同。
- 主 DNS 区域
主 DNS 区域包含权威 DNS 数据,并且可以接受动态 DNS 更新。此行为等同于标准 BIND 配置中的
类型 master
设置。您可以使用ipa dnszone-*
命令管理主区域。根据标准 DNS 规则,每个主区域必须包含
授权起始
(SOA)和名称服务器
(NS)记录。在创建 DNS 区域时,IdM 会自动生成这些记录,但您必须手动将 NS 记录复制到父区域,以创建正确委托。根据标准 BIND 行为,查询服务器不具有权威的名称将转发到其他 DNS 服务器。这些 DNS 服务器(称为转发器)可能是也可能不是查询的权威。
例 25.1. DNS 转发的示例
IdM 服务器包含
test.example.
主区域。此区域包含sub.test.example.
名称的 NS 委派记录。此外,test.example.
区域还配置了sub.text
转发器 IP 地址。.example 子区域的 192.0.2.
254查询名称
不存在.test.example.
的客户端会收到NXDomain
回答,并且不会发生转发,因为 IdM 服务器对此名称具有权威。另一方面,查询
host1.sub.test.example.
name 会转发到配置的转发器192.0.2.254
,因为 IdM 服务器对此名称没有权威。- 转发 DNS 区域
从 IdM 的角度来看,转发 DNS 区域不包含任何权威数据。事实上,正向"区"通常仅包含两段信息:
- 域名
- 与域关联的 DNS 服务器的 IP 地址
所有对属于定义的域的名称的查询都转发到指定的 IP 地址。此行为等同于标准 BIND 配置中的 type forward
设置。您可以使用 ipa dnsforwardzone-*
命令管理转发区。
转发 DNS 区域在 IdM-Active Directory(AD)信任的上下文中特别有用。如果 IdM DNS 服务器对 idm.example.com 区域具有权威,并且 AD DNS 服务器对 ad.example.com 区域具有权威,则 ad.example.com 是 idm.example.com 主区的 DNS 转发区域。这意味着,当查询来自 IdM 客户端以获取 somehost.ad.example.com 的 IP 地址时,查询将转发到 ad.example.com IdM DNS 转发区域中指定的 AD 域控制器。
25.2. 主要 IdM DNS 区的配置属性
身份管理(IdM)创建一个具有特定默认配置的新区域,如刷新周期、传输设置或缓存设置。在 IdM DNS 区属性中,您可以使用以下选项之一查找默认区配置的属性:
-
命令行界面(CLI)中的
dnszone-mod
命令。如需更多信息,请参阅在 IdM CLI 中编辑主 DNS 区域的配置。 - The IdM Web UI.如需更多信息,请参阅在 IdM Web UI 中编辑主 DNS 区域的配置。
-
使用
ipadnszone
模块的 Ansible playbook。如需更多信息,请参阅在 IdM 中管理 DNS 区域。
除了设置区域的实际信息外,这些设置定义了 DNS 服务器如何处理权威启动 (SOA)记录条目以及它如何从 DNS 名称服务器更新其记录。
表 25.1. IdM DNS 区域属性
属性 | ansible-freeipa 变量 | 描述 |
---|---|---|
权威名称服务器 |
| 设置主 DNS 名称服务器的域名,也称为 SOA MNAME。
默认情况下,每个 IdM 服务器在 SOA MNAME 字段中公告其自身。因此,使用 |
管理员电子邮件地址 |
| 设置要用于区域管理员的电子邮件地址。这默认为主机上的 root 帐户。 |
SOA 串行 |
| 在 SOA 记录中设置序列号。请注意,IdM 会自动设置版本号,用户不应该修改它。 |
SOA 刷新 |
| 设置次要 DNS 服务器在从主 DNS 服务器请求更新前等待的间隔(以秒为单位)。 |
SOA 重试 |
| 设置在重试失败的刷新操作前要等待的时间(以秒为单位)。 |
SOA 过期 |
| 设置次要 DNS 服务器在结束操作尝试之前尝试执行刷新更新的时间(以秒为单位)。 |
最低 SOA |
| 根据 RFC 2308,将生存时间(TTL)值(以秒为单位)设置为负缓存。 |
SOA 生存时间 |
|
为区域 apex 的记录设置 TTL(以秒为单位)。例如, |
默认生存时间 |
|
将默认时间设置为 live(TTL),以秒为单位,为之前未设置单个 TTL 值的区域中的所有值提供负缓存。更改生效后,需要在所有 IdM DNS 服务器上重新启动 |
BIND 更新策略 |
| 设置 DNS 区域中客户端允许的权限。 |
动态更新 |
| 启用对客户端的 DNS 记录的动态更新。 请注意,如果设置为 false,IdM 客户端计算机将无法添加或更新其 IP 地址。 |
允许传输 |
| 提供允许传输给定区域的 IP 地址或网络名称列表,用分号(;)分隔。
默认情况下禁用区域传送。默认的 |
允许查询 |
| 提供允许发出 DNS 查询的 IP 地址或网络名称列表,用分号(;)分隔。 |
允许 PTR 同步 |
| 设置区域的 A 或 AAAA 记录(转发记录)是否将自动与 PTR(反向)记录同步。 |
区域转发器 |
| 指定为 DNS 区域特别配置的转发器。这与 IdM 域中使用的任何全局转发器分开。 要指定多个转发器,请多次使用 选项。 |
forward 策略 |
| 指定 forward 策略。有关支持的策略的详情,请查看 IdM 中的 DNS 转发策略。 |
其它资源
-
您可以在
/usr/share/doc/ansible
-freeipa/ 目录中的
-freeipaREADME-dnszone.md
Markdown 文件中看到 ansibleipadnszone 模块
属性的更多定义。
25.3. 使用 Ansible 在 IdM DNS 中创建主区域
本节介绍身份管理(IdM)管理员如何使用 Ansible playbook 确保存在主 DNS 区域。在以下流程中使用的示例中,IdM 管理员确保存在 zone.idm.example.com DNS 区域。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。这是执行流程中步骤的主机。
- 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnszone
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/dnszone
打开清单文件,并确保
[ipaserver]
部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
生成 dnszone-present.yml Ansible playbook 文件的副本。例如:
$ cp dnszone-present.yml dnszone-present-copy.yml
- 打开 dnszone-present-copy.yml 文件进行编辑。
通过在
ipadnszone
task 部分中设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 将
zone_name
变量设置为 zone.idm.example.com。这是当前示例修改的 Ansible playbook 文件:
--- - name: Ensure dnszone present hosts: ipaserver become: true tasks: - name: Ensure zone is present. ipadnszone: ipaadmin_password: Secret123 zone_name: zone.idm.example.com state: present
-
将
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file dnszone-present-copy.yml
其它资源
- 如需有关 DNS 区的更多信息,请参阅 支持的 DNS 区类型。
-
您可以在
/usr/share/doc/ansible
-freeipa/ 目录中的
-freeipaREADME-dnszone.md
Markdown 文件中看到 ansibleipadnszone 模块的
更多 Ansible playbook 示例。该文件还包含ipadnszone
变量的定义。 -
您可以在
/usr/share/doc/ansible-freeipa/playbooks/dnszone 目录中看到
Ansible playbook 示例。ipadnszone
模块的
25.4. 使用 Ansible playbook 确保 IdM 中存在一个带有多个变量的主 DNS 区域
本节介绍身份管理(IdM)管理员如何使用 Ansible playbook 确保存在主 DNS 区域。在以下流程中使用的示例中,IdM 管理员确保存在 zone.idm.example.com DNS 区域。Ansible playbook 配置区域的多个参数。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。这是执行流程中步骤的主机。
- 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnszone
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/dnszone
打开清单文件,并确保
[ipaserver]
部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
生成 dnszone-all-params.yml Ansible playbook 文件的副本。例如:
$ cp dnszone-all-params.yml dnszone-all-params-copy.yml
- 打开 dnszone-all-params-copy.yml 文件进行编辑。
通过在
ipadnszone
task 部分中设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 -
将
zone_name
变量设置为 zone.idm.example.com。 -
如果要允许正向和反向记录同步,这是 A 和 AAAA 记录与 PTR 记录的同步,请将
allow_sync_ptr
变量设置为 true。 -
将
dynamic_update
变量设置为 true,以启用 IdM 客户端计算机添加或更新其 IP 地址。 -
将
dnssec
变量设置为 true,以允许区域中的记录内联 DNSSEC 签名。 -
将
allow_transfer
变量设置为区域中次要名称服务器的 IP 地址。 -
将
allow_query
变量设置为允许发出查询的 IP 地址或网络。 -
将
forwarders
变量设置为全局转发器的 IP 地址。 -
将
serial
变量设置为 SOA 记录序列号。 -
为区域中的 DNS 记录定义
刷新
、重试
、过期
、
最小
、ttl 和 default_ttl
值。 -
使用
nsec3param_rec 变量,为区域定义 NSEC3
PARAM 记录。 -
将
skip_overlap_check
变量设置为 true,从而强制创建 DNS,即使它与现有区域重叠。 将
skip_nameserver_check
设置为 true,从而强制 DNS 区域创建,即使名称服务器不可解析。这是当前示例修改的 Ansible playbook 文件:
--- - name: Ensure dnszone present hosts: ipaserver become: true tasks: - name: Ensure zone is present. ipadnszone: ipaadmin_password: Secret123 zone_name: zone.idm.example.com allow_sync_ptr: true dynamic_update: true dnssec: true allow_transfer: - 1.1.1.1 - 2.2.2.2 allow_query: - 1.1.1.1 - 2.2.2.2 forwarders: - ip_address: 8.8.8.8 - ip_address: 8.8.4.4 port: 52 serial: 1234 refresh: 3600 retry: 900 expire: 1209600 minimum: 3600 ttl: 60 default_ttl: 90 name_server: server.idm.example.com. admin_email: admin.admin@idm.example.com nsec3param_rec: "1 7 100 0123456789abcdef" skip_overlap_check: true skip_nameserver_check: true state: present
-
将
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file dnszone-all-params-copy.yml
其它资源
- 如需有关 DNS 区的更多信息,请参阅 支持的 DNS 区类型。
- 有关您可以在 IdM 中配置的 DNS 区域属性的更多信息,请参阅主 IdM DNS 区的配置属性。
-
您可以在
/usr/share/doc/ansible
-freeipa/ 目录中的
-freeipaREADME-dnszone.md
Markdown 文件中看到 ansibleipadnszone 模块的
更多 Ansible playbook 示例。该文件还包含ipadnszone
变量的定义。 -
您可以在
/usr/share/doc/ansible-freeipa/playbooks/dnszone 目录中看到
Ansible playbook 示例。ipadnszone
模块的
25.5. 在给定 IP 地址时,使用 Ansible playbook 确保存在用于反向 DNS 查找的区域
本节演示身份管理(IdM)管理员如何使用 Ansible playbook 确保存在反向 DNS 区域。在以下步骤中使用的示例中,IdM 管理员使用 IdM 主机的 IP 地址和前缀长度确保存在反向 DNS 查找区域。
使用 name_from_ip
变量提供 DNS 服务器的 IP 地址前缀长度,允许您控制区域名称。如果您不声明前缀长度,系统会查询 DNS 服务器以获取区,并根据 192.168.1.2 的 name_from_ip
值,查询可以返回以下 DNS 区域中的任何一个:
- 1.168.192.in-addr.arpa.
- 168.192.in-addr.arpa.
- 192.in-addr.arpa.
由于查询返回的区域可能不是您预期的区域,name_from_ip
只能与 state
选项设置为 present 一起使用,以防止意外删除区域。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。这是执行流程中步骤的主机。
- 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnszone
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/dnszone
打开清单文件,并确保
[ipaserver]
部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置 server.idm.example.com,请输入:[ipaserver] server.idm.example.com
生成 dnszone-reverse-from-ip.yml Ansible playbook 文件的副本。例如:
$ cp dnszone-reverse-from-ip.yml dnszone-reverse-from-ip-copy.yml
- 打开 dnszone-reverse-from-ip-copy.yml 文件进行编辑。
通过在
ipadnszone
task 部分中设置以下变量来调整文件:-
将
ipaadmin_password
变量设置为 IdM 管理员密码。 将
name_from_ip
变量设置为 IdM 名称服务器的 IP,并提供其前缀长度。这是当前示例修改的 Ansible playbook 文件:
--- - name: Ensure dnszone present hosts: ipaserver become: true tasks: - name: Ensure zone for reverse DNS lookup is present. ipadnszone: ipaadmin_password: Secret123 name_from_ip: 192.168.1.2/24 state: present register: result - name: Display inferred zone name. debug: msg: "Zone name: {{ result.dnszone.name }}"
playbook 创建一个区,用于从 192.168.1.2 IP 地址及其前缀长度 24 中反向 DNS 查找。接下来,playbook 显示生成的区域名称。
-
将
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file dnszone-reverse-from-ip-copy.yml
其它资源
- 如需有关 DNS 区的更多信息,请参阅 支持的 DNS 区类型。
-
您可以在
/usr/share/doc/ansible
-freeipa/ 目录中的
-freeipaREADME-dnszone.md
Markdown 文件中看到 ansibleipadnszone 模块的
更多 Ansible playbook 示例。该文件还包含ipadnszone
变量的定义。 -
您可以在
/usr/share/doc/ansible-freeipa/playbooks/dnszone 目录中看到
Ansible playbook 示例。ipadnszone
模块的
第 26 章 使用 Ansible 管理 IdM 中的 DNS 位置
作为身份管理(IdM)管理员,您可以使用 ansible-freeipa
软件包中提供 的位置模块管理 IdM DNS 位置
。本章描述了以下主题和程序:
26.1. 基于 DNS 的服务发现
在基于 DNS 的服务发现中,客户端使用 DNS 协议在提供特定服务的网络中查找服务器,如 LDAP 或
Kerberos
。种典型的操作类型是允许客户端在最接近的网络基础架构中查找身份验证服务器,因为它们提供更高的吞吐量和较低的网络延迟,从而降低总体成本。
服务发现的主要优点是:
- 无需使用附近服务器的名称明确配置客户端。
- DNS 服务器用作策略的中央提供程序。使用同一 DNS 服务器的客户端有权访问关于服务提供商及其首选顺序的相同策略。
在 Identity Management(IdM)域中,存在适用于 LDAP
、Kerber
os 和其他服务的 DNS 服务记录(SRV 记录)。例如,以下命令在 IdM DNS 域中查询 DNS 服务器以获取提供基于 TCP 的 Kerberos
服务的主机:
例 26.1. 独立于 DNS 位置的结果
$ dig -t SRV +short _kerberos._tcp.idm.example.com
0 100 88 idmserver-01.idm.example.com.
0 100 88 idmserver-02.idm.example.com.
输出包含以下信息:
-
0
(优先级):目标主机的优先级.首选使用较低值。 -
100
(weight).为优先级相同的条目指定相对权重。如需更多信息,请参阅 RFC 2782 第 3 节。 -
88
(端口号):服务的端口号。 - 提供服务的主机的规范名称。
在示例中,返回的两个主机名具有相同的优先级和权重。在本例中,客户端使用来自结果列表中的随机条目。
相反,当客户端配置为查询在 DNS 位置配置的 DNS 服务器时,输出会有所不同。对于分配到某个位置的 IdM 服务器,会返回定制值。在以下示例中,客户端被配置为在位置 germany
中查询 DNS 服务器:
例 26.2. 基于 DNS 位置的结果
$ dig -t SRV +short _kerberos._tcp.idm.example.com
_kerberos._tcp.germany._locations.idm.example.com.
0 100 88 idmserver-01.idm.example.com.
50 100 88 idmserver-02.idm.example.com.
IdM DNS 服务器自动返回一个 DNS 别名(CNAME),指向一个 DNS 位置特定的 SRV 记录(首选本地服务器)。此 CNAME 记录显示在输出的第一行中。在示例中,主机 idmserver-01.idm.example.com 具有最低的优先级值,因此是首选的。idmserver-02.idm.example.com 具有更高的优先级,因此仅在首选主机不可用的情况下用作备份。
26.2. DNS 位置的部署注意事项
使用集成 DNS 时,身份管理(IdM)可以生成特定于位置的服务(SRV)记录。因为每个 IdM DNS 服务器都会生成特定于位置的 SRV 记录,所以您必须在每个 DNS 位置至少安装一个 IdM DNS 服务器。
客户端与 DNS 位置的关联仅由客户端收到的 DNS 记录定义。因此,如果客户端执行 DNS 服务发现,从 IdM DNS 服务器解析特定于位置的记录,您可以将 IdM DNS 服务器与非 IdM DNS 使用者服务器合并,并递归器。
在大多数使用混合 IdM 和非 IdM DNS 服务的部署中,DNS 递归器都通过使用往返时间指标自动选择最接近的 IdM DNS 服务器。通常,这可确保使用非 IdM DNS 服务器的客户端正在获取最接近的 DNS 位置的记录,从而使用最佳 IdM 服务器集。
26.3. DNS 生存时间(TTL)
客户端可以在区域配置中设置的一段时间内缓存 DNS 资源记录。由于这种缓存,客户端可能无法接收更改,直到生存时间(TTL)值过期为止。Identity Management(IdM)中的默认 TTL 值为 1 天
。
如果您的客户端计算机在站点间漫游,您应该调整 IdM DNS 区的 TTL 值。将值设为比客户端在站点之间 roam 需要的时间值低。这样可确保客户端上缓存的 DNS 条目在重新连接到另一个站点之前过期,从而查询 DNS 服务器刷新特定于位置的 SRV 记录。
其它资源
- 有关如何修改 DNS 区域的默认 TTL 的详情,请参考主 IdM DNS 区的配置属性 。
26.4. 使用 Ansible 确保存在 IdM 位置
作为身份管理系统管理员(IdM),您可以配置 IdM DNS 位置,以允许客户端在最接近的网络基础架构中查找身份验证服务器。
以下流程描述了如何使用 Ansible playbook 来确保 IdM 中存在 DNS 位置。这个示例描述了如何确保 IdM 中存在 germany DNS 位置。因此,您可以将特定的 IdM 服务器分配给这个位置,以便本地 IdM 客户端可以使用它们来缩短服务器响应时间。
先决条件
- 您知道 IdM 管理员密码。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 示例假定您已创建并配置了 ~/MyPlaybooks/ 目录,作为存储示例 playbook 副本的中央位置。
- 您了解 DNS 位置的部署注意事项。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
制作位于
/usr/share/doc/ansible
文件的副本:-freeipa/playbooks/location/ 目录中的 location-
present.yml$ cp /usr/share/doc/ansible-freeipa/playbooks/location/location-present.yml location-present-copy.yml
-
打开
location-present-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipalocation
task 部分中设置以下变量来调整文件:-
调整任务
的名称
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为位置的名称。
这是当前示例修改的 Ansible playbook 文件:
--- - name: location present example hosts: ipaserver become: true tasks: - name: Ensure that the "germany" location is present ipalocation: ipaadmin_password: Secret123 name: germany
-
调整任务
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory location-present-copy.yml
其它资源
- 要为 IdM 中已存在的 IdM 位置配置特定的服务器,请参阅使用 IdM Web UI 将 IdM 服务器分配给 DNS 位置,或使用 IdM CLI 将 IdM 服务器分配给 DNS 位置。
26.5. 使用 Ansible 确保缺少 IdM 位置
作为身份管理系统管理员(IdM),您可以配置 IdM DNS 位置,以允许客户端在最接近的网络基础架构中查找身份验证服务器。
以下流程描述了如何使用 Ansible playbook 来确保 IdM 中没有 DNS 位置。这个示例描述了如何确保 IdM 中没有 germany DNS 位置。因此,您无法将特定的 IdM 服务器分配给这个位置,本地 IdM 客户端无法使用它们。
先决条件
- 您知道 IdM 管理员密码。
- 没有 IdM 服务器分配给 germany DNS 位置。
- 您已在 Ansible 控制节点上安装了 ansible-freeipa 软件包。
- 示例假定您已创建并配置了 ~/MyPlaybooks/ 目录,作为存储示例 playbook 副本的中央位置。
流程
进入 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/
生成位于
/usr/share/doc/ansible
文件的副本:-freeipa/playbooks/location/ 目录中的 location-
absent.yml$ cp /usr/share/doc/ansible-freeipa/playbooks/location/location-absent.yml location-absent-copy.yml
-
打开
location-absent-copy.yml
Ansible playbook 文件以进行编辑。 通过在
ipalocation
task 部分中设置以下变量来调整文件:-
调整任务
的名称
,使其与您的用例对应。 -
将
ipaadmin_password
变量设置为 IdM 管理员的密码。 -
将
name
变量设置为 DNS 位置的名称。 -
确保
state
变量设置为absent
。
这是当前示例修改的 Ansible playbook 文件:
--- - name: location absent example hosts: ipaserver become: true tasks: - name: Ensure that the "germany" location is absent ipalocation: ipaadmin_password: Secret123 name: germany state: absent
-
调整任务
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory location-absent-copy.yml
26.6. 其它资源
-
您可以在
/usr/share/doc/ansible
-freeipa/ 目录中的
-freeipaREADME-location.md
文件中看到 ansibleipalocation 模块的
更多 Ansible playbook 示例。该文件还包含ipalocation
变量的定义。 -
您可以在
/usr/share/doc/ansible-freeipa/playbooks/location 目录中看到
Ansible playbook 示例。ipalocation
模块的
第 27 章 在 IdM 中管理 DNS 转发
以下流程描述了如何在 Identity Management(IdM)Web UI、IdM CLI 和使用 Ansible 中配置 DNS 全局转发器和 DNS 转发区:
- 第 27.1 节 “IdM DNS 服务器的两个角色”
- 第 27.2 节 “IdM 中的 DNS 转发策略”
- 第 27.3 节 “在 IdM Web UI 中添加全局转发器”
- 第 27.4 节 “在 CLI 中添加全局转发器”
- 第 27.5 节 “在 IdM Web UI 中添加 DNS 转发区”
- 第 27.6 节 “在 CLI 中添加 DNS 转发区域”
- 第 27.7 节 “使用 Ansible 在 IdM 中建立 DNS 全局转发器”
- 第 27.8 节 “使用 Ansible 在 IdM 中存在 DNS 全局转发器”
- 第 27.9 节 “使用 Ansible 确保 IdM 中没有 DNS 全局转发器”
- 第 27.10 节 “使用 Ansible 在 IdM 中禁用 DNS Global Forwarders”
- 第 27.11 节 “使用 Ansible 在 IdM 中存在 DNS Forward Zone”
- 第 27.12 节 “确保 DNS Forward 区域在 IdM 中使用 Ansible 的多个转发器”
- 第 27.13 节 “使用 Ansible 在 IdM 中禁用 DNS 转发区”
- 第 27.14 节 “使用 Ansible 在 IdM 中没有 DNS Forward Zone”
27.1. IdM DNS 服务器的两个角色
DNS 转发会影响 DNS 服务如何应答 DNS 查询。默认情况下,与 IdM 集成的 Berkeley Internet 名称域(BIND)服务充当权威和 递归 DNS 服务器:
- 权威 DNS 服务器
- 当 DNS 客户端查询属于 IdM 服务器具有权威的 DNS 区域的名称时,BIND 回复包含在配置区域中的数据。权威数据总是优先于任何其他数据。
- 递归 DNS 服务器
- 当 DNS 客户端查询 IdM 服务器不是权威的名称时,BIND 会尝试使用其他 DNS 服务器解析查询。如果未定义转发器,BIND 会询问 Internet 上的根服务器,并使用递归解析算法回答 DNS 查询。
在某些情况下,不需要让 BIND 直接联系其他 DNS 服务器,并根据 Internet 上可用的数据执行递归。您可以将 BIND 配置为使用另一个 DNS 服务器(转发器 )来解析查询。
当您将 BIND 配置为使用转发器时,查询和答案将在 IdM 服务器和转发器之间来回转发,IdM 服务器充当非权威数据的 DNS 缓存。
27.2. IdM 中的 DNS 转发策略
IdM 支持 第一个
且 唯一的
标准 BIND 转发策略,以及任何 IdM
特定的转发策略。
- 首先转发(默认)
-
IdM BIND 服务将 DNS 查询转发到配置的转发器。如果因为服务器错误或超时查询失败,BIND 会使用 Internet 上的服务器回退到递归解析。
forward first
策略是默认策略,它适合优化 DNS 流量。 - 仅转发
-
IdM BIND 服务将 DNS 查询转发到配置的转发器。如果因为服务器错误或超时查询失败,BIND 会向客户端返回错误。建议在带有分割 DNS 配置的环境中使用
forward only
策略。 - none(转发禁用)
-
DNS 查询不会通过
none
转发策略转发。禁用转发仅作为全局转发配置的特定区覆盖。这个选项等同于在 BIND 配置中指定空转发器列表。
您不能使用转发将 IdM 中的数据与其他 DNS 服务器的数据组合。您只能在 IdM DNS 中转发主区的查询。
默认情况下,如果查询的 DNS 名称属于 IdM 服务器具有权威的区域,BIND 服务不会将查询转发到另一服务器。在这种情况下,如果无法在 IdM 数据库中找到查询的 DNS 名称,则会返回 NXDOMAIN
回答。未使用转发。
例 27.1. 场景示例
IdM 服务器对 test.example 具有权威。DNS 区域.BIND 配置为将查询转发到 IP 地址 192.0.2.254 的 DNS 服务器。
客户端发送对不存在.test.example的查询时。DNS 名称,BIND 检测到 IdM 服务器对 test.example. 区域具有权威,并且不会将查询转发到 192.0.2.254. 服务器。因此,DNS 客户端会收到 NXDomain
错误消息,通知用户查询的域不存在。
27.3. 在 IdM Web UI 中添加全局转发器
本节论述了如何在 Identity Management(IdM)Web UI 中添加全局 DNS 转发器。
先决条件
- 以 IdM 管理员身份登录到 IdM WebUI。
- 您知道要将查询转发到的 DNS 服务器的 Internet 协议(IP)地址。
流程
在 IdM Web UI 中,选择
Network Services
→DNS Global Configuration
→DNS
。在
DNS Global Configuration
部分中,单击Add
。指定将接收转发 DNS 查询的 DNS 服务器的 IP 地址。
选择
Forward 策略
。-
单击窗口顶部的
Save
。
验证步骤
选择
Network Services
→DNS Global Configuration
→DNS
。验证 IdM Web UI 中是否存在并启用了带有您指定的 forward 策略的全局转发器。
27.4. 在 CLI 中添加全局转发器
这部分论述了如何从命令行界面(CLI)添加全局 DNS 转发器。
先决条件
- 以 IdM 管理员身份登录。
- 您知道要将查询转发到的 DNS 服务器的 Internet 协议(IP)地址。
流程
使用
ipa dnsconfig-mod
命令添加新的全局转发器。使用--forwarder
选项指定 DNS 转发器的 IP 地址。[user@server ~]$ ipa dnsconfig-mod --forwarder=10.10.0.1 Server will check DNS forwarder(s). This may take some time, please wait ... Global forwarders: 10.10.0.1 IPA DNS servers: server.example.com
验证步骤
使用
dnsconfig-show
命令显示全局转发器。[user@server ~]$ ipa dnsconfig-show Global forwarders: 10.10.0.1 IPA DNS servers: server.example.com
27.5. 在 IdM Web UI 中添加 DNS 转发区
本节论述了如何在 Identity Management(IdM)Web UI 中添加 DNS 转发区域。
除非绝对需要,否则请不要使用转发区域。转发区域不是标准解决方案,使用它们可能会导致意外和有问题的行为。如果您必须使用 forward zone,限制使用它们覆盖全局转发配置。
在创建新 DNS 区域时,红帽建议您始终使用名称服务器(NS)记录和避免转发区域,始终使用标准 DNS 委派。在大多数情况下,使用全局转发器足够了,并且转发区不需要。
先决条件
- 以 IdM 管理员身份登录到 IdM WebUI。
- 您知道要将查询转发到的 DNS 服务器的 Internet 协议(IP)地址。
流程
在 IdM Web UI 中,选择
Network Services
→DNS Forward Zones
→DNS
。在
DNS Forward Zones
部分,点Add
。在
Add DNS forward zone
窗口中,指定 forward zone 名称。点击
Add
按钮,并指定 DNS 服务器的 IP 地址来接收转发请求。您可以为每个转发区指定多个转发器。选择
Forward 策略
。-
单击窗口底部的
Add
,以添加新的正向区域。
验证步骤
在 IdM Web UI 中,选择
Network Services
→DNS Forward Zones
→DNS
。验证您创建的 forward 区域(带有您指定的 forwarders 和 forward 策略)是否存在并在 IdM Web UI 中启用。
27.6. 在 CLI 中添加 DNS 转发区域
这部分论述了如何通过命令行界面(CLI)添加 DNS 转发区域。
除非绝对需要,否则请不要使用转发区域。转发区域不是标准解决方案,使用它们可能会导致意外和有问题的行为。如果您必须使用 forward zone,限制使用它们覆盖全局转发配置。
在创建新 DNS 区域时,红帽建议您始终使用名称服务器(NS)记录和避免转发区域,始终使用标准 DNS 委派。在大多数情况下,使用全局转发器足够了,并且转发区不需要。
先决条件
- 以 IdM 管理员身份登录。
- 您知道要将查询转发到的 DNS 服务器的 Internet 协议(IP)地址。
流程
使用
dnsforwardzone-add
命令添加新的转发区域。如果 forward 策略没有
,请使用 --forwarder
选项指定至少一个 forwarder,并使用--forward-policy
选项指定 forward 策略。[user@server ~]$ ipa dnsforwardzone-add forward.example.com. --forwarder=10.10.0.14 --forwarder=10.10.1.15 --forward-policy=first Zone name: forward.example.com. Zone forwarders: 10.10.0.14, 10.10.1.15 Forward policy: first
验证步骤
使用
dnsforwardzone-show
命令显示您刚才创建的 DNS 转发区域。[user@server ~]$ ipa dnsforwardzone-show forward.example.com. Zone name: forward.example.com. Zone forwarders: 10.10.0.14, 10.10.1.15 Forward policy: first
27.7. 使用 Ansible 在 IdM 中建立 DNS 全局转发器
本节论述了 Identity Management(IdM)管理员可以如何使用 Ansible playbook 在 IdM 中创建 DNS Global Forwarder。
在以下示例中,IdM 管理员创建 DNS 全局转发程序到端口 53
,Internet 协议(IP)v4 地址为 8.8.6.6
和 IPv6 地址为 2001:4860:4860::8800
的 DNS 服务器。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。这是执行流程中步骤的主机。
- 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
打开清单文件,并确保
[ipaserver]
部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置server.idm.example.com
,请输入:[ipaserver] server.idm.example.com
复制
set-configuration.yml
Ansible playbook 文件。例如:$ cp set-configuration.yml establish-global-forwarder.yml
-
打开 create
-global-forwarder.yml
文件进行编辑。 通过设置以下变量来调整文件:
-
将 playbook
的 name
变量更改为 Playbook,以在 IdM DNS 中建立全局转发器
。 -
在
tasks
部分中,将任务的名称
更改为Create a DNS global forwarder 设为 8.8.6.6 和 2001:4860:4860::8800
。 在
ipadnsconfig
部分的forwarders
部分:-
将第一个
ip_address
值更改为全局转发器的 IPv4 地址:8.8.6.6
。 -
将第二个
ip_address
值更改为全局转发器的 IPv6 地址:2001:4860:4860::8800
。 -
验证
端口
值是否已设置为53
。
-
将第一个
将
forward_policy
更改为first
。对于当前示例,此修改过的 Ansible playbook 文件:
--- - name: Playbook to establish a global forwarder in IdM DNS hosts: ipaserver become: true tasks: - name: Create a DNS global forwarder to 8.8.6.6 and 2001:4860:4860::8800 ipadnsconfig: forwarders: - ip_address: 8.8.6.6 - ip_address: 2001:4860:4860::8800 port: 53 forward_policy: first allow_sync_ptr: yes
-
将 playbook
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file establish-global-forwarder.yml
其它资源
-
您可以在
/usr/share/doc/ansible
-freeipa/ 目录中的
-freeipaREADME-dnsconfig.md
Markdown 文件中看到 ansibleipadnsconfig 模块的
更多 Ansible playbook 示例。该文件还包含ipadnsconfig
变量的定义。
27.8. 使用 Ansible 在 IdM 中存在 DNS 全局转发器
本节论述了 Identity Management(IdM)管理员可以如何使用 Ansible playbook 来确保 IdM 中存在 DNS 全局转发器。在下例中,IdM 管理员确保存在 DNS 全局转发器至 Internet 协议(IP)v4 地址为 7.7.9.9
,IP v6 地址为 2001:db8::1:0
的 DNS 服务器 。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。这是执行流程中步骤的主机。
- 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
打开清单文件,并确保
[ipaserver]
部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置server.idm.example.com
,请输入:[ipaserver] server.idm.example.com
制作
forwarders-absent.yml
Ansible playbook 文件的副本。例如:$ cp forwarders-absent.yml ensure-presence-of-a-global-forwarder.yml
-
打开
ensure-presence-global-forwarder.yml
文件进行编辑。 通过设置以下变量来调整文件:
-
将 playbook
的 name
变量更改为 Playbook,以确保 IdM DNS 中存在全局转发器
。 -
在
tasks
部分中,将任务的名称
更改为确保存在 DNS global forwarder 在端口 53 上存在 7.7.9.9 和 2001:db8::1:0
。 在
ipadnsconfig
部分的forwarders
部分:-
将第一个
ip_address
值更改为全局转发器的 IPv4 地址:7.7.9.9
。 -
将第二个
ip_address
值更改为全局转发器的 IPv6 地址:2001:db8::1:0
。 -
验证
端口
值是否已设置为53
。
-
将第一个
将
状态
更改为present
。对于当前示例,此修改过的 Ansible playbook 文件:
--- - name: Playbook to ensure the presence of a global forwarder in IdM DNS hosts: ipaserver become: true tasks: - name: Ensure the presence of a DNS global forwarder to 7.7.9.9 and 2001:db8::1:0 on port 53 ipadnsconfig: forwarders: - ip_address: 7.7.9.9 - ip_address: 2001:db8::1:0 port: 53 state: present
-
将 playbook
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file ensure-presence-of-a-global-forwarder.yml
其它资源
-
您可以在
/usr/share/doc/ansible
-freeipa/ 目录中的
-freeipaREADME-dnsconfig.md
Markdown 文件中看到 ansibleipadnsconfig 模块的
更多 Ansible playbook 示例。该文件还包含ipadnsconfig
变量的定义。
27.9. 使用 Ansible 确保 IdM 中没有 DNS 全局转发器
本节论述了 Identity Management(IdM)管理员可以如何使用 Ansible playbook 来确保 IdM 中缺少 DNS 全局转发器。在以下示例步骤中,IdM 管理员确保没有 DNS 全局转发程序到 Internet 协议(IP)v4 地址为 8.8.6.6
,IP v6 地址为 2001:4860:4860::8800
的 DNS 服务器 。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。这是执行流程中步骤的主机。
- 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
打开清单文件,并确保
[ipaserver]
部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置server.idm.example.com
,请输入:[ipaserver] server.idm.example.com
制作
forwarders-absent.yml
Ansible playbook 文件的副本。例如:$ cp forwarders-absent.yml ensure-absence-of-a-global-forwarder.yml
-
打开
ensure-absence-of-a-global-forwarder.yml
文件进行编辑。 通过设置以下变量来调整文件:
-
将 playbook
的 name
变量更改为 Playbook,以确保 IdM DNS 中缺少全局转发器
。 -
在
tasks
部分中,将任务的名称
更改为确保没有 DNS 全局转发器在端口 53 上为 8.8.6.6 和 2001:4860:4860::8800
。 在
ipadnsconfig
部分的forwarders
部分:-
将第一个
ip_address
值更改为全局转发器的 IPv4 地址:8.8.6.6
。 -
将第二个
ip_address
值更改为全局转发器的 IPv6 地址:2001:4860:4860::8800
。 -
验证
端口
值是否已设置为53
。
-
将第一个
验证
state
已设为absent
。对于当前示例,此修改过的 Ansible playbook 文件:
--- - name: Playbook to ensure the absence of a global forwarder in IdM DNS hosts: ipaserver become: true tasks: - name: Ensure the absence of a DNS global forwarder to 8.8.6.6 and 2001:4860:4860::8800 on port 53 ipadnsconfig: forwarders: - ip_address: 8.8.6.6 - ip_address: 2001:4860:4860::8800 port: 53 state: absent
-
将 playbook
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file ensure-absence-of-a-global-forwarder.yml
其它资源
-
您可以在
/usr/share/doc/ansible
-freeipa/ 目录中的
-freeipaREADME-dnsconfig.md
Markdown 文件中看到 ansibleipadnsconfig 模块的
更多 Ansible playbook 示例。该文件还包含ipadnsconfig
变量的定义。
27.10. 使用 Ansible 在 IdM 中禁用 DNS Global Forwarders
本节论述了 Identity Management(IdM)管理员可以如何使用 Ansible playbook 来确保在 IdM 中禁用 DNS Global Forwarders。在以下示例中,IdM 管理员确保将全局转发器的转发策略设置为 none
,这样可有效地禁用全局转发器。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。这是执行流程中步骤的主机。
- 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
打开清单文件,并确保
[ipaserver]
部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置server.idm.example.com
,请输入:[ipaserver] server.idm.example.com
验证
disable-global-forwarders.yml
Ansible playbook 文件的内容,它已配置为禁用所有 DNS 全局转发器。例如:$ cat disable-global-forwarders.yml --- - name: Playbook to disable global DNS forwarders hosts: ipaserver become: true tasks: - name: Disable global forwarders. ipadnsconfig: forward_policy: none
运行 playbook:
$ ansible-playbook -v -i inventory.file disable-global-forwarders.yml
其它资源
-
您可以在
/usr/share/doc/ansible
-freeipa/ 目录中的
-freeipaREADME-dnsconfig.md
Markdown 文件中看到 ansibleipadnsconfig 模块的
更多 Ansible playbook 示例。该文件还包含ipadnsconfig
变量的定义。
27.11. 使用 Ansible 在 IdM 中存在 DNS Forward Zone
本节论述了 Identity Management(IdM)管理员可以如何使用 Ansible playbook 来确保 IdM 中存在 DNS Forward Zone。在以下示例中,IdM 管理员确保 example.com
的 DNS 转发区域存在到 Internet 协议(IP)地址为 8.8.8.8
的 DNS 服务器。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。这是执行流程中步骤的主机。
- 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
打开清单文件,并确保
[ipaserver]
部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置server.idm.example.com
,请输入:[ipaserver] server.idm.example.com
制作
forwarders-absent.yml
Ansible playbook 文件的副本。例如:$ cp forwarders-absent.yml ensure-presence-forwardzone.yml
-
打开
ensure-presence-forwardzone.yml
文件进行编辑。 通过设置以下变量来调整文件:
-
将 playbook
的 name
变量更改为 Playbook,以确保 IdM DNS 中存在 dnsforwardzone
。 -
在
tasks
部分中,将任务的名称
更改为 Ensureof a example.com 的 dnsforwardzone to 8.8.8.8
。 -
在
tasks
部分中,将ipadnsconfig
标题改为ipadnsforwardzone
。 在
ipadnsforwardzone
部分:-
添加
ipaadmin_password
变量,并将其设置为 IdM 管理员密码。 -
添加
name
变量,并将它设置为example.com
。 在
forwarders
部分中:-
删除
ip_address
和port
行。 通过在短划线后指定 DNS 服务器的 IP 地址来添加 DNS 服务器的 IP 地址以接收转发的请求:
- 8.8.8.8
-
删除
-
添加
forwardpolicy
变量,并将它设为第一
。 -
添加
skip_overlap_check
变量,并将它设为true
。 -
将
state
变量更改为present
。
对于当前示例,此修改过的 Ansible playbook 文件:
-
添加
--- - name: Playbook to ensure the presence of a dnsforwardzone in IdM DNS hosts: ipaserver become: true tasks: - name: Ensure the presence of a dnsforwardzone for example.com to 8.8.8.8 ipadnsforwardzone: ipaadmin_password: password01 name: example.com forwarders: - 8.8.8.8 forwardpolicy: first skip_overlap_check: true state: present
-
将 playbook
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file ensure-presence-forwardzone.yml
其它资源
-
您可以在
/usr/share/doc/ansible
-freeipa/ 目录中的
-freeipaREADME-dnsforwardzone.md
Markdown 文件中看到 ansibleipadnsforwardzone 模块的
更多 Ansible playbook 示例。该文件还包含ipadnsforwardzone
变量的定义。
27.12. 确保 DNS Forward 区域在 IdM 中使用 Ansible 的多个转发器
本节论述了身份管理(IdM)管理员可以如何使用 Ansible playbook 确保 IdM 中的 DNS Forward Zone 具有多个转发器。在以下示例中,IdM 管理员确保 example .com
的 DNS 转发区转发到 8.8.8.8
和 4.4.4.4
。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。这是执行流程中步骤的主机。
- 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
打开清单文件,并确保
[ipaserver]
部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置server.idm.example.com
,请输入:[ipaserver] server.idm.example.com
制作
forwarders-absent.yml
Ansible playbook 文件的副本。例如:$ cp forwarders-absent.yml ensure-presence-multiple-forwarders.yml
-
打开
ensure-presence-multiple-forwarders.yml
文件进行编辑。 通过设置以下变量来调整文件:
-
将 playbook
的 name
变量更改为 Playbook,以确保 IdM DNS 中的 dnsforwardzone 中存在多个转发器
。 -
在
tasks
部分中,将任务的名称
更改为在 example.com 的 dnsforwardzone 中确保存在 8.8.8.8 和 4.4.4.4 forwarders
。 -
在
tasks
部分中,将ipadnsconfig
标题改为ipadnsforwardzone
。 在
ipadnsforwardzone
部分:-
添加
ipaadmin_password
变量,并将其设置为 IdM 管理员密码。 -
添加
name
变量,并将它设置为example.com
。 在
forwarders
部分中:-
删除
ip_address
和port
行。 添加您要确保的 DNS 服务器的 IP 地址,以短划线开头:
- 8.8.8.8 - 4.4.4.4
-
删除
- 将 state 变量更改为 present。
对于当前示例,此修改过的 Ansible playbook 文件:
-
添加
--- - name: name: Playbook to ensure the presence of multiple forwarders in a dnsforwardzone in IdM DNS hosts: ipaserver become: true tasks: - name: Ensure presence of 8.8.8.8 and 4.4.4.4 forwarders in dnsforwardzone for example.com ipadnsforwardzone: ipaadmin_password: password01 name: example.com forwarders: - 8.8.8.8 - 4.4.4.4 state: present
-
将 playbook
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file ensure-presence-multiple-forwarders.yml
其它资源
-
您可以在
/usr/share/doc/ansible
-freeipa/ 目录中的
-freeipaREADME-dnsforwardzone.md
Markdown 文件中看到 ansibleipadnsforwardzone 模块的
更多 Ansible playbook 示例。该文件还包含ipadnsforwardzone
变量的定义。
27.13. 使用 Ansible 在 IdM 中禁用 DNS 转发区
本节论述了 Identity Management(IdM)管理员可以如何使用 Ansible playbook 来确保在 IdM 中禁用 DNS Forward Zone。在以下示例中,IdM 管理员确保 example.com
的 DNS 转发区被禁用。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。这是执行流程中步骤的主机。
- 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
打开清单文件,并确保
[ipaserver]
部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置server.idm.example.com
,请输入:[ipaserver] server.idm.example.com
制作
forwarders-absent.yml
Ansible playbook 文件的副本。例如:$ cp forwarders-absent.yml ensure-disabled-forwardzone.yml
-
打开
ensure-disabled-forwardzone.yml
文件进行编辑。 通过设置以下变量来调整文件:
-
将 playbook
的 name
变量更改为 Playbook,以确保在 IdM DNS 中禁用了 dnsforwardzone
。 -
在
tasks
部分中,将任务的名称
更改为Ensure a dnsforwardzone for example.com。
-
在
tasks
部分中,将ipadnsconfig
标题改为ipadnsforwardzone
。 在
ipadnsforwardzone
部分:-
添加
ipaadmin_password
变量,并将其设置为 IdM 管理员密码。 -
添加
name
变量,并将它设置为example.com
。 -
删除整个
forwarders
部分。 -
将
state
变量更改为disabled
。
对于当前示例,此修改过的 Ansible playbook 文件:
-
添加
--- - name: Playbook to ensure a dnsforwardzone is disabled in IdM DNS hosts: ipaserver become: true tasks: - name: Ensure a dnsforwardzone for example.com is disabled ipadnsforwardzone: ipaadmin_password: password01 name: example.com state: disabled
-
将 playbook
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file ensure-disabled-forwardzone.yml
其它资源
-
您可以在
/usr/share/doc/ansible
-freeipa/ 目录中的
-freeipaREADME-dnsforwardzone.md
Markdown 文件中看到 ansibleipadnsforwardzone 模块的
更多 Ansible playbook 示例。该文件还包含ipadnsforwardzone
变量的定义。
27.14. 使用 Ansible 在 IdM 中没有 DNS Forward Zone
本节论述了 Identity Management(IdM)管理员可以如何使用 Ansible playbook 来确保 IdM 中不存在 DNS Forward Zone。在以下示例中,IdM 管理员确保 example.com
缺少 DNS 转发区。
先决条件
- 您已在 Ansible 控制器上安装了 ansible-freeipa 软件包。这是执行流程中步骤的主机。
- 您知道 IdM 管理员密码。
流程
导航到
/usr/share/doc/ansible-freeipa/playbooks/dnsconfig
目录:$ cd /usr/share/doc/ansible-freeipa/playbooks/dnsconfig
打开清单文件,并确保
[ipaserver]
部分中列出了您要配置的 IdM 服务器。例如,要指示 Ansible 配置server.idm.example.com
,请输入:[ipaserver] server.idm.example.com
制作
forwarders-absent.yml
Ansible playbook 文件的副本。例如:$ cp forwarders-absent.yml ensure-absence-forwardzone.yml
-
打开
ensure-absence-forwardzone.yml
文件进行编辑。 通过设置以下变量来调整文件:
-
将 playbook
的 name
变量更改为 Playbook,以确保 IdM DNS 中没有 dnsforwardzone
。 -
在
tasks
部分中,将任务的名称
更改为Ensure the dnsforwardzone for example.com
。 -
在
tasks
部分中,将ipadnsconfig
标题改为ipadnsforwardzone
。 在
ipadnsforwardzone
部分:-
添加
ipaadmin_password
变量,并将其设置为 IdM 管理员密码。 -
添加
name
变量,并将它设置为example.com
。 -
删除整个
forwarders
部分。 -
将
state
变量保留为absent
。
对于当前示例,此修改过的 Ansible playbook 文件:
-
添加
--- - name: Playbook to ensure the absence of a dnsforwardzone in IdM DNS hosts: ipaserver become: true tasks: - name: Ensure the absence of a dnsforwardzone for example.com ipadnsforwardzone: ipaadmin_password: password01 name: example.com state: absent
-
将 playbook
- 保存该文件。
运行 playbook:
$ ansible-playbook -v -i inventory.file ensure-absence-forwardzone.yml
其它资源
-
您可以在
/usr/share/doc/ansible
-freeipa/ 目录中的
-freeipaREADME-dnsforwardzone.md
Markdown 文件中看到 ansibleipadnsforwardzone 模块的
更多 Ansible playbook 示例。该文件还包含ipadnsforwardzone
变量的定义。
第 28 章 使用 Ansible 管理 IdM 中的 DNS 记录
本章论述了如何使用 Ansible playbook 管理身份管理(IdM)中的 DNS 记录。作为 IdM 管理员,您可以在 IdM 中添加、修改和删除 DNS 记录。本章包含以下部分:
28.1. IdM 中的 DNS 记录
身份管理(IdM)支持许多不同的 DNS 记录类型。以下四个最常使用:
- A
这是主机名和 IPv4 地址的基本映射。A 记录的记录名称是主机名,如
www
。A 记录的IP Address
值是一个 IPv4 地址,如192.0.2.1
。有关 A 记录的更多信息,请参阅 RFC 1035。
- AAAA
这是主机名和 IPv6 地址的基本映射。AAAA 记录的记录名称是主机名,如
www
。IP Address
值是一个 IPv6 地址,如2001:DB8::1111
。有关 AAAA 记录的更多信息,请参阅 RFC 3596。
- SRV
服务(SRV)资源记录将服务名称映射到提供该特定服务的服务器的 DNS 名称。例如,此记录类型可将 LDAP 目录等服务映射到管理此目录的服务器。
SRV 记录的记录名称格式为
_service. _protocol
,如_ldap._tcp
。SRV 记录的配置选项包括目标服务的优先级、权重、端口号和主机名。有关 SRV 记录的详情请参考 RFC 2782。
- PTR
指针记录(PTR)添加反向 DNS 记录,它将 IP 地址映射到域名。
注意IPv4 地址的所有反向 DNS 查找都使用在
in-addr.arpa.
域中定义的反向条目。反向地址(人类可读形式)与常规 IP 地址正好相反,其中in-addr.arpa.
域附加到该地址。例如,对于网络地址192.0.2.0/24
,反向区域为2.0.192.in-addr.arpa
。PTR 的记录名称必须采用 RFC 1035 中指定的标准格式,以 RFC 2317 和 RFC 3596 扩展。主机名值必须是您要为其创建记录的主机的规范主机名。
注意也可以为 IPv6 地址配置反向区域,包括.
ip6.arpa.
域中的区域。有关 IPv6 反向区的更多信息,请参阅 RFC 3596。
添加 DNS 资源记录时,请注意