SELinux对文件权限的影响:强制访问控制(MAC)的补充与强化
SELinux(Security-Enhanced Linux)是Linux内核级的强制访问控制(MAC)模块,它通过细粒度的策略规则和安全上下文机制,突破了传统自主访问控制(DAC)的局限,对文件权限的管理产生了根本性变革。其核心影响在于:即使进程拥有传统DAC的rwx权限,仍需满足SELinux策略才能访问文件,从而大幅降低权限滥用或进程被攻击后的系统风险。
传统DAC(自主访问控制)以用户/组身份为核心,通过文件的rwx权限判断是否允许访问(如root用户可无视权限访问任何文件)。而SELinux采用强制访问控制(MAC),将权限判断的主体从“用户”转向“进程”——进程能否访问文件,不仅取决于文件的DAC权限,还需匹配进程的安全上下文(Security Context)与文件的安全上下文。
例如:传统DAC下,root启动的httpd进程可访问系统所有文件;但在SELinux下,httpd进程仅能访问策略允许的目录(如/var/www/html),即使该目录的DAC权限为777。
SELinux通过安全上下文(形如user_u:object_r:httpd_sys_content_t:s0)定义文件/进程的安全属性,是进程访问文件的前置条件。安全上下文包含四个关键字段:
root(root用户)、user_u(普通用户)、system_u(系统用户);object_r(对象角色,用于文件/目录)、system_r(系统角色,用于进程);httpd_sys_content_t表示HTTP服务可访问的内容文件);s0(默认级别)。进程的安全上下文由其启动者或父进程继承(如httpd进程的上下文为httpd_t),文件的安全上下文由创建进程或restorecon命令设置(可通过ls -Z查看)。
SELinux通过策略(Policy)定义允许的进程-文件访问规则。CentOS/RHEL系统默认采用targeted策略(针对常见网络服务如httpd、mysqld进行限制,本机操作限制较少),也可选择更严格的minimum(自定义限制进程)或mls(多级安全,最严格)策略。
策略规则示例:httpd_t进程仅能读取httpd_sys_content_t类型的文件、写入httpd_sys_rw_content_t类型的目录。若文件类型不匹配(如httpd_t进程试图写入user_home_t类型的用户家目录),即使DAC权限允许,也会被SELinux阻止。
SELinux有三种运行模式,直接影响其对文件权限的控制强度:
/var/log/audit/audit.log);setenforce命令临时切换(setenforce 1启用强制模式,setenforce 0启用宽容模式),永久修改需编辑/etc/selinux/config文件。SELinux并非取代传统DAC,而是在DAC基础上增加额外的安全层。进程访问文件的流程为:
① 检查DAC权限(用户/组的rwx)→ ② 若DAC允许,再检查SELinux策略(进程上下文与文件上下文是否匹配)→ ③ 两者均通过,才允许访问。
例如:若文件的DAC权限为600(仅所有者可读写),即使进程的SELinux上下文匹配,root用户也无法读取该文件(除非DAC权限允许)。
当进程因SELinux策略被拒绝访问文件时,系统会记录详细的拒绝日志(位于/var/log/audit/audit.log)。可通过以下工具排查问题:
ausearch -m avc -ts recent:查询最近的SELinux拒绝事件;sealert -A avc -ts recent:生成易读的拒绝报告(包含修复建议);restorecon -Rv /path/to/file:恢复文件的默认SELinux上下文(解决上下文不匹配问题)。SELinux对文件权限的影响,本质是通过强制访问控制弥补了传统DAC的不足,尤其适用于需要高安全性的场景(如服务器、网络服务)。其核心逻辑是“最小权限原则”——进程仅能访问完成任务所需的文件,即使进程被攻击或root权限泄露,也能有效限制损害范围。