你说的 CentOS 的 context 一般是指 SELinux 的 security context(安全上下文)。
同步/修复 context 是很常见的操作,下面按常见场景说明。
一、什么是 SELinux context
在 CentOS/RHEL 上,每个文件、目录、进程都有一个类似:
system_u:object_r:httpd_sys_content_t:s0
SELinux 根据 context 决定是否允许访问。
查看 context:
ls -Z
ps -Z
二、最常见的同步方式(推荐)
1️⃣ 对整个目录/文件按默认策略重新打标签
restorecon -Rv /path/to/dir
示例:
restorecon -Rv /var/www/html
✅ 最安全、最常用
2️⃣ 只修复某个文件
restorecon -v /etc/nginx/nginx.conf
三、手动修改 context(同步到指定类型)
查看当前 context
ls -Z /var/www/html
临时修改(重启后可能失效)
chcon -t httpd_sys_content_t /var/www/html/index.html
⚠️ 不推荐长期使用
四、永久同步(写入策略)
当目录长期需要某种 context 时,必须写规则:
1️⃣ 添加永久规则
semanage fcontext -a -t httpd_sys_content_t "/data/web(/.*)?"
2️⃣ 立即生效
restorecon -Rv /data/web
3️⃣ 查看已有规则
semanage fcontext -l | grep web
五、系统级 context 同步(整个系统)
如果你刚刚:
- 关闭过 SELinux
- 拷贝了大量文件
- 系统异常
可以执行:
touch /.autorelabel
reboot
系统重启后会自动重新标记整个文件系统
⚠️ 重启时间可能较长
六、常见目录 context 对照表
| 目录 | 常见 context |
|---|---|
| /var/www/html | httpd_sys_content_t |
| /var/log | var_log_t |
| /etc | etc_t |
| NFS 挂载 | nfs_t |
| Samba 共享 | samba_share_t |
七、快速排查思路
如果服务(httpd / nginx / mysql)因 SELinux 失败:
- 看日志
ausearch -m avc -ts recent - 生成建议规则
audit2why < /var/log/audit/audit.log
八、总结(最常用 3 条)
✅ 90% 的情况用这个就够了
restorecon -Rv /path
✅ 长期使用用这个
semanage fcontext
restorecon
✅ 系统级修复
touch /.autorelabel
reboot
如果你能具体说一下:
- CentOS 7 还是 8 / Stream?
- 是文件、目录、服务还是容器(podman/docker)?
- 报错信息是什么?
我可以给你一步到位的修复命令。
