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