
《KernelSU权限管理终极指南:一份2万字的“字典级”配置手册》——第一部分
「玩机圈的终极痛点:Root权限的‘双刃剑’之困,谁来解?」

在如今的安卓玩机圈,“Root”依然是解锁设备潜能、实现「高度自定义」的终极钥匙。但传统Root方案却像一把“双刃剑”:要么“全有或全无”——一旦授权Root,应用便手握系统生杀大权,安全性堪忧;要么权限分配粗糙,想实现精细控制却无从下手。更头疼的是,当玩机用户们试图通过自定义权限模板(如MT管理器的专属配置)突破限制时,往往会陷入「看不懂的UID/GID、抓狂的SELinux报错、复杂的Capabilities配置」的泥潭——看似强大的自定义能力,却因技术门槛过高,成了普通用户的“噩梦”。
今天,我们不再绕圈子!这篇教程将带你从Linux内核的底层逻辑出发,彻底吃透这款管理器的分权操作:
为什么它能将服务器级的安全模型下放到手机?
为什么说它的设计真正打破了“Root即全能”的魔咒?
如何用自定义配置,实现“够用且安全”的黄金平衡?
那么接下来就按照自定义模板的内容,逐条解析。

一、名字
模板的名称主要用于方便个人识别与管理。
命名建议:避免使用无意义的纯数字,推荐采用具有实际含义的英文命名,如 partial_shell 、 full_root 、 read_only_system 等,以便于未来的复用与区分。
二、 模版 ID
模板 ID 是系统识别模板的唯一标识,格式错误会导致系统提示「模版 ID 不合法」。
格式要求:必须为小写字母、数字和下划线的组合,严禁使用中文或空格。
唯一性:该 ID 必须全局唯一。
合法示例: template_shell 、 tmp_root 。
三、作者 / 描述
这两个字段为可选项,但建议规范填写。
填写建议:在「描述」中清晰写明该模板的具体用途,例如:“仅授予 shell 权限,用于 ADB 降级场景”。这有助于在模板较多时快速定位。
四、UID / GID 权限配置
在 Linux 和 Android 系统里,权限控制分为两道防线:第一道是 DAC(基于 UID/GID 的身份与组控制),第二道是 MAC(基于 SELinux 的强制策略)。系统会综合检查进程的 UID、GID 以及 SELinux 上下文,来决定它能不能读写文件、访问硬件。
4.1 UID(用户标识:决定“你是谁”)
UID 决定了进程的基础身份层级。以下是 Android 系统中常用的 UID 及其权限说明:
UID 数值与身份标识对照表
1. UID = 0(root)
* 身份标识:root
* 权限层级:最高权限
* 典型用途与说明:不受 DAC 限制,适用于系统内核、关键服务及 Root 工具。(注:仍受 SELinux 限制)
2. UID = 1000(system)
* 身份标识:system
* 权限层级:系统服务级
* 典型用途与说明:适用于系统核心服务(如 system_server),拥有极高的系统资源访问权。
3. UID = 1001-1999(系统保留)
* 身份标识:系统保留
* 权限层级:系统组件级
* 典型用途与说明:专供电话、蓝牙、日志等系统底层组件使用(如 radio:1001, log:1007)。自定义模板严禁使用此区间。
4. UID = 2000(shell)
* 身份标识:shell
* 权限层级:调试级
* 典型用途与说明:ADB 调试默认身份,拥有中等权限,可执行大部分非破坏性系统命令。
5. UID = 10000+(普通 App)
* 身份标识:普通 App
* 权限层级:沙箱级
* 典型用途与说明:第三方应用(如微信、酷安)默认运行区间。每个 App 拥有独立的 UID,受沙箱严格隔离,权限最低。
6. UID = 99000+(隔离进程)
* 身份标识:隔离进程
* 权限层级:极度受限
* 典型用途与说明:隔离沙箱进程(Isolated Process),用于运行极不信任的代码,几乎没有任何系统访问权。
4.2 GID(用户组标识:决定“你能碰什么资源”)
GID 决定了进程所属的工作组。对于非 root 进程,GID 是控制特定硬件或资源访问权限的精确开关。
Android GID(组 ID)数值与权限对照表
1. GID = 0 (root)
* 组名称:root
* 典型用途与说明:最高权限组,可绕过所有 DAC(自主访问控制)权限检查。拥有此组通常意味着对文件系统的完全读写权。
2. GID = 1000 (system)
* 组名称:system
* 典型用途与说明:系统组,拥有系统级资源访问权限。这是 Android 核心服务运行的基础身份。
3. GID = 1001 (radio)
* 组名称:radio
* 典型用途与说明:电话/基带组,用于管理电话、短信及网络信号相关硬件。涉及通信功能的进程通常需要此组。
4. GID = 1007 (log)
* 组名称:log
* 典型用途与说明:日志组,允许读取系统底层日志(logcat)。调试工具或需要抓取系统日志的应用需要此权限。
5. GID = 1015 (sdcard_rw)
* 组名称:sdcard_rw
* 典型用途与说明:外部存储读写组,用于读写 /sdcard 等外部共享存储。这是应用访问手机内部存储空间(如下载目录、DCIM)的关键权限。
6. GID = 1023 (media_rw)
* 组名称:media_rw
* 典型用途与说明:内部媒体读写组,用于访问内部存储的底层媒体文件。通常由媒体服务器或文件管理器使用。
7. GID = 2000 (shell)
* 组名称:shell
* 典型用途与说明:ADB/Shell 组,通过 adb shell 进入时使用的默认组。拥有执行大部分系统命令的能力。
8. GID = 3003 (inet)
* 组名称:inet
* 典型用途与说明:互联网组,关键配置:拥有此 GID 才能正常使用 Wi-Fi 或蜂窝网络进行数据通信。如果没有这个组,程序将无法联网。
9. GID = 3004 (net_bt)
* 组名称:net_bt
* 典型用途与说明:蓝牙组,允许控制蓝牙硬件。
10. GID = 3005 (net_bt_admin)
* 组名称:net_bt_admin
* 典型用途与说明:蓝牙管理组,权限更高,可修改蓝牙底层配置。
11. GID = 9997 (everybody)
* 组名称:everybody
* 典型用途与说明:所有人组,用于让所有应用都能访问某些特定的公共文件或目录。这是一个为了兼容性而存在的广泛权限组。
4.3 UID 与 GID 的协同与限制机制
* 当 UID = 0 时:在传统的 Linux 权限(DAC)层面,进程权限拉满,GID 形同虚设。但是,在 Android 中,如果 KernelSU 的 App Profile 中没有为其配置宽松的 SELinux 上下文(Domain),UID 0 依然会被 SELinux 拦截(例如无法访问 /data 目录)。
* 当 UID ≠ 0 时(如 UID=1000/2000 或 10000+):GID 成为决定进程能否访问特定硬件或资源的绝对开关。例如,一个降级为 shell (UID 2000) 的防火墙应用,必须被赋予 inet (GID 3003) 才能联网,赋予 net_bt_admin (GID 3005) 才能管理蓝牙。
……………………