在 CentOS(以及 RHEL 系列) 中,“context(上下文)”通常出现在 SELinux 语境下,和传统的 Linux 文件/进程权限(DAC) 是两套并行的机制。下面系统说明它们的关系。
ls -l
chmod
chown
unconfined_u:object_r:httpd_sys_content_t:s0
unconfined_u)object_r)httpd_sys_content_t)✅ 最关键s0)ls -Z
ps -Z
semanage fcontext
restorecon
访问流程是:
用户 → DAC 检查 → SELinux 检查 → 允许/拒绝
两者必须同时通过
ls -l /var/www/html/index.html
-rwxr-xr-x root root index.html
ls -Z /var/www/html/index.html
unconfined_u:object_r:default_t:s0
default_t ❌httpd_sys_content_t解决:
semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
restorecon -Rv /var/www/html
tail /var/log/messages
SELinux is preventing /usr/sbin/httpd from read access on file
说明:
| 服务 | 正确文件类型 |
|---|---|
| Apache | httpd_sys_content_t |
| FTP | public_content_t |
| MySQL | mysqld_db_t |
| NFS | nfs_t |
| Samba | samba_share_t |
SELinux 核心规则是:
进程 type → 文件 type → 是否允许
例如:
httpd_t → httpd_sys_content_t : allowed
httpd_t → user_home_t : denied
ausearch -m avc -ts recent
sealert -a /var/log/audit/audit.log
setenforce 0
CentOS 中,文件权限决定“能不能”,SELinux context 决定“准不准”。
如果你有具体场景(如 Nginx / MySQL / Docker / 自定义服务),我可以给你更针对性的 context 配置示例。