温馨提示×

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=permissiveSELINUX=enforcing)。

三 关键保护能力

  • 最小权限与进程隔离:将进程放入受限,仅授予完成其功能所必需的访问,限制横向移动权限提升
  • 细粒度资源控制:不仅控制文件读写执行,还可限制对网络端口、设备等对象的访问,缩小攻击面
  • 策略可定制与组合:在 targeted 策略基础上,结合布尔值策略模块为特定应用做精细化放行或隔离。
  • 与 DAC 的叠加防护:即便 DAC 被绕过(如被攻破的 root 进程),MAC 仍可提供第二道屏障。

四 运维与排错常用操作

  • 查看与切换状态
    • 查看:sestatusgetenforce
    • 切换:setenforce 1(Enforcing)、setenforce 0(Permissive)
  • 上下文查看与修复
    • 查看:ls -Zps -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 与防火墙、最小权限配置、系统更新与审计组合,形成纵深防御

0