温馨提示×

SELinux在Ubuntu中如何定制

小樊
33
2025-12-08 13:58:48
栏目: 智能运维

Ubuntu 中定制 SELinux 的可操作步骤

一 前置说明与准备

  • Ubuntu 默认启用的是 AppArmor,如确需使用 SELinux,需先安装并启用相关组件,再按需定制策略。启用前建议备份关键数据与现有安全配置。生产环境不建议长期停留在宽容模式。为获得完整工具链与审计支持,建议安装:selinux-basics、selinux-policy-default、selinux-utils、auditd、audispd-plugins、policycoreutils。启用后可用 sestatus、getenforce 查看状态。

二 启用与基础配置

  • 安装组件
    • 执行:sudo apt update && sudo apt install selinux-basics selinux-policy-default selinux-utils auditd audispd-plugins policycoreutils
  • 切换为宽容模式并重启
    • 编辑 /etc/selinux/config,将 SELINUX=permissive(首次定制建议宽容以收集拒绝日志,再切回强制)。
    • 执行:sudo reboot
  • 验证与临时切换
    • 查看:getenforcesestatus
    • 临时切换:sudo setenforce 1(强制)或 sudo setenforce 0(宽容)
  • 原则:定制阶段先用宽容模式收集 AVC 拒绝日志,规则验证无误后再切回强制模式

三 定制策略的三种常用方式

  • 方式 A 使用 audit2allow 从拒绝日志快速生成模块
    • 收集并生成模块:sudo ausearch -m avc -ts recent | audit2allow -M mypol
    • 加载模块:sudo semodule -i mypol.pp
    • 适用:快速修复常见权限不足,作为最小可行补丁。
  • 方式 B 使用 Makefile 构建自定义模块(.te 源文件)
    • 创建目录与源文件:mkdir -p ~/selinux-custom && cd ~/selinux-custom && nano custom_policy.te
    • 示例(演示用,按需改写):
      policy_module(custom_policy, 1.0)
      require {
        type httpd_t;
        class file { read write open };
      }
      allow httpd_t httpd_sys_content_t:file { read write open };
      
    • 编译并安装:make -f /usr/share/selinux/devel/Makefile 生成 custom_policy.pp,然后 sudo semodule -i custom_policy.pp
    • 适用:需要更可控、可维护的策略模块。
  • 方式 C 调整文件上下文与端口标签(需 semanage)
    • 文件上下文:sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/myapp(/.*)?" && sudo restorecon -Rv /var/www/myapp
    • 端口标签:sudo semanage port -a -t http_port_t -p tcp 8080
    • 适用:目录/文件类型或端口类型不匹配导致的访问问题。

四 验证与排错

  • 实时监控拒绝事件:sudo ausearch -m avc -ts recent
  • 解释拒绝原因:sudo ausearch -m avc -ts recent | audit2why
  • 查看整体状态:sestatusgetenforce
  • 策略生效验证:确认目标进程不再产生同类 AVC 拒绝,且功能按预期运行;必要时回到宽容模式复核日志与规则。

五 维护与最佳实践

  • 模式管理:定制与回归测试期间使用 permissive,验证通过后改为 enforcing;避免直接长期禁用。
  • 策略演进:新增服务或变更路径时,优先用 audit2allow 生成草案,再人工审阅并收敛为最小权限的 .te 模块,用 semodule -i 加载。
  • 上下文与端口:对新增目录/文件使用 semanage fcontextrestorecon;对自定义服务端口使用 semanage port 打上正确类型。
  • 变更控制:为策略模块与关键配置建立变更记录与回滚方案(如保存 .te/.pp 与变更说明),在测试环境充分验证后再上线。

0