温馨提示×

Ubuntu SELinux如何支持新应用

小樊
32
2025-12-26 07:00:49
栏目: 智能运维

Ubuntu 上让 SELinux 支持新应用的实操流程

前置说明

  • Ubuntu 默认启用的是 AppArmor,并非 SELinux。若要在 Ubuntu 上使用 SELinux,需要额外安装与启用,且社区与生态的“即插即用”支持相对有限;在需要完善的 SELinux 策略与工具链时,很多场景会优先选择 RHEL/CentOS/Fedora。如确需启用,请评估维护成本与兼容性。

启用与基础配置

  • 安装组件与激活
    • 安装工具与策略:sudo apt install selinux-basics selinux-policy-default auditd audispd-plugins setools selinux-policy-dev
    • 激活 SELinux:sudo selinux-activate
  • 配置为宽容模式并重启
    • 编辑 /etc/selinux/config:设置 SELINUX=permissive(首次上线建议宽容以收集拒绝日志)
    • 重启系统:sudo reboot
  • 常用检查
    • 查看状态:getenforcesestatus
    • 查看拒绝日志:sudo ausearch -m avc -ts recentsudo cat /var/log/audit/audit.log | grep avc
  • 说明
    • 宽容模式会记录违规但不阻断,便于策略迭代;确认无误后再切回 enforcing

为新应用接入 SELinux 的标准流程

  1. 识别与标签
    • 确认应用可执行文件路径,查看当前上下文:ls -lZ /path/to/app
    • 为可执行文件设置专用执行类型(示例类型名:myapp_exec_t):
      • 临时:sudo chcon -t myapp_exec_t /path/to/app
      • 持久:sudo semanage fcontext -a -t myapp_exec_t “/path/to/app” && sudo restorecon -v /path/to/app
  2. 定义策略模块
    • 新建策略文件 myapp.te(示例):
      • 声明模块与类型:
        • policy_module(myapp, 1.0)
        • type myapp_t; type myapp_exec_t;
      • 可执行文件入口与域迁移:
        • init_daemon_domain(myapp_t, myapp_exec_t)
      • 按需补充最小权限(示例:允许读家目录内容)
        • allow myapp_t user_home_t:dir search;
        • allow myapp_t user_home_t:file { read getattr open };
  3. 编译与加载
    • 使用开发 Makefile 编译并安装:
      • make -f /usr/share/selinux/devel/Makefile
      • sudo semodule -i myapp.pp
  4. 验证与回归
    • 重启应用,观察 AVC 拒绝;必要时在 permissive 下继续收集并迭代策略,直至无拒绝后再切 enforcing
  5. 常见扩展
    • 端口类型:如应用监听 8080/tcp,可加入 http_port_tsudo semanage port -a -t http_port_t -p tcp 8080
    • 布尔开关:如允许某服务发起 DB 连接:sudo setsebool -P httpd_can_network_connect_db 1
    • 文件/目录标签:对数据目录设置专用类型并 restorecon,确保运行时标签正确。

排错与临时权衡

  • 快速定位
    • 查看最近拒绝:ausearch -m avc -ts recent
    • 按进程查标签:ps -Z -C
    • 按路径查标签:ls -lZ
  • 临时放行(不建议长期使用)
    • 将应用域设为宽容:sudo semanage permissive -a <myapp_t>
    • 或将可执行文件改为 unconfined_t(几乎绕过 SELinux):sudo chcon -t unconfined_t /path/to/app(持久化可用 semanage fcontext + restorecon)。上述做法会降低安全性,仅用于应急与问题定位。

实用建议

  • 上线顺序建议:安装与激活 → permissive 收集日志 → 定制最小权限策略 → 回归测试 → enforcing 运行 → 持续审计
  • 若遇到复杂依赖或频繁策略冲突,评估是否改用 RHEL/CentOS/Fedora 等 SELinux 生态更完善的发行版,以降低维护成本。

0