跳转到内容
搜索 Rocky Linux 文档

    浏览当前文档目录

    Rocky 10:SELinux 状态、上下文与 semanage

    在 Rocky Linux 10.2 虚拟机(内核 6.12.0-211.16.1.el10_2)中实测:sestatus、setenforce 切换、ls -Z、chcon、restorecon -Rv、semanage fcontext 增删、ausearch -m avc。日志:plans/content-expansion/evidence/logs/rocky-selinux-basics.log。

    Terminal window
    getenforce
    sestatus | head -5
    setenforce 0 && getenforce
    setenforce 1 && getenforce
    Enforcing
    Loaded policy name: targeted
    Current mode: enforcing
    Mode from config file: enforcing
    Permissive
    Enforcing

    setenforce 只切 Enforcing ↔ Permissive,不能切到 Disabled;Disabled 要改 /etc/selinux/config 并重启,而且从 Disabled 回到 Enforcing 需要重新打标签(首次启动会花较长时间)。

    Terminal window
    mkdir -p /srv/lab && echo hi > /srv/lab/f.txt
    ls -Z /srv/lab/f.txt
    unconfined_u:object_r:var_t:s0 /srv/lab/f.txt

    格式是 用户:角色:类型:级别;日常排障最关心 类型(type),比如 var_t、httpd_sys_content_t。

    Terminal window
    chcon -t user_home_t /srv/lab/f.txt
    ls -Z /srv/lab/f.txt
    restorecon -Rv /srv/lab
    ls -Z /srv/lab/f.txt
    unconfined_u:object_r:user_home_t:s0 /srv/lab/f.txt
    Relabeled /srv/lab/f.txt from unconfined_u:object_r:user_home_t:s0 to unconfined_u:object_r:var_t:s0
    unconfined_u:object_r:var_t:s0 /srv/lab/f.txt

    chcon 只改当前标签,restorecon 按策略库恢复默认值——临时改标签用 chcon,持久生效必须用 semanage。

    Rocky Linux 10.2:chcon 后 restorecon 恢复默认上下文

    Terminal window
    semanage fcontext -a -t httpd_sys_content_t "/srv/lab(/.*)?"
    restorecon -Rv /srv/lab
    ls -Z /srv/lab/f.txt
    Relabeled /srv/lab/f.txt from unconfined_u:object_r:var_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
    unconfined_u:object_r:httpd_sys_content_t:s0 /srv/lab/f.txt

    删除规则并恢复:

    Terminal window
    semanage fcontext -d "/srv/lab(/.*)?"
    restorecon -Rv /srv/lab
    Relabeled /srv/lab from ...httpd_sys_content_t:s0 to ...var_t:s0
    Relabeled /srv/lab/f.txt from ...httpd_sys_content_t:s0 to ...var_t:s0
    Terminal window
    ausearch -m avc -ts recent
    <no matches>

    干净系统没有拒绝记录;出现 AVC 时,ausearch 会给出 denied { ... } 与 scontext/tcontext/tclass,再配合 audit2why 解释原因。

    • 以为 chcon 是永久的:一次 restorecon 就被打回默认;
    • 把 Disabled 当 Permissive:Disabled 下策略完全不加载,恢复 Enforcing 要重新打标签;
    • semanage 找不到:它在 policycoreutils-python-utils 包里,最小化/云镜像可能没装。

    练习:给目录加自定义上下文再撤销

    Section titled “练习:给目录加自定义上下文再撤销”
    Terminal window
    sudo dnf install -y policycoreutils-python-utils
    sudo mkdir -p /srv/lab && echo hi | sudo tee /srv/lab/f.txt
    ls -Z /srv/lab/f.txt
    sudo semanage fcontext -a -t httpd_sys_content_t "/srv/lab(/.*)?"
    sudo restorecon -Rv /srv/lab
    ls -Z /srv/lab/f.txt
    sudo semanage fcontext -d "/srv/lab(/.*)?" && sudo restorecon -Rv /srv/lab
    ls -Z /srv/lab/f.txt

    检查:

    1. 初始类型是 var_t
    2. semanage + restorecon 后变成 httpd_sys_content_t
    3. 删除规则后回到 var_t
    4. sestatus 仍为 enforcing

    常见问题

    setenforce 0 能代替关闭 SELinux 吗?

    只能临时切到 permissive(记录但不拒绝)。要彻底关闭需改 /etc/selinux/config 并重启;从 disabled 恢复 enforcing 需要重新打标签。

    为什么 chcon 改完又变回去了?

    restorecon 会按策略库恢复默认上下文。持久修改要用 semanage fcontext 添加规则,再 restorecon 应用。

    ausearch 查不到 AVC 怎么办?

    确认 auditd 在运行、时间范围覆盖到故障时刻(-ts recent 或 -ts today);容器内通常没有 auditd,看不到宿主 AVC。