跳转到内容
搜索 Rocky Linux 文档

    浏览当前文档目录

    Rocky 10:SELinux 布尔值怎么查、怎么改、怎么回退

    Rocky Linux 10.2 Server 组虚拟机,SELinux Enforcing,policycoreutils-python-utils 已装。

    一次会话里完成:枚举、查描述、运行时改、持久化改、核对本地覆盖、清理。截图:public/evidence/selinux/rocky-booleans.png。

    $ getsebool -a | wc -l
    328
    $ getsebool httpd_can_sendmail
    httpd_can_sendmail --> off
    $ semanage boolean -l | grep -E "^httpd_can_sendmail "
    httpd_can_sendmail (off , off) Allow httpd to can sendmail
    • getsebool -a:批量看当前值,适合脚本;
    • getsebool <name>:单值确认;
    • semanage boolean -l:带描述与默认值,适合判断「这个开关到底是干什么的」。

    给服务找开关,最省事的办法是按名字猜再 grep:

    $ semanage boolean -l | grep -i -E "nfs|samba" | head -5
    $ setsebool httpd_can_sendmail on # 只改运行时
    $ semanage boolean -l -C | tail -n +2 | wc -l
    0
    $ setsebool -P httpd_can_sendmail on # 写进策略库
    $ semanage boolean -l -C | tail -n +2 | wc -l
    2

    semanage boolean -l -C 只列本地覆盖(customizations),所以它是判断「是否持久」的唯一可靠依据。注意计数会包含机器上原有的其它覆盖,第一次跑之前先看基线。

    Rocky Linux 10.2:运行时与持久化的差别

    $ ls /var/lib/selinux/targeted/active/booleans.local
    /var/lib/selinux/targeted/active/booleans.local

    老文档里的 /etc/selinux/targeted/active/ 在现代策略库中已不存在,别照着找。

    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 -l
    0

    -D 是全局的,共享主机上执行前务必先 semanage boolean -l -C 看清有哪些人的覆盖。

    • 改完不重启服务:某些服务启动时读一次策略,改了布尔要重启才生效;
    • 把布尔当端口放行:网络可达性由 firewalld 控制,与布尔无关;
    • -D 当「删除单个」:它清全部;
    • 没装 setools-console 就找 sesearch:默认不带,需要额外安装。
    Terminal window
    sudo semanage boolean -l -C | tail -n +2 | wc -l # 记下基线
    sudo getsebool httpd_can_sendmail
    sudo setsebool httpd_can_sendmail on
    sudo semanage boolean -l -C | tail -n +2 | wc -l # 仍等于基线
    sudo setsebool -P httpd_can_sendmail on
    sudo semanage boolean -l -C | tail -n +2 | wc -l # 基线 +1
    sudo setsebool -P httpd_can_sendmail off
    sudo semanage boolean -D
    sudo semanage boolean -l -C | tail -n +2 | wc -l # 0

    检查:

    1. 只有 -P 会让计数增加;
    2. -D 之后归零且布尔回到策略默认;
    3. 全程服务未受影响;
    4. 基线记录存在,便于回退。

    常见问题

    布尔值可以自定义吗?

    可以,需要在自建策略模块里声明 gen_bool;那是策略开发的活,不是运维开关。

    为什么 semanage 命令找不到?

    它由 policycoreutils-python-utils 提供,最小化镜像通常没有,Server 组已装。

    布尔改错怎么快速恢复?

    单项用 setsebool -P 改回默认值;不确定就用 semanage boolean -D 清空本地覆盖,再逐个复核。