命令白名单机制——哪些操作 KsuWebUI 允许执行
为什么需要白名单
KsuWebUI 通过 JavaScript API 与系统交互——其中最强大的能力是执行任意 shell 命令。如果不加限制,恶意模块或有漏洞的 Web 页面可以利用这个接口执行危险操作(删除系统文件、窃取数据等)。
命令白名单就是在这个层面加的安全防线——只有白名单里的命令 KsuWebUI 才允许执行,其他一律拒绝。
白名单的工作原理
当 KsuWebUI 的 JavaScript 代码请求执行 shell 命令时:
- KsuWebUI 检查命令是否在白名单中
- 如果在 → 执行并返回结果
- 如果不在 → 拒绝并返回错误
这个检查发生在命令真正执行之前,即使命令里有 rm -rf 这样的危险操作也会被拦下。
常见在白名单中的命令
KsuWebUI 自身管理功能需要的命令通常包括:
- 模块启停:操作
/data/adb/modules/下的文件 - 参数读取:读取
/sys/下的内核接口 - 参数修改:向
/sys/接口写入新值 - 日志读取:
logcat、dmesg、cat日志文件 - 进程管理:
ps、kill、am force-stop
不在白名单中的命令
以下类型的命令通常被禁止:
- 网络操作:
curl、wget(KsuWebUI 本身不应该对外发请求) - 文件删除:任意
rm -rf(只有模块卸载脚本里的删除才被允许) - 用户管理:
useradd、passwd - 敏感文件读取:
cat /data/system/*.xml等 - 动态链接器操作:
dlopen、dlerror
开发者注意
如果你在为 KsuWebUI 或模块的 WebUI 写 JavaScript,遇到命令被拒绝:
- 检查你用的命令是不是确实必要
- 看能不能换成白名单里已有的等价操作
- 实在需要特殊命令时,通过模块的
service.sh来执行(不受 KsuWebUI 白名单限制)
白名单 vs 框架级安全
KsuWebUI 的白名单是额外的保护层,不替代底层 root 框架的安全机制:
- root 框架(KernelSU / Magisk / APatch)负责谁能获得 root 权限
- KsuWebUI 的白名单负责获得权限后 KsuWebUI 自己能做什么
两层都有效才能保证安全。
检查当前白名单
某些版本的 KsuWebUI 可能允许你在设置中查看当前的命令白名单。如果没有这个功能,白名单是硬编码在 KsuWebUI 中的,不能由用户修改。