SELinux(Security-Enhanced Linux)是 CentOS 等 Linux 发行版中默认的强制访问控制(MAC)安全模块,由美国国家安全局(NSA)开发并开源。它通过细粒度的策略规则,为系统提供额外的安全层,超越传统的用户/组权限(自主访问控制,DAC)。
核心原理与工作流程
-
标签化(Labeling)
- 每个进程、文件、端口等资源都被分配一个安全上下文(Security Context),格式为:
用户:角色:类型:安全级别(如system_u:object_r:httpd_sys_content_t:s0)。 - 类型(Type) 是最关键字段,SELinux 策略主要基于类型定义访问规则。
- 每个进程、文件、端口等资源都被分配一个安全上下文(Security Context),格式为:
-
策略规则(Policy)
- 策略中定义了允许的操作,例如:“类型为
httpd_t的进程可以读类型为httpd_sys_content_t的文件”。 - 默认策略包(如
targeted)仅保护关键服务(如 Apache、MySQL),而非限制整个系统,以平衡安全性与易用性。
- 策略中定义了允许的操作,例如:“类型为
-
访问决策
- 当进程访问资源时,SELinux 检查其安全上下文和策略规则,决定是否放行。
- 拒绝优先级高于传统权限:即使 DAC 允许访问,若 SELinux 策略禁止,操作仍会被阻止。
-
工作流程示例
进程尝试读取文件 → 内核调用 SELinux → 检查进程(域)和文件(类型)的上下文 → 匹配策略规则 → 允许/拒绝访问 → 记录审计日志(/var/log/audit/audit.log)
核心价值与应用场景
-
最小权限原则
- 限制服务权限:例如,即使 Apache 被入侵,攻击者也无法访问非 Web 相关文件(如
/etc/shadow)。 - 防止提权攻击:即使进程以 root 身份运行,SELinux 仍限制其操作范围。
- 限制服务权限:例如,即使 Apache 被入侵,攻击者也无法访问非 Web 相关文件(如
-
典型应用场景
- Web 服务器:限制 Apache/Nginx 仅访问 Web 目录。
- 数据库:MySQL/PostgreSQL 仅能读写特定数据文件。
- 容器安全:与容器运行时(如 Docker、Podman)集成,隔离容器进程。
- 合规需求:满足 GDPR、HIPAA 等安全标准要求。
关键操作命令
-
查看上下文
ls -Z /var/www/html # 查看文件上下文 ps -eZ | grep httpd # 查看进程上下文 -
临时修改布尔值
setsebool -P httpd_can_network_connect on # 允许 Apache 访问网络 -
修复文件标签
restorecon -Rv /var/www/html # 恢复默认上下文 -
分析审计日志
ausearch -m AVC -ts recent # 查看最近的拒绝事件 audit2why -av # 解释拒绝原因并建议修复
注意事项
-
勿随意禁用 SELinux:使用
setenforce 0(宽松模式)临时调试,而非永久禁用(/etc/selinux/config)。 -
自定义策略:复杂场景可通过
audit2allow生成自定义策略模块。 -
策略模式:
enforcing:强制执行策略。permissive:仅记录不阻止操作。disabled:完全禁用(需重启)。
通过 SELinux,CentOS 能够有效遏制恶意软件的横向移动和数据泄露,是构建安全基础设施的重要工具。理解其标签机制和策略管理,能显著提升系统防护能力。
浙公网安备 33010602011771号