温馨提示×

SELinux如何更新策略

小樊
40
2025-11-29 16:46:54
栏目: 智能运维

SELinux策略更新与定制指南

一、更新系统策略包

  • CentOS/RHEL 上,优先通过包管理器更新 SELinux 策略包,然后让新策略生效:
    • 检查当前状态:getenforcesestatus
    • 更新策略包:
      • CentOS 7:sudo yum update selinux-policy selinux-policy-targeted selinux-policy-default
      • CentOS 8+:sudo dnf update selinux-policy selinux-policy-targeted selinux-policy-default
    • 使新策略与文件上下文一致:sudo restorecon -Rv /
    • 如曾临时放宽策略,可恢复:sudo setenforce 1
    • 验证:sestatusgetenforce
    • 说明:多数场景下,更新策略包即可满足需求,无需单独升级内核或 SELinux 版本。

二、定制或修复被拒绝的操作

  • 当应用被 SELinux 拒绝时,基于审计日志生成最小权限模块并加载:
    • 查看拒绝日志:sudo ausearch -m avc -ts recentgrep AVC /var/log/audit/audit.log
    • 生成并安装模块:
      • 快速生成并安装:grep myapp /var/log/audit/audit.log | audit2allow -M myapp && sudo semodule -i myapp.pp
      • 仅生成规则预览:grep myapp /var/log/audit/audit.log | audit2allow
      • 若只是“噪音”拒绝,生成 dontaudit 规则:... | audit2allow -D -M myapp
    • 使文件上下文生效:sudo restorecon -Rv /path/to/app
    • 验证模块已加载:semodule -l | grep myapp
    • 风险提示:仅对确认安全的操作授予权限,避免过度放宽策略。

三、管理策略模块

  • 列出已加载模块:semodule -l
  • 禁用/启用模块(不卸载):sudo semodule -d <模块名>sudo semodule -e <模块名>
  • 临时切换运行模式用于排障:sudo setenforce 0(Permissive),恢复:sudo setenforce 1(Enforcing)
  • 永久模式在 /etc/selinux/configSELINUX= 项配置(enforcing/permissive/disabled),修改后需重启生效。

四、Ubuntu 注意事项

  • Ubuntu 默认使用 AppArmor,并非 SELinux。如确需启用 SELinux,需安装相关包并启用:
    • 安装:sudo apt update && sudo apt install selinux-basics selinux-policy-default auditd audispd-plugins
    • 启用:编辑 /etc/selinux/configSELINUX=disabled 改为 SELINUX=enforcingpermissive,然后 sudo reboot
    • 策略更新思路与 RHEL 系列一致(audit2allow、semodule、restorecon 等)
    • 注意:Ubuntu 对 SELinux 的支持不如 RHEL/CentOS 完备,生产环境需充分测试。

五、验证与回滚建议

  • 验证要点:
    • 策略生效:sestatusgetenforce
    • 模块加载:semodule -l | grep <关键词>
    • 上下文正确:restorecon -Rv <应用目录>;必要时用 ls -Z 检查
  • 回滚与排障:
    • 卸载自定义模块:sudo semodule -r <模块名>
    • 临时切到 Permissive 定位问题:sudo setenforce 0
    • 生产环境建议在维护窗口操作,先备份关键数据与现有策略模块,变更后逐步验证业务功能。

0