![更改 SELinux 布尔值(setsebool)时 CentOS Linux 8 会冻结](https://linux22.com/image/766029/%E6%9B%B4%E6%94%B9%20SELinux%20%E5%B8%83%E5%B0%94%E5%80%BC%EF%BC%88setsebool%EF%BC%89%E6%97%B6%20CentOS%20Linux%208%20%E4%BC%9A%E5%86%BB%E7%BB%93.png)
问题
更改 SELinux 布尔值时,各种 CentOS Linux 8 服务器都会冻结/挂起。
细节与研究
我们管理着数百台 CentOS Linux 服务器。最近我们发现,在更改 SELinux 布尔值时,部分(但不是全部)服务器会出现异常行为。只要执行更改命令,服务器就会完全冻结,ICMP/SSH/TTY 根本无法使用。只需简单关机即可恢复功能。
范围:
- 各种 CentOS Linux 8 安装(8.1 - 8.3)。
- 所有服务器上的 SELinux 均以强制模式启用。
- 未发现哪些服务器存在此问题的一致性。
- 此问题在各个操作系统小版本中都存在。
- 该问题存在于跨内核版本中。
我尝试过的方法
使用setsebool
命令更改 SELinux 布尔值,或通过改变伪 fs 来更改它,/sys/fs/selinux
都会导致相同的可重现错误。
我尝试过的序列(见下文)以 zabbix_run_sudo 布尔值作为示例,但该行为也适用于其他布尔值。
使用 setsebool
执行setsebool zabbix_run_sudo on
会立即冻结服务器。预期行为是该命令最多运行几秒钟,然后返回到 shell。使用strace
此命令显示此工具正在更改 SELinux 伪文件系统 ( /sys/fs/selinux
),并且在第二步期间服务器挂起。
修改 SELinux 伪文件系统
当手动更改 SELinux 伪文件系统时,通过向某些路径回显 1,我可以模仿之前测试的setsebool
工具的使用。这些步骤也记录在 The Geek Diary 网站上:https://www.thegeekdiary.com/understanding-selinux-booleans/
测试的步骤:
echo 1 > /sys/fs/selinux/booleans/zabbix_run_sudo
(没问题)echo 1 > /sys/fs/selinux/commit_pending_bools
(冻结服务器)
现在我有点别无选择了,因为我真的很想让 SELinux 处于强制模式,但还需要配置各种 SELinux 布尔值。我无法始终如一地重新创建故障服务器的工作。由于一些我目前不知道的差异,不同的服务器部署最终处于不同的状态。
非常欢迎有关如何调试和修复此问题的任何帮助!