温馨提示×

Linux SELinux如何配置安全策略

小樊
39
2025-12-20 04:59:08
栏目: 智能运维

Linux SELinux 安全策略配置实操指南

一 基础准备与模式切换

  • 查看状态与模式
    • 使用命令:sestatusgetenforce 查看当前 SELinux 状态与运行模式。
  • 临时切换运行模式
    • 命令:setenforce 1(切换为 Enforcing)或 setenforce 0(切换为 Permissive)。此方式立即生效但重启后失效
  • 永久配置模式与策略类型
    • 编辑配置文件:/etc/selinux/config
      • 示例:
        SELINUX=enforcing
        SELINUXTYPE=targeted
        
    • 修改后需重启生效;从 Disabled 切换到 Enforcing/Permissive 时,系统可能需要对文件系统进行重新标记,首次启动时间会变长。
  • 策略类型说明
    • targeted:仅对选定服务实施强制访问控制,生产最常用。
    • minimum:在 targeted 基础上的精简版。
    • mls:多级安全模型,适用于高安全场景。

二 安全上下文与文件类型配置

  • 查看上下文
    • 进程:ps -Zps auxZ | grep <服务名>
    • 文件/目录:ls -lZ <路径>
  • 持久化设置文件类型(推荐)
    • 使用 semanage fcontext 添加规则,再用 restorecon 应用:
      semanage fcontext -a -t httpd_sys_content_t "/webdata(/.*)?"
      restorecon -R /webdata
      
    • 示例说明:将自定义目录 /webdata 及其子项标记为 httpd_sys_content_t,供 httpd 读取静态内容。
  • 端口类型(示例)
    • TCP 81 加入 http 端口类型:
      semanage port -a -t http_port_t -p tcp 81
      
  • 使用提示
    • 避免使用临时的 chcon,优先用 semanage fcontext 实现重启后仍持久的标签配置。

三 布尔值与最小权限调优

  • 列出与查看布尔值
    • 详细列表(含描述):semanage boolean -l
    • 简要列表:getsebool -a
  • 开关布尔值
    • 临时生效:setsebool <布尔名> on|off
    • 永久生效:setsebool -P <布尔名> on|off
  • 常见与 Web 相关的布尔值
    • httpd_can_network_connect:允许 httpd 主动发起网络连接
    • httpd_can_network_connect_db:允许 httpd 连接数据库
    • httpd_enable_cgi:允许 httpd 执行 CGI
    • httpd_can_sendmail:允许 httpd 调用邮件发送功能
  • 原则
    • 遵循最小权限:仅开启业务必需的功能,默认关闭宽泛权限。

四 排错与自定义策略模块

  • 分析拒绝日志
    • 查看最近 AVC 拒绝:ausearch -m avc -ts recent
    • 或用可读工具:sealert -a /var/log/audit/audit.log
  • 快速定位思路
    • 从日志中识别:源域(如 httpd_t)、目标类型(如 user_home_t)、操作(如 read)、对象类(如 file),判断是否为合理访问需求。
  • 修复路径(按优先级)
    • 业务整改:将资源放到正确位置并使用正确类型(如把 Web 数据放到 /var/www 或标记为 httpd_sys_content_t)。
    • 细粒度布尔:开启与目标行为匹配的最小布尔值(如确实需要远程连接数据库再开启 httpd_can_network_connect_db)。
    • 生成最小策略模块(仅在确需放行时)
      ausearch -m avc -ts recent > /tmp/avc.log
      audit2allow -i /tmp/avc.log -M myapp_policy
      semodule -i myapp_policy.pp
      
    • 风险提示:避免“一键宽松”式放行,确保规则最小化且可审计

五 生产最佳实践清单

  • 保持 SELinux 为 Enforcing,仅在排障时短时切到 Permissive;避免长期关闭或禁用。
  • 所有自定义路径与端口,优先用 semanage fcontext/port持久化配置,避免 chcon 的临时性。
  • 服务运行在专有域(如 httpd_t),避免长期停留在 unconfined_t
  • 最小权限为原则:能用布尔值解决的,不动策略模块;能用标准类型的,不写自定义域。
  • 持续审计与监控:定期查看 AVC 拒绝,使用 sealert 辅助分析,及时清理无效规则与异常访问。

0