插件窝 干货文章 SELinux是什么

SELinux是什么

策略 上下文 SELinux 文件 492    来源:    2025-05-02

SELinux(Security-Enhanced Linux)是 Linux 系统的一个强制访问控制(MAC, Mandatory Access Control)安全模块,由美国国家安全局(NSA)主导开发,旨在通过更细粒度的权限控制提升系统安全性。


核心概念

  1. 与传统Linux的区别

    • 传统Linux使用自主访问控制(DAC),用户/进程拥有文件所有者权限(如rwx)。
    • SELinux通过安全策略定义进程、文件、用户等对象的交互规则,即使root用户也可能被限制。
  2. 工作模式

    • Enforcing:强制执行安全策略。
    • Permissive:仅记录违规行为但不阻止(用于调试)。
    • Disabled:完全关闭(需重启生效)。
  3. 关键组件

    • 主体(Subject):进程(如Apache、Nginx)。
    • 目标(Object):文件、端口、设备等资源。
    • 策略(Policy):预定义的规则集(如targeted策略保护常见服务)。
    • 安全上下文(Security Context):标签(如user:role:type),例如:
      bash -rw-r--r--. 1 root root system_u:object_r:httpd_sys_content_t /var/www/html/index.html

常见用途

  1. 限制服务权限

    • 例如,Apache只能访问标记为httpd_sys_content_t的文件,即使配置文件权限为777也会被拒绝。
  2. 保护系统进程

    • 阻止被入侵的服务(如MySQL)横向访问其他资源。
  3. 合规性要求

    • 满足高安全场景(如政府、金融)的审计标准。

基本操作命令

功能 命令示例
查看状态 sestatusgetenforce
临时切换模式 setenforce 0(Permissive)或 setenforce 1(Enforcing)
修改文件上下文 chcon -t httpd_sys_content_t /path/to/file
恢复默认上下文 restorecon -Rv /path
分析日志 ausearch -m AVC -ts recentsealert -a /var/log/audit/audit.log

故障排查

  1. 权限被拒绝时

    • 检查日志:/var/log/audit/audit.logjournalctl -xe
    • 临时设为Permissive模式测试是否与SELinux相关: bash setenforce 0 # 测试功能 setenforce 1
    • 生成解决方案建议: bash audit2allow -a # 根据日志生成允许规则
  2. 自定义策略模块

    grep "avc:" /var/log/audit/audit.log | audit2allow -M mypolicy
    semodule -i mypolicy.pp
    

注意事项

  • 不要盲目禁用SELinux:优先调整策略或上下文。
  • 策略更新:系统更新可能覆盖自定义规则,需备份(semodule -B)。
  • 容器环境:Kubernetes/Docker可能需要调整SELinux标签(如container_t)。

通过合理配置,SELinux能显著减少漏洞利用风险,是Linux系统安全的强力加固层。