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。
getenforcesestatus | head -5setenforce 0 && getenforcesetenforce 1 && getenforceEnforcingLoaded policy name: targetedCurrent mode: enforcingMode from config file: enforcingPermissiveEnforcingsetenforce 只切 Enforcing ↔ Permissive,不能切到 Disabled;Disabled 要改 /etc/selinux/config 并重启,而且从 Disabled 回到 Enforcing 需要重新打标签(首次启动会花较长时间)。
看上下文:ls -Z
Section titled “看上下文:ls -Z”mkdir -p /srv/lab && echo hi > /srv/lab/f.txtls -Z /srv/lab/f.txtunconfined_u:object_r:var_t:s0 /srv/lab/f.txt格式是 用户:角色:类型:级别;日常排障最关心 类型(type),比如 var_t、httpd_sys_content_t。
chcon 会被 restorecon 覆盖
Section titled “chcon 会被 restorecon 覆盖”chcon -t user_home_t /srv/lab/f.txtls -Z /srv/lab/f.txtrestorecon -Rv /srv/labls -Z /srv/lab/f.txtunconfined_u:object_r:user_home_t:s0 /srv/lab/f.txtRelabeled /srv/lab/f.txt from unconfined_u:object_r:user_home_t:s0 to unconfined_u:object_r:var_t:s0unconfined_u:object_r:var_t:s0 /srv/lab/f.txtchcon 只改当前标签,restorecon 按策略库恢复默认值——临时改标签用 chcon,持久生效必须用 semanage。

semanage:让 restorecon 认你的目录
Section titled “semanage:让 restorecon 认你的目录”semanage fcontext -a -t httpd_sys_content_t "/srv/lab(/.*)?"restorecon -Rv /srv/labls -Z /srv/lab/f.txtRelabeled /srv/lab/f.txt from unconfined_u:object_r:var_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0unconfined_u:object_r:httpd_sys_content_t:s0 /srv/lab/f.txt删除规则并恢复:
semanage fcontext -d "/srv/lab(/.*)?"restorecon -Rv /srv/labRelabeled /srv/lab from ...httpd_sys_content_t:s0 to ...var_t:s0Relabeled /srv/lab/f.txt from ...httpd_sys_content_t:s0 to ...var_t:s0查 AVC 拒绝
Section titled “查 AVC 拒绝”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 “练习:给目录加自定义上下文再撤销”sudo dnf install -y policycoreutils-python-utilssudo mkdir -p /srv/lab && echo hi | sudo tee /srv/lab/f.txtls -Z /srv/lab/f.txtsudo semanage fcontext -a -t httpd_sys_content_t "/srv/lab(/.*)?"sudo restorecon -Rv /srv/labls -Z /srv/lab/f.txtsudo semanage fcontext -d "/srv/lab(/.*)?" && sudo restorecon -Rv /srv/labls -Z /srv/lab/f.txt检查:
- 初始类型是
var_t semanage+restorecon后变成httpd_sys_content_t- 删除规则后回到
var_t 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。
- 网络排查:按症状分诊网络问题
- 防火墙:firewalld rich rule
- 安装后核对:安装后 7 项核对