在 CentOS(以及其它使用 SELinux 的 Linux 发行版)中,context(安全上下文) 和 chcon(修改安全上下文的命令) 是两个不同层面的概念。下面从“是什么”和“怎么用”两方面说明区别。
context(SELinux 安全上下文) 是 SELinux 用来做访问控制的一种“标签”。
每个文件、进程、端口在 SELinux 中都有一个 context,通常格式是:
user:role:type:level
例如:
system_u:object_r:httpd_sys_content_t:s0
常见组成部分:
system_u)object_r)✅ context 是一个“属性 / 状态”,不是命令。
chcon(change context) 是一个命令,用于临时修改文件或目录的 SELinux 安全上下文。
示例:
chcon -t httpd_sys_content_t /var/www/html/index.html
意思是:
把 index.html 的 SELinux 类型改成 httpd_sys_content_t
⚠️ 注意:
chcon 修改的是当前运行时的 contextrestorecon 后可能被还原| 对比项 | context | chcon |
|---|---|---|
| 本质 | SELinux 标签 / 属性 | 修改标签的命令 |
| 是否命令 | 否 | 是 |
| 作用 | 描述对象的安全属性 | 改变对象的安全属性 |
| 是否永久 | 本身是状态 | 默认临时 |
| 示例 | httpd_sys_content_t |
chcon -t httpd_sys_content_t file |
很多人会混淆 chcon 和 restorecon:
chcon:手动临时改restorecon:按策略恢复成“正确”的 contextrestorecon -Rv /var/www
如果你希望永久生效,应该用:
semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
restorecon -Rv /web
而不是只使用 chcon。
context 是 SELinux 的“安全标签”,chcon 是临时修改这个标签的命令。
如果你愿意,我也可以结合具体场景(如 Nginx、FTP、MySQL)给你示例。