selinux布尔值是服务正常运行的关键开关,80%相关异常源于其默认关闭;用getsebool -a | grep查询状态,setsebool临时启用,加-p参数永久生效,结合ausearch和audit.log验证实际效果。

SELinux 布尔值不是“可有可无的选项”,而是服务能否正常运行的关键开关。80% 的 Web、数据库或 FTP 服务异常(比如 PHP 连不上 MySQL、Apache 读不了用户目录、vsftpd 拒绝写入),问题不在端口或权限,而在某个布尔值默认关闭了。
怎么查当前哪些布尔值在起作用
用 getsebool -a 列出全部布尔值及其状态,配合 grep 快速定位服务相关项:
-
查 Web 相关:
getsebool -a | grep httpd -
查数据库连接:
getsebool -a | grep connect_db(会看到httpd_can_network_connect_db --> off) -
查 FTP 写入:
getsebool -a | grep ftpd_anon_write
输出形如 httpd_enable_homedirs --> off,箭头右边就是当前生效状态。
临时开启或关闭一个布尔值
用 setsebool 命令立即生效,适合测试:
- 开启 Apache 访问用户主目录:
setsebool httpd_enable_homedirs on - 允许 httpd 连数据库:
setsebool httpd_can_network_connect_db on - 关闭某项(加
off):setsebool allow_execmem off
⚠️ 注意:不加 -p 参数的修改是临时的,重启后恢复默认。
永久保存布尔值设置
加 -p 参数即可写入策略配置,重启不失效:
setsebool -p httpd_can_network_connect_db onsetsebool -p allow_ftpd_anon_write on
等价于用 semanage boolean(需先装 policycoreutils-python):
semanage boolean -m --on httpd_enable_homedirs- 查看所有布尔值及说明:
semanage boolean -l
结合日志确认是否真起效
布尔值开了但服务仍报错?立刻查 SELinux 拒绝记录:
- 实时监控拒绝事件:
ausearch -m avc -ts recent | audit2why - 或直接看原始日志:
tail -f /var/log/audit/audit.log | grep avc
如果仍有 avc: denied,说明还缺安全上下文标签,或策略本身未覆盖该操作——布尔值只是“允许通道”,不等于“自动铺路”。











