插件窝 干货文章 SELinux有什么用

SELinux有什么用

SELinux 策略 进程 访问 927    来源:    2025-05-01

SELinux(Security-Enhanced Linux)是 Linux 系统的强制访问控制(MAC)安全机制,由美国国家安全局(NSA)主导开发,主要解决传统 Linux 自主访问控制(DAC)的权限管理缺陷。以下是它的核心作用、原理和典型场景:


一、SELinux 的核心作用

  1. 最小权限原则

    • 即使进程或用户被提权(如 root),SELinux 也能通过安全策略限制其仅能访问必要的资源(文件、端口、设备等)。
    • 示例:Apache 服务被入侵时,攻击者无法读取 /etc/shadow,即使 Apache 以 root 身份运行。
  2. 防止提权攻击

    • 传统 Linux 中,若进程存在漏洞(如缓冲区溢出),攻击者可能获得进程所属用户的权限。SELinux 的域(domain)隔离可阻断此类横向渗透。
  3. 精细化资源控制

    • 定义策略时,可精确控制哪些进程能访问特定文件、网络端口或系统调用。
    • 示例:仅允许 PostgreSQL 进程绑定 TCP 5432 端口,其他服务即使以 root 运行也无法占用该端口。
  4. 合规性支持

    • 满足 GDPR、HIPAA 等安全标准中对权限隔离的严格要求。

二、SELinux 工作原理

  1. 标签机制(Labeling)

    • 所有资源(文件、进程、端口等)被标记为安全上下文(如 user_u:role_r:httpd_t:s0)。
    • 通过 ls -Zps -Z 可查看标签。
  2. 策略规则(Policy)

    • 预定义规则库(如 targeted 策略)规定哪些标签的进程可以访问哪些标签的资源。
    • 示例规则允许 httpd_t 域的进程读取标记为 httpd_content_t 的文件
  3. 强制执行

    • 内核在访问请求发生时检查策略,违反规则的操作直接被拒绝(日志记录在 /var/log/audit/audit.log)。

三、典型应用场景

  1. Web 服务器防护

    • 即使 Apache/Nginx 存在漏洞,攻击者无法越权访问 /home 或数据库文件。
  2. 数据库隔离

    • MySQL 进程仅能访问其数据目录(如 /var/lib/mysql),无法扫描系统其他文件。
  3. 容器安全

    • Docker/Podman 可与 SELinux 集成,防止容器逃逸(如 container_t 域限制)。
  4. 多用户系统

    • 限制普通用户对系统配置文件的访问,即使误操作 sudo 也不会破坏系统。

四、SELinux 的三种模式

  1. Enforcing:强制执行策略,拒绝违规操作(生产环境推荐)。
  2. Permissive:仅记录违规,不阻止(用于调试策略)。
  3. Disabled:完全关闭(不推荐,会降低安全性)。
    • 切换命令:setenforce 1|0 或修改 /etc/selinux/config

五、常见问题与技巧

  1. 权限问题排查

    • 查看拒绝日志:grep "avc:" /var/log/audit/audit.log
    • 快速修复:audit2allow -a 生成新策略模块。
  2. 文件标签修复

    • 恢复默认标签:restorecon -Rv /path
    • 手动打标签:chcon -t httpd_content_t /path/file
  3. 与 Docker 的兼容性

    • 需挂载卷时添加 :Z 标志(如 -v /host/path:/container/path:Z)自动重标签。

六、为什么有时选择关闭 SELinux?

  • 学习成本高:策略管理需要专业知识。
  • 兼容性问题:老旧或非标准软件可能因未适配 SELinux 而报错。
  • 性能开销:极端场景下(如高频小文件操作)可能有轻微性能损失。

总结

SELinux 是 Linux 系统的“安全防火墙”,通过强制访问控制弥补传统权限模型的不足。正确配置后,它能显著提升系统安全性,尤其适用于面向公网的服务或对隔离性要求高的环境。初次使用建议从 Permissive 模式开始,逐步调试策略后再切换到 Enforcing