首页/系统/信创系统运维速查/SELinux 上下文查看与临时修改
安全加固65 条

SELinux 上下文查看与临时修改

上下文(context)是 SELinux 判断访问的核心标签:文件、进程、端口、用户各有标签;ls -Z 与 ps -Z 是常用的查看入口。

信创系统运维速查系统更新于 2026-10-13

上下文是判断依据

SELinux 不看文件路径而是看标签:每个文件、目录、进程、端口、用户都带一个上下文(context),格式为 user:role:type:level,targeted 策略下日常打交道的核心是 type。把网页目录换成 web 内容类型、把非标准端口登记为 web 端口,服务才能访问;反之,很多『权限都对但就是访问不了』的问题,根因就是标签不对。

基本信息

查看文件标签ls -Z 文件、ls -Zd 目录
查看进程标签ps auxZ、ps -eZ
查看用户标签id -Z
查看端口标签semanage port -l
临时修改chcon -t 类型 路径
恢复默认restorecon -v 路径、restorecon -Rv 目录
长期生效semanage fcontext 登记规则后 restorecon

典型使用场景

  • 把站点目录迁到非标准路径后需要修正标签
  • 新增自定义端口时登记端口类型
  • 排查服务被拒访问时先看标签是否匹配
  • 迁移改造后批量恢复目录标签,清理手工改动
  • 确认备份还原后的文件标签是否与策略一致

查看标签

查看标签
ls -Z /var/www/html/            # 文件标签
ls -Zd /var/www/html/           # 目录本身的标签(不带内容列表)
ps auxZ | grep nginx            # 进程标签,注意进程类型应与访问目标匹配
id -Z                           # 当前用户上下文
semanage fcontext -l | grep /web   # 查看已登记的路径规则
matchpathcon /web/index.html    # 按策略查询该路径应有的标签

临时修改与恢复

临时修改与恢复
chcon -t httpd_sys_content_t /web/index.html   # 临时改单个文件类型
chcon -R -t httpd_sys_content_t /web            # 递归修改目录
restorecon -v /web/index.html                   # 按策略默认值恢复
restorecon -Rv /web                             # 递归恢复,清理手工改动
semanage fcontext -a -t httpd_sys_content_t '/web(/.*)?'   # 登记规则,长期生效
restorecon -Rv /web                             # 登记后再恢复一次使其按新规则打标

上下文与命令行

对象查看方式修改方式
文件与目录ls -Z、ls -Zdchcon(临时)、semanage fcontext + restorecon(长期)
进程ps auxZ由策略决定的类型,通常随服务的域切换
端口semanage port -l、netstat 无标签概念semanage port -a -t 类型 -p tcp 端口
用户id -Zsemanage login 调整登录映射
应有标签matchpathcon 路径以策略默认值为准,恢复用 restorecon
上下文格式user:role:type:leveltargeted 策略下重点关注 type
mv 会保留文件原有标签,cp 生成的新文件按目标目录默认规则打标:迁移站点或数据目录后,常见需要执行一次 restorecon 修正。
chcon 是临时手段,做全盘 relabel 时会被覆盖:需要长期生效必须用 semanage fcontext 登记路径规则,再 restorecon 应用。

易错点

  • 用 chcon 改完标签就以为解决了,日后一次 relabel 或恢复让改动消失,问题重新出现
  • 误以为 mv 与 cp 行为一致:mv 保留原标签、cp 按目标目录打标,两种迁移方式后处理步骤不同
  • 给目录递归 chcon 却漏了后续新建文件,新文件按父目录默认规则打标,行为时好时坏
  • 把不符策略的标签直接改成 unrestricted 之类宽松类型来绕过拒绝,实质是放宽安全边界
  • 把标签问题当成文件权限问题处理,反复调整 chmod 与属主却始终不生效

数据来源与参考

  • SELinux 官方 Wiki(Labeling Files)
  • man 1 chcon
  • man 8 restorecon
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌