使用 RHEL 中的系统角色管理和配置任务

Red Hat Enterprise Linux 8

使用 Red Hat Ansible Automation Platform playbook 应用 RHEL 系统角色来执行系统管理任务

Red Hat Customer Content Services

摘要

本文档论述了在 Red Hat Enterprise Linux 8 上使用 Ansible 配置系统角色。本文档侧重于:RHEL System Roles 是 Ansible 角色、模块和 playbook 的集合,它提供了一个稳定的、一致的配置界面来管理和配置 Red Hat Enterprise Linux。它们与多个 Red Hat Enterprise Linux 8 主发行版本相兼容。

使开源包含更多

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

对红帽文档提供反馈

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

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

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

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

第 1 章 RHEL 系统角色入门

本节介绍 RHEL 系统角色是什么。另外,它介绍了如何通过 Ansible playbook 应用特定角色来执行各种系统管理任务。

1.1. RHEL 系统角色简介

RHEL 系统角色是 Ansible 角色和模块的集合。RHEL 系统角色提供了一个配置界面,用于远程管理多个 RHEL 系统。这个界面允许在多个 RHEL 版本间管理系统配置,以及处理新的主发行版本。

在 Red Hat Enterprise Linux 8 中,该接口目前由以下角色组成:

  • kdump
  • network
  • selinux
  • storage
  • certificate
  • kernel_settings
  • logging
  • metrics
  • nbde_client 和 nbde_server
  • timesync
  • tlog

所有这些角色都由 AppStream 存储库中可用的 rhel-system-roles 软件包提供。

1.2. RHEL 系统角色术语

您可以在本文档中找到以下术语:

系统角色术语

Ansible playbook
Playbook 是 Ansible 的配置、部署和编配语言。它们可以描述您希望远程系统强制使用的策略,或者在一般的 IT 进程中选择一组步骤。
控制节点
安装了 Ansible 的任何机器。您可以从任何控制节点运行命令和 playbook,调用 /usr/bin/ansible 或 /usr/bin/ansible-playbook。您可以使用任意安装了 Python 的计算机作为控制节点 - 笔记本电脑、共享桌面和服务器都可以运行 Ansible。但是,您不能使用 Windows 机器作为控制节点。您可以拥有多个控制节点。
清单(Inventory)
受管节点列表。清单文件有时也称为"hostfile"。您的清单可以为每个受管节点指定像 IP 地址等信息。清单也可以管理受管节点,创建并嵌套组以更轻松地进行扩展。如需了解更多有关清单的信息,请参阅使用清单一 节。
受管节点
使用 Ansible 管理的网络设备、服务器或两者。受管节点有时也称为 "hosts(主机)"。Ansible 未安装到受管节点上。

1.3. 应用一个角色

以下流程描述了如何应用特定角色。

先决条件

  • 确定在您要用作控制节点的系统中安装了 rhel-system-roles 软件包:

    # yum install rhel-system-roles
  • 您需要 ansible 软件包来运行使用 RHEL 系统角色的 playbook。确保启用了 Ansible Engine 软件仓库,且 ansible 软件包安装在您要用作控制节点的系统中。

    • 如果您没有 Red Hat Ansible Engine 订阅,可以使用 Red Hat Enterprise Linux 订阅提供的有限版本的 Red Hat Ansible Engine。在这种情况下,请按照以下步骤操作:

      1. 启用 RHEL Ansible Engine 存储库:

        # subscription-manager refresh
        # subscription-manager repos --enable ansible-2-for-rhel-8-x86_64-rpms
      2. 安装 Ansible Engine:

        # yum install ansible
    • 如果您有 Red Hat Ansible Engine 订阅,请按照以下所述步骤操作 如何下载和安装 Red Hat Ansible Engine?
  • 确保您可以创建 Ansible 清单。

    清单代表 Ansible playbook 使用的主机、主机组以及一些配置参数。

    playbook 通常是人类可读的,并使用 iniyamljson 和其他文件格式定义。

  • 确保您可以创建一个 Ansible playbook。

    Playbook 代表 Ansible 的配置、部署和编配语言。通过使用 playbook,您可以声明和管理远程机器的配置,部署多个远程机器,编配任何手动排序进程的步骤。

    playbook 是一个或多个 plays 的列表。每个 play 都可以包括 Ansible 变量、任务或角色。

    playbook 是人类可读的,以 yaml 格式定义。

流程

  1. 创建包含您要管理的主机和组所需的 Ansible 清单。下面是一个示例,它使用了名为 webservers 的一组主机的名为 inventory.ini 的文件:

    [webservers]
    host1
    host2
    host3
  2. 创建一个 Ansible playbook,包括所需角色。以下示例演示了如何通过 playbook 的 roles: 选项使用角色:

    以下示例演示了如何通过给定 roles: 选项使用角色 play:

    ---
    - hosts: webservers
      roles:
         - rhel-system-roles.network
         - rhel-system-roles.timesync
    注意

    每个角色都包括 README 文件,该文件记录如何使用角色和支持的参数值。您还可以在角色的文档目录中找到特定角色的示例 playbook。这些文档目录默认由 rhel-system-roles 软件包提供,并可在以下位置找到:

    /usr/share/doc/rhel-system-roles/SUBSYSTEM/

    SUBSYSTEM 替换为所需角色的名称,如 selinuxkdumpnetworktimesyncstorage

  3. 要在特定主机上执行 playbook,您必须执行以下任一操作:

    • 编辑 playbook 以使用 hosts: host1[,host2,…]hosts: all 并执行命令:

      # ansible-playbook name.of.the.playbook
    • 编辑清单,以确保要在组中定义要使用的主机,并执行以下命令:

      # ansible-playbook -i name.of.the.inventory name.of.the.playbook
    • 指定执行 ansible-playbook 命令时的所有主机:

      # ansible-playbook -i host1,host2,... name.of.the.playbook
      重要

      请注意, -i 标志指定所有可用主机的清单。如果您有多个目标主机,但要选择要针对其运行 playbook 的主机,您可以在 playbook 中添加变量以能够选择主机。例如:

      Ansible Playbook | example-playbook.yml:
      
      - hosts: "{{ target_host }}"
        roles:
           - rhel-system-roles.network
           - rhel-system-roles.timesync

      playbook 执行命令:

      # ansible-playbook -i host1,..hostn -e target_host=host5 example-playbook.yml

1.4. 其它资源



[1] 本文档会随 rhel-system-roles 软件包自动安装。

第 2 章 安装 RHEL 系统角色

在开始使用系统角色前,您必须在您的系统中安装它。

2.1. 在系统中安装 RHEL 系统角色

要使用 RHEL 系统角色,请安装所需的软件包。

先决条件

流程

  1. 在您要用作控制节点的系统中安装该 rhel-system-roles 软件包:

    # yum install rhel-system-roles

    如果您没有 Red Hat Ansible Engine 订阅,可以使用 Red Hat Enterprise Linux 订阅提供的有限版本的 Red Hat Ansible Engine。在这种情况下,请按照以下步骤操作:

    1. 启用 RHEL Ansible Engine 存储库:

      # subscription-manager refresh
      
      # subscription-manager repos --enable ansible-2-for-rhel-8-x86_64-rpms
    2. 安装 Ansible Engine:

      # yum install ansible

因此,您可以创建一个 Ansible playbook。

其它资源

第 3 章 安装和使用集合

3.1. Ansible Collections 简介

Ansible Collections 是发布、维护及消耗自动化的新方法。通过合并多种 Ansible 内容,如 playbook、角色、模块和插件,您可以提高灵活性和可伸缩性。

Ansible Collections 是传统的 RHEL 系统角色格式的选项。使用 Ansible Collection 格式的 RHEL 系统角色几乎与传统的 RHEL 系统角色格式使用相同。不同之处在于 Ansible Collections 使用 fully qualified collection name (FQCN)的概念,它由一个 namespacecollection name 组成。我们使用的 namespaceredhat, collection namerhel_system_roles。因此,虽然 Kernel 角色的传统的 RHEL 系统角色格式显示为 rhel-system-roles.kernel_settings,但对 Kernel 角色的集合 fully qualified collection name 将显示为 redhat.rhel_system_roles.kernel_settings

namespacecollection name 的组合可保证对象是唯一的。它还确保对象在 Ansible Collections 和命名空间间共享,没有任何冲突。

其它资源

  • 您可以通过访问 Automation Hub 来查找红帽认证的集合。

3.2. 集合结构

集合是 Ansible 内容的软件包格式。数据结构如下:

  • docs/:用于集合的本地文档,以及示例,如果角色提供文档
  • Galaxy.yml:将作为 Ansible Collection 软件包一部分的 MANIFEST.json 的源数据
  • Playbook/: playbook 可用于此处

    • task/:这包含 'tasks/import_tasks 使用 'task 列表文件。
  • plugins/:所有 Ansible 插件和模块均在此处提供,各自在其子目录中提供

    • modules/: Ansible 模块
    • modules_utils/:开发模块的通用代码
    • lookup/:搜索插件
    • filter/: Jinja2 过滤器插件
    • connection/: 如果不使用默认插件,则需要连接插件
  • roles/: Ansible 角色的目录
  • test/:集合内容的测试

3.3. 使用 CLI 安装集合

集合是 Ansible 内容的发布格式,可以包括 playbook、角色、模块和插件。

您可以通过浏览器或使用命令行通过 Ansible Galaxy 安装集合。

先决条件

  • 已安装 Red Hat Ansible Engine 版本 2.9 及更新的版本。
  • 已安装 python3-jmespath 软件包。
  • 列出受管节点的清单文件已存在。

流程

  • 通过 RPM 软件包安装集合:

    # yum install rhel-system-roles

安装完成后,角色将用作 redhat.rhel_system_roles.<role_name>。另外,您可以找到每个角色的文档 /usr/share/ansible/collections/ansible_collections/redhat/rhel_system_roles/roles/<role_name>/README.md

验证步骤

要验证集合是否已成功安装,您可以在本地主机中应用 kernel_settings:

  1. tests_default.yml 中的一个复制到您的工作目录中。

    $ cp /usr/share/ansible/collections/ansible_collections/redhat/rhel_system_roles/tests/kernel_settings/tests_default.yml .
  2. 编辑该文件,将 "hosts: all" 替换为 "hosts: localhost",使 playbook 只在本地系统中运行。
  3. 在检查模式下运行 ansible-playbook。这不会改变系统中的任何设置。

    $ ansible-playbook --check tests_default.yml

该命令返回值 failed=0

其它资源

  • 请参阅 ansible-playbook 手册页。

3.4. 从 Automation Hub 安装集合

如果使用 Automation Hub,您可以在 Automation Hub 上安装托管的系统角色集。

先决条件

  • 已安装 Red Hat Ansible Engine 版本 2.9 或更高版本。
  • 已安装 python3-jmespath 软件包。
  • 列出受管节点的清单文件已存在。

流程

  1. 从 Automation Hub 安装 redhat.rhel_system_roles 集合:

    # ansible-galaxy collection install redhat.rhel_system_roles
  2. 将 Red Hat Automation Hub 定义为 ansible.cfg 配置文件中内容的默认源。有关 内容,请参阅配置 Red Hat Automation Hub 作为主源

    安装完成后,角色将用作 redhat.rhel_system_roles.<role_name>。另外,您可以找到每个角色的文档 /usr/share/ansible/collections/ansible_collections/redhat/rhel_system_roles/roles/<role_name>/README.md

验证步骤

要验证集合是否已成功安装,您可以在本地主机中应用 kernel_settings:

  1. tests_default.yml 中的一个复制到您的工作目录中。

    $ cp /usr/share/ansible/collections/ansible_collections/redhat/rhel_system_roles/tests/kernel_settings/tests_default.yml .
  2. 编辑该文件,将 "hosts: all" 替换为 "hosts: localhost",使 playbook 只在本地系统中运行。
  3. 在检查模式下运行 ansible-playbook。这不会改变系统中的任何设置。

    $ ansible-playbook --check tests_default.yml

    您可以看到命令返回的值 failed=0

其它资源

  • 请参阅 ansible-playbook 手册页。

3.5. 使用集合应用本地日志记录系统角色

以下是一个使用 Collections 准备并应用 Red Hat Ansible Engine playbook 的示例,在一组单独机器上配置日志记录解决方案。

先决条件

  • 已安装 Galaxy 集合。

流程

  1. 创建定义所需角色的 playbook:

    1. 创建新 YAML 文件,并在文本编辑器中打开,例如:

      # vi logging-playbook.yml
    2. 将以下内容插入到 YAML 文件中:

      ---
      - name: Deploying basics input and implicit files output
        hosts: all
        roles:
          - redhat.rhel_system_roles.logging
        vars:
          logging_inputs:
            - name: system_input
              type: basics
          logging_outputs:
            - name: files_output
              type: files
          logging_flows:
            - name: flow1
              inputs: [system_input]
              outputs: [files_output]
  2. 在特定清单上执行 playbook:

    # ansible-playbook -i inventory-file logging-playbook.yml

    其中:

    • inventory-file 是清单文件的名称。
    • logging-playbook.yml 是您使用的 playbook。

验证步骤

  1. 测试 /etc/rsyslog.conf 文件的语法:

    # rsyslogd -N 1
    rsyslogd: version 8.1911.0-6.el8, config validation run (level 1), master config /etc/rsyslog.conf
    rsyslogd: End of config validation run. Bye.
  2. 验证系统是否向日志发送信息:

    1. 发送测试信息:

      # logger test
    2. 查看 /var/log/messages 日志,例如:

      # cat /var/log/messages
      Aug  5 13:48:31 hostname root[6778]: test

      hostname 是客户端系统的主机名。该日志显示输入 logger 命令的用户的用户名,在本例中为 root

其它资源

  • 与流程模块内容紧密相关的其他内容的链接列表。
  • 目前,模块无法包含 xrefs,因此您无法在集合中包含到其他内容的链接。如果您需要链接到另一个 assembly,请将 xref 添加到包含这个模块的 assembly 中。
  • 有关编写过程模块的详情,请查看 模块文档参考指南
  • 对文件名、ID 和标题使用一致的系统。有关提示,请参阅 模块 文档参考指南中的 查询名称和文件名称

第 4 章 使用 Ansible 角色永久配置内核参数

作为熟悉 Red Hat Ansible Engine 经验丰富的用户,您可以使用角色 kernel_settings 同时在多个客户端中配置内核参数。这个解决方案:

  • 提供带有有效输入设置的友好接口。
  • 保留所有预期的内核参数。

在您从控制机器运行 kernel_settings 角色后,内核参数会立即应用于受管系统,并在重启后保留。

4.1. 内核设置角色简介

RHEL 系统角色是 Ansible Automation Platform 中的角色和模块集合,可提供一致的配置界面来远程管理多个系统。

RHEL 系统角色用于使用 kernel_settings 系统角色自动配置内核。rhel-system-roles 软件包包含这个系统角色以及参考文档。

要自动在一个或多个系统中应用内核参数,请使用 kernel_settings 角色,在 playbook 中具有您选择的一个或多个角色变量。playbook 是一个或多个 play 的列表,它人类可读,并采用 YAML 格式编写。

您可以使用清单文件定义一组您希望 Ansible Engine 根据 playbook 配置的系统。

使用 kernel_settings 角色,您可以配置:

  • 使用 kernel_settings_sysctl 角色变量的内核参数
  • 使用 kernel_settings_sysfs 角色变量的各种内核子系统、硬件设备和设备驱动程序
  • systemd 服务管理器的 CPU 关联性,并使用 kernel_settings_systemd_cpu_affinity 角色变量处理它分叉
  • 内核内存子系统使用 kernel_settings_transparent_hugepageskernel_settings_transparent_hugepages_defrag 角色变量透明地进行巨页

其它资源

4.2. 使用内核设置角色应用所选内核参数

按照以下步骤准备并应用 Ansible playbook 来远程配置内核参数,从而对多个受管操作系统产生持久性。

先决条件

  • 您的 Red Hat Ansible Engine 订阅已附加到系统(也称为 控制机器 ),您要从中运行 kernel_settings 角色。如需更多信息,请参阅如何下载和安装 Red Hat Ansible Engine 文章。
  • 在控制机器上启用 Ansible Engine 软件仓库。
  • Ansible Engine 已安装在控制机器上。

    注意

    您不需要在要配置内核参数的系统中(也称为 受管主机)安装 Ansible Engine。

  • rhel-system-roles 软件包安装在控制机器上。
  • 控制机器上有一个受管主机清单,Ansible Engine 可以连接到它们。

流程

  1. 另外,还可查看 inventory 文件:

    #  cat /home/jdoe/<ansible_project_name>/inventory
    [testingservers]
    pdoe@192.168.122.98
    fdoe@192.168.122.226
    
    [db-servers]
    db1.example.com
    db2.example.com
    
    [webservers]
    web1.example.com
    web2.example.com
    192.0.2.42

    该文件定义 [testingservers] 组和其它组。它可让您针对特定系统集合更有效地运行 Ansible Engine。

  2. 创建配置文件来为 Ansible Engine 操作设置默认值和权限升级。

    1. 创建新 YAML 文件,并在文本编辑器中打开,例如:

      #  vi /home/jdoe/<ansible_project_name>/ansible.cfg
    2. 将以下内容插入到文件中:

      [defaults]
      inventory = ./inventory
      
      [privilege_escalation]
      become = true
      become_method = sudo
      become_user = root
      become_ask_pass = true

      [defaults] 部分指定受管主机清单文件的路径。[privilege_escalation] 部分定义用户权限转换到指定受管主机上的 root。这对成功配置内核参数是必需的。运行 Ansible playbook 时,会提示您输入用户密码。在连接到受管主机后,用户会通过 sudo 切换为 root

  3. 创建使用 kernel_settings 角色的 Ansible playbook。

    1. 创建新 YAML 文件,并在文本编辑器中打开,例如:

      #  vi /home/jdoe/<ansible_project_name>/kernel_roles.yml

      此文件代表一个 playbook,通常包含了一组有特定顺序的任务(也称为 play )列表。这些任何会根据 inventory 文件中选择的特定管理主机进行。

    2. 将以下内容插入到文件中:

      ---
      - name: Configure kernel settings
        hosts: testingservers
      
        vars:
          kernel_settings_sysctl:
            - name: fs.file-max
              value: 400000
            - name: kernel.threads-max
              value: 65536
          kernel_settings_sysfs:
            - name: /sys/class/net/lo/mtu
              value: 65000
          kernel_settings_transparent_hugepages: madvise
      
        roles:
          - linux-system-roles.kernel_settings

      name 键是可选的。它将任意字符串与 play 相关联,并标识 play 的作用。play 中的 hosts 键指定 play 被运行的主机。此键的值或值可以作为被管理的主机的单独名称提供,也可以作为 inventory 文件中定义的一组主机提供。

      vars 部分代表包含所选内核参数名称和值的变量列表。

      roles 键指定要配置 vars 部分提到的参数和值的系统角色。

      注意

      您可以修改 playbook 中的内核参数及其值以符合您的需要。

  4. (可选)验证 play 中的语法是否正确。

    #  ansible-playbook --syntax-check kernel-roles.yml
    
    playbook: kernel-roles.yml

    本例演示了 playbook 的成功验证。

  5. 执行 playbook。

    #  ansible-playbook kernel-roles.yml
    BECOME password:
    
    PLAY [Configure kernel settings]  ... PLAY RECAP **
    fdoe@192.168.122.226       : ok=10   changed=4    unreachable=0    failed=0    skipped=6    rescued=0    ignored=0
    pdoe@192.168.122.98        : ok=10   changed=4    unreachable=0    failed=0    skipped=6    rescued=0    ignored=0

    在 Ansible Engine 运行 playbook 之前,会提示您输入密码,以便受管主机上的用户能够切换至 root,这在配置内核参数时是必需的。

    recap 部分显示, play 成功完成了所有受管主机的(failed=0),并且应用了 4 个内核参数(changed=4)。

  6. 重启您的受管主机并检查受影响的内核参数,以验证是否应用了更改并在重启后保留。

其它资源

第 5 章 使用系统角色配置网络连接

RHEL 上的 network 系统角色可让管理员使用 Ansible 自动执行与网络相关的配置和管理任务。

5.1. 使用 RHEL 系统角色配置静态以太网连接

此流程描述了如何使用 RHEL 系统角色通过运行 Ansible playbook 为 enp7s0 接口远程添加带有以下设置的以太网连接:

  • 静态 IPv4 地址 - 192.0.2.1,子网掩码为 /24
  • 静态 IPv6 地址 - 2001:db8:1::1,子网掩码为 /64
  • IPv4 默认网关 - 192.0.2.254
  • IPv6 默认网关 - 2001:db8:1::fffe
  • IPv4 DNS 服务器 - 192.0.2.200
  • IPv6 DNS 服务器 - 2001:db8:1::ffbb
  • DNS 搜索域 - example.com

在 Ansible 控制节点上运行此步骤。

先决条件

  • 在控制节点上安装 ansiblerhel-system-roles 软件包。
  • 如果您运行 playbook 时使用了与 root 不同的远程用户, 则此用户在受管节点上需要具有适当的 sudo 权限。
  • 主机使用 NetworkManager 配置网络。

流程

  1. 如果 playbook 要针对其执行的主机还没有在清单中,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/ethernet-static-IP.yml playbook:

    ---
    - name: Configure an Ethernet connection with static IP
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: linux-system-roles.network
    
        vars:
          network_connections:
            - name: enp7s0
              type: ethernet
              autoconnect: yes
              ip:
                address:
                  - 192.0.2.1/24
                  - 2001:db8:1::1/64
                gateway4: 192.0.2.254
                gateway6: 2001:db8:1::fffe
                dns:
                  - 192.0.2.200
                  - 2001:db8:1::ffbb
                dns_search:
                  - example.com
              state: up
  3. 运行 playbook:

    • root 用户身份连接到受管主机,输入:

      # ansible-playbook -u root ~/ethernet-static-IP.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/ethernet-static-IP.yml

      --ask-become-pass 选项确定 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户 sudo 密码。

    如果没有指定 -u user_name 选项,请以当前登录到控制节点的用户 ansible-playbook 连接到受管主机。

其它资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md file
  • ansible-playbook 命令,请查看 ansible-playbook(1) man page

5.2. 使用 RHEL 系统角色配置动态以太网连接

此流程描述了如何使用 RHEL 系统角色通过运行 Ansible playbook 为 enp7s0 接口远程添加动态以太网连接。在这个设置中,网络连接从 DHCP 服务器请求这个连接的 IP 设置。在 Ansible 控制节点上运行此步骤。

先决条件

  • 网络中有 DHCP 服务器。
  • 在控制节点上安装 ansiblerhel-system-roles 软件包。
  • 如果您运行 playbook 时使用了与 root 不同的远程用户, 则此用户在受管节点上需要具有适当的 sudo 权限。
  • 主机使用 NetworkManager 配置网络。

流程

  1. 如果 playbook 要针对其执行的主机还没有在清单中,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/ethernet-dynamic-IP.yml playbook:

    ---
    - name: Configure an Ethernet connection with dynamic IP
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: linux-system-roles.network
    
        vars:
          network_connections:
            - name: enp7s0
              type: ethernet
              autoconnect: yes
              ip:
                dhcp4: yes
                auto6: yes
              state: up
  3. 运行 playbook:

    • root 用户身份连接到受管主机,输入:

      # ansible-playbook -u root ~/ethernet-dynamic-IP.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/ethernet-dynamic-IP.yml

      --ask-become-pass 选项确定 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户 sudo 密码。

    如果没有指定 -u user_name 选项,请以当前登录到控制节点的用户 ansible-playbook 连接到受管主机。

其它资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md file
  • ansible-playbook(1) man page

5.3. 使用系统角色配置 VLAN 标记

您可以使用 networking RHEL 系统角色配置 VLAN 标记。这个步骤描述了如何添加以太网连接以及使用此以太网连接 10 的 ID 的 VLAN。作为父设备,VLAN 连接包含 IP、默认网关和 DNS 配置。

根据您的环境,相应地调整 play。例如:

  • 要使用 VLAN 作为其它连接(如绑定)中的端口,请省略 ip 属性,并设置父配置中的 IP 配置。
  • 要在 VLAN 中使用 team、bridge 或 bond 设备,请修改 VLAN 中使用的端口的 interface_nametype 属性。

先决条件

  • 在控制节点上安装 ansiblerhel-system-roles 软件包。
  • 如果您运行 playbook 时使用了与 root 不同的远程用户, 则此用户在受管节点上需要具有适当的 sudo 权限。

流程

  1. 如果 playbook 要针对其执行的主机还没有在清单中,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/vlan-ethernet.yml playbook:

    ---
    - name: Configure a VLAN that uses an Ethernet connection
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: linux-system-roles.network
    
        vars:
          network_connections:
            # Add an Ethernet profile for the underlying device of the VLAN
            - name: enp1s0
              type: ethernet
    	  interface_name: enp1s0
    	  autoconnect: yes
              state: up
    	  ip:
    	    dhcp4: no
    	    auto6: no
    
            # Define the VLAN profile
            - name: vlan10
              type: vlan
              ip:
                address:
                  - "192.0.2.1/24"
                  - "2001:db8:1::1/64"
                gateway4: 192.0.2.254
                gateway6: 2001:db8:1::fffe
                dns:
                  - 192.0.2.200
                  - 2001:db8:1::ffbb
                dns_search:
                  - example.com
              vlan_id: 10
    	  parent: enp1s0
              state: up

    VLAN 配置集中的 parent 属性将 VLAN 配置为在 enp1s0 设备之上操作。

  3. 运行 playbook:

    • root 用户身份连接到受管主机,输入:

      # ansible-playbook -u root ~/vlan-ethernet.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/vlan-ethernet.yml

      --ask-become-pass 选项确定 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户 sudo 密码。

    如果没有指定 -u user_name 选项,请以当前登录到控制节点的用户 ansible-playbook 连接到受管主机。

其它资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md file
  • ansible-playbook(1) man page

5.4. 使用 RHEL 系统角色配置网络桥接

您可以使用 networking RHEL 系统角色配置 Linux 桥接。这个步骤描述了如何配置使用两个以太网设备的网络桥接,以及设置 IPv4 和 IPv6 地址、默认网关和 DNS 配置。

注意

在网桥上设置 IP 配置,而不是在 Linux 网桥的端口上设置。

先决条件

  • 在控制节点上安装 ansiblerhel-system-roles 软件包。
  • 如果您运行 playbook 时使用了与 root 不同的远程用户, 则此用户在受管节点上需要具有适当的 sudo 权限。
  • 在服务器中安装两个或者两个以上物理或者虚拟网络设备。

流程

  1. 如果 playbook 要针对其执行的主机还没有在清单中,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/bridge-ethernet.yml playbook:

    ---
    - name: Configure a network bridge that uses two Ethernet ports
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: linux-system-roles.network
    
        vars:
          network_connections:
            # Define the bridge profile
            - name: bridge0
              type: bridge
              interface_name: bridge0
              ip:
                address:
                  - "192.0.2.1/24"
                  - "2001:db8:1::1/64"
                gateway4: 192.0.2.254
                gateway6: 2001:db8:1::fffe
                dns:
                  - 192.0.2.200
                  - 2001:db8:1::ffbb
                dns_search:
                  - example.com
              state: up
    
            # Add an Ethernet profile to the bridge
            - name: bridge0-port1
              interface_name: enp7s0
              type: ethernet
              controller: bridge0
              port_type: bridge
              state: up
    
            # Add a second Ethernet profile to the bridge
            - name: bridge0-port2
              interface_name: enp8s0
              type: ethernet
              controller: bridge0
              port_type: bridge
              state: up
  3. 运行 playbook:

    • root 用户身份连接到受管主机,输入:

      # ansible-playbook -u root ~/bridge-ethernet.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/bridge-ethernet.yml

      --ask-become-pass 选项确定 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户 sudo 密码。

    如果没有指定 -u user_name 选项,请以当前登录到控制节点的用户 ansible-playbook 连接到受管主机。

其它资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md file
  • ansible-playbook(1) man page

5.5. 使用 RHEL 系统角色配置网络绑定

您可以使用 network RHEL 系统角色配置网络绑定。这个步骤描述了如何在使用两个以太网设备的主动备份模式中配置绑定,并设置 IPv4 和 IPv6 地址、默认网关和 DNS 配置。

注意

在网桥上设置 IP 配置,而不是在 Linux 网桥的端口上设置。

先决条件

  • 在控制节点上安装 ansiblerhel-system-roles 软件包。
  • 如果您运行 playbook 时使用了与 root 不同的远程用户, 则此用户在受管节点上需要具有适当的 sudo 权限。
  • 在服务器中安装两个或者两个以上物理或者虚拟网络设备。

流程

  1. 如果 playbook 要针对其执行的主机还没有在清单中,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/bond-ethernet.yml playbook:

    ---
    - name: Configure a network bond that uses two Ethernet ports
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: linux-system-roles.network
    
        vars:
          network_connections:
            # Define the bond profile
            - name: bond0
              type: bond
              interface_name: bond0
              ip:
                address:
                  - "192.0.2.1/24"
                  - "2001:db8:1::1/64"
                gateway4: 192.0.2.254
                gateway6: 2001:db8:1::fffe
                dns:
                  - 192.0.2.200
                  - 2001:db8:1::ffbb
                dns_search:
                  - example.com
              bond:
                mode: active-backup
              state: up
    
            # Add an Ethernet profile to the bond
            - name: bond0-port1
              interface_name: enp7s0
              type: ethernet
              controller: bond0
              state: up
    
            # Add a second Ethernet profile to the bond
            - name: bond0-port2
              interface_name: enp8s0
              type: ethernet
              controller: bond0
              state: up
  3. 运行 playbook:

    • root 用户身份连接到受管主机,输入:

      # ansible-playbook -u root ~/bond-ethernet.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/bond-ethernet.yml

      --ask-become-pass 选项确定 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户 sudo 密码。

    如果没有指定 -u user_name 选项,请以当前登录到控制节点的用户 ansible-playbook 连接到受管主机。

其它资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md file
  • ansible-playbook(1) man page

5.6. 使用 RHEL 系统角色通过 802.1X 网络身份验证配置静态以太网连接

使用 RHEL 系统角色,您可以自动创建使用 802.1X 标准验证客户端的以太网连接。此流程描述了如何通过运行 Ansible playbook 来远程为带有以下设置的 enp1s0 接口添加以太网连接:

  • 静态 IPv4 地址 - 192.0.2.1,子网掩码为 /24
  • 静态 IPv6 地址 - 2001:db8:1::1,子网掩码为 /64
  • IPv4 默认网关 - 192.0.2.254
  • IPv6 默认网关 - 2001:db8:1::fffe
  • IPv4 DNS 服务器 - 192.0.2.200
  • IPv6 DNS 服务器 - 2001:db8:1::ffbb
  • DNS 搜索域 - example.com
  • 802.1X 网络验证使用 TLS 可扩展验证协议(EAP)

在 Ansible 控制节点上运行此步骤。

先决条件

  • 在控制节点上安装 ansiblerhel-system-roles 软件包。
  • 如果您运行 playbook 时使用了与 root 不同的远程用户, 则此用户在受管节点上需要具有适当的 sudo 权限。
  • 网络支持 802.1X 网络身份验证。
  • 受管节点使用 NetworkManager。
  • control 节点上存在 TLS 身份验证所需的以下文件:

    • 保存在 /srv/data/client.key 文件中的客户端密钥。
    • 存储在 /srv/data/client.crt 文件中的客户端证书。
    • 存储在 /srv/data/ca.crt 文件中的证书颁发机构(CA)证书。

流程

  1. 如果 playbook 要针对其执行的主机还没有在清单中,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/enable-802.1x.yml playbook:

    ---
    - name: Configure an Ethernet connection with 802.1X authentication
      hosts: node.example.com
      become: true
      tasks:
        - name: Copy client key for 802.1X authentication
          copy:
            src: "/srv/data/client.key"
            dest: "/etc/pki/tls/private/client.key"
            mode: 0600
    
        - name: Copy client certificate for 802.1X authentication
          copy:
            src: "/srv/data/client.crt"
            dest: "/etc/pki/tls/certs/client.crt"
    
        - name: Copy CA certificate for 802.1X authentication
          copy:
            src: "/srv/data/ca.crt"
            dest: "/etc/pki/ca-trust/source/anchors/ca.crt"
    
        - include_role:
            name: linux-system-roles.network
          vars:
            network_connections:
              - name: enp1s0
                type: ethernet
                autoconnect: yes
                ip:
                  address:
                    - 192.0.2.1/24
                    - 2001:db8:1::1/64
                  gateway4: 192.0.2.254
                  gateway6: 2001:db8:1::fffe
                  dns:
                    - 192.0.2.200
                    - 2001:db8:1::ffbb
                  dns_search:
                    - example.com
                ieee802_1x:
                  identity: user_name
                  eap: tls
                  private_key: "/etc/pki/tls/private/client.key"
                  private_key_password: "password"
                  client_cert: "/etc/pki/tls/certs/client.crt"
                  ca_cert: "/etc/pki/ca-trust/source/anchors/ca.crt"
                  domain_suffix_match: example.com
                state: up
  3. 运行 playbook:

    • root 用户身份连接到受管主机,输入:

      # ansible-playbook -u root ~/enable-802.1x.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/ethernet-static-IP.yml

      --ask-become-pass 选项确定 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户 sudo 密码。

    如果没有指定 -u user_name 选项,请以当前登录到控制节点的用户 ansible-playbook 连接到受管主机。

其它资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md file
  • /usr/share/ansible/roles/rhel-system-roles.network/README.md file
  • ansible-playbook(1) man page

5.7. 使用系统角色在现有连接上设置默认网关

您可以使用 networking RHEL 系统角色设置默认网关。

重要

当您运行使用 networking RHEL 系统角色的 play 时,如果设置与 play 中指定的设置不匹配,则系统角色会覆盖具有相同名称的现有连接配置集。因此,在 play 中总是指定网络连接配置集的完整配置,即使 IP 配置已经存在。否则,角色会将这些值重置为其默认值。

具体来说,该流程会使用以下设置创建或更新 enp1s0 连接配置集:

  • 静态 IPv4 地址 - 198.51.100.20,子网掩码为 /24
  • 静态 IPv6 地址 - 2001:db8:1::1,子网掩码为 /64
  • IPv4 默认网关 - 198.51.100.254
  • IPv6 默认网关 - 2001:db8:1::fffe
  • IPv4 DNS 服务器 - 198.51.100.200
  • IPv6 DNS 服务器 - 2001:db8:1::ffbb
  • DNS 搜索域 - example.com

先决条件

  • 在控制节点上安装 ansiblerhel-system-roles 软件包。
  • 如果您运行 playbook 时使用了与 root 不同的远程用户, 则此用户在受管节点上需要具有适当的 sudo 权限。

流程

  1. 如果 playbook 要针对其执行的主机还没有在清单中,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/ethernet-connection.yml playbook:

    ---
    - name: Configure an Ethernet connection with static IP and default gateway
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: linux-system-roles.network
    
        vars:
          network_connections:
            - name: enp1s0
              type: ethernet
              autoconnect: yes
              ip:
                address:
                  - 198.51.100.20/24
                  - 2001:db8:1::1/64
                gateway4: 198.51.100.254
                gateway6: 2001:db8:1::fffe
                dns:
                  - 198.51.100.200
                  - 2001:db8:1::ffbb
                dns_search:
                  - example.com
              state: up
  3. 运行 playbook:

    • root 用户身份连接到受管主机,输入:

      # ansible-playbook -u root ~/ethernet-connection.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/ethernet-connection.yml

      --ask-become-pass 选项确定 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户 sudo 密码。

    如果没有指定 -u user_name 选项,请以当前登录到控制节点的用户 ansible-playbook 连接到受管主机。

其它资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md file
  • ansible-playbook(1) man page

5.8. 使用 RHEL 系统角色配置静态路由

您可以使用 networking RHEL 系统角色配置静态路由。

重要

当您运行使用 networking RHEL 系统角色的 play 时,如果设置与 play 中指定的设置不匹配,则系统角色会覆盖具有相同名称的现有连接配置集。因此,在 play 中总是指定网络连接配置集的完整配置,即使 IP 配置已经存在。否则,角色会将这些值重置为其默认值。

具体来说,该流程会使用以下设置创建或更新 enp7s0 连接配置集:

  • 静态 IPv4 地址 - 198.51.100.20,子网掩码为 /24
  • 静态 IPv6 地址 - 2001:db8:1::1,子网掩码为 /64
  • IPv4 默认网关 - 198.51.100.254
  • IPv6 默认网关 - 2001:db8:1::fffe
  • IPv4 DNS 服务器 - 198.51.100.200
  • IPv6 DNS 服务器 - 2001:db8:1::ffbb
  • DNS 搜索域 - example.com
  • 静态路由:

    • 192.0.2.0/24 使用网关 198.51.100.1
    • 203.0.113.0/24 使用网关 198.51.100.2

先决条件

  • 在控制节点上安装 ansiblerhel-system-roles 软件包。
  • 如果您运行 playbook 时使用了与 root 不同的远程用户, 则此用户在受管节点上需要具有适当的 sudo 权限。

流程

  1. 如果 playbook 要针对其执行的主机还没有在清单中,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/add-static-routes.yml playbook:

    ---
    - name: Configure an Ethernet connection with static IP and additional routes
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: linux-system-roles.network
    
        vars:
          network_connections:
            - name: enp7s0
              type: ethernet
              autoconnect: yes
              ip:
                address:
                  - 198.51.100.20/24
                  - 2001:db8:1::1/64
                gateway4: 198.51.100.254
                gateway6: 2001:db8:1::fffe
                dns:
                  - 198.51.100.200
                  - 2001:db8:1::ffbb
                dns_search:
                  - example.com
                route:
                  - network: 192.0.2.0
                    prefix: 24
                    gateway: 198.51.100.1
                  - network: 203.0.113.0
                    prefix: 24
                    gateway: 198.51.100.2
              state: up
  3. 运行 playbook:

    • root 用户身份连接到受管主机,输入:

      # ansible-playbook -u root ~/add-static-routes.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/add-static-routes.yml

      --ask-become-pass 选项确定 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户 sudo 密码。

    如果没有指定 -u user_name 选项,请以当前登录到控制节点的用户 ansible-playbook 连接到受管主机。

验证步骤

  • 显示路由表:

    # ip -4 route
    default via 198.51.100.254 dev enp7s0 proto static metric 100
    192.0.2.0/24 via 198.51.100.1 dev enp7s0 proto static metric 100
    203.0.113.0/24 via 198.51.100.2 dev enp7s0 proto static metric 100
    ...

其它资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md file
  • ansible-playbook(1) man page

5.9. 使用系统角色设置 ethtool 功能

您可以使用 networking RHEL 系统角色配置 NetworkManager 连接的 ethtool 功能。

重要

当您运行使用 networking RHEL 系统角色的 play 时,如果设置与 play 中指定的设置不匹配,则系统角色会覆盖具有相同名称的现有连接配置集。因此,在 play 中总是指定网络连接配置集的完整配置,即使已经存在(如 IP 配置)。否则,角色会将这些值重置为默认值。

具体来说,该流程会使用以下设置创建或更新 enp1s0 连接配置集:

  • 静态 IPv4 地址 - 198.51.100.20,带有 /24 子网掩码
  • 静态 IPv6 地址 - 2001:db8:1::1,带有 /64 子网掩码
  • IPv4 默认网关 - 198.51.100.254
  • IPv6 默认网关 - 2001:db8:1::fffe
  • IPv4 DNS 服务器 - 198.51.100.200
  • IPv6 DNS 服务器 - 2001:db8:1::ffbb
  • DNS 搜索域 - example.com
  • ethtool 特性:

    • 通用接收卸载(GRO):禁用
    • 通用片段卸载(GSO):启用
    • TX 流控制传输协议(SCTP)segmentation: disabled

先决条件

  • 在控制节点上安装 ansiblerhel-system-roles 软件包。
  • 如果您运行 playbook 时使用了与 root 用户不同的远程用户,则此用户在受管节点上具有适当的 sudo 权限。

流程

  1. 如果 playbook 要针对其执行的主机还没有在清单中,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/configure-ethernet-device-with-ethtool-features.yml playbook:

    ---
    - name. Configure an Ethernet connection with ethtool features
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: linux-system-roles.network
    
        vars:
          network_connections:
            - name: enp1s0
              type: ethernet
              autoconnect: yes
              ip:
                address:
                  - 198.51.100.20/24
                  - 2001:db8:1::1/64
                gateway4: 198.51.100.254
                gateway6: 2001:db8:1::fffe
                dns:
                  - 198.51.100.200
                  - 2001:db8:1::ffbb
                dns_search:
                  - example.com
              ethtool:
                feature:
                  gro: "no"
                  gso: "yes"
                  tx_sctp_segmentation: "no"
              state: up
  3. 运行 playbook:

    • root 用户身份连接到受管主机,输入:

      # ansible-playbook -u root ~/configure-ethernet-device-with-ethtool-features.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/configure-ethernet-device-with-ethtool-features.yml

      --ask-become-pass 选项确定 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户 sudo 密码。

    如果没有指定 -u user_name 选项,请以当前登录到控制节点的用户 ansible-playbook 连接到受管主机。

其它资源

  • /usr/share/ansible/roles/rhel-system-roles.network/README.md file
  • ansible-playbook(1) man page

5.10. 使用系统角色配置 ethtool coalesce 设置

您可以使用 networking RHEL 系统角色配置网络管理器连接的 ethtool 并发设置。

重要

当您运行使用 networking RHEL 系统角色的 play 时,如果设置与 play 中指定的设置不匹配,则系统角色会覆盖具有相同名称的现有连接配置集。因此,在 play 中总是指定网络连接配置集的完整配置,即使已经存在(如 IP 配置)。否则,角色会将这些值重置为默认值。

具体来说,该流程会使用以下设置创建或更新 enp1s0 连接配置集:

  • 静态 IPv4 地址 - 198.51.100.20,子网掩码为 /24
  • 静态 IPv6 地址 - 2001:db8:1::1,子网掩码为 /64
  • IPv4 默认网关 - 198.51.100.254
  • IPv6 默认网关 - 2001:db8:1::fffe
  • IPv4 DNS 服务器 - 198.51.100.200
  • IPv6 DNS 服务器 - 2001:db8:1::ffbb
  • DNS 搜索域 - example.com
  • ethtool coalesce 设置:

    • RX 帧: 128
    • TX 帧: 128

先决条件

  • 在控制节点上安装 ansiblerhel-system-roles 软件包。
  • 如果您运行 playbook 时使用了与 root 用户不同的远程用户,则此用户在受管节点上具有适当的 sudo 权限。

流程

  1. 如果 playbook 要针对其执行的主机还没有在清单中,请将此主机的 IP 或名称添加到 /etc/ansible/hosts Ansible 清单文件中:

    node.example.com
  2. 使用以下内容创建 ~/configure-ethernet-device-with-ethtoolcoalesce-settings.yml playbook:

    ---
    - name: Configure an Ethernet connection with ethtool coalesce settings
      hosts: node.example.com
      become: true
      tasks:
      - include_role:
          name: linux-system-roles.network
    
        vars:
          network_connections:
            - name: enp1s0
              type: ethernet
              autoconnect: yes
              ip:
                address:
                  - 198.51.100.20/24
                  - 2001:db8:1::1/64
                gateway4: 198.51.100.254
                gateway6: 2001:db8:1::fffe
                dns:
                  - 198.51.100.200
                  - 2001:db8:1::ffbb
                dns_search:
                  - example.com
              ethtool:
                coalesce:
                  rx_frames: 128
                  tx_frames: 128
              state: up
  3. 运行 playbook:

    • root 用户身份连接到受管主机,输入:

      # ansible-playbook -u root ~/configure-ethernet-device-with-ethtoolcoalesce-settings.yml
    • 以用户身份连接到受管主机,请输入:

      # ansible-playbook -u user_name --ask-become-pass ~/configure-ethernet-device-with-ethtoolcoalesce-settings.yml

      --ask-become-pass 选项确定 ansible-playbook 命令提示输入 -u user_name 选项中定义的用户 sudo 密码。

    如果没有指定 -u user_name 选项,请以当前登录到控制节点的用户 ansible-playbook 连接到受管主机。

其它资源

  • 如需 ethtool 功能的完整列表,以及 network_connections 中使用的参数详情,以及 network 系统角色的附加信息,请参阅 /usr/share/ansible/roles/rhel-system-roles.network/README.md 文件。
  • 有关 ansible-playbook 命令的详情,请参考 ansible-playbook(1) man page。

第 6 章 使用系统角色配置 SElinux

6.1. SELinux 系统角色简介

RHEL 系统角色是 Ansible 角色和模块的集合,可为远程管理多个 RHEL 系统提供一致的配置界面。SELinux 系统角色启用以下操作:

  • 清理与 SELinux 布尔值、文件上下文、端口和登录相关的本地策略修改。
  • 设置 SELinux 策略布尔值、文件上下文、端口和登录。
  • 在指定文件或目录中恢复文件上下文。
  • 管理 SELinux 模块。

下表提供了 SELinux 系统角色中可用的输入变量概述。

表 6.1. SELinux 系统角色变量

角色变量描述CLI 的替代方案

selinux_policy

选择保护目标进程或多级别安全保护的策略。

/etc/selinux/config 中的 SELINUXTYPE

selinux_state

切换 SELinux 模式。请查看 ansible-doc selinux

setenforce 以及 /etc/selinux/config 下的SELINUX

selinux_booleans

启用和禁用 SELinux 布尔值。请参阅 ansible-doc seboolean

setsebool

selinux_fcontexts

添加或删除 SELinux 文件上下文映射。请参阅 ansible-doc sefcontext

semanage fcontext

selinux_restore_dirs

在文件系统树中恢复 SELinux 标签。

restorecon -R

selinux_ports

在端口上设置 SELinux 标签。请参阅 ansible-doc seport

semanage port

selinux_logins

将用户设置为 SELinux 用户映射。请参阅 ansible-doc selogin

semanage login

selinux_modules

安装、启用、禁用或删除 SELinux 模块。

semodule

rhel-system-roles 软件包安装的 playbook /usr/share/doc/rhel-system-roles/selinux/example-selinux-playbook.yml 示例演示了如何在 enforcing 模式中设置目标策略。playbook 还应用一些本地策略修改,并在 /tmp/test_dir/ 目录中恢复文件上下文。

其它资源

  • 有关 SELinux 角色变量的详情,安装 rhel-system-roles ,并参阅 /usr/share/doc/rhel-system-roles/selinux/ 目录中的 README.mdREADME.html
  • 有关 RHEL 系统角色的更多信息,请参阅 RHEL 系统角色简介

6.2. 使用 SELinux 系统角色在多个系统中应用 SELinux 设置

按照以下步骤,在已验证的 SELinux 设置中准备并应用 Ansible playbook。

先决条件

流程

  1. 启用 RHEL Ansible 存储库,例如:

    # subscription-manager repos --enable ansible-2-for-rhel-8-x86_64-rpms
  2. 安装 Ansible Engine:

    # yum install ansible
  3. 安装 RHEL 系统角色:

    # yum install rhel-system-roles
  4. 准备 playbook。您可以从头开始,也可以修改安装的示例 playbook,作为 rhel-system-roles 软件包的一部分:

    # cp /usr/share/doc/rhel-system-roles/selinux/example-selinux-playbook.yml my-selinux-playbook.yml
    # vi my-selinux-playbook.yml
  5. 更改 playbook 的内容以适应您的场景。例如:以下部分确保系统安装并启用 selinux-local-1.pp SELinux 模块:

    selinux_modules:
    - { path: "selinux-local-1.pp", priority: "400" }
  6. 保存更改并退出文本编辑器。
  7. 在 host 1、host 2 和 host 3 系统上运行 playbook:

    # ansible-playbook -i host1,host2,host3 my-selinux-playbook.yml

其它资源

  • 如需更多信息,安装 rhel-system-roles 软件包以及查看 /usr/share/doc/rhel-system-roles/selinux//usr/share/ansible/roles/rhel-system-roles.selinux/ 目录。

第 7 章 使用日志记录系统角色

作为系统管理员,您可以使用日志记录系统角色将 RHEL 主机配置为日志服务器,从很多客户端系统收集日志。

7.1. 日志系统角色

使用日志记录系统角色,您可以在本地和远程主机上部署日志配置。

要在一个或多个系统中应用日志记录系统角色,您可以在 playbook 中定义日志配置。playbook 是一个或多个 play 的列表。playbook 是人类可读的,它们采用 YAML 格式编写。如需有关 playbook 的更多信息,请参阅 Ansible 文档中的 使用 playbook

您希望 Ansible 根据 playbook 配置的系统集合已在 清单文件中定义。如需有关创建和使用清单的更多信息,请参阅 Ansible 文档中的如何构建您的清单

日志记录解决方案提供多种读取日志和多个日志记录输出的方法。

例如,日志记录系统可接受以下输入:

  • 本地文件、
  • systemd/journal,
  • 网络中的另一个日志记录系统。

另外,日志记录系统还可有以下输出:

  • 日志存储在 /var/log 目录中的本地文件中,
  • 日志发送到 Elasticsearch,
  • 日志转发到另一个日志系统。

使用日志记录系统角色,您可以组合输入和输出来满足您的需要。例如:您可以配置一个日志解决方案,它会将来自 journal 的输入保存在本地文件中,而从文件中读取的输入会转发到另一个日志记录系统,并存储在本地日志文件中。

7.2. 日志记录系统角色参数

在日志记录系统角色 playbook 中,您要定义 logging_inputs 参数中的输入、logging_outputs 参数中的输出以及 logging_flows 参数中的输入和输出之间的关系。Logging 系统角色使用附加选项处理这些变量来配置日志记录系统。您还可以启用加密。

注意

目前,日志记录系统角色中唯一可用的日志记录系统是 Rsyslog

  • logging_inputs - 日志记录解决方案的输入列表。

    • name - 输入的唯一名称。在 logging_flows 输入列表和生成 config 文件名称的一部分中使用。
    • type - 输入元素的类型。这个类型指定与目录名称对应的任务类型 roles/rsyslog/{tasks,vars}/inputs/

      • basics - 输入配置从 systemd 日志或 unix 套接字输入。

        • kernel_message - 如果设置为 true,则会加载imklog 。默认为 false
        • use_imuxsock - 使用 imuxsock 替代 imjournal。默认为 false
        • ratelimit_burst - 可在其中发送的最大信息数 ratelimit_interval。默认 20000 use_imuxsock 为 false。默认 200 use_imuxsock 为 true。
        • ratelimit_interval - 评估 ratelimit_burst 的时间间隔。如果 use_imuxsock 为 false,则默认为 600 秒。如果 use_imuxsock 为 true, 则默认为 0。0 表示关闭速率限制。
        • persist_state_interval - Journal 状态会保留每个 value 信息。默认为 10。仅在 use_imuxsock 为 false 时有效。
      • files - 输入配置本地文件输入。
      • remote - 输入通过网络配置其他日志记录系统的输入。
    • state - 配置文件的状态。present 或者 absent。默认为 present
  • logging_outputs - 日志解决方案的输出列表。

    • files - 输出配置输出到本地文件。
    • forwards - 输出配置输出到另一个日志记录系统。
    • remote_files - 输出将输出配置为另一个日志记录系统到本地文件。
  • logging_flows - 定义 logging_inputslogging_outputs 间关系的流程列表。logging_flows 变量有以下键:

    • name - 流的唯一名称
    • inputs - logging_inputs 名称值列表
    • outputs - logging_outputs 名称值列表。

其它资源

  • 安装 rhel-system-roles 软件包,文档位于 /usr/share/ansible/roles/rhel-system-roles.logging/README.html

7.3. 应用本地日志记录系统角色

按照以下步骤准备和应用 Red Hat Ansible Engine playbook,在一组单独机器上配置日志记录解决方案。每台机器都会在本地记录日志。

先决条件

  • 您已在要运行 playbook 的系统中安装了 Red Hat Ansible Engine。

    注意

    您不必在要部署日志记录解决方案的系统中安装 Red Hat Ansible Engine。

  • 您在要从中运行 playbook 的系统中具有 rhel-system-roles 软件包。

    注意

    您不必安装 rsyslog,因为在部署后系统角色会安装 rsyslog

  • 您有一个清单文件,它列出要配置日志记录解决方案的系统。

流程

  1. 创建定义所需角色的 playbook:

    1. 创建新 YAML 文件,并在文本编辑器中打开,例如:

      # vi logging-playbook.yml
    2. 插入以下内容:

      ---
      - name: Deploying basics input and implicit files output
        hosts: all
        roles:
          - linux-system-roles.logging
        vars:
          logging_inputs:
            - name: system_input
              type: basics
          logging_outputs:
            - name: files_output
              type: files
          logging_flows:
            - name: flow1
              inputs: [system_input]
              outputs: [files_output]
  2. 在特定清单上执行 playbook:

    # ansible-playbook -i inventory-file /path/to/file/logging-playbook.yml

    其中:

    • inventory-file 是清单文件。
    • logging-playbook.yml 是您使用的 playbook。

验证

  1. 测试 /etc/rsyslog.conf 文件的语法:

    # rsyslogd -N 1
    rsyslogd: version 8.1911.0-6.el8, config validation run (level 1), master config /etc/rsyslog.conf
    rsyslogd: End of config validation run. Bye.
  2. 验证系统是否向日志发送信息:

    1. 发送测试信息:

      # logger test
    2. 查看 /var/log/messages 日志,例如:

      # cat /var/log/messages
      Aug  5 13:48:31 hostname root[6778]: test

      其中 'hostname' 是客户端系统的主机名。请注意,该日志包含输入 logger 命令的用户的用户名,在本例中是 root

7.4. 过滤本地日志记录系统角色中的日志

您可以部署一个日志记录解决方案,根据基于 rsyslog 属性的过滤器过滤日志。

先决条件

  • 访问一个或多个 受管节点, 这是您要使用日志记录系统角色配置的系统。
  • 访问控制节点并获得权限, 控制节点 是 Red Hat Ansible Engine 配置其他系统的系统。

    在控制节点上:

    • 安装了 Red Hat Ansible Engine
    • 已安装 rhel-system-roles 软件包
    • 列出受管节点的清单文件。

流程

  1. 使用以下内容 playbook.yml 创建新文件:

    ---
    - name: Deploying files input and configured files output
      hosts: all
      roles:
        - linux-system-roles.logging
      vars:
        logging_inputs:
          - name: files_input0
            type: files
            input_log_path: /var/log/containerA/*.log
          - name: files_input1
            type: files
            input_log_path: /var/log/containerB/*.log
        logging_outputs:
          - name: files_output0
            type: files
            property: msg
            property_op: contains
            property_value: error
            path: /var/log/errors.log
          - name: files_output1
            type: files
            property: msg
            property_op: "!contains"
            property_value: error
            path: /var/log/others.log
        logging_flows:
          - name: flow0
            inputs: [files_input0, files_input1]
            outputs: [files_output0, files_output1]

    使用此配置,所有包含 error 字符串的信息都会记录在 /var/log/errors.log 中,所有其他消息都会登录到 /var/log/others.log

    您可以将 error 属性值替换为您要过滤的字符串。

    您可以根据您的首选项修改变量。

  2. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file /path/to/file/playbook.yml

验证

  1. 测试 /etc/rsyslog.conf 文件的语法:

    # rsyslogd -N 1
    rsyslogd: version 8.1911.0-6.el8, config validation run (level 1), master config /etc/rsyslog.conf
    rsyslogd: End of config validation run. Bye.
  2. 验证系统是否向日志发送包含 error 字符串的信息:

    1. 发送测试信息:

      # logger error
    2. 查看 /var/log/errors.log 日志,例如:

      # cat /var/log/errors.log
      Aug  5 13:48:31 hostname root[6778]: error

      其中 hostname 是客户端系统的主机名。请注意,该日志包含输入 logger 命令的用户的用户名,在本例中是 root

其它资源

  • 安装 rhel-system-roles 软件包,文档位于 /usr/share/ansible/roles/rhel-system-roles.logging/README.html

7.5. 使用日志记录系统角色应用远程日志解决方案

按照以下步骤准备和应用 Red Hat Ansible Engine playbook 来配置远程日志记录解决方案。在这个 playbook 中,一个或多个客户端从 systemd-journal 中提取日志,并将其转发到远程服务器。服务器从 remote_rsyslogremote_files 接收远程输入,并将日志输出到远程主机名指定的目录中的本地文件中。

先决条件

  • 您已在要运行 playbook 的系统中安装了 Red Hat Ansible Engine。

    注意

    您不必在要部署日志记录解决方案的系统中安装 Red Hat Ansible Engine。

  • 您在要从中运行 playbook 的系统中具有 rhel-system-roles 软件包。

    注意

    您不必安装 rsyslog,因为在部署后系统角色会安装 rsyslog

  • 您至少有两个系统:

    • 至少一个是日志服务器。
    • 至少一个是日志记录客户端。

流程

  1. 创建定义所需角色的 playbook:

    1. 创建新 YAML 文件,并在文本编辑器中打开,例如:

      # vi logging-playbook.yml
    2. 将以下内容插入到文件中:

      ---
      - name: Deploying remote input and remote_files output
        hosts: server
        roles:
          - linux-system-roles.logging
        vars:
          logging_inputs:
            - name: remote_udp_input
              type: remote
              udp_ports: [ 601 ]
            - name: remote_tcp_input
              type: remote
              tcp_ports: [ 601 ]
          logging_outputs:
            - name: remote_files_output
              type: remote_files
          logging_flows:
            - name: flow_0
              inputs: [remote_udp_input, remote_tcp_input]
              outputs: [remote_files_output]
      
      - name: Deploying basics input and forwards output
        hosts: clients
        roles:
          - linux-system-roles.logging
        vars:
          logging_inputs:
            - name: basic_input
              type: basics
          logging_outputs:
            - name: forward_output0
              type: forwards
              severity: info
              target: host1.example.com
              udp_port: 601
            - name: forward_output1
              type: forwards
              facility: mail
              target: host1.example.com
              tcp_port: 601
          logging_flows:
            - name: flows0
              inputs: [basic_input]
              outputs: [forward_output0, forward_output1]
      
      [basic_input]
      [forward_output0, forward_output1]

      其中 host1.example.com 是日志服务器。

      注意

      您可以修改 playbook 中的参数以符合您的需要。

      警告

      日志解决方案只适用于在服务器或者客户端系统的 SELinux 策略中定义的端口并在防火墙中打开。默认 SELinux 策略包括端口 601、514、6514、10514 和 20514。要使用不同的端口, 在客户端和服务器系统中修改 SELinux 策略。目前还不支持通过系统角色配置防火墙。

  2. 创建列出您的服务器和客户端的清单文件:

    1. 创建新文件并在文本编辑器中打开该文件,例如:

      # vi inventory.ini
    2. 将以下内容插入到清单文件中:

      [servers]
      server ansible_host=host1.example.com
      [clients]
      client ansible_host=host2.example.com

      其中:* host1.example.com 是日志服务器。* host2.example.com 是日志记录客户端。

  3. 在清单上执行 playbook。

    # ansible-playbook -i /path/to/file/inventory.ini /path/to/file/_logging-playbook.yml

    其中:

    • inventory.ini 是清单文件。
    • logging-playbook.yml 是您创建的 playbook。

验证

  1. 在客户端和服务器系统中测试 /etc/rsyslog.conf 文件的语法:

    # rsyslogd -N 1
    rsyslogd: version 8.1911.0-6.el8, config validation run (level 1), master config /etc/rsyslog.conf
    rsyslogd: End of config validation run. Bye.
  2. 验证客户端系统向服务器发送信息:

    1. 在客户端系统中发送测试信息:

      # logger test
    2. 在服务器系统中查看 /var/log/messages 日志,例如:

      # cat /var/log/messages
      Aug  5 13:48:31 host2.example.com root[6778]: test

      其中 host2.example.com 是客户端系统的主机名。请注意,该日志包含输入 logger 命令的用户的用户名,在本例中是 root

其它资源

7.6. 在 RELP 中使用日志记录系统角色

可靠的事件日志协议(RELP)是通过 TCP 网络的用于数据和消息日志记录的网络协议。它可确保可靠地提供事件信息,您可以在不容许任何消息丢失的环境中使用它。

RELP 发送程序以命令的形式传输日志条目,接收方在处理后会确认它们。为确保一致性,RELP 会将事务号保存到每个传输的命令以进行任何消息恢复。

您可以在 RELP 客户端和 RELP 服务器之间考虑使用远程日志系统。RELP 客户端将日志传送到远程日志记录系统,RELP 服务器接收远程日志记录系统发送的所有日志。

管理员可以使用日志记录系统角色配置日志记录系统,以可靠地发送和接收日志条目。

7.6.1. 使用 RELP 配置客户端日志记录

您可以使用日志记录系统角色在 RHEL 系统中配置日志记录,这些日志记录在本地机器上,并通过运行 Ansible playbook 将日志传送到使用 RELP 的远程日志记录系统。

此流程在 Ansible 清单中 clients 组的所有主机上配置 RELP。RELP 配置使用传输层安全(TLS)来加密信息传输以通过网络安全传输日志。

先决条件

  • 具有在要配置 RELP 的受管节点上运行 playbook 的权限。
  • 受管节点列在控制节点上的清单文件中。
  • 在控制节点上安装 ansiblerhel-system-roles 软件包。

流程

  1. 使用以下内容创建 playbook.yml 文件:

    ---
    - name: Deploying basic input and relp output
      hosts: clients
      roles:
        - rhel-system-roles.logging
      vars:
        logging_inputs:
          - name: basic_input
            type: basics
        logging_outputs:
          - name: relp_client
            type: relp
            target: logging.server.com
            port: 20514
            tls: true
            ca_cert: /etc/pki/tls/certs/ca.pem
            cert: /etc/pki/tls/certs/client-cert.pem
            private_key: /etc/pki/tls/private/client-key.pem
            pki_authmode: name
            permitted_servers:
              - '*.server.example.com'
        logging_flows:
          - name: example_flow
            inputs: [basic_input]
            outputs: [relp_client]

    playbook 使用以下设置:

    • target: 这是一个必需的参数,用于指定运行远程日志记录系统的主机名。
    • port: 端口号正在侦听远程日志记录系统。
    • tls: 确保通过网络安全传输日志。如果您不想使用安全打包程序,可以将 tls 变量设置为 false。在使用 RELP 时,默认情况下 tls 参数被设置为 true,它需要密钥/证书和微调 {ca_certcertprivate_key} 和/或 {ca_cert_srccert_srcprivate_key_src}。

      • 如果设置了 {ca_cert_srccert_srcprivate_key_src} triplet,则使用默认的位置 /etc/pki/tls/certs/etc/pki/tls/private 作为受管节点上的目的地从控制节点传输文件。在这种情况下,文件名与三重写中的原始文件名相同
      • 如果设置了 {ca_certcertprivate_key} triplet,则文件应该位于日志记录配置前的默认路径中。
      • 如果同时设置了这两个 triplets,文件将从控制节点的本地路径传输到受管节点的特定路径。
    • ca_cert: 代表 CA 证书的路径。默认路径为 /etc/pki/tls/certs/ca.pem,文件名由用户设置。
    • cert: 代表证书的路径。默认路径为 /etc/pki/tls/certs/server-cert.pem,文件名由用户设置。
    • private_key: 代表到私钥的路径。默认路径为 /etc/pki/tls/private/server-key.pem,文件名由用户设置。
    • ca_cert_src: 保留复制到目标主机的本地 CA 证书文件路径。如果指定了 ca_cert,则会将其复制到位置。
    • cert_src: 保留复制到目标主机的本地证书文件路径。如果指定了证书,则会将其复制到位置。
    • private_key_src: 代表复制到目标主机的本地密钥文件路径。如果指定了 private_key,则会将其复制到位置。
    • pki_authmode: 接受验证模式为 namefingerprint
    • permitted_servers: 日志记录客户端通过 TLS 连接和发送日志的服务器列表。
    • inputs: 日志记录输入字典列表。
    • outputs: 日志输出字典列表。
  2. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 运行 playbook:

    # ansible-playbook -i inventory_file playbook.yml

7.6.2. 使用 RELP 配置服务器日志记录

您可以使用日志记录系统角色将 RHEL 系统的日志记录配置为服务器,并通过运行 Ansible playbook 从远程日志记录系统中使用 RELP 接收日志。

此流程在 Ansible 清单中 server 组的所有主机上配置 RELP。RELP 配置使用 TLS 来加密消息传输以通过网络安全传输日志。

先决条件

  • 具有在要配置 RELP 的受管节点上运行 playbook 的权限。
  • 受管节点列在控制节点上的清单文件中。
  • 在控制节点上安装 ansiblerhel-system-roles 软件包。

流程

  1. 使用以下内容创建 playbook.yml 文件:

    ---
    - name: Deploying remote input and remote_files output
      hosts: server
      roles:
        - rhel-system-roles.logging
      vars:
        logging_inputs:
          - name: relp_server
            type: relp
            port: 20514
            tls: true
            ca_cert: /etc/pki/tls/certs/ca.pem
            cert: /etc/pki/tls/certs/server-cert.pem
            private_key: /etc/pki/tls/private/server-key.pem
            pki_authmode: name
            permitted_clients:
              - '*example.client.com'
        logging_outputs:
          - name: remote_files_output
            type: remote_files
        logging_flows:
          - name: example_flow
            inputs: relp_server
            outputs: remote_files_output

    playbook 使用以下设置:

    • port: 端口号正在侦听远程日志记录系统。
    • tls: 确保通过网络安全传输日志。如果您不想使用安全打包程序,可以将 tls 变量设置为 false。在使用 RELP 时,默认情况下 tls 参数被设置为 true,它需要密钥/证书和微调 {ca_certcertprivate_key} 和/或 {ca_cert_srccert_srcprivate_key_src}。

      • 如果设置了 {ca_cert_srccert_srcprivate_key_src} triplet,则使用默认的位置 /etc/pki/tls/certs/etc/pki/tls/private 作为受管节点上的目的地从控制节点传输文件。在这种情况下,文件名与三重写中的原始文件名相同
      • 如果设置了 {ca_certcertprivate_key} triplet,则文件应该位于日志记录配置前的默认路径中。
      • 如果同时设置了这两个 triplets,文件将从控制节点的本地路径传输到受管节点的特定路径。
    • ca_cert: 代表 CA 证书的路径。默认路径为 /etc/pki/tls/certs/ca.pem,文件名由用户设置。
    • cert: 代表证书的路径。默认路径为 /etc/pki/tls/certs/server-cert.pem,文件名由用户设置。
    • private_key: 代表到私钥的路径。默认路径为 /etc/pki/tls/private/server-key.pem,文件名由用户设置。
    • ca_cert_src: 保留复制到目标主机的本地 CA 证书文件路径。如果指定了 ca_cert,则会将其复制到位置。
    • cert_src: 保留复制到目标主机的本地证书文件路径。如果指定了证书,则会将其复制到位置。
    • private_key_src: 代表复制到目标主机的本地密钥文件路径。如果指定了 private_key,则会将其复制到位置。
    • pki_authmode: 接受验证模式为 namefingerprint
    • permitted_clients: 日志记录服务器通过 TLS 连接和发送日志的客户端列表。
    • inputs: 日志记录输入字典列表。
    • outputs: 日志输出字典列表。
  2. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 运行 playbook:

    # ansible-playbook -i inventory_file playbook.yml

7.7. 在 TLS 中使用日志记录系统角色

传输层安全(TLS)是一个加密协议,用于通过计算机网络安全通讯。

作为管理员,您可以使用 RHEL 上的日志记录系统角色配置使用 Red Hat Ansible Automation Platform 进行日志的安全传输。

7.7.1. 使用 TLS 配置客户端日志记录

您可以使用日志记录系统角色在 RHEL 系统中配置日志记录,这些日志记录在本地机器上,并通过运行 Ansible playbook 将日志传送到使用 TLS 的远程日志记录系统。

此流程在 Ansible 清单中客户端组中的所有主机上配置 TLS。TLS 协议会加密信息传输以便通过网络安全传输日志。

先决条件

  • 具有在要配置 TLS 的受管节点上运行 playbook 的权限。
  • 受管节点列在控制节点上的清单文件中。
  • 在控制节点上安装 ansiblerhel-system-roles 软件包。

流程

  1. 使用以下内容创建 playbook.yml 文件:

    ---
    - name: Deploying files input and forwards output with certs
      hosts: clients
      roles:
        - rhel-system-roles.logging
      vars:
        logging_pki_files:
          - ca_cert_src: /local/path/to/ca_cert.pem
            cert_src: /local/path/to/cert.pem
            private_key_src: /local/path/to/key.pem
        logging_inputs:
          - name: input_name
            type: files
            input_log_path: /var/log/containers/*.log
        logging_outputs:
          - name: output_name
            type: forwards
            target: your_target_host
            tcp_port: 514
            tls: true
            pki_authmode: x509/name
            permitted_server: 'server.example.com'
        logging_flows:
          - name: flow_name
            inputs: [input_name]
            outputs: [output_name]

    playbook 使用以下参数:

    logging_pki_files
    使用此参数,您可以配置 TLS,并必须传递 ca_cert_srccert_srcprivate_key_src 参数。
    ca_cert
    代表到 CA 证书的路径。默认路径为 /etc/pki/tls/certs/ca.pem,文件名由用户设置。
    cert
    代表证书的路径。默认路径为 /etc/pki/tls/certs/server-cert.pem,文件名由用户设置。
    private_key
    代表到私钥的路径。默认路径为 /etc/pki/tls/private/server-key.pem,文件名由用户设置。
    ca_cert_src
    重新保留复制到目标主机的本地 CA 证书文件路径。如果指定了 ca_cert,它将复制到位置。
    cert_src
    重新包含复制到目标主机的本地证书文件路径。如果指定了 cert,它将复制到位置。
    private_key_src
    代表复制到目标主机的本地密钥文件路径。如果指定了 private_key,它将复制到位置。
    tls
    使用此参数可确保通过网络安全传输日志。如果您不想使用安全打包程序,可以设置 tls: true
  2. 验证 playbook 语法:

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file playbook.yml

7.7.2. 使用 TLS 配置服务器日志记录

您可以使用日志记录系统角色将 RHEL 系统的日志记录配置为服务器,并通过运行 Ansible playbook 从远程日志记录系统中接收使用 TLS 的日志。

此流程在 Ansible 清单中的服务器组中的所有主机上配置 TLS。

先决条件

  • 具有在要配置 TLS 的受管节点上运行 playbook 的权限。
  • 受管节点列在控制节点上的清单文件中。
  • 在控制节点上安装 ansiblerhel-system-roles 软件包。

流程

  1. 使用以下内容创建 playbook.yml 文件:

    ---
    - name: Deploying remote input and remote_files output with certs
      hosts: server
      roles:
        - rhel-system-roles.logging
      vars:
        logging_pki_files:
          - ca_cert_src: /local/path/to/ca_cert.pem
            cert_src: /local/path/to/cert.pem
            private_key_src: /local/path/to/key.pem
        logging_inputs:
          - name: input_name
            type: remote
            tcp_ports: 514
            tls: true
            permitted_clients: ['clients.example.com']
        logging_outputs:
          - name: output_name
            type: remote_files
            remote_log_path: /var/log/remote/%FROMHOST%/%PROGRAMNAME:::secpath-replace%.log
            async_writing: true
            client_count: 20
            io_buffer_size: 8192
        logging_flows:
          - name: flow_name
            inputs: [input_name]
            outputs: [output_name]

    playbook 使用以下参数:

    logging_pki_files
    使用此参数,您可以配置 TLS,并必须传递 ca_cert_srccert_srcprivate_key_src 参数。
    ca_cert
    代表到 CA 证书的路径。默认路径为 /etc/pki/tls/certs/ca.pem,文件名由用户设置。
    cert
    代表证书的路径。默认路径为 /etc/pki/tls/certs/server-cert.pem,文件名由用户设置。
    private_key
    代表到私钥的路径。默认路径为 /etc/pki/tls/private/server-key.pem,文件名由用户设置。
    ca_cert_src
    重新保留复制到目标主机的本地 CA 证书文件路径。如果指定了 ca_cert,它将复制到位置。
    cert_src
    重新包含复制到目标主机的本地证书文件路径。如果指定了 cert,它将复制到位置。
    private_key_src
    代表复制到目标主机的本地密钥文件路径。如果指定了 private_key,它将复制到位置。
    tls
    使用此参数可确保通过网络安全传输日志。如果您不想使用安全打包程序,可以设置 tls: true
  2. 验证 playbook 语法:

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file playbook.yml

7.8. 其它资源

  • RHEL 系统角色入门
  • 安装 rhel-system-roles 软件包,文档位于 /usr/share/ansible/roles/rhel-system-roles.logging/README.html
  • RHEL 系统角色 知识库文章
  • 有关 ansible-playbook 命令的详情请参考 ansible-playbook(1) man page。

第 8 章 配置与 SSH 系统角色的安全通信

作为管理员,您可以使用 SSHD 系统角色配置 SSH 服务器和 SSH 系统角色,通过使用 Red Hat Ansible Automation Platform 同时在任意数量的 RHEL 系统上配置 SSH 客户端。

8.1. SSHD 系统角色变量

在 SSHD 系统角色 playbook 中,您可以根据您的首选项和限制为 SSH 配置文件定义参数。

如果没有配置这些变量,系统角色会生成与 RHEL 默认值匹配的 sshd_config 文件。

在所有情况下,布尔值可以正确地作为 sshd 配置中的 yesno 呈现。您可以使用列表定义多行配置项目。例如:

sshd_ListenAddress:
  - 0.0.0.0
  - '::'

呈现如下:

ListenAddress 0.0.0.0
ListenAddress ::

SSHD 系统角色的变量

sshd_enable
如果设置为 False,则该角色被完全禁用。默认为 True
sshd_skip_defaults
如果设置为 True,则系统角色不会应用默认值。反之,您可以使用 sshd 字典或 sshd_Key 变量指定完整的配置默认设置。默认为 False
sshd_manage_service
如果设置为 False,则该服务不会被管理,这意味着引导时没有启用,且没有启动或重新载入。除非在容器或 AIX 中运行,默认为 True,因为 Ansible 服务模块当前不支持 AIX 的 enabled
sshd_allow_reload
如果设置为 False, sshd 不会在配置更改后重新加载。这有助于进行故障排除。要应用更改的配置,请手动重新载入 sshd。默认为与 sshd_manage_service 相同的值,但 AIX 除外,其中 sshd_manage_service 默认为 False,但 sshd_allow_reload 默认为 True
sshd_install_service

如果设置为 True,角色会为 sshd 服务安装服务文件。这会覆盖操作系统中的文件。除非要配置第二个实例,并且也更改了 sshd_service 变量,否则不要设置为 True。默认为 False

角色使用以下变量指向的文件作为模板:

sshd_service_template_service (default: templates/sshd.service.j2)
sshd_service_template_at_service (default: templates/sshd@.service.j2)
sshd_service_template_socket (default: templates/sshd.socket.j2)
sshd_service
此变量更改了 sshd 服务名称,这可用于配置第二个 sshd 服务实例。
sshd

包含配置的字典。例如:

sshd:
  Compression: yes
  ListenAddress:
    - 0.0.0.0
sshd_OptionName

您可以使用由 sshd_ 前缀和选项名称组成的简单变量而不是字典来定义选项。简单变量覆盖 sshd 字典中的值。例如:

sshd_Compression: no
sshd_matchsshd_match_1sshd_match_9
Match 部分的 dicts 或只是一个字典列表。请注意,这些变量不会覆盖 sshd 字典中定义的匹配块。所有源都会反映在生成的配置文件中。

SSHD 系统角色的辅助变量

您可以使用这些变量覆盖与每个支持的平台对应的默认值。

sshd_packages
您可以使用这个变量覆盖安装的软件包的默认列表。
sshd_config_ownersshd_config_groupsshd_config_mode
您可以使用这些变量为这个角色生成的 openssh 配置文件设置所有权和权限。
sshd_config_file
此角色保存生成的 openssh 服务器配置的路径。
sshd_binary
sshd 的可执行文件 openssh 的路径。
sshd_service
sshd 服务的名称。默认情况下,这个变量包含目标平台使用的 sshd 服务的名称。当角色使用 sshd_install_service 变量时,您还可以使用它来设置自定义 sshd 服务的名称。
sshd_verify_hostkeys
默认为 auto。当设置为 auto 时,这将列出生成的配置文件中存在的所有主机密钥,并生成所有不存在的路径。另外,权限和文件所有者也被设置为默认值。这在部署阶段使用角色来确保该服务能够在第一次尝试中启动时很有用。要禁用此检查,将此变量设置为空列表 []
sshd_hostkey_owner, sshd_hostkey_group, sshd_hostkey_mode
使用这些变量设置来自 sshd_verify_hostkeys 的主机密钥的所有权和权限。
sshd_sysconfig
在基于 RHEL 的系统中,这个变量配置了 sshd 服务的详情。如果设置为 true,这个角色还会根据以下配置管理 /etc/sysconfig/sshd 配置文件。默认为 false
sshd_sysconfig_override_crypto_policy
在 RHEL 8 中,当设置为 true 时,这个变量会覆盖系统范围的加密策略。默认为 false
sshd_sysconfig_use_strong_rng
在基于 RHEL 的系统中,这个变量可强制 sshd 重新找到 openssl 随机数生成器,并给出字节数作为参数。默认为 0,它会禁用此功能。如果系统没有硬件随机数生成器,不要打开这个选项。

8.2. 使用 SSHD 系统角色配置 OpenSSH 服务器

您可以通过运行 Ansible playbook,使用 SSHD 系统角色配置多个 SSH 服务器。

先决条件

  • 访问一个或多个 受管节点, 这是您要使用 SSHD 系统角色配置的系统。
  • 访问控制节点并获得权限, 控制节点 是 Red Hat Ansible Engine 配置其他系统的系统。

    在控制节点上:

    • 安装了 Red Hat Ansible Engine。
    • 已安装 rhel-system-roles 软件包。
    • 列出受管节点的清单文件。

流程

  1. 复制 SSHD 系统角色的示例 playbook:

    # cp /usr/share/doc/rhel-system-roles/sshd/example-root-login-playbook.yml path/custom-playbook.yml
  2. 使用文本编辑器打开复制的 playbook,例如:

    # vim path/custom-playbook.yml
    
    ---
    - hosts: all
      tasks:
      - name: Configure sshd to prevent root and password login except from particular subnet
        include_role:
          name: rhel-system-roles.sshd
        vars:
          sshd:
            # root login and password login is enabled only from a particular subnet
            PermitRootLogin: no
            PasswordAuthentication: no
            Match:
            - Condition: "Address 192.0.2.0/24"
              PermitRootLogin: yes
              PasswordAuthentication: yes

    playbook 将受管节点配置为配置的 SSH 服务器:

    • 禁用密码和 root 用户登录
    • 只能从子网启用密码和 root 用户登录 192.0.2.0/24

    您可以根据您的首选项修改变量。如需了解更多详细信息,请参阅 SSHD 服务器系统角色变量

  3. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check path/custom-playbook.yml
  4. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file path/custom-playbook.yml
    
    ...
    
    PLAY RECAP
    **************************************************
    
    localhost : ok=12 changed=2 unreachable=0 failed=0
    skipped=10 rescued=0 ignored=0

验证

  1. 登录到 SSH 服务器:

    $ ssh user1@10.1.1.1

    其中:

    • user1 是 SSH 服务器上的用户。
    • 10.1.1.1 是 SSH 服务器的 IP 地址。
  2. 检查 SSH 服务器中的 sshd_config 文件的内容:

    $ vim /etc/ssh/sshd_config
    
    # Ansible managed
    HostKey /etc/ssh/ssh_host_rsa_key
    HostKey /etc/ssh/ssh_host_ecdsa_key
    HostKey /etc/ssh/ssh_host_ed25519_key
    AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
    AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
    AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
    AcceptEnv XMODIFIERS
    AuthorizedKeysFile .ssh/authorized_keys
    ChallengeResponseAuthentication no
    GSSAPIAuthentication yes
    GSSAPICleanupCredentials no
    PasswordAuthentication no
    PermitRootLogin no
    PrintMotd no
    Subsystem sftp /usr/libexec/openssh/sftp-server
    SyslogFacility AUTHPRIV
    UsePAM yes
    X11Forwarding yes
    Match Address 192.0.2.0/24
      PasswordAuthentication yes
      PermitRootLogin yes
  3. 检查您可以以 root 用户身份从 192.0.2.0/24 子网连接到服务器:

    1. 确定您的 IP 地址:

      $ hostname -I
      192.0.2.1

      如果 IP 地址位于 192.0.2.1 - 192.0.2.254 范围内,您可以连接到服务器。

    2. root 身份连接到服务器:

      $ ssh root@10.1.1.1

其它资源

  • /usr/share/doc/rhel-system-roles/sshd/README.md file.
  • ansible-playbook(1) man page。

8.3. SSH 系统角色变量

在 SSH 系统角色 playbook 中,您可以根据您的首选项和限制为客户端 SSH 配置文件定义参数。

如果没有配置这些变量,系统角色会生成一个与 RHEL 默认值匹配的全局 ssh_config 文件。

在所有情况下,布尔值可以正确地作为 ssh 配置中的 yesno 呈现。您可以使用列表定义多行配置项目。例如:

LocalForward:
  - 22 localhost:2222
  - 403 localhost:4003

呈现如下:

LocalForward 22 localhost:2222
LocalForward 403 localhost:4003
注意

配置选项区分大小写。

SSH 系统角色的变量

ssh_user
您可以定义系统角色修改特定用户配置的现有用户名。特定于用户的配置保存在指定用户的 ~/.ssh/config 中。默认值为 null,它会修改所有用户的全局配置。
ssh_skip_defaults
默认为 auto。如果设置为 auto,系统角色会编写系统范围的配置文件 /etc/ssh/ssh_config,并保留定义的 RHEL 默认设置。创建丢弃配置文件(例如通过定义 ssh_drop_in_name 变量)自动禁用 ssh_skip_defaults 变量。
ssh_drop_in_name

定义 drop-in 配置文件的名称,该文件放在系统范围的 drop-in 目录中。该名称在模板 /etc/ssh/ssh_config.d/{ssh_drop_in_name}.conf 中使用来引用要修改的配置文件。如果系统不支持 drop-in 目录,则默认值为 null。如果系统支持 drop-in 目录,则默认值为 00-ansible

警告

如果系统不支持 drop-in 目录,设置这个选项会使 play 失败。

建议的格式是 NN-name,其中 NN 是用来排序配置文件的双数字数字, name 是文件内容或文件所有者的任何描述性名称。

ssh
包含配置选项及其相应值的字典。
ssh_OptionName
您可以使用由 ssh_ 前缀和选项名称组成的简单变量而不是字典来定义选项。简单变量覆盖 ssh 字典中的值。
ssh_additional_packages
这个角色会自动安装 opensshopenssh-clients 软件包,它们对于最常用的用例来说是必需的。如果您需要安装其他软件包,如 openssh-keysign 用于基于主机的身份验证,您可以在这个变量中指定它们。
ssh_config_file

角色保存生成的配置文件的路径。默认值:

  • 如果系统有 drop-in 目录,则默认值由模板 /etc/ssh/ssh_config.d/{ssh_drop_in_name}.conf 定义。
  • 如果系统没有 drop-in 目录,则默认值为 /etc/ssh/ssh_config
  • 如果定义了 ssh_user 变量,默认值为 ~/.ssh/config
ssh_config_owner, ssh_config_group, ssh_config_mode
所创建配置文件的拥有者、组和模式。默认情况下,该文件的所有者是 root:root,模式是 0644。如果定义了 ssh_user,则模式为 0600,所有者和组都来自于 ssh_user 变量中指定的用户名。

8.4. 使用 SSH 系统角色配置 OpenSSH 客户端

您可以通过运行 Ansible playbook,使用 SSH 系统角色配置多个 SSH 客户端。

先决条件

  • 访问一个或多个 受管节点, 这是您要使用 SSH 系统角色配置的系统。
  • 访问控制节点并获得权限, 控制节点 是 Red Hat Ansible Engine 配置其他系统的系统。

    在控制节点上:

    • 安装了 Red Hat Ansible Engine。
    • 已安装 rhel-system-roles 软件包。
    • 列出受管节点的清单文件。

流程

  1. 使用以下内容 playbook.yml 创建新文件:

    ---
    - hosts: all
      tasks:
      - name: "Configure ssh clients"
        include_role:
          name: rhel-system-roles.ssh
        vars:
          ssh_user: root
          ssh:
            Compression: true
            GSSAPIAuthentication: no
            ControlMaster: auto
            ControlPath: ~/.ssh/.cm%C
            Host:
              - Condition: example
                Hostname: example.com
                User: user1
          ssh_ForwardX11: no

    此 playbook 使用以下配置在受管节点上配置 root 用户的 SSH 客户端首选项:

    • 启用压缩。
    • ControlMaster 多 xing 被设置为 auto
    • 用于连接 example.com 主机的 example 别名是 user1
    • 创建 example 主机别名,代表到使用 user1 用户名的 example.com 主机的连接。
    • X11 转发被禁用。

    另外,您可以根据您的首选项修改这些变量。如需了解更多详细信息,请参阅 SSH 客户端角色变量

  2. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check path/custom-playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file path/custom-playbook.yml

验证

  • 通过在文本编辑器中打开 SSH 配置文件来验证受管节点是否有正确的配置,例如:

    # vi ~root/.ssh/config

    在应用了上面显示的示例 playbook 后,配置文件应具有以下内容:

    # Ansible managed
    Compression yes
    ControlMaster auto
    ControlPath ~/.ssh/.cm%C
    ForwardX11 no
    GSSAPIAuthentication no
    Host example
      Hostname example.com
      User user1

第 9 章 在系统间设置自定义加密策略

作为管理员,您可以使用 RHEL 上的 Crypto 策略系统角色,使用 Red Hat Ansible Automation Platform 在很多不同系统中快速和一致地配置自定义加密策略。

9.1. 加密策略系统角色变量和事实

在 Crypto 策略系统角色 playbook 中,您可以根据您的首选项和限制为 crypto 策略配置文件定义参数。

如果没有配置任何变量,系统角色就不会配置系统,仅报告事实(fact)。

Crypto 策略系统角色的所选变量

crypto_policies_policy
决定系统角色应用到受管节点的加密策略级别。有关不同加密策略级别的详细信息,请参阅 系统范围的加密策略
crypto_policies_reload
如果设置为 yes,受影响的服务(当前 ipsecbindsshd 服务)在应用加密策略后重新加载。默认为 yes
crypto_policies_reboot_ok
如果设置为 yes,且需要在系统角色更改 crypto 策略后重启,它会将 crypto_policies_reboot_required 设置为 yes。默认为 no

Crypto 策略系统角色设置的事实

crypto_policies_active
列出当前选择的策略。
crypto_policies_available_policies
列出系统中所有可用策略级别。
crypto_policies_available_modules
列出系统中所有可用的子策略模块。

其它资源

9.2. 使用 Crypto 策略系统角色设置自定义加密策略

您可以使用 Crypto 策略系统角色从单一控制节点上配置大量受管节点。

先决条件

  • 访问一个或多个 受管节点, 这是您要使用 Crypto 策略系统角色配置的系统。
  • 访问控制节点并获得权限, 控制节点 是 Red Hat Ansible Engine 配置其他系统的系统。

    在控制节点上:

    • 安装了 Red Hat Ansible Engine
    • 已安装 rhel-system-roles 软件包
    • 列出受管节点的清单文件。

流程

  1. 使用以下内容 playbook.yml 创建新文件:

    ---
    - hosts: all
      tasks:
      - name: Configure crypto policies
        include_role:
          name: linux-system-roles.crypto_policies
        vars:
          - crypto_policies_policy: FUTURE
          - crypto_policies_reboot_ok: true

    您可以将 FUTURE 值替换为您首选的加密策略,例如: DEFAULTLEGACYFIPS:OSPP

    crypto_policies_reboot_ok: true 变量会导致系统在系统角色更改加密策略后重启。

    如需了解更多详细信息,请参阅 Crypto 策略系统角色变量和事实

  2. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file playbook.yml

验证

  1. 在控制节点上创建另一个名为 verify_playbook.yml 的 playbook:

    - hosts: all
      tasks:
     - name: Verify active crypto policy
       include_role:
         name: linux-system-roles.crypto_policies
    
     - debug:
         var: crypto_policies_active

    此 playbook 不会更改系统中的任何配置,只报告受管节点上的活跃策略。

  2. 在同一个清单文件上运行 playbook:

    # ansible-playbook -i inventory_file verify_playbook.yml
    
    TASK [debug] **************************
    ok: [host] => {
        "crypto_policies_active": "FUTURE"
    }

    "crypto_policies_active": 变量显示受管节点上活跃的策略。

9.3. 其它资源

  • 有关 Crypto 策略中使用的参数的详情,以及 Crypto 策略系统角色的附加信息,请参阅 /usr/share/ansible/roles/rhel-system-roles.crypto_policies/README.md 文件。
  • 有关 ansible-playbook 命令的详情请参考 ansible-playbook(1) man page。
  • 安装 RHEL 系统角色
  • 应用系统角色

第 10 章 使用 Clevis 和 Tang 系统角色

10.1. Clevis 和 Tang 系统角色介绍

RHEL 系统角色是 Ansible 角色和模块的集合,可为远程管理多个 RHEL 系统提供一致的配置界面。

RHEL 8.3 引入了 Ansible 角色,用于使用 Clevis 和 Tang 自动部署基于策略的加密(PBD)解决方案。rhel-system-roles 软件包包含这些系统角色、相关示例以及参考文档。

nbde_client 系统角色可让您自动部署多个 Clevis 客户端。请注意,nbde_client 角色只支持 Tang 绑定,您目前不能在 TPM2 绑定中使用它。

nbde_client 角色需要已经使用 LUKS 加密的卷。这个角色支持将 LUKS 加密卷绑定到一个或多个 Network-Bound(NBDE)服务器 - Tang 服务器。您可以使用密码短语保留现有卷加密,或将其删除。删除密码短语后,您只能使用 NBDE 来解锁卷。当卷最初使用您在置备系统后删除的临时密钥或密码加密时,这非常有用。

如果您同时提供密码短语和密钥文件,则角色将首先使用您提供的内容。如果无法找到任何这些密码,它会尝试从现有绑定中检索密码短语。

PBD 将绑定定义为设备到插槽的映射。这意味着您可以为同一设备有多个绑定。默认插槽为插槽 1。

nbde_client 角色也提供 state 变量。使用 present 值创建新绑定或更新现有绑定。对于 clevis luks bind 命令,您还可以使用 state: present 覆盖其设备插槽中存在的绑定。absent 值移除指定的绑定。

通过 nbde_server 角色,您可以部署和管理 Tang 服务器作为自动磁盘加密解决方案的一部分。此角色支持以下功能:

  • 轮转 Tang 密钥
  • 部署和备份 Tang 密钥

其它资源

  • 有关 Network-Bound Disk Encryption(NBDE)角色变量的详细参考,安装 rhel-system-roles 软件包,查看 README.md /usr/share/doc/rhel-system-roles/nbde_client/README.html /usr/share/doc/rhel-system-roles/nbde_server/ 目录里的文件。
  • 例如 system-roles playbook,安装 rhel-system-roles 软件包并查看 /usr/share/ansible/roles/rhel-system-roles.nbde_server/examples/ 目录。
  • 有关 RHEL 系统角色的更多信息,请参阅 RHEL 系统角色简介

10.2. 使用 nbde_server 系统角色设置多个 Tang 服务器

按照以下步骤准备并应用包含您的 Tang-server 设置的 Ansible playbook。

先决条件

流程

  1. 启用 RHEL Ansible 存储库,例如:

    # subscription-manager repos --enable ansible-2-for-rhel-8-x86_64-rpms
  2. 安装 Ansible Engine:

    # yum install ansible
  3. 安装 RHEL 系统角色:

    # yum install rhel-system-roles
  4. 准备包含 Tang 服务器设置的 playbook。您可以从头开始,或使用 /usr/share/ansible/roles/rhel-system-roles.nbde_server/examples/ 目录中的示例 playbook。

    # cp /usr/share/ansible/roles/rhel-system-roles.nbde_server/examples/simple_deploy.yml ./my-tang-playbook.yml
  5. 在您选择的文本编辑器中编辑 playbook,例如:

    # vi my-tang-playbook.yml
  6. 添加所需参数。以下示例 playbook 可确保部署 Tang 服务器和密钥轮转:

    ---
    - hosts: all
    
      vars:
        nbde_server_rotate_keys: yes
    
      roles:
        - linux-system-roles.nbde_server
  7. 应用完成的 playbook:

    # ansible-playbook -i host1,host2,host3 my-tang-playbook.yml

其它资源

  • 如需更多信息,请安装 rhel-system-roles 软件包并查看 usr/share/ansible/roles/rhel-system-roles.nbde_server/ 目录和 /usr/share/doc/rhel-system-roles/nbde_server/ 目录。

10.3. 使用 nbde_client 系统角色设置多个 Clevis 客户端

按照以下步骤准备并应用包含 Clevis-client 设置的 Ansible playbook。

注意

nbde_client 系统角色只支持 Tang 绑定。这意味着您目前无法将其用于 TPM2 绑定。

先决条件

流程

  1. 启用 RHEL Ansible 存储库,例如:

    # subscription-manager repos --enable ansible-2-for-rhel-8-x86_64-rpms
  2. 安装 Ansible Engine:

    # yum install ansible
  3. 安装 RHEL 系统角色:

    # yum install rhel-system-roles
  4. 准备包含 Clevis 客户端设置的 playbook。您可以从头开始,或使用 /usr/share/ansible/roles/rhel-system-roles.nbde_client/examples/ 目录中的示例 playbook。

    # cp /usr/share/ansible/roles/rhel-system-roles.nbde_client/examples/high_availability.yml ./my-clevis-playbook.yml
  5. 在您选择的文本编辑器中编辑 playbook,例如:

    # vi my-clevis-playbook.yml
  6. 添加所需参数。以下示例 playbook 将 Clevis 客户端配置为,在两个 Tang 服务器中至少有一个可用时自动解锁两个 LUKS 加密卷:

    ---
    - hosts: all
    
      vars:
        nbde_client_bindings:
          - device: /dev/rhel/root
            encryption_key_src: /etc/luks/keyfile
            servers:
              - http://server1.example.com
              - http://server2.example.com
          - device: /dev/rhel/swap
            encryption_key_src: /etc/luks/keyfile
            servers:
              - http://server1.example.com
              - http://server2.example.com
    
      roles:
        - linux-system-roles.nbde_client
  7. 应用完成的 playbook:

    # ansible-playbook -i host1,host2,host3 my-clevis-playbook.yml

其它资源

  • 如需了解有关该角色的参数和附加信息 nbde_client ,安装 rhel-system-roles 软件包并查看 /usr/share/doc/rhel-system-roles/nbde_client/ /usr/share/ansible/roles/rhel-system-roles.nbde_client/ 目录的详情。

第 11 章 使用 RHEL 系统角色请求证书

通过证书系统角色,您可以使用 Red Hat Ansible Engine 发布和管理证书。

本章涵盖了以下主题:

11.1. 证书系统角色

使用证书系统角色,您可以使用 Red Hat Ansible Engine 管理发布和更新 TLS 和 SSL 证书。

该角色使用 certmonger 作为证书提供程序,目前支持发布和更新自签名证书并使用 IdM 集成的证书颁发机构(CA)。

您可以将 Ansible playbook 中的以下变量与证书系统角色结合使用:

  • certificate_wait 指定任务是否应该等待签发证书。
  • 代表要发布的每个证书及其参数的 certificate_requests

其它资源

  • 有关 certificate_requests 变量使用的参数的详情,以及 certificate 系统角色的附加信息,请参阅该 /usr/share/ansible/roles/rhel-system-roles.certificate/README.md 文件。
  • 有关 RHEL 系统角色以及如何应用它们的详情,请参阅 RHEL 系统角色入门

11.2. 使用证书系统角色请求新的自签名证书

使用证书系统角色,您可以使用 Red Hat Ansible Engine 发布自签名证书。

此过程使用 certmonger 供应商并通过 getcert 命令请求证书。

注意

默认情况下,在证书过期前 certmonger 自动尝试更新该证书。您可以通过将 Ansible playbook 中的 auto_renew 参数设置为no来禁用此功能。

先决条件

  • 您已在要运行 playbook 的系统中安装了 Red Hat Ansible Engine。

    注意

    您不必在要部署 certificate 解决方案的系统中安装 Ansible。

  • 已安装该系统中要运行 playbook 的 rhel-system-roles 软件包。

    有关 RHEL 系统角色以及如何应用它们的详情,请参阅 RHEL 系统角色入门

流程

  1. 可选: 创建一个清单文件,例如 inventory.file:

    $ touch inventory.file
  2. 打开清单文件并定义要请求证书的主机,例如:

    [webserver]
    server.idm.example.com
  3. 创建 playbook 文件,例如 request-certificate.yml:

    • 设置 hosts 为包含您要请求证书的主机,如 webserver
    • certificate_requests 变量设置为包含以下内容:

      • 将参数设置 name 为证书的所需名称,如 mycert
      • dns 参数设置为证书中包含的域,如 *.example.com
      • 将参数 ca 设置为 self-sign
    • roles 下设置 rhel-system-roles.certificate 角色。

      这是本例的 playbook 文件:

      ---
      - hosts: webserver
      
        vars:
          certificate_requests:
            - name: mycert
              dns: *.example.com
              ca: self-sign
      
        roles:
          - rhel-system-roles.certificate
  4. 保存该文件。
  5. 运行 playbook:

    $ ansible-playbook -i inventory.file request-certificate.yml

其它资源

  • 有关 certificate_requests 变量使用的参数的详情,以及 certificate 系统角色的附加信息,请参阅该 /usr/share/ansible/roles/rhel-system-roles.certificate/README.md 文件。
  • 有关 ansible-playbook 命令的详情请参考 ansible-playbook(1) man page。

11.3. 使用证书系统角色从 IdM CA 请求一个新证书

使用证书系统角色,您可以在使用带有集成证书颁发机构(CA)的 IdM 服务器时,使用 Red Hat Ansible Engine 发布证书。因此,在使用 IdM 作为 CA 时,您可以高效和一致地管理多个系统的证书信任链。

此过程使用 certmonger 供应商并通过 getcert 命令请求证书。

注意

默认情况下,在证书过期前 certmonger 自动尝试更新该证书。您可以通过将 Ansible playbook 中的 auto_renew 参数设置为no来禁用此功能。

先决条件

  • 您已在要运行 playbook 的系统中安装了 Red Hat Ansible Engine。

    注意

    您不必在要部署 certificate 解决方案的系统中安装 Ansible。

  • 已安装该系统中要运行 playbook 的 rhel-system-roles 软件包。

    有关 RHEL 系统角色以及如何应用它们的详情,请参阅 RHEL 系统角色入门

流程

  1. 可选: 创建一个清单文件,例如 inventory.file:

    $ touch inventory.file
  2. 打开清单文件并定义要请求证书的主机,例如:

    [webserver]
    server.idm.example.com
  3. 创建 playbook 文件,例如 request-certificate.yml:

    • 设置 hosts 为包含您要请求证书的主机,如 webserver
    • certificate_requests 变量设置为包含以下内容:

      • 将参数设置 name 为证书的所需名称,如 mycert
      • dns 参数设置为证书中包含的域,如 www.example.com
      • principal 参数设置为特定的 Kerberos 主体,如 HTTP/www.example.com@EXAMPLE.COM
      • 将参数 ca 设置为 ipa
    • roles 下设置 rhel-system-roles.certificate 角色。

      这是本例的 playbook 文件:

      ---
      - hosts: webserver
        vars:
          certificate_requests:
            - name: mycert
              dns: www.example.com
              principal: HTTP/www.example.com@EXAMPLE.COM
              ca: ipa
      
        roles:
          - rhel-system-roles.certificate
  4. 保存该文件。
  5. 运行 playbook:

    $ ansible-playbook -i inventory.file request-certificate.yml

其它资源

  • 有关 certificate_requests 变量使用的参数的详情,以及 certificate 系统角色的附加信息,请参阅该 /usr/share/ansible/roles/rhel-system-roles.certificate/README.md 文件。
  • 有关 ansible-playbook 命令的详情请参考 ansible-playbook(1) man page。

11.4. 指定在使用证书系统角色前或之后要运行的命令

使用证书系统角色,您可以使用 Red Hat Ansible Engine 在签发或更新证书之前和之后执行命令。

在以下示例中,管理员确保在为 www.example.com 发布或更新自签名证书前停止 httpd 服务,然后再重启该服务。

注意

默认情况下,在证书过期前 certmonger 自动尝试更新该证书。您可以通过将 Ansible playbook 中的 auto_renew 参数设置为no来禁用此功能。

先决条件

  • 您已在要运行 playbook 的系统中安装了 Red Hat Ansible Engine。

    注意

    您不必在要部署 certificate 解决方案的系统中安装 Ansible。

  • 已安装该系统中要运行 playbook 的 rhel-system-roles 软件包。

    有关 RHEL 系统角色以及如何应用它们的详情,请参阅 RHEL 系统角色入门

流程

  1. 可选: 创建一个清单文件,例如 inventory.file:

    $ touch inventory.file
  2. 打开清单文件并定义要请求证书的主机,例如:

    [webserver]
    server.idm.example.com
  3. 创建 playbook 文件,例如 request-certificate.yml:

    • 设置 hosts 为包含您要请求证书的主机,如 webserver
    • certificate_requests 变量设置为包含以下内容:

      • 将参数设置 name 为证书的所需名称,如 mycert
      • dns 参数设置为证书中包含的域,如 www.example.com
      • ca 参数设置为您要用来发布证书的 CA,如 self-sign
      • run_before 参数设置为在签发或续订证书前要执行的命令,如 systemctl stop httpd.service
      • run_after 参数设置为发布或续订这个证书后要执行的命令,如 systemctl start httpd.service
    • roles 下设置 rhel-system-roles.certificate 角色。

      这是本例的 playbook 文件:

      ---
      - hosts: webserver
        vars:
          certificate_requests:
            - name: mycert
              dns: www.example.com
              ca: self-sign
              run_before: systemctl stop httpd.service
              run_after: systemctl start httpd.service
      
        roles:
          - linux-system-roles.certificate
  4. 保存该文件。
  5. 运行 playbook:

    $ ansible-playbook -i inventory.file request-certificate.yml

其它资源

  • 有关 certificate_requests 变量使用的参数的详情,以及 certificate 系统角色的附加信息,请参阅该 /usr/share/ansible/roles/rhel-system-roles.certificate/README.md 文件。
  • 有关 ansible-playbook 命令的详情请参考 ansible-playbook(1) man page。

第 12 章 使用 RHEL 系统角色配置 kdump

要使用 Ansible 管理 kdump,您可以使用 kdump 角色,该角色是 RHEL 8 中可用的 RHEL 系统角色之一。

使用 kdump 可让您指定保存系统内存内容的位置,以便稍后进行分析。

有关 RHEL 系统角色以及如何应用它们的更多信息,请参阅 RHEL 系统角色简介

12.1. kdump RHEL 系统角色

kdump 系统角色允许您在多个系统中设置基本内核转储参数。

12.2. kdump 角色参数

kdump RHEL 系统角色使用的参数有:

角色变量描述

kdump_path

vmcore 写入的路径。如果 kdump_target 不是 null,则路径相对于那个转储目标。否则,它必须是 root 文件系统的绝对路径。

其它资源

  • 请参阅 makedumpfile(8)man page。
  • 有关 kdump 中使用的参数详情,以及 kdump 系统角色的信息,请参阅 /usr/share/ansible/roles/rhel-system-roles.tlog/README.md 文件。

12.3. 使用 RHEL 系统角色配置 kdump

您可以通过运行 Ansible playbook 在多个系统中使用 kdump 系统角色设置基本内核转储参数。

警告

通过替换 /etc/kdump.conf 文件, kdump 角色完全替换了受管主机的 kdump 配置。另外,如果应用了 kdump 角色,则之前的所有 kdump 设置也会被替换,即使它们没有被角色变量指定,也会替换 /etc/sysconfig/kdump 文件。

先决条件

  • 您已在要运行 playbook 的系统中安装了 Red Hat Ansible Engine。

    注意

    您不必在要部署 kdump 解决方案的系统中安装 Red Hat Ansible Automation Platform。

  • 已安装该系统中要运行 playbook 的 rhel-system-roles 软件包。
  • 您有一个清单文件,其中包含要在其上部署 kdump 的系统。

流程

  1. 使用以下内容 playbook.yml 创建新文件:

    ---
    - hosts: kdump-test
      vars:
        kdump_path: /var/crash
      roles:
        - rhel-system-roles.kdump
  2. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file /path/to/file/playbook.yml

其它资源

  • 有关 kdump 角色变量的详情,请查看 /usr/share/doc/rhel-system-roles/kdump 目录中的 README.md 或 README.html 文件。
  • 请查看 第 1.3 节 “应用一个角色”
  • 安装 rhel-system-roles 软件包的文档 /usr/share/ansible/roles/rhel-system-roles.kdump/README.html

第 13 章 使用 RHEL 系统角色管理本地存储

要使用 Ansible 管理 LVM 和本地文件系统(FS),您可以使用 storage 角色,该角色是 RHEL 8 中可用的 RHEL 系统角色之一。

使用 storage 角色可让您从 RHEL 7.7 开始,在多个机器和 RHEL 的所有版本中自动管理磁盘和逻辑卷中的文件系统。

有关 RHEL 系统角色以及如何应用它们的更多信息,请参阅 RHEL 系统角色简介

13.1. 存储角色简介

storage 角色可以管理:

  • 磁盘上未被分区的文件系统
  • 完整的 LVM 卷组,包括其逻辑卷和文件系统

使用 storage 角色,您可以执行以下任务:

  • 创建文件系统
  • 删除文件系统
  • 挂载文件系统
  • 卸载文件系统
  • 创建 LVM 卷组
  • 删除 LVM 卷组
  • 创建逻辑卷
  • 删除逻辑卷
  • 创建 RAID 卷
  • 删除 RAID 卷
  • 创建带有 RAID 的 LVM 池
  • 删除带有 RAID 的 LVM 池

13.2. 在存储设备角色中识别存储设备的参数

您的 storage 角色配置只会影响您在以下变量中列出的文件系统、卷和池。

storage_volumes

在所有要管理的未分区磁盘中的文件系统列表。

当前不支持的分区。

storage_pools

要管理的池列表。

目前唯一支持的池类型是 LVM。使用 LVM 时,池代表卷组(VG)。每个池中都有一个要由角色管理的卷列表。对于 LVM,每个卷对应一个带文件系统的逻辑卷(LV)。

13.3. 在块设备中创建 XFS 文件系统的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用 storage 角色,以使用默认参数在块设备中创建 XFS 文件系统。

警告

storage 角色只能在未分区、整个磁盘或者逻辑卷(LV)中创建文件系统。它不能在分区中创建文件系统。

例 13.1. 在 /dev/sdb 上创建 XFS 的 playbook

---
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - sdb
        fs_type: xfs
  roles:
    - rhel-system-roles.storage
  • 卷名称(示例中是 barefs )目前是任意卷。storage 角色根据在 disks: 属性中列出的磁盘设备识别卷。
  • 您可以省略 fs_type: xfs 行,因为 XFS 是 RHEL 8 中的默认文件系统。
  • 要在 LV 中创建文件系统,在 disks: 属性中提供 LVM 设置,包括保护卷组。详情请参阅 管理逻辑卷的 Ansible playbook 示例

    不要提供到 LV 设备的路径。

其它资源

  • 有关 storage 系统角色中使用的参数的详情,请查看 /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

13.4. 永久挂载文件系统的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用 storage 角色来立即和永久挂载 XFS 文件系统。

例 13.2. 在 /dev/sdb 上将文件系统挂载到 /mnt/data 的 playbook

---
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - sdb
        fs_type: xfs
        mount_point: /mnt/data
  roles:
    - rhel-system-roles.storage
  • 此 playbook 将文件系统添加到 /etc/fstab 文件中,并立即挂载文件系统。
  • 如果 /dev/sdb 设备或挂载点目录中的文件系统不存在,则 playbook 会创建它们。

其它资源

  • 有关 storage 系统角色中使用的参数的详情,请查看 /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

13.5. 管理逻辑卷的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。这个 playbook 应用 storage 角色在卷组中创建 LVM 逻辑卷。

例 13.3. 在 myvg 卷组中创建 mylv 逻辑卷的 playbook

- hosts: all
  vars:
    storage_pools:
      - name: myvg
        disks:
          - sda
          - sdb
          - sdc
        volumes:
          - name: mylv
            size: 2G
            fs_type: ext4
            mount_point: /mnt
  roles:
    - rhel-system-roles.storage
  • myvg 卷组由以下磁盘组成:

    • /dev/sda
    • /dev/sdb
    • /dev/sdc
  • 如果 myvg 卷组已存在,则 playbook 会将逻辑卷添加到卷组中。
  • 如果 myvg 卷组不存在,则 playbook 会创建它。
  • playbook 在 mylv 逻辑卷中创建 Ext4 文件系统,并在其中永久挂载文件系统 /mnt

其它资源

  • 有关 storage 系统角色中使用的参数的详情,请查看 /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

13.6. 启用在线块丢弃的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用 storage 角色来挂载启用了在线块丢弃的 XFS 文件系统。

例 13.4. 一个 playbook,它在 /mnt/data/ 上启用在线块丢弃功能

---
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - sdb
        fs_type: xfs
        mount_point: /mnt/data
        mount_options: discard
  roles:
    - rhel-system-roles.storage

其它资源

  • 有关 storage 系统角色中使用的参数的详情,请查看 /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

13.7. 创建和挂载 Ext4 文件系统的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用 storage 角色来创建和挂载 Ext4 文件系统。

例 13.5. 在 /dev/sdb 上创建 Ext4 并挂载到 /mnt/data 的 playbook

---
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - sdb
        fs_type: ext4
        fs_label: label-name
        mount_point: /mnt/data
  roles:
    - rhel-system-roles.storage
  • playbook 在 /dev/sdb 磁盘上创建文件系统。
  • playbook 会永久将文件系统挂载到 /mnt/data 目录中。
  • 文件系统的标签是 label-name

其它资源

  • 有关 storage 系统角色中使用的参数的详情,请查看 /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

13.8. 创建和挂载 ext3 文件系统的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用 storage 角色来创建和挂载 Ext3 文件系统。

例 13.6. 在 /dev/sdb 上创建 Ext3 并挂载到 /mnt/data 的 playbook

---
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - sdb
        fs_type: ext3
        fs_label: label-name
        mount_point: /mnt/data
  roles:
    - rhel-system-roles.storage
  • playbook 在 /dev/sdb 磁盘上创建文件系统。
  • playbook 会永久将文件系统挂载到 /mnt/data 目录中。
  • 文件系统的标签是 label-name

其它资源

  • 有关 storage 系统角色中使用的参数的详情,请查看 /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

13.9. 使用存储 RHEL 系统角色重新定义现有 Ext4 或 Ext3 文件系统大小的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用 storage 角色来重新定义块设备中现有的 Ext4 或 Ext3 文件系统大小。

例 13.7. 在磁盘上设置单个卷的 playbook

---
- name: Create a disk device mounted on /opt/barefs
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - /dev/sdb
	size: 12 GiB
        fs_type: ext4
        mount_point: /opt/barefs
  roles:
    - rhel-system-roles.storage
  • 如果上一示例中的卷已经存在,要重新定义卷大小,您需要运行相同的 playbook,就像参数 size 的不同值一样。例如:

例 13.8. 在 ext4 上调整大小的 playbook /dev/sdb

---
- name: Create a disk device mounted on /opt/barefs
- hosts: all
  vars:
    storage_volumes:
      - name: barefs
        type: disk
        disks:
          - /dev/sdb
	size: 10 GiB
        fs_type: ext4
        mount_point: /opt/barefs
  roles:
    - rhel-system-roles.storage
  • 卷名称(示例中的 barefs)目前是任意卷。storage 角色根据在 disks: 属性中列出的磁盘设备识别卷。
注意

在其它文件系统中使用 Resizing 操作可破坏您正在使用的设备中的数据。

其它资源

  • 有关 storage 系统角色中使用的参数的详情,请查看 /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

13.10. 使用存储 RHEL 系统角色重新定义 LVM 上现有文件系统大小的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。这个 playbook 应用存储 RHEL 系统角色来使用文件系统重新定义 LVM 逻辑卷大小。

警告

在其它文件系统中使用 Resizing 操作可破坏您正在使用的设备中的数据。

例 13.9. 调整 myvg 卷组中现有 mylv1 和 myvl2 逻辑卷大小的 playbook

---

- hosts: all
   vars:
    storage_pools:
      - name: myvg
        disks:
          - /dev/sda
          - /dev/sdb
          - /dev/sdc
        volumes:
            - name: mylv1

            size: 10 GiB
            fs_type: ext4
            mount_point: /opt/mount1
            - name: mylv2
            size: 50 GiB
            fs_type: ext4
            mount_point: /opt/mount2

- name: Create LVM pool over three disks
  incude_role:
    name: rhel-system-roles.storage
  • playbook 在 mylv 逻辑卷中创建 Ext4 文件系统,并在 /mnt 挂载点永久挂载文件系统。

其它资源

  • 有关 storage 系统角色中使用的参数的详情,请查看 /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

13.11. 使用存储 RHEL 系统角色创建交换分区的 Ansible playbook 示例

本节提供了一个 Ansible playbook 示例。此 playbook 应用 storage 角色来创建 swap 分区(如果不存在),或使用默认参数在块设备中修改 swap 分区(如果已存在)。

例 13.10. 在 /dev/sdb 上创建或修改现有 XFS 的 playbook

---
- name: Create a disk device with swap
- hosts: all
  vars:
    storage_volumes:
      - name: swap_fs
        type: disk
        disks:
          - /dev/sdb
	size: 15 GiB
        fs_type: swap
  roles:
    - rhel-system-roles.storage
  • 卷名称(示例中为swap_fs )目前是任意卷。storage 角色根据在 disks: 属性中列出的磁盘设备识别卷。

其它资源

  • 有关 storage 系统角色中使用的参数的详情,请查看 /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

13.12. 使用存储系统角色配置 RAID 卷

使用 storage 系统角色,您可以使用 Red Hat Ansible Automation Platform 在 RHEL 上配置 RAID 卷。在本小节中,您将了解如何使用可用参数设置 Ansible playbook,以配置 RAID 卷以满足您的要求。

先决条件

  • 您已在要运行 playbook 的系统中安装了 Red Hat Ansible Engine。

    注意

    您不必在要部署 storage 解决方案的系统中安装 Red Hat Ansible Automation Platform。

  • 已安装该系统中要运行 playbook 的 rhel-system-roles 软件包。
  • 您有一个清单文件详细描述了您要使用 storage 系统角色部署 RAID 卷的系统。

流程

  1. 使用以下内容 playbook.yml 创建新文件:

    - hosts: all
      vars:
        storage_safe_mode: false
        storage_volumes:
          - name: data
            type: raid
            disks: [sdd, sde, sdf, sdg]
            raid_level: raid0
            raid_chunk_size: 32 KiB
            mount_point: /mnt/data
            state: present
      roles:
        - name: rhel-system-roles.storage
    警告

    设备名称在某些情况下可能会改变,例如:当您在系统中添加新磁盘时。因此,为了避免数据丢失,我们不建议在 playbook 中使用特定的磁盘名称。

  2. 可选。验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory.file /path/to/file/playbook.yml

其它资源

  • 有关 RAID 的详情,请参阅管理 RAID
  • 有关存储系统角色中使用的参数的详情,请查看 /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

13.13. 使用存储系统角色使用 RAID 配置 LVM 池

通过 storage 系统角色,您可以使用 Red Hat Ansible Automation Platform 在 RHEL 上使用 RAID 配置 LVM 池。在本小节中,您将了解如何使用可用参数设置 Ansible playbook,以配置使用 RAID 的 LVM 池。

先决条件

  • 您已在要运行 playbook 的系统中安装了 Red Hat Ansible Engine。

    注意

    您不必在要部署 storage 解决方案的系统中安装 Red Hat Ansible Automation Platform。

  • 已安装该系统中要运行 playbook 的 rhel-system-roles 软件包。
  • 您有一个清单文件详细描述了您要使用 storage 系统角色配置带有 RAID 的 LVM 池的系统。

流程

  1. 使用以下内容 playbook.yml 创建新文件:

    - hosts: all
      vars:
        storage_safe_mode: false
        storage_pools:
          - name: my_pool
            type: lvm
            disks: [sdh, sdi]
            raid_level: raid1
            volumes:
              - name: my_pool
                size: "1 GiB"
                mount_point: "/mnt/app/shared"
                fs_type: xfs
                state: present
      roles:
        - name: rhel-system-roles.storage
    注意

    要使用具有 RAID 的 LVM 池,您必须使用 raid_level 参数指定 RAID 类型。

  2. 可选。验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory.file /path/to/file/playbook.yml

其它资源

  • 有关 RAID 的详情,请参阅管理 RAID
  • 有关存储系统角色中使用的参数的详情,请查看 /usr/share/ansible/roles/rhel-system-roles.storage/README.md 文件。

13.14. 使用存储角色创建 LUKS 加密卷

您可以通过运行 Ansible playbook,使用 storage 角色创建并配置使用 LUKS 加密的卷。

先决条件

  • 您已在要运行 playbook 的系统中安装了 Red Hat Ansible Engine。

    注意

    您不必在要创建卷的系统中安装 Red Hat Ansible Automation Platform。

  • 您已在 Ansible 控制器上安装了 rhel-system-roles 软件包。
  • 您有一个清单文件详细描述了您要使用存储系统角色部署 LUKS 加密卷的系统。

流程

  1. 使用以下内容 playbook.yml 创建新文件:

    - hosts: all
      vars:
        storage_volumes:
          - name: barefs
            type: disk
            disks:
             - sdb
            fs_type: xfs
            fs_label: label-name
            mount_point: /mnt/data
            encryption: true
            encryption_password: your-password
      roles:
       - rhel-system-roles.storage
  2. 可选:验证 playbook 语法:

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory.file /path/to/file/playbook.yml

其它资源

其它资源

  • 如需更多信息,请安装 rhel-system-roles 软件包并查看以下目录:

    • /usr/share/doc/rhel-system-roles/storage/
    • /usr/share/ansible/roles/rhel-system-roles.storage/

第 14 章 使用 RHEL 系统角色配置时间同步

使用 timesync RHEL 系统角色,您可以使用 Red Hat Ansible Automation Platform 在 RHEL 中的多个目标机器上管理时间同步。

14.1. timesync 系统角色

您可以使用 timesync RHEL 系统角色在多个目标机器上管理时间同步。

timesync 角色安装并配置 NTP 或 PTP 实现,以作为 NTP 客户端或 PTP 副本操作,以便将系统时钟与 PTP 域中的 NTP 服务器或 grandmasters 同步。

请注意,使用 timesync 角色也有助于 迁移到 chrony,因为您可以在从 RHEL 6 开始的所有 Red Hat Enterprise Linux 版本中使用相同的 playbook,无论系统使用 ntpchrony 来实现 NTP 协议。

14.2. 为单一服务器池应用 timesync 系统角色

以下示例演示了如何在只有一个服务器池的情况下应用 timesync 角色。

警告

timesync 角色替换了受管主机上给定或检测到的供应商服务的配置。之前的设置即使没有在角色变量中指定,也会丢失。如果没有定义 timesync_ntp_provider 变量,唯一保留的设置就是供应商选择。

先决条件

  • 您已在要运行 playbook 的系统中安装了 Red Hat Ansible Engine。

    注意

    您不必在要部署 timesync 解决方案的系统中安装 Red Hat Ansible Automation Platform。

  • 已安装该系统中要运行 playbook 的 rhel-system-roles 软件包。
  • 您有一个清单文件,其中包含您要在其上部署 timesync 系统角色的系统。

流程

  1. 使用以下内容 playbook.yml 创建新文件:

    ---
    - hosts: timesync-test
      vars:
        timesync_ntp_servers:
          - hostname: 2.rhel.pool.ntp.org
            pool: yes
            iburst: yes
      roles:
        - rhel-system-roles.timesync
  2. 可选:验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i inventory_file /path/to/file/playbook.yml

14.3. Timesync 系统角色变量

您可以将以下变量传递给 timesync 角色:

  • timesync_ntp_servers:
角色变量设置描述

hostname: host.example.com

服务器的主机名或地址

minpoll: number

最小轮询间隔。默认:6

maxpoll: number

最大轮询间隔。默认:10

iburst: yes

标志启用快速初始同步。默认: no

pool: yes

指示每个主机名解析地址都是一个单独的 NTP 服务器的标志。默认: no

其它资源

  • 有关 timesync 角色变量的详细参考,安装 rhel-system-roles 软件包,并参阅 /usr/share/doc/rhel-system-roles/timesync 目录中的 README.md 或者 README.html 文件。

第 15 章 使用 RHEL 系统角色监控性能

作为系统管理员,您可以使用带有任何 Ansible Automation Platform 控制节点的 metrics RHEL 系统角色来监控系统性能。

15.1. 指标系统角色简介

RHEL 系统角色是 Ansible 角色和模块的集合,可为远程管理多个 RHEL 系统提供一致的配置界面。metrics 系统角色为本地系统配置性能分析服务,并(可选)包含要由本地系统监控的远程系统列表。借助 metrics 系统角色,您可以使用 pcp 来监控系统性能,而无需单独配置pcp,因为 playbook 处理 pcp 设置和部署。

表 15.1. 指标系统角色变量

角色变量描述用法示例

metrics_monitored_hosts

要由目标主机分析的远程主机列表。这些主机将在目标主机上记录指标,以确保每个主机的 /var/log 中有足够的磁盘空间。

metrics_monitored_hosts: ["webserver.example.com", "database.example.com"]

metrics_retention_days

在删除前配置性能数据保留的天数。

metrics_retention_days: 14

metrics_graph_service

一个布尔值标志,它使主机可以使用服务设置,以便通过 pcpgrafana 进行性能数据视觉化。默认设置为 false。

metrics_graph_service: false

metrics_query_service

布尔值标志,它允许主机使用时间序列查询服务设置,以查询通过 redis 记录记录的 pcp 指标。默认设置为 false。

metrics_query_service: false

metrics_provider

指定要用于提供指标的指标收集器。目前, pcp 是唯一支持的指标提供程序。

metrics_provider: "pcp"

注意

有关使用的参数 metrics_connections 以及有关 metrics 系统角色的附加信息,请参阅 /usr/share/ansible/roles/rhel-system-roles.metrics/README.md 文件。

15.2. 使用指标系统角色以可视化方式监控本地系统

此流程描述了如何在同时置备数据视觉化时使用 metrics RHEL 系统角色监控您的本地系统 grafana

先决条件

  • 您已在要监控的机器上安装了 Red Hat Ansible Engine。
  • 您需要在要监控的机器中安装 rhel-system-roles 软件包。

流程

  1. 通过 localhost 将以下内容添加到清单中,在 /etc/ansible/hosts Ansible 清单中配置:

    localhost ansible_connection=local
  2. 使用以下内容创建一个 Ansible playbook:

    ---
    - hosts: localhost
      vars:
        metrics_graph_service: yes
      roles:
        - rhel-system-roles.metrics
  3. 运行 Ansible playbook:

    # ansible-playbook name_of_your_playbook.yml
    注意

    因为 metrics_graph_service 布尔值被设置为 value="yes", grafana 它会被自动安装并置备并将 pcp 添加为数据源。

  4. 要查看您机器上收集的指标的视觉化,请访问 Grafana grafana Web UI 中的 Web 界面。

15.3. 使用 metrics 系统角色设置监控其自身的独立系统

此流程描述了如何使用 metrics 系统角色设置一组机器来监控其自身。

先决条件

  • 您已在要用来运行 playbook 的机器上安装了 Red Hat Ansible Engine。
  • 已安装要用来运行 playbook 的机器上的 rhel-system-roles 软件包。

流程

  1. 将您要通过 playbook 监控的机器的名称或 IP 添加到由括号括起来的标识组名称下的 /etc/ansible/hosts Ansible 清单文件中:

    [remotes]
    webserver.example.com
    database.example.com
  2. 使用以下内容创建一个 Ansible playbook:

    ---
    - hosts: remotes
      vars:
        metrics_retention_days: 0
      roles:
        - rhel-system-roles.metrics
  3. 运行 Ansible playbook:

    # ansible-playbook name_of_your_playbook.yml

15.4. 使用 metrics 系统角色通过本地机器集中监控机器的数量

此流程描述了如何使用 metrics 系统角色设置本地机器来集中监控机器数量,同时通过 grafana 进行数据视觉化,通过 redis 查询数据。

先决条件

  • 您已在要用来运行 playbook 的机器上安装了 Red Hat Ansible Engine。
  • 已安装要用来运行 playbook 的机器上的 rhel-system-roles 软件包。

流程

  1. 使用以下内容创建一个 Ansible playbook:

    ---
    - hosts: localhost
      vars:
        metrics_graph_service: yes
        metrics_query_service: yes
        metrics_retention_days: 10
        metrics_monitored_hosts: ["database.example.com", "webserver.example.com"]
      roles:
        - rhel-system-roles.metrics
  2. 运行 Ansible playbook:

    # ansible-playbook name_of_your_playbook.yml
    注意

    因为 metrics_graph_servicemetrics_query_service 被设置为 value="yes",grafana 会被自动安装,被置备为带有 pcp 作为 pcp 数据源索引到 redis,从而可以使用 pcp 查询语言对数据进行复杂的查询。

  3. 要查看您机器集中收集的指标的图形表示并查询数据,请访问 Grafana Web UI 中的 grafana web 界面。

15.5. 在使用 metrics 系统角色监控系统时设置身份验证

PCP 通过 Simple Authentication Security Layer(SASL)框架支持 scram-sha-256 身份验证机制。metrics RHEL 系统角色自动执行使用 scram-sha-256 身份验证机制设置身份验证的步骤。此流程描述了如何使用 metrics RHEL 系统角色设置身份验证。

先决条件

  • 您已在要用来运行 playbook 的机器上安装了 Red Hat Ansible Engine。
  • 已安装要用来运行 playbook 的机器上的 rhel-system-roles 软件包。

流程

  1. 在您要设置身份验证的 Ansible playbook 中包含以下变量:

    ---
      vars:
        metrics_username: your_username
        metrics_password: your_password
  2. 运行 Ansible playbook:

    # ansible-playbook name_of_your_playbook.yml

验证步骤

  • 验证 sasl 配置:

    # pminfo -f -h "pcp://127.0.0.1?username=your_username" disk.dev.read
    Password:
    disk.dev.read
    inst [0 or "sda"] value 19540

15.6. 使用 metrics 系统角色为 SQL 服务器配置和启用指标集合

此流程描述了如何使用 metrics RHEL 系统角色通过本地系统中的 pcp 为 Microsoft SQL Server 自动配置和启用指标集合。

先决条件

  • 您已在要监控的机器上安装了 Red Hat Ansible Engine。
  • 您需要在要监控的机器中安装 rhel-system-roles 软件包。
  • 您已为 Red Hat Enterprise Linux 安装了 Microsoft SQL Server,并建立到 SQL 服务器的"信任"连接。
  • 您已为 Red Hat Enterprise Linux 安装了 Microsoft ODBC 驱动程序。

流程

  1. 通过 localhost 将以下内容添加到清单中,在 /etc/ansible/hosts Ansible 清单中配置:

    localhost ansible_connection=local
  2. 创建一个包含以下内容的 Ansible playbook:

    ---
    - hosts: localhost
      roles:
        - role: rhel-system-roles.metrics
          vars:
            metrics_from_sql: yes
  3. 运行 Ansible playbook:

    # ansible-playbook name_of_your_playbook.yml

验证步骤

  • 使用 pcp 命令验证 SQL 服务器 PMDA 代理(mssql)是否已加载并正在运行:

    # pcp
    platform: Linux rhel82-2.local 4.18.0-167.el8.x86_64 #1 SMP Sun Dec 15 01:24:23 UTC 2019 x86_64
     hardware: 2 cpus, 1 disk, 1 node, 2770MB RAM
     timezone: PDT+7
     services: pmcd pmproxy
         pmcd: Version 5.0.2-1, 12 agents, 4 clients
         pmda: root pmcd proc pmproxy xfs linux nfsclient mmv kvm mssql
               jbd2 dm
     pmlogger: primary logger: /var/log/pcp/pmlogger/rhel82-2.local/20200326.16.31
         pmie: primary engine: /var/log/pcp/pmie/rhel82-2.local/pmie.log

第 16 章 配置系统以使用 tlog RHEL 系统角色记录会话记录

使用 tlog RHEL 系统角色,您可以使用 Red Hat Ansible Automation Platform 配置系统以便在 RHEL 上进行终端会话记录。

16.1. tlog 系统角色

您可以使用 tlog RHEL 系统角色为 RHEL 上终端会话记录配置 RHEL 系统。tlog 软件包及其关联的 Web 控制台会话播放器为您提供了记录和回放用户终端会话的能力。

您可以将记录配置为通过 SSSD 服务为每个用户或用户组进行。所有终端输入和输出都会捕获并保存在系统日志中基于文本的格式。

其它资源

  • 有关 RHEL 中会话记录的详情,请参阅 记录会话

16.2. tlog 系统角色的组件和参数

Session Recording 的解决方案由以下组件组成:

  • tlog 工具
  • 系统安全性服务守护进程(SSSD)
  • 可选: Web 控制台界面

用于 tlog RHEL 系统角色的参数有:

角色变量描述

tlog_use_sssd (default: yes)

使用 SSSD 配置会话记录,这是管理记录的用户或组的首选方法

tlog_scope_sssd (default: none)

配置 SSSD 记录范围 - all / some / none

tlog_users_sssd (default: [])

要记录的用户的 YAML 列表

tlog_groups_sssd (default: [])

要记录的组的 YAML 列表

  • 有关使用的参数 tlog 以及 tlog 系统角色的附加信息,请参考 /usr/share/ansible/roles/rhel-system-roles.tlog/README.md 文件。

16.3. 部署 tlog RHEL 系统角色

按照以下步骤准备和应用 Ansible playbook 以配置 RHEL 系统,将数据记录到 systemd 日志中。

先决条件

  • 您已设置了从控制节点访问系统角色的目标系统(tlog 系统角色在其中配置的系统)的 SSH 密钥。
  • 您有一个控制节点,这是 Ansible Engine 配置其他系统的系统。
  • 您已在控制节点上安装了 Red Hat Ansible Engine,您要从该节点上运行 playbook。
  • 已在要从其中运行 playbook 的控制节点上安装了 rhel-system-roles 软件包。
  • 您至少有一个要配置 tlog 系统角色的系统。您不必在要部署 tlog 解决方案的系统中安装 Red Hat Ansible Automation Platform。

流程

  1. 使用以下内容 playbook.yml 创建新文件:

    ---
    - name: Deploy session recording
      hosts: all
      vars:
        tlog_scope_sssd: some
        tlog_users_sssd:
          - recordeduser
    
      roles:
        - rhel-system-roles.tlog

    其中,

    • tlog_scope_sssd:

      • some 指定您只记录某些用户和组群,不是 allnone
    • tlog_users_sssd:

      • recordeduser 指定要记录会话的用户。请注意,这不会为您添加用户。您必须自行设置该用户。
  2. 另外,还可以验证 playbook 语法。

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i IP_Address /path/to/file/playbook.yml -v

playbook 会在您指定的系统中安装 tlog 角色。它还会创建一个 SSSD 配置文件,供您定义的用户和组使用。SSSD 解析并读取这些用户和组以 shell 用户身份覆盖 tlog 会话。另外,如果 cockpit 软件包安装在系统中,playbook 也会安装 cockpit-session-recording 软件包,它是一个 Cockpit 模块,供您在 web 控制台界面中查看和播放记录。

验证步骤

要验证 SSSD 配置文件是否在系统中创建了,请执行以下步骤:

  1. 进入创建 SSSD 配置丢弃文件的文件夹:

    # cd /etc/sssd/conf.d
  2. 检查文件内容:

    # cat /etc/sssd/conf.d/sssd-session-recording.conf

您可以看到该文件包含您在 playbook 中设置的参数。

16.4. 部署 tlog RHEL 系统角色以排除组或用户列表

您可以使用 RHEL 上的 tlog 系统角色支持 SSSD 会话记录选项 exclude_usersexclude_groups。按照以下步骤准备并应用 Ansible playbook 来配置 RHEL 系统,以排除用户或组的会话记录并登录到 systemd 日志中。

先决条件

  • 您已设置了从控制节点访问要配置 tlog 系统角色的目标系统的 SSH 密钥。
  • 您有一个控制节点,这是 Red Hat Ansible Engine 配置其他系统的系统。
  • 您已在控制节点上安装了 Red Hat Ansible Engine,您要从该节点上运行 playbook。
  • 已在控制节点上安装了 rhel-system-roles 软件包。
  • 您至少有一个系统要配置 tlog 系统角色。

    您不必在要部署 tlog 解决方案的系统中安装 Red Hat Ansible Automation Platform。

流程

  1. 使用以下内容 playbook.yml 创建新文件:

    ---
    - name: Deploy session recording excluding users and groups
      hosts: all
      vars:
        tlog_scope_sssd: all
        tlog_exclude_users_sssd:
          - jeff
          - james
        tlog_exclude_groups_sssd:
          - admins
    
      roles:
        - rhel-system-roles.tlog

    其中,

    • tlog_scope_sssd:

      • all: 指定您要记录所有用户和组。
    • tlog_exclude_users_sssd:

      • 用户名:指定您要从会话记录中排除的用户的用户名。
    • tlog_exclude_groups_sssd:

      • admins 指定您要从会话记录中排除的组。
  2. (可选)验证 playbook 语法 ;

    # ansible-playbook --syntax-check playbook.yml
  3. 在清单文件上运行 playbook:

    # ansible-playbook -i IP_Address /path/to/file/playbook.yml -v

playbook 会在您指定的系统中安装 tlog 软件包。它还创建一个 /etc/sssd/conf.d/sssd-session-recording.conf SSSD 配置文件,用户和组可使用该文件,但您定义的排除文件除外。SSSD 解析并读取这些用户和组,以 shell 用户身份与 tlog 会话重叠。另外,如果 cockpit 软件包安装在系统中,playbook 也会安装 cockpit-session-recording 软件包,它是一个 Cockpit 模块,供您在 web 控制台界面中查看和播放记录。

注意

您无法记录 exclude_users 列表中列出的用户的会话,或者它们是 exclude_groups 列表中组的成员。

验证步骤

要验证 SSSD 配置文件是否在系统中创建了,请执行以下步骤:

  1. 进入创建 SSSD 配置丢弃文件的文件夹:

    # cd /etc/sssd/conf.d
  2. 检查文件内容:

    # cat sssd-session-recording.conf

您可以看到该文件包含您在 playbook 中设置的参数。

其它资源

16.5. 使用在 CLI 中部署的 tlog 系统角色记录会话

当您在指定的系统中部署了 tlog 系统角色,就可以使用命令行界面(CLI)记录用户终端会话。

先决条件

  • 您已在目标系统中部署了 tlog 系统角色。
  • SSSD 配置丢弃文件在文件 /etc/sssd/conf.d 中创建。

流程

  1. 创建一个用户并为这个用户分配密码:

    # useradd recordeduser
    # passwd recordeduser
  2. 以您刚刚创建的用户身份登录到该系统:

    # ssh recordeduser@localhost
  3. 当系统提示您输入 yes 或 no 进行身份验证时请输入 "yes"。
  4. 插入 recorduser 的密码。

    系统提示一条信息通知您的会话被记录。

    ATTENTION! Your session is being recorded!
  5. 记录完会话后,请键入:

    # exit

    系统从用户注销并关闭与本地主机的连接。

用户会话会被记录,并被保存,您可以使用 journal 进行播放。

验证步骤

要在日志中查看您记录的会话,请执行以下步骤:

  1. 运行以下命令:

    # journalctl -o verbose -r
  2. 搜索 tlog-rec 记录日志条目中的 MESSAGE 字段。

    # journalctl -xel _EXE=/usr/bin/tlog-rec-session

16.6. 使用 CLI 监视记录的会话

您可以使用命令行界面(CLI)从日志中执行用户会话记录。

先决条件

流程

  1. 在 CLI 终端中,播放用户会话记录:

    # journalctl -o verbose -r
  2. 搜索 tlog 记录:

    $ /tlog-rec

    您可以查看详情,例如:

    • 用户会话记录的用户名
    • out_txt 字段是记录的会话的原始输出编码
    • 标识符号 TLOG_REC=ID_number
  3. 复制标识符号 TLOG_REC=ID_number
  4. 使用标识符号 TLOG_REC=ID_number 回放记录。

    # tlog-play -r journal -M TLOG_REC=ID_number

您可以看到记录的用户会话被回放。

法律通告

Copyright © 2021 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.