温馨提示×

SELinux如何优化Linux系统安全性

小樊
37
2025-12-20 05:08:06
栏目: 智能运维

SELinux优化Linux系统安全性的实用方案

一 基础配置与运行模式

  • 将系统置于Enforcing模式,仅在排障时短期切到Permissive;严禁长期Disabled。检查与切换命令:
    • 查看状态:sestatusgetenforce
    • 临时切换:setenforce 0|1(仅 Permissive/Enforcing,不能禁用)
  • 持久化配置:编辑**/etc/selinux/config**
    • 示例:
      SELINUX=enforcing
      SELINUXTYPE=targeted
      
    • 从 Disabled 切回 Enforcing 时,需修改配置并重启;首次从禁用恢复时系统可能进行文件系统重新标记,耗时较长。
  • 策略类型选择:默认targeted即可覆盖大多数场景;高安全需求再考虑mls/minimum,并确保相应策略包已安装。

二 安全上下文与最小权限

  • 正确设置并持久化文件与目录的安全上下文(类型字段 Type 最关键):
    • 查看:ls -Zps -Z
    • 持久化添加规则:semanage fcontext -a -t <type> "<path>(/.*)?"
    • 应用规则:restorecon -Rv <path>
    • 示例(将自定义 Web 目录纳入 httpd 可读类型):
      semanage fcontext -a -t httpd_sys_content_t "/webdata(/.*)?"
      restorecon -Rv /webdata
      
  • 避免服务运行在unconfined_t等不受限域,确保服务在专有域(如httpd_tmysqld_t)中运行,遵循最小权限原则
  • 谨慎使用临时标签工具chcon,优先用semanage fcontext + restorecon保证重启后仍然有效。

三 布尔值与策略模块调优

  • 使用布尔值按需开关策略子集,减少不必要的权限开放:
    • 查看:getsebool -a
    • 临时开启:setsebool <name> on
    • 永久开启:setsebool -P <name> on
    • 示例(允许 httpd 发起网络连接,按需开启):
      setsebool -P httpd_can_network_connect on
      
  • 处理 AVC 拒绝并做最小化授权:
    • 检索拒绝日志:ausearch -m avc -ts recent
    • 人性化解释:sealert -a /var/log/audit/audit.log
    • 自动生成并安装最小化模块(仅在确认访问合理时):
      ausearch -m avc -ts recent | audit2allow -M mypolicy
      semodule -i mypolicy.pp
      
  • 自定义模块流程(必要时):编写**.te** → checkmodulesemodule_packagesemodule -i

四 运维与监控最佳实践

  • 持续审计与监控:定期查看**/var/log/audit/audit.log与 AVC 报表,使用sealert**辅助分析,保持策略与业务变更同步更新。
  • 变更流程:先在Permissive验证,再切回Enforcing;严禁以setenforce 0作为长期手段。
  • 性能与噪声控制:关闭不必要的布尔值、合并冗余规则、定期轮转与清理审计日志,降低审计噪声与系统开销。
  • 服务加固:禁用不必要的服务与端口,容器/虚拟化场景启用相应 SELinux 支持,减少攻击面。

五 常见场景快速清单

  • Web 服务(DocumentRoot 在**/webdata**):
    semanage fcontext -a -t httpd_sys_content_t "/webdata(/.*)?"
    restorecon -Rv /webdata
    # 若需对外发起连接(按需)
    setsebool -P httpd_can_network_connect on
    
  • 自定义应用需要专属域与日志目录:
    • 规划类型:如myapp_exec_t(可执行)、myapp_log_t(日志)
    • 最小授权示例(在 .te 中):
      allow myapp_t myapp_log_t:file manage_file_perms;
      files_tmp_filetrans(myapp_t, myapp_tmp_t, file)
      
    • 编译安装:
      checkmodule -M -m -o myapp.mod myapp.te
      semodule_package -o myapp.pp -m myapp.mod
      semodule -i myapp.pp
      
  • 排障闭环:
    ausearch -m avc -ts recent
    sealert -a /var/log/audit/audit.log
    # 合理则 audit2allow -M <name> && semodule -i <name>.pp
    

0