降权执行开关 - 强制以 shell 身份运行 root 环境下的命令
降权是什么
降权执行是 Runner 的一个安全功能:无论 Shizuku 服务是用 root 还是 adb 方式启动,开启降权开关后,Runner 执行的每一条命令都会被强制以 shell(uid=2000)身份运行,而不是继承服务进程的原始权限。
从界面上看就是 Runner 主界面左上的两个大字按钮——"降权"和"不降权",点一下切换。

为什么需要降权
有 root 权限时执行某些命令可能会造成不可逆的系统损坏:
- 误写
/system/分区文件,导致开机后某些系统组件崩溃 - 修改 SELinux 策略导致安全上下文错乱
- 错误的
chmod 777 /system让整个系统分区权限全开 - 删除了不该删的系统进程(比如
init、zygote)
如果你不确定某条命令会做什么、或者是从网上复制来的、或者是在测试阶段,开降权是最稳妥的做法——shell 权限下很多危险操作会直接被 SELinux 拒绝,而不是默默执行。
降权能挡什么
会被挡的(因为 shell 没权限):
- 写入
/system/、/vendor/、/product/等系统分区 - 修改 SELinux 策略
- 修改只读系统属性(
ro.*) - 执行
su命令切换 root - 某些需要 root 权限的 Magisk 模块操作
不会被挡的(shell 权限够):
- 冻结/解冻/卸载用户应用
- 读写
/sdcard/和应用专属目录 - 进程查询和强制停止
- 网络诊断(ping、curl)
- 前台 Activity 查询
- 大多数
dumpsys和getprop查询
什么时候开降权
建议开启:
- 日常操作:冻结、解冻、卸载、查询信息、清理缓存——shell 权限全覆盖
- 测试新命令:不确定效果的命令先用降权跑一次看看输出
- 分享 Runner 给家人/朋友用:默认开降权,防止他们误操作
- 执行从网上复制来的脚本:先降权跑、确认安全了再关
建议关闭:
- 明确需要 root 权限的系统级操作:修改 build.prop、操作 Magisk、重装系统分区
- 写脚本时测试 root 环境下的真实行为
- 你对自己在做什么完全清楚
验证降权是否生效
执行任意命令后看弹窗:
uid=2000(shell)→ 降权已生效 ✓uid=0(root)→ 降权未生效(或 Shizuku 本身就是 adb 启动的,本来就是 shell)
在 root 设备上特别有用——不开降权时 Runner 会显示 root 权限,开了之后应该变成 shell 权限。
实现原理
Runner 的降权功能引入了一个 native 库 libchid.so,在执行命令前动态调整进程的 uid/gid。实现上比简单的 su -c '...' 更可控——su 切换 root 是单向的(shell → root),降权是反过来的(root → shell),需要底层 API 支持。
这个库文件也是 Runner 体积从 2KB 级涨到 80KB 级的原因。