App Profile 怎么用——把 root 权力关进笼子的最小权限实践
App Profile 是什么
App Profile 是 KernelSU 提供的按应用自定义权限配置的机制,分两组场景:
- 对已授权 root 的应用:也叫 Root Profile,自定义其 su 的 uid、gid、补充组、capabilities 与 SELinux 规则,从而限制 root 权限。比如给防火墙应用只开网络权限、不给文件权限;给冻结类应用只给 shell 权限、不给完整 root;
- 对未授权的普通应用:控制内核与模块系统对该应用的行为,典型是「卸载模块」——决定是否对它隐藏模块造成的修改。
核心思想是最小权限原则:root 不是开/关的二元状态,而是可以逐项裁剪的连续光谱。
典型配置场景
| 应用类型 | 建议配置 |
|---|---|
| 防火墙类 | 保留网络相关组,去掉文件写入能力 |
| 冻结 / 卸载器 | UID 降为 2000(shell 级),不给 root |
| 抓包 / 调试工具 | 保留文件与网络,收紧 SELinux 域 |
| 银行、敏感应用 | 不授权 root,并开启「卸载模块」隐藏痕迹 |
Root Profile 强制生效
与应用通过 su 主动切换用户不同,Root Profile 在内核中强制实施:应用就算在脚本里自己 su 再切一次,也跳不出配置的权限范围。su 权限的授予完全取决于用户而非开发者。
Non Root Profile 与卸载模块
管理器设置里有「默认卸载模块」开关(默认开启):对未做额外设置的普通应用,内核或模块会对其执行卸载动作。白名单 / 黑名单两种玩法见 卸载模块开关与白名单黑名单。
配置不当会怎样
权限配置不合理可能出现「逃逸」——限制意外失效,比如把某应用的 root profile UID 设成了 2000,而 2000(adb shell)又被允许 root,它就能连坐两次 su 拿到完整 root。防范手段(NO_NEW_PRIVS 标志)详见 SELinux 域与逃逸防范。