shell 与 root 权限区别 - Runner 里的权限等级怎么选
两种权限来源
Shizuku 服务进程的身份取决于它怎么被启动的,这直接决定了 Runner 能拿到什么权限:
| 启动方式 | 进程身份 | 权限范围 | 适合场景 |
|---|---|---|---|
| adb 配对启动 | shell(uid=2000) | adb shell 级别,能访问大多数系统目录但碰不到 SELinux 策略和受保护的系统分区 | 大多数日常操作 |
| root 启动 | root(uid=0) | 完整 root 权限,能读写所有系统分区、执行任何命令 | 需要修改系统级文件或 SELinux 策略 |
怎么判断当前权限
在 Runner 主界面执行任意命令后,弹窗里会显示:
uid=2000(shell) gid=2000(shell)→ 当前是 shell 权限uid=0(root) gid=0(root)→ 当前是 root 权限
还可以在 Runner 主界面顶部状态条看"SHIZUKU 已运行"旁边的权限提示(部分版本有)。
shell 权限能做什么
shell 权限能覆盖大多数日常需求:
- 冻结/解冻应用(pm disable-user)
- 卸载用户应用(pm uninstall)
- 查看进程列表(ps)
- 读写 /sdcard 和大多数非系统分区
- 查询已安装应用信息
shell 权限做不到的:
- 写入 /system、/vendor、/product 等系统分区
- 修改 SELinux 策略
- 操作受 dm-verity 保护的分区
root 权限能做什么
root 权限在 shell 权限的基础上增加:
- 读写 /system、/vendor 等系统分区
- 修改 SELinux 策略(setenforce、magiskpolicy)
- 修改系统属性(ro.build.* 等只读属性除外)
- 安装/移除 Magisk 模块
- 修改 build.prop
但 root 权限也不是万能的——Android 10+ 引入的动态分区和 dm-verity 保护的分区(如 super.img 的只读 slot),即使 root 也无法直接修改。
降权执行开关
Runner 界面上有一个"降权"开关,它的作用是:
- 开启降权:无论 Shizuku 是以 root 还是 adb 方式启动,Runner 都强制以 shell 身份执行命令
- 关闭降权:Runner 使用 Shizuku 服务进程的原始权限

什么时候该降权
安全优先的场景下,建议开启降权:
- 执行第三方脚本或从网上复制的命令——你不确定它们会不会偷偷写 /system
- 日常冻结/卸载等操作,shell 权限已经够用
- 分享 Runner 给其他人使用,不希望他们拿到 root 级别的操作能力
什么时候不要降权:
- 明确需要 root 权限的操作(比如修改 /system/build.prop、操作 Magisk)
- 你在调试系统级问题,需要完整的 root 视角
实际案例
以下场景需要不同权限等级:
冻结一个普通应用(如微博) → shell 权限就够:
pm disable-user --user 0 com.sina.weibo
修改系统分区文件 → 必须 root 权限,且不能降权:
mount -o rw,remount /system
echo 'ro.build.display.id=MyROM' >> /system/build.prop
查看所有正在运行的进程 → shell 权限够:
ps -A
修改 SELinux 策略 → 必须 root 权限:
magiskpolicy --live "allow shell system_file dir { read search }"