插件窝 干货文章 探究SELinux工作原理

探究SELinux工作原理

策略 SELinux 模式 文件 976    来源:    2025-04-09

SELinux(Security-Enhanced Linux)是Linux内核的强制访问控制(MAC)安全模块,其工作原理基于细粒度的安全策略控制。以下是其核心工作机制的深度解析:


一、基础架构

  1. 标签系统(Labeling)

    • 所有系统资源(进程、文件、端口等)被标记为安全上下文(Security Context)
    • 格式:user:role:type:level(如 system_u:object_r:httpd_exec_t:s0
    • 通过ls -Zps -Z可查看标签
  2. 策略引擎

    • 加载预编译的策略模块(.pp文件)
    • 默认策略类型:
      • Targeted:仅保护关键服务
      • MLS(多级安全):军事级多层级控制
      • Strict:全系统保护(已淘汰)

二、访问控制流程

  1. DAC检查先行

    • 传统Linux权限检查(rwx)首先执行
    • 只有通过DAC后才会触发SELinux检查
  2. AVC决策(Access Vector Cache)

    • 当主体(Subject)访问客体(Object)时:
      1. 内核查询策略库
      2. 检查<subject context, object context, class, permission>
      3. 通过AVC缓存加速决策(减少策略库查询)
    • 拒绝访问时生成/var/log/audit/audit.log记录
  3. 策略规则示例

    allow httpd_t httpd_content_t : file { read getattr };
    

    表示允许httpd进程(httpd_t)读取web内容文件(httpd_content_t)


三、关键组件交互

组件 功能说明
security server 内核中的策略决策点,处理访问请求
policy.db 二进制策略文件(通常位于/etc/selinux/[type]/policy/policy.xx
libselinux 用户空间库,提供SELinux API(如setcon()
restorecon 修复文件系统标签的工具
auditd 记录违反策略的事件(需与ausearch工具配合使用)

四、工作模式切换

  1. 运行时模式

    # 查看当前模式
    getenforce  # Enforcing/Permissive/Disabled
    # 临时切换模式
    setenforce 0|1
    
  2. 配置文件 /etc/selinux/config 决定系统启动时的默认模式:

    SELINUX=enforcing
    SELINUXTYPE=targeted
    

五、典型问题处理流程

  1. 权限拒绝分析

    # 1. 查看audit日志
    ausearch -m avc -ts recent
    # 2. 生成人类可读报告
    audit2why -av
    # 3. 快速修复建议
    audit2allow -a
    
  2. 自定义策略模块

    # 从拒绝日志生成策略模块
    grep "avc: denied" /var/log/audit/audit.log | audit2allow -M mypolicy
    # 加载模块
    semodule -i mypolicy.pp
    

六、技术优势

  1. 最小权限原则:默认拒绝所有未明确允许的操作
  2. 防御纵深
    • 即使root用户也受策略限制
    • 可防范0-day漏洞(如服务被攻破后的横向移动)
  3. 类型强制(TE):基于主体/客体类型而非用户ID的访问控制

七、性能影响

  • 平均带来3-5%的系统性能开销
  • AVC缓存命中率通常>90%(可通过avcstat监控)
  • 策略复杂度与性能成反比(需平衡安全性与效率)

通过理解这些机制,可以更有效地配置SELinux策略,在安全性与可用性之间取得平衡。对于生产环境,建议在Permissive模式测试策略后再切换到Enforcing模式。