SELinux如何保护Linux系统安全
小樊
46
2025-11-16 14:43:05
SELinux保护Linux系统的机制与要点
一 核心机制与工作原理
- 强制访问控制 MAC:在Linux 内核中由 SELinux 实施,基于管理员定义的策略对进程、文件、端口等执行访问控制,遵循最小权限原则,即使root进程也必须受策略约束。与传统 **DAC(rwx 权限、属主/属组)**不同,访问必须同时通过 DAC 与 SELinux 检查。
- 安全上下文与类型强制 TE:每个对象都有安全上下文,格式为 user:role:type:level(常见策略中 type 最关键);类型强制依据“进程类型→对象类型”的规则决定是否放行。
- 决策流程:访问请求先查 AVC(Access Vector Cache),未命中则交由安全服务器按策略与上下文判定;拒绝时通常记录 “avc: denied” 到系统日志(如 /var/log/messages)。
- 策略类型:常见为 targeted(默认,保护关键服务)与 MLS(多级安全,复杂,多见于政府场景)。
二 三种运行模式与适用场景
- Enforcing:强制执行策略,违规即阻断并记录日志,用于生产环境的持续保护。
- Permissive:仅记录不阻断,便于排错与策略调优。
- Disabled:完全关闭(多数发行版需重启,且切换路径通常为先设为 Permissive 再启用)。
- 查看与切换:常用命令有 sestatus / getenforce / setenforce 1|0;持久化配置在 /etc/selinux/config(如设置 SELINUX=permissive 或 SELINUX=enforcing)。
三 关键保护能力
- 最小权限与进程隔离:将进程放入受限域,仅授予完成其功能所必需的访问,限制横向移动与权限提升。
- 细粒度资源控制:不仅控制文件读写执行,还可限制对网络端口、设备等对象的访问,缩小攻击面。
- 策略可定制与组合:在 targeted 策略基础上,结合布尔值与策略模块为特定应用做精细化放行或隔离。
- 与 DAC 的叠加防护:即便 DAC 被绕过(如被攻破的 root 进程),MAC 仍可提供第二道屏障。
四 运维与排错常用操作
- 查看与切换状态:
- 查看:sestatus、getenforce
- 切换:setenforce 1(Enforcing)、setenforce 0(Permissive)
- 上下文查看与修复:
- 查看:ls -Z、ps -eZ
- 临时修改:chcon -t 类型 路径
- 永久修改:semanage fcontext -a -t 类型 “路径(/.*)?”;应用:restorecon -Rv 路径
- 策略与布尔值:
- 布尔值:getsebool/setsebool(如 httpd 相关开关)
- 模块管理:semodule -l(列模块)、semodule -i/-r(装载/卸载 .pp 模块)
- 审计与问题定位:
- 检索拒绝日志:ausearch -m avc -ts recent
- 生成建议规则:audit2allow -a(用于排错阶段的策略草案,生产环境需审慎审查后再并入)
五 实践建议
- 保持 SELinux 为 Enforcing,仅在排错时短时切到 Permissive;避免直接 Disabled。
- 变更服务目录或端口前,先规划并持久化文件上下文与端口类型,再重启服务。
- 优先使用发行版提供的 targeted 策略与工具链,必要时以最小变更引入自定义策略模块。
- 将 SELinux 与防火墙、最小权限配置、系统更新与审计组合,形成纵深防御。