☰
10个你可能不知道的KernelSU隐藏功能:.ksurc、ADB Root与内核umount实用技巧
2026/11/5 1:46:36 网站建设 项目流程

【免费下载链接】KernelSU

Personal fork of KernelSU Project

项目地址:https://gitcode.com/gh_mirrors/kern/KernelSU
点击查看免费下载

KernelSU 是一款运行在内核层的 Android Root 框架,除了常见的提权和模块管理,它还藏着不少实用功能。本文将带你一次性掌握 KernelSU 隐藏功能清单:从.ksurc自定义 Shell 启动文件,到 ADB Root 直连 root,再到内核级 umount 按应用卸载模块,共 10 个新手容易忽略的实用技巧,全部基于源码与官方文档整理,读完即可上手。


功能一:.ksurc —— 给 su 换一份"启动脚本" 📄

默认情况下,/system/bin/sh加载的是/system/etc/mkshrc。而 KernelSU 允许你创建/data/adb/ksu/.ksurc文件,让su启动时优先加载这份自定义 rc 文件,而不是系统的mkshrc。

实用场景:

  • 在.ksurc中写入alias别名、环境变量,每次su或 ADB shell 都自动生效
  • 配合 ADB Root(见功能二)使用,adb shell也会读取.ksurc

使用方法:用任意具有 root 权限的方式创建文件即可:

echo 'export PS1="ksu# "' > /data/adb/ksu/.ksurc

内核侧在 ADB Root 时通过检查该文件是否存在,把ENV=/data/adb/ksu/.ksurc注入 shell 环境,相关逻辑可参考 adbroot.cc。官方说明见 hidden-features.md。


功能二:ADB Root —— 一条命令拿到 root 的 ADB 🔌

普通 Android 设备执行adb root往往失败,KernelSU 提供了内核级 ADB Root:当adbd进程启动时,内核钩子拦截execve,通过LD_PRELOAD注入libadbroot.so,让 ADB 守护进程直接以 root 权限运行,甚至无需手动执行adb root或setprop。

使用方法(开启功能):

ksud feature set adb_root 1

要点提醒:

  • 需要设备已执行过ksud install,确保/data/adb/ksu/lib/libadbroot.so存在,否则会跳过并打印libadbroot.so not exists日志
  • 开启后,adb shell即是 root shell,同时会自动追加/data/adb/ksu/bin到PATH,直接可用ksud等命令
  • 源码位于 adb_root.c,注入逻辑在 adbroot.cc

⚠️ 注意:ADB Root 仅建议在可信电脑连接时使用,公网连接风险极高。


功能三:内核 umount —— 按应用自动卸载模块 🛡️

这是 KernelSU 最核心的安全特性之一:当目标应用(未授权 root、在黑名单中的应用)从 zygote 派生时,内核会自动卸载模块挂载点,让该应用"看不到"模块的修改。

它如何工作:

  1. zygote 向应用 UID 切换身份时,内核钩子ksu_handle_umount被触发
  2. 若新 UID 属于普通应用或隔离进程,且未被授予 root,内核遍历挂载列表逐个umount
  3. 还会校验父进程 SELinux 上下文是否为 zygote,防止误伤非 zygote 子进程(那会是一次灾难)

相关操作:

ksud feature get kernel_umount # 查看开关 ksud feature set kernel_umount 1 # 启用(默认开启)
  • 5.10 以下内核需要 backportpath_umount才能生效,方法见 how-to-integrate-for-non-gki.md
  • 按应用精细控制:在应用的 Profile 中开启 "Umount modules",内核侧通过 supercall.h 中的ksu_uid_should_umount_cmd判断
  • 源码:kernel_umount.c

功能四:SU Compat 模式 —— 兼容传统 su 命令的调用 🤝

很多第三方 App(或脚本)习惯直接调用/system/bin/su。KernelSU 的su_compat功能在内核层做"魔法重定向":

  • 已授权的应用执行/system/bin/su时,实际会被重定向到/data/adb/ksud,直接获得 root
  • 未授权的应用调用时,重定向到/system/bin/sh,表现为"su 不存在"
ksud feature get su_compat ksud feature set su_compat 1

这让你无需为每个 App 单独配置授权,传统脚本生态无缝可用。实现细节见 sucompat.c。


功能五:SULog —— 内核级 root 行为审计日志 📜

想知道"谁在什么时间以什么身份执行了 su"?KernelSU 的 SULog 把内核中捕获的 root 行为事件流式输出到用户空间,由sulogd守护进程持久化到磁盘。

特性亮点:

  • 日志默认保留 3 天,单文件上限 10MB,可通过模块配置调整
  • 在管理器 App 的 SULog 界面中可按应用查看每次 su 请求的详细命令
  • 开启后ksud会自动确保sulogd在运行
ksud feature set sulog 1

相关实现:sulog.rs、内核侧事件队列 event_queue.c。


功能六:ksud feature —— 内核功能的开关与持久化 ⚙️

ksud feature是管理上述所有内核功能(su_compat、kernel_umount、sulog、adb_root)的统一入口,支持读写、列表、状态检查与配置持久化:

ksud feature list # 查看所有功能及状态 ksud feature get adb_root # 查询当前值 ksud feature set adb_root 0 # 关闭功能 ksud feature check kernel_umount # 检查是否被模块接管 ksud feature save # 保存当前状态到配置文件 ksud feature load # 从配置文件恢复应用

保存的状态以二进制格式写入/data/adb/ksu/.feature_config(魔数0x7f4b5355),重启后由ksud自动加载,意味着你一次配置、永久生效。命令定义见 cli.rs,实现见 feature.rs。


功能七:模块配置系统 —— 持久化 + 临时键值存储 💾

KernelSU 内置了模块配置系统,配置以二进制格式存储在/data/adb/ksu/module_configs/<module_id>/,分两种:

类型文件生命周期
持久配置persist.config重启保留,卸载模块时删除
临时配置tmp.config每次开机 post-fs-data 阶段自动清除
ksud module config set my_setting "some value" ksud module config set --temp runtime_state "active" ksud module config list ksud module config delete my_setting

限制:键最多 256 字节、值最多 1MB、每模块最多 32 项,同键读取时临时值优先。完整文档见 module-config.md。


功能八:manage.feature —— 让模块"接管"内核功能 🔗

模块可以通过配置键声明"我管理某个内核功能",例如:

ksud module config set manage.su_compat true ksud module config set manage.kernel_umount false

一旦声明:

  • 该功能的值由模块控制,其他模块或用户直接ksud feature set会被拒绝(提示Feature is managed by module(s))
  • 模块列表 API 会以managedFeatures字段暴露接管关系,管理器可展示冲突,避免多个模块争抢同一功能
  • 删除该配置键即解除接管

这是模块生态与 KernelSU 核心功能协调的机制,详见 module-config.md 高级功能一节。


功能九:模块 WebUI 的 JavaScript 库 —— 页面里直接跑 root 命令 🌐

KernelSU 官方提供了kernelsunpm 包,模块的 WebUI 页面可以在浏览器中调用root shell:

  • exec(command):一次性执行命令,返回 stdout/stderr/errno
  • spawn(command, args):启动子进程,流式读取输出
  • listPackages()/getPackagesInfo():查询已安装包及信息
  • ksu://icon/{packageName}:直接引用应用图标作为图片
  • toast()、fullScreen()、exit():UI 交互辅助
import { exec } from 'kernelsu'; const { errno, stdout } = await exec('ls -l /data/adb/ksu');

这让模块开发者无需写 action 脚本,就能在 WebUI 中实现动态管理界面。API 完整文档见 js/README.md。


功能十:内核 umount 列表管理 —— 手动控制卸载队列 🧹

除了自动按应用卸载,KernelSU 还维护着一个可手动管理的"待卸载列表"(ksu_add_try_umount_cmd),ksud暴露了对应的子命令:

ksud kernel umount # 管理 umount 列表(清除/添加/删除条目) ksud kernel notify-module-mounted # 通知内核模块已挂载
  • 列表支持三种模式:wipe(清空)、add(添加挂载点+flags)、del(按路径删除条目)
  • 元模块(如meta-overlayfs)挂载时,把源标记为 "KSU",内核 umount 才能正确卸载——这是元模块开发者的关键约束
  • 相关协议定义在 supercall.h

功能速查表 📋

#功能命令/文件适合人群
1.ksurc自定义 shell 启动/data/adb/ksu/.ksurc脚本党
2ADB Rootksud feature set adb_root 1调试党
3内核 umountksud feature get kernel_umount安全党
4SU Compatksud feature set su_compat 1传统 su 用户
5SULog 审计ksud feature set sulog 1排查问题
6feature 持久化ksud feature save/load高级用户
7模块配置系统ksud module config模块开发者
8manage.feature 接管ksud module config set manage.*模块开发者
9WebUI JS 库import { exec } from 'kernelsu'WebUI 开发者
10umount 列表管理ksud kernel umount进阶调试

常见问答(FAQ)

Q1:开启 ADB Root 后adb shell为什么没有自动加载.ksurc?确认/data/adb/ksu/.ksurc文件已创建且非空;ADB Root 通过ENV环境变量注入,文件不存在则回退默认行为。

Q2:内核 umount 对 5.10 以下内核无效?低版本内核缺少path_umount支持,选项只会被保存为配置而不实际卸载,需按官方文档手动 backportpath_umount到fs/namespace.c。

Q3:模块声明了manage.su_compat后,我自己还能改吗?不能直接改。ksud feature set会提示该功能正被模块管理;删除模块中的manage.su_compat配置键即可解除。

Q4:SULog 日志存在哪里?由sulogd以 700 权限的专用目录写入,默认保留 3 天,可在管理器 SULog 界面查看按应用分类的记录。


总结

KernelSU 的强大不仅在于内核级 Root,更在于这些藏在ksud命令、配置文件和内核钩子背后的细节能力。.ksurc让你的 shell 更顺手,ADB Root 让调试效率翻倍,内核 umount 则默默守护着系统对普通应用的"干净"。配合 feature.h 中定义的四大功能位,善用ksud feature系列命令,你就是自己设备的完全掌控者。

⚠️ 安全提醒:以上功能(尤其 ADB Root 与 SULog 关闭)都会扩大攻击面,请仅在可信环境使用,并保持 KernelSU 与元模块更新。

【免费下载链接】KernelSU

Personal fork of KernelSU Project

项目地址:https://gitcode.com/gh_mirrors/kern/KernelSU
点击查看免费下载

相关推荐

上一篇:如何防止AI编码任务中断后丢失进度?Comet可恢复工作流与状态机设计深度解析
下一篇:为什么你的AI知识库该告别数据库?Cabinet纯文件架构设计全解析

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询