温馨提示×

centos context与权限关系

小樊
38
2026-09-06 07:01:40
栏目: 智能运维

CentOS(以及 RHEL 系列) 中,“context(上下文)”通常出现在 SELinux 语境下,和传统的 Linux 文件/进程权限(DAC)两套并行的机制。下面系统说明它们的关系。


一、两种权限机制的区别

1. 传统 Linux 权限(DAC)

  • 基于 用户 / 组 / 其他(ugo)
  • 权限位:rwx
  • 命令示例:
    ls -l
    chmod
    chown
    
  • 特点:只要权限允许就能访问

2. SELinux Context(MAC)

  • 基于 主体(进程)和客体(文件)的安全上下文
  • 格式示例:
    unconfined_u:object_r:httpd_sys_content_t:s0
    
  • 组成:
    • user(unconfined_u
    • role(object_r
    • type(httpd_sys_content_t)✅ 最关键
    • level(s0
  • 命令示例:
    ls -Z
    ps -Z
    semanage fcontext
    restorecon
    
  • 特点:即使 DAC 允许,SELinux 也可能拒绝

二、Context 与权限的关系(重点)

✅ SELinux 是在 DAC 之上再做一次控制

访问流程是:

用户 → DAC 检查 → SELinux 检查 → 允许/拒绝

两者必须同时通过


三、典型示例说明

示例 1:Web 服务无法访问文件

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
  • DAC:权限是 755 ✅
  • SELinux:type 是 default_t
  • httpd 只接受 httpd_sys_content_t

解决:

semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
restorecon -Rv /var/www/html

示例 2:权限正确但仍被拒绝

tail /var/log/messages
SELinux is preventing /usr/sbin/httpd from read access on file

说明:

  • DAC 没问题
  • SELinux context 不匹配

四、常见 Context 类型对照

服务 正确文件类型
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

六、如何排查 Context 问题

1. 查看拒绝日志

ausearch -m avc -ts recent

2. 自动生成策略建议

sealert -a /var/log/audit/audit.log

3. 临时关闭 SELinux(不推荐)

setenforce 0

七、总结一句话

CentOS 中,文件权限决定“能不能”,SELinux context 决定“准不准”。

如果你有具体场景(如 Nginx / MySQL / Docker / 自定义服务),我可以给你更针对性的 context 配置示例。

0