温馨提示×

SELinux规则如何在Ubuntu中修改

小樊
31
2025-12-08 13:50:47
栏目: 智能运维

Ubuntu 中修改 SELinux 规则的实用步骤

前置说明

  • Ubuntu 默认不启用 SELinux,默认使用 AppArmor。如确需使用 SELinux,需要手动安装组件、启用并维护策略。变更前建议备份关键数据与配置,并在测试环境验证。

一 启用与初始化 SELinux

  • 安装必要组件与审计服务:sudo apt update && sudo apt install selinux-basics selinux-policy-default auditd audispd-plugins
  • 启用 SELinux 并做首次标记:sudo selinux-activate;必要时创建 /.autorelabel 并重启,以触发文件系统重新打标。
  • 持久化模式:编辑 /etc/selinux/config,将 SELINUX=permissive(先宽容便于排错)或 SELINUX=enforcing;临时切换可用 setenforce 0/1
  • 验证状态:执行 sestatus,应看到 enabled、当前模式与策略名称。

二 常用规则修改方式

  • 文件与目录上下文(fcontext)
    • 查看现有规则:semanage fcontext -l
    • 添加规则:sudo semanage fcontext -a -t httpd_sys_content_t “/var/www/html(/.*)?”
    • 应用变更:sudo restorecon -Rv /var/www/html
  • 端口标签
    • 添加端口类型:sudo semanage port -a -t http_port_t -p tcp 8080
  • 布尔值开关
    • 持久开启布尔:sudo setsebool -P httpd_enable_homedirs 1
  • 说明:若提示 semanage 未安装,可补充安装 policycoreutils 等工具包。

三 自定义策略模块 Te 文件示例

  • 场景:允许自定义程序 /usr/local/bin/my_app 读写 /data/myapp(示例类型名仅用于演示)。
  • 创建模块目录与文件:mkdir -p /selinux-custom-policy && cd $_; nano myapp.te
  • 模块内容(.te):
    policy_module(myapp, 1.0)
    
    require {
        type unconfined_t;
        class file { read write open };
    }
    
    type myapp_t;
    type myapp_exec_t;
    
    # 将可执行文件标记为 myapp_exec_t
    files_type(myapp_exec_t)
    
    # 允许从 unconfined_t 域执行后转入 myapp_t
    domain_auto_trans(unconfined_t, myapp_exec_t, myapp_t)
    
    # 允许 myapp_t 对目标目录及文件读写
    allow myapp_t myapp_t:file { read write open };
    allow myapp_t myapp_t:dir { read write search add_name remove_name };
    
  • 编译与加载:
    • 编译安装:make -f /usr/share/selinux/devel/Makefile;sudo semodule -i myapp.pp
    • 打标并生效:sudo semanage fcontext -a -t myapp_t “/data/myapp(/.*)?” && sudo restorecon -Rv /data/myapp
    • 运行程序测试,验证是否仍有拒绝。

四 排错与回退

  • 查看拒绝事件:sudo ausearch -m avc -ts recent;生成报表:sudo aureport -m avc
  • 从拒绝日志生成模块:grep avc /var/log/audit/audit.log | audit2allow -M mypol;加载:sudo semodule -i mypol.pp
  • 临时回退排错:sudo setenforce 0(宽容模式);确认无误后再切回 setenforce 1
  • 彻底关闭(不推荐):编辑 /etc/selinux/configSELINUX=disabled 并重启。

0