更改 SELinux 布尔值(setsebool)时 CentOS Linux 8 会冻结

更改 SELinux 布尔值(setsebool)时 CentOS Linux 8 会冻结

问题

更改 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/

测试的步骤:

  1. echo 1 > /sys/fs/selinux/booleans/zabbix_run_sudo(没问题)
  2. echo 1 > /sys/fs/selinux/commit_pending_bools(冻结服务器)

现在我有点别无选择了,因为我真的很想让 SELinux 处于强制模式,但还需要配置各种 SELinux 布尔值。我无法始终如一地重新创建故障服务器的工作。由于一些我目前不知道的差异,不同的服务器部署最终处于不同的状态。

非常欢迎有关如何调试和修复此问题的任何帮助!

相关内容