温馨提示×

Ubuntu SELinux如何更新规则

小樊
50
2025-11-26 19:20:32
栏目: 智能运维

Ubuntu 上更新 SELinux 规则的实用步骤

前置说明

  • Ubuntu 默认不启用 SELinux,默认使用 AppArmor。如确需使用 SELinux,需先安装组件并启用;变更 SELINUX=disabled ↔ enforcing/permissive 通常需要重启系统。SELinux 有 Enforcing/Permissive/Disabled 三种模式,其中在 Permissive 下仅记录拒绝日志不阻断,便于排错。

更新策略的常用方式

  • 方式一 从拒绝日志自动生成并加载本地模块

    1. 确保审计服务运行并收集日志:sudo apt install auditd audispd-plugins
    2. 查看拒绝事件:sudo ausearch -m avc -ts recentgrep avc /var/log/audit/audit.log
    3. 生成可加载模块:sudo audit2allow -M mypol(生成 mypol.te/mypol.pp)。
    4. 加载模块:sudo semodule -i mypol.pp
    5. 验证与回看日志,确认不再出现同类 AVC 拒绝。
  • 方式二 使用 semanage 调整策略与上下文

    1. 端口标签(示例:放行 TCP 8080 为 http 端口)
      • 查看端口:semanage port -l | grep http_port_t
      • 添加端口:sudo semanage port -a -t http_port_t -p tcp 8080
    2. 文件上下文与重标记
      • 声明默认上下文:sudo semanage fcontext -a -t httpd_sys_content_t “/var/www/html(/.*)?”
      • 应用到现有文件:sudo restorecon -Rv /var/www/html
    3. 布尔值(示例:允许 httpd 访问用户主目录)
      • 永久生效:sudo setsebool -P httpd_enable_homedirs 1
        说明:semanagerestorecon 是维护策略与文件标签的常用组合,前者写入策略数据库,后者将默认标签应用到文件系统。
  • 方式三 编写并编译自定义策略模块(.te)

    1. 新建模块:mkdir -p /selinux-custom-policy && cd $!
    2. 编辑模块文件(示例 custom_policy.te):
      • 最小示例:
        policy_module(custom_policy, 1.0)
        require { type unconfined_t; class file { read write open }; }
        allow unconfined_t self:file { read write open };
        
    3. 编译并加载:
      • 使用开发 Makefile:make -f /usr/share/selinux/devel/Makefile 生成 custom_policy.pp,然后 sudo semodule -i custom_policy.pp
      • 或手工编译:checkmodule -M -m -o custom_policy.mod custom_policy.tesemodule_package -o custom_policy.pp -m custom_policy.mod,再 sudo semodule -i custom_policy.pp
    4. 使新上下文生效:sudo restorecon -Rv /path/to/app
      该方式适合对特定进程/路径进行精细化授权。

变更模式与生效范围

  • 临时切换:sudo setenforce 0|1(在 PermissiveEnforcing 间切换,立即生效;从/到 Disabled 需重启)。
  • 永久生效:编辑 /etc/selinux/configSELINUX= 字段为 enforcing/permissive/disabled,随后 sudo reboot
  • 排错建议:先在 Permissive 观察日志与行为,再切回 Enforcing

常见问题与建议

  • 工具可用性:若提示 semanage/audit2allow 不存在,安装 policycoreutils-python-utils 等工具包。
  • 策略冲突与最小化授权:优先用 audit2allow 生成最小必要规则,避免直接 setenforce 0 绕过问题。
  • 生产环境变更:先在测试环境验证,逐步加载模块并回看 ausearch -m avc,必要时回滚模块 sudo semodule -r mypol
  • 是否真的需要 SELinux:若仅为一般服务器加固,可考虑继续使用 AppArmor(Ubuntu 默认),其工具链为 aa-status/aa-enforce/aa-disable

0