SELinux(Security-Enhanced Linux)是 CentOS 系统中实现强制访问控制(MAC)的关键安全模块,其进程隔离功能通过安全上下文(Security Context)和策略规则(Policy Rules)的组合实现。与传统的自主访问控制(DAC,如文件权限)不同,SELinux 的进程隔离是内核级的强制约束,即使 root 用户也无法绕过,能有效防止恶意进程越界访问系统资源。
安全上下文是 SELinux 为每个进程和文件/目录分配的“身份标签”,是进程隔离的基础。其结构由四个冒号分隔的字段组成:
user:role:type:sensitivity(如 system_u:object_r:httpd_sys_content_t:s0)。
system_u 代表系统用户);object_r 代表普通对象,system_r 代表系统进程);httpd_sys_content_t 代表 Web 服务可访问的内容类型);s0(默认)。进程与文件的访问需满足类型匹配:进程的 type 必须与文件的 type 在策略规则中允许,才能进行读写等操作。
SELinux 通过策略规则定义进程与资源的交互权限。CentOS 默认使用targeted 策略(针对常见网络服务如 httpd、mysqld 进行管制,对本机系统进程限制极少),策略规则存储在 /etc/selinux/targeted/policy/ 下。
规则逻辑示例:
allow httpd_t httpd_sys_content_t:file { read write };
表示 httpd_t 类型的进程(如 Apache)可以访问 httpd_sys_content_t 类型的文件(如 /var/www/html 下的内容)。
SELinux 有三种工作模式,直接影响进程隔离的严格程度:
/var/log/audit/audit.log;可通过 sestatus 命令查看当前模式,setenforce 1 切换至强制模式(需重启生效)。
httpd_t);文件/目录创建时,继承父目录的标签(可通过 chcon 手动修改)。rw-r--r--)检查;若 DAC 允许,再进入 SELinux 检查。type 和文件的 type,查询策略规则:
allow httpd_t httpd_sys_content_t:file read),则访问成功;ps auxZ | grep httpd(显示 httpd_t 等标签);ls -lZ /var/www/html/index.html(显示文件的 type)。若文件上下文不符合策略,可使用以下命令修改:
chcon -t httpd_sys_content_t /path/to/file;semanage fcontext -a -t httpd_sys_content_t "/path/to/dir(/.*)?"(添加规则),然后 restorecon -Rv /path/to/dir(恢复上下文)。setenforce 0(Permissive)、setenforce 1(Enforcing);/etc/selinux/config,修改 SELINUX=enforcing(需重启系统)。若进程因 SELinux 被拒绝访问,可通过以下步骤解决:
grep avc /var/log/audit/audit.log(找到拒绝信息);audit2allow -a(根据日志生成策略模块);semodule -i custom_policy.pp(启用自定义策略)。httpd_t、mysqld_t)而非用户,限制资源访问范围;type 隔离,避免相互干扰。