You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SELinux/AppArmor实现仅允许指定应用程序运行?

如何通过SELinux/AppArmor实现仅允许指定应用程序运行?

当然可以用SELinux或者AppArmor实现这种「仅允许指定应用运行」的白名单管控,我给你分别拆解下两种工具的具体实现思路和实操步骤,都是生产环境里验证过的方案:

一、用SELinux实现白名单管控

SELinux是基于安全上下文的强制访问控制系统,要做白名单的核心思路是:只给你允许的应用分配合法的执行权限和安全域,其他未授权的程序默认被拒绝执行。

  1. 先确保SELinux处于强制模式
    用sestatus命令检查当前状态,如果显示SELinux status: enabled且Current mode: enforcing就没问题。如果不是,修改/etc/selinux/config文件,把SELINUX=enforcing,然后重启系统生效(注意:重启前一定要确认系统基础服务能适配SELinux,避免开机异常)。

  2. 为允许的应用创建自定义安全上下文
    比如你要允许/usr/bin/myapp运行,先给它标记专属的执行类型:

    semanage fcontext -a -t myapp_exec_t "/usr/bin/myapp"
    restorecon -v /usr/bin/myapp
    

    这条命令会把myapp的文件类型设置为myapp_exec_t,后续策略会基于这个类型做管控。

  3. 编写并加载自定义SELinux策略模块
    创建一个myapp.te文件,内容如下(基础版,你可以根据应用实际需求扩展权限):

    module myapp 1.0;
    
    require {
        type unconfined_t;
        type myapp_exec_t;
        class file execute;
        class process transition;
    }
    
    # 允许用户域执行myapp的文件
    allow unconfined_t myapp_exec_t:file execute;
    # 执行时切换到myapp专属的域
    type_transition unconfined_t myapp_exec_t:process myapp_t;
    

    然后编译、打包、加载这个模块:

    checkmodule -M -m -o myapp.mod myapp.te
    semodule_package -o myapp.pp -m myapp.mod
    semodule -i myapp.pp
    
  4. 收紧全局执行权限
    最后要禁止未授权的执行行为,比如关闭普通用户执行未标记文件的权限:

    setsebool -P user_exec_content off
    

    这一步要谨慎测试,确保系统必要的工具(比如bash、ls这些)不会被误拦截。

二、用AppArmor实现白名单管控

AppArmor是基于路径的强制访问控制系统,配置起来比SELinux更直观,适合快速搭建白名单规则。

  1. 确保AppArmor服务正常运行
    启动并设置开机自启:

    systemctl start apparmor
    systemctl enable apparmor
    
  2. 为允许的应用生成专属Profile
    用AppArmor自带的工具生成基础规则,比如给/usr/bin/myapp生成Profile:

    aa-genprof /usr/bin/myapp
    

    执行这条命令后,工具会提示你运行myapp,它会自动记录应用需要的权限(比如访问哪些文件、网络操作等),生成的Profile文件会保存在/etc/apparmor.d/usr.bin.myapp。

  3. 优化Profile并启用
    打开生成的Profile文件,去掉不必要的权限规则,只保留myapp运行必需的内容,确保规则尽可能严格。然后启用这个Profile:

    aa-enforce /etc/apparmor.d/usr.bin.myapp
    
  4. 设置全局默认拒绝策略
    创建一个默认的拒绝Profile/etc/apparmor.d/default,内容如下(可以根据需要调整,比如允许系统核心工具运行):

    profile default {
      # 拒绝所有未被授权的二进制执行
      deny /bin/** px,
      deny /sbin/** px,
      deny /usr/bin/** px,
      deny /usr/sbin/** px,
      # 如果有需要允许的基础工具,可以单独写允许规则,比如:
      # allow /bin/bash px,
    }
    

    加载这个默认Profile:

    apparmor_parser -r /etc/apparmor.d/default
    

关键注意事项

  • 无论用哪种工具,一定要先在测试环境验证,避免误拦截系统核心服务导致系统无法正常使用;
  • 对于脚本或者动态生成的程序,要额外处理:比如允许Python脚本运行的话,要确保Python解释器被授权,或者在Profile中明确允许脚本的路径;
  • 系统更新或应用版本变更后,要同步审查并更新策略,避免权限过期导致应用无法运行。

备注:内容来源于stack exchange,提问作者Zvi Vered

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 16:04:32