使用 python3.8 将 Ansible playbook 部署到 Linux 服务器时出现问题 - selinux python 模块未分配正确的上下文

使用 python3.8 将 Ansible playbook 部署到 Linux 服务器时出现问题 - selinux python 模块未分配正确的上下文

我运行着 Alma 8/9 系统,并使用 Ansible 部署各种配置更改,但在其中一个客户端机器上遇到了一个不寻常的问题。Alma 8 标配 python 3.6,它与我的 AWX 服务器配合得很好,可以推送剧本,但由于应用程序要求,我安装了 python 3.8,并使用“alternatives --config python3”命令将其切换为机器使用的默认版本。

当我接下来将 Ansible 剧本部署到盒子时,连接失败并出现以下错误:

"msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"

服务器默认安装了 python3-libselinux,但似乎没有等效的 python38-libselinux 包。经过一番研究,我通过 pip 安装了“selinux”python 模块。这解决了连接问题,但似乎导致了连锁问题,即剧本修改的文件丢失了正确的 SELinux 上下文,而是接收默认的 SELinux 上下文:

[alex@dcbutlnprdnb01 zabbix]# ls -lZ
total 124
-rw-r--r--. 1 root root unconfined_u:object_r:user_home_t:s0   385 Dec 21 10:49 zabbix_agentd.conf

作为参考,运行剧本之前正确的 SELinux 上下文是:

[alex@dcautlprdnb01 zabbix]# ls -lZ zabbix_agentd.conf
-rw-r--r--. 1 root root system_u:object_r:etc_t:s0 17135 Nov 24 14:18 zabbix_agentd.conf

理想情况下,修复需要在客户端进行,也许需要安装一个我目前还没有找到的替代 Python 模块,这样我每次编写剧本时就不必重复编写代码来弥补问题。如果无法在客户端服务器上应用修复,我可以在 AWX 中针对主机设置自定义变量。

有人能建议解决这个问题的最佳方法吗?

谢谢!

答案1

已确定修复,我可以将 Ansible 使用的 Python 版本指定为 AWX 中的主机级变量:

ansible_python_interpreter: '/bin/python3.6'

答案2

由于您做了许多更改,因此这可能不是一个完整的解决方案。但以下几点可以帮助您。

  1. 确保policycoreutils-python已安装,其中包括管理 SElinux 的工具。

  2. 为了使 ansible 正常工作,SElinux 需要处于宽容模式:

    sudo setenforce 0

  3. 可选,也许可以创建自定义 SElinux 策略。如果 Ansible 操作仍然被拒绝,您可能需要创建自定义 SELinux 策略。使用该audit2allow工具根据审计日志生成策略模块。

相关内容