Rocky 10:SELinux 布尔值怎么查、怎么改、怎么回退
Rocky Linux 10.2 Server 组虚拟机,SELinux Enforcing,policycoreutils-python-utils 已装。
一次会话里完成:枚举、查描述、运行时改、持久化改、核对本地覆盖、清理。截图:public/evidence/selinux/rocky-booleans.png。
$ getsebool -a | wc -l328$ getsebool httpd_can_sendmailhttpd_can_sendmail --> off$ semanage boolean -l | grep -E "^httpd_can_sendmail "httpd_can_sendmail (off , off) Allow httpd to can sendmailgetsebool -a:批量看当前值,适合脚本;getsebool <name>:单值确认;semanage boolean -l:带描述与默认值,适合判断「这个开关到底是干什么的」。
给服务找开关,最省事的办法是按名字猜再 grep:
$ semanage boolean -l | grep -i -E "nfs|samba" | head -5改:两种生命周期
Section titled “改:两种生命周期”$ setsebool httpd_can_sendmail on # 只改运行时$ semanage boolean -l -C | tail -n +2 | wc -l0$ setsebool -P httpd_can_sendmail on # 写进策略库$ semanage boolean -l -C | tail -n +2 | wc -l2semanage boolean -l -C 只列本地覆盖(customizations),所以它是判断「是否持久」的唯一可靠依据。注意计数会包含机器上原有的其它覆盖,第一次跑之前先看基线。

$ ls /var/lib/selinux/targeted/active/booleans.local/var/lib/selinux/targeted/active/booleans.local老文档里的 /etc/selinux/targeted/active/ 在现代策略库中已不存在,别照着找。
排查顺序:从 AVC 到布尔
Section titled “排查顺序:从 AVC 到布尔”1) ausearch -m AVC -ts recent # 有没有拒绝,拒绝的是谁2) audit2why < /var/log/audit/audit.log | tail -20 # 翻译成人话3) 看路径标签:ls -Z <file> / restorecon -Rv <dir> # 标签不对先修标签4) 标签正确、功能仍被挡 → 再考虑布尔顺序反了会做无用功:布尔只切换策略里已有的规则,修不了错标签。
$ setsebool -P httpd_can_sendmail off # 单项回退(仍留一条本地覆盖)$ semanage boolean -D # 清空所有本地覆盖$ semanage boolean -l -C | tail -n +2 | wc -l0-D 是全局的,共享主机上执行前务必先 semanage boolean -l -C 看清有哪些人的覆盖。
- 改完不重启服务:某些服务启动时读一次策略,改了布尔要重启才生效;
- 把布尔当端口放行:网络可达性由 firewalld 控制,与布尔无关;
-D当「删除单个」:它清全部;- 没装
setools-console就找sesearch:默认不带,需要额外安装。
练习:一轮完整往返
Section titled “练习:一轮完整往返”sudo semanage boolean -l -C | tail -n +2 | wc -l # 记下基线sudo getsebool httpd_can_sendmailsudo setsebool httpd_can_sendmail onsudo semanage boolean -l -C | tail -n +2 | wc -l # 仍等于基线sudo setsebool -P httpd_can_sendmail onsudo semanage boolean -l -C | tail -n +2 | wc -l # 基线 +1sudo setsebool -P httpd_can_sendmail offsudo semanage boolean -Dsudo semanage boolean -l -C | tail -n +2 | wc -l # 0检查:
- 只有
-P会让计数增加; -D之后归零且布尔回到策略默认;- 全程服务未受影响;
- 基线记录存在,便于回退。
常见问题
布尔值可以自定义吗?
可以,需要在自建策略模块里声明 gen_bool;那是策略开发的活,不是运维开关。
为什么 semanage 命令找不到?
它由 policycoreutils-python-utils 提供,最小化镜像通常没有,Server 组已装。
布尔改错怎么快速恢复?
单项用 setsebool -P 改回默认值;不确定就用 semanage boolean -D 清空本地覆盖,再逐个复核。
- SELinux 标签与上下文:/selinux-basics/
- 安全基线:/security-baseline/
- 日志排查:/journald-logging/