提供的 Ansible playbook 通过以下方式解决此漏洞:
package_facts 模块收集已安装软件包的信息,包括其版本。debug 模块从收集的信息中提取 xz-utils 软件包的基础版本。package 模块将安装一个已知安全的版本(safe_version)的 xz-utils。tasks/main.yaml:此文件定义了 playbook 的核心任务。
package_facts 收集软件包信息。debug 模块检查提取的基础版本。package 有条件地安装一个安全版本(safe_version)。 ---
- name: 收集软件包信息
ansible.builtin.package_facts:
manager: auto
register: package_facts
- name: 打印 {{ package_name }} 的当前版本
ansible.builtin.debug:
var: package_facts.ansible_facts.packages['{{ package_name }}'][0].version.split('-')[0]
register: version_check
- name: 安装 {{ package_name }} 的安全版本
ansible.builtin.package:
name: '{{ package_name }}={{ safe_version }}'
state: present
when: version_check=={{non_safe_version1}} or version_check=={{non_safe_version2}}
defaults/main.yaml:此文件定义了整个 playbook 中使用的默认变量。
---
package_name: xz-utils
non_safe_version1: 5.6.0
non_safe_version2: 5.6.1
safe_version: 5.4.6
playbook.yaml:此文件定义了整体执行流程。
---
- name: 修补 xz-utils
hosts: machines
roles:
- xz_utils_patch