SELinux(Security-Enhanced Linux) 是CentOS系统内置的**强制访问控制(MAC)**安全框架,通过内核级机制限制进程、用户对系统资源的访问,弥补传统自主访问控制(DAC)的不足,有效防范未授权访问、恶意软件攻击及配置错误导致的安全风险。
SELinux摒弃了传统Linux“用户-组-其他”的DAC模型,采用主体(Subject,如进程)-对象(Object,如文件、端口)-操作(Operation,如读、写)的三元访问控制逻辑。每个主体和对象都被赋予安全上下文(格式为user:role:type:level,其中type是核心),SELinux通过**类型强制(TE)**策略判断主体是否能访问对象——即使攻击者获取了进程的用户权限,也无法突破SELinux策略的限制。例如,一个被攻破的Apache进程(运行httpd_t类型),无法直接写入httpd_sys_content_t类型的系统配置文件(如/etc/httpd/conf/httpd.conf),因为策略禁止httpd_t对httpd_sys_content_t的写操作。
SELinux为系统中所有资源(文件、目录、进程、端口、设备等)分配唯一的安全上下文,作为访问控制的“身份证”。通过ls -Z命令可查看文件的上下文(如unconfined_u:object_r:httpd_sys_content_t:s0),ps -eZ可查看进程的上下文(如system_u:system_r:httpd_t:s0)。安全上下文的type字段是类型强制的关键——策略规则基于type定义主体对对象的访问权限,例如httpd_t类型的进程只能访问httpd_sys_content_t或httpd_log_t类型的文件。
SELinux提供目标策略(Targeted)(默认,覆盖常见服务如Apache、MySQL)和多级安全(MLS)(适用于高安全需求场景)两种策略模式。管理员可通过以下工具定制策略:
semanage:管理端口、文件上下文等策略元素(如将8080端口添加为HTTP端口:semanage port -a -t http_port_t -p tcp 8080);setsebool:调整布尔值开关(如允许Apache连接网络:setsebool -P httpd_can_network_connect=1);audit2allow:分析/var/log/audit/audit.log中的拒绝日志,生成自定义策略模块(如解决Nginx无法访问静态文件的问题:grep nginx /var/log/audit/audit.log | audit2allow -M nginx_custom,然后加载模块:semodule -i nginx_custom.pp)。SELinux将所有拒绝访问的事件记录到/var/log/audit/audit.log(或/var/log/messages)中,包含拒绝的主体、对象、操作及原因(如avc: denied { write } for pid=1234 comm="httpd" name="config.conf" dev="sda1" ino=5678 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:etc_t:s0 tclass=file)。通过ausearch(如ausearch -c httpd -m AVC -ts today)或sealert(如sealert -a /var/log/audit/audit.log)工具可解析日志,快速定位安全问题并采取相应措施(如调整策略或修复配置)。
SELinux通过沙箱机制限制进程的活动空间——每个进程仅能访问其策略允许的资源。例如,若一个恶意程序通过漏洞获得了Apache进程的控制权,由于该进程的类型为httpd_t,SELinux会阻止其访问/root目录(root_t类型)、修改系统二进制文件(如/bin/bash,bin_t类型)或启动新的服务(如init_t类型),从而防止恶意软件扩散至整个系统。
SELinux有三种运行模式:
setenforce命令可临时切换模式(setenforce 1启用强制模式,setenforce 0启用宽容模式),修改/etc/selinux/config文件(设置SELINUX=enforcing)可永久生效(需重启系统)。