![使用 python3.8 将 Ansible playbook 部署到 Linux 服务器时出现问题 - selinux python 模块未分配正确的上下文](https://linux22.com/image/791751/%E4%BD%BF%E7%94%A8%20python3.8%20%E5%B0%86%20Ansible%20playbook%20%E9%83%A8%E7%BD%B2%E5%88%B0%20Linux%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%97%B6%E5%87%BA%E7%8E%B0%E9%97%AE%E9%A2%98%20-%20selinux%20python%20%E6%A8%A1%E5%9D%97%E6%9C%AA%E5%88%86%E9%85%8D%E6%AD%A3%E7%A1%AE%E7%9A%84%E4%B8%8A%E4%B8%8B%E6%96%87.png)
我运行着 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
由于您做了许多更改,因此这可能不是一个完整的解决方案。但以下几点可以帮助您。
确保
policycoreutils-python
已安装,其中包括管理 SElinux 的工具。为了使 ansible 正常工作,SElinux 需要处于宽容模式:
sudo setenforce 0
可选,也许可以创建自定义 SElinux 策略。如果 Ansible 操作仍然被拒绝,您可能需要创建自定义 SELinux 策略。使用该
audit2allow
工具根据审计日志生成策略模块。