SELinux全称为Security-Enhanced Linux,是美国国家安全局开发并贡献给开源社区的一套强制访问控制安全子系统,它运行在Linux内核层,为系统提供远超传统权限管理的防护能力。

SELinux的核心作用
1. 实现强制访问控制
传统的Linux权限管理属于自主访问控制,文件所有者可以随意将权限分配给其他用户,一旦恶意程序获取了某个用户的权限,就可以访问该用户有权限的所有资源。而SELinux的强制访问控制规则由系统管理员统一配置,所有进程和资源的访问都必须符合预设的安全策略,即使进程获取了root权限,也无法突破SELinux的规则限制。
比如普通Web服务进程默认只能访问/var/www/html目录下的文件,就算攻击者拿到了Web进程的权限,也无法访问/etc/passwd这类敏感文件,这就是SELinux强制管控的效果。
2. 限制进程越权行为
SELinux会给每个进程打上安全上下文标签,同时给系统中的所有资源也打上对应的安全上下文标签,进程访问资源时会先校验两者的标签是否匹配预设的策略规则。
我们可以通过以下命令查看进程的安全上下文:
# 查看httpd进程的安全上下文 ps -eZ | grep httpd # 输出示例:system_u:system_r:httpd_t:s0 1234 ? 00:00:00 httpd
其中httpd_t就是httpd进程的类型标签,SELinux的策略会规定httpd_t类型的进程可以访问哪些类型的资源,从根源上限制进程的异常访问行为。
3. 降低安全事件的影响范围
当系统出现漏洞被攻击者入侵时,SELinux可以有效缩小攻击面。比如某款服务存在远程代码执行漏洞,攻击者利用漏洞控制了该服务进程,但SELinux限制了该进程只能访问其业务所需的资源,攻击者无法利用这个进程去修改系统配置、读取其他服务的敏感数据,从而避免整个系统被完全控制。
4. 提供细粒度的安全管控
SELinux的管控粒度非常细,不仅可以对文件、目录设置访问规则,还可以对网络端口、进程间通信、系统调用等行为进行管控。管理员可以根据业务的实际需求,自定义安全策略,适配不同的业务场景。
比如我们可以限制某个服务只能监听8080端口,不能绑定其他端口,相关策略配置示例如下:
# 允许httpd进程绑定tcp类型的8080端口
allow httpd_t http_port_t:tcp_socket { name_bind };
SELinux的常见工作模式
SELinux有三种工作模式,用户可以根据实际需求切换:
- Enforcing:强制模式,SELinux会严格执行所有安全策略,违反规则的访问会被直接拦截,同时记录审计日志。
- Permissive:宽容模式,SELinux不会拦截违反规则的访问,只会记录审计日志,一般用于策略调试阶段。
- Disabled:禁用模式,SELinux完全关闭,不提供任何安全管控能力。
可以通过以下命令查看当前SELinux的工作模式:
getenforce # 输出Enforcing表示当前为强制模式
适用场景说明
SELinux更适合对安全性要求较高的场景,比如生产环境的服务器、金融系统的后端设备、政务相关的Linux主机等。如果是个人开发环境或者测试环境,如果对安全需求不高,也可以选择关闭SELinux来减少配置复杂度,但生产环境建议保持强制模式开启,提升系统的整体安全性。