KernelSU 隐藏功能指南:用 .ksurc 自定义 su Shell 启动环境
KernelSU 隐藏功能指南用 .ksurc 自定义 su Shell 启动环境【免费下载链接】KernelSUA Kernel based root solution for Android项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU本文是 KernelSU 隐藏功能Hidden features系列中的一篇聚焦于.ksurc这一用户态特性通过创建/data/adb/ksu/.ksurc文件即可让su授予的 shell 加载自定义 rc 文件替代 Android 默认的/system/etc/mkshrc。读完本文你将掌握.ksurc的创建方法、适用场景并理解其在 adbroot.cc 与 su.rs 两套代码路径中的底层实现原理从而能安全、正确地用它在每次获得 root shell 时自动注入自己的环境配置。背景Android 的 mkshrc 与 shell 启动环境在 Android 系统中默认的交互式 shell 是 mkshMirBSD Korn Shell/system/bin/sh即指向它。mksh 遵循 POSIX 的ENV环境变量语义当 shell 以交互方式启动时会读取ENV指向的文件并将其作为 rc 脚本 source 执行。Android 在系统层面将这一机制与/system/etc/mkshrc绑定——默认情况下/system/bin/sh会加载/system/etc/mkshrc系统厂商也常借此注入一些全局别名、函数或终端行为设定。KernelSU 的隐藏功能.ksurc正是对这一机制的接管当你创建/data/adb/ksu/.ksurc后通过 KernelSU 的su获得的 shell 将加载这个文件而不是系统默认的/system/etc/mkshrc。使用方法创建 .ksurc 文件操作非常简单只需在 KernelSU 的工作目录下创建隐藏文件.ksurc# 在已 root 的终端中执行 mkdir -p /data/adb/ksu cat /data/adb/ksu/.ksurc EOF # 自定义 shell 环境例如 alias llls -la export MY_ROOT_ENV1 EOF chmod 644 /data/adb/ksu/.ksurc创建完成后重新执行su进入的每一个新 shell都会自动加载该文件。可以立刻验证$ su # 如果 .ksurc 中定义了别名或变量这里应当能看到效果 $ ll $ echo $MY_ROOT_ENV 1几点使用要点文件路径是固定的/data/adb/ksu/.ksurc在 defs.rs 中由KSURC_PATH: str concatcp!(WORKING_DIR, .ksurc)定义WORKING_DIR即/data/adb/ksu/。该文件只影响KernelSUsu授予的 shell通过 adb shell、第三方终端直接启动的系统 shell 不受影响仍按系统默认逻辑加载/system/etc/mkshrc。文件内容按 POSIX shell rc 脚本语法书写即可与mkshrc的写法一致别名、函数、export变量等。实现原理两处代码路径的配合.ksurc的实现并非只在一个地方而是由 KernelSU 的用户态ksudsu 守护进程与 Manager 附带的libadbroot.so两套机制共同承担分别对应su命令的两种来源。路径一ksud 的 su 守护进程su.rs当应用通过su请求 root 时KernelSU 内核侧会把执行重定向到ksud见 sucompat.c 中ksu_handle_execve_sucompat_common对/system/bin/su的拦截随后由 su.rs 构造并exec真正的 shell。关键代码位于 su.rs// when KSURC_PATH exists and ENV is not set, set ENV to KSURC_PATH if PathBuf::from(defs::KSURC_PATH).exists() env::var(ENV).is_err() { command.env(ENV, defs::KSURC_PATH); }这段逻辑的含义是先检查/data/adb/ksu/.ksurc是否存在若存在且当前环境尚未显式设置ENV则把ENV环境变量指向.ksurc路径该ENV会随command.exec()传递给新启动的 shellmksh 依据 POSIX 语义在交互启动时加载它。注意这里的保护条件env::var(ENV).is_err()如果调用方已经在环境里自定义了ENVksud 不会覆盖它从而避免破坏用户显式指定的 rc 文件。同一函数里su.rs 还会把/data/adb/ksu/bin追加到PATH方便直接调用 KernelSU 附带的工具。路径二adb root 场景的 libadbroot.soadbroot.cc当启用“ADB Root”能力时Manager 会向adbd注入libadbroot.so对应LIBADBROOT_PATH定义于 defs.rs。该库拦截了 adbd 的execle系统调用在adbd为 shell 用户构造环境时插入ENV源码见 adbroot.cc// If the user creates ksurc, use ksurc instead of mkshrc bool ksurc_exists (access(/data/adb/ksu/.ksurc, F_OK) 0); const char *ksu_env_str ENV/data/adb/ksu/.ksurc;实现细节值得注意用access(/data/adb/ksu/.ksurc, F_OK)判断文件是否存在遍历原始envp跳过已有的ENV项注释说明即使正常情况下 Android 不应存在该变量也要防御新版 Android / 定制 ROM 可能注入的情况见 adbroot.cc若.ksurc存在则在环境末尾追加ENV/data/adb/ksu/.ksurc最终通过execve完成替换adbroot.cc。此外该库的构造函数Init()还会把/data/adb/ksu/bin追加到PATHadbroot.cc与 ksud 的行为保持一致保证 adb root 与 su root 两种入口下的 shell 环境体验统一。机制解析ENV、mkshrc 与 .ksurc 的关系要理解.ksurc为什么能“替换”/system/etc/mkshrc需要回到 mksh 的启动规则交互式 mksh 启动时按ENV变量指向的文件执行 rc 脚本。默认情况下 Android 把ENV指向/system/etc/mkshrc因此 shell 会加载它。KernelSU 的做法本质上是在su场景下改写ENV的指向场景ENV 指向效果系统默认 shell/system/etc/mkshrc加载系统 rcsu且未创建.ksurc继承原有 ENV或系统默认保持默认行为su且存在.ksurc/data/adb/ksu/.ksurc加载自定义 rc因此.ksurc与/system/etc/mkshrc是“二选一”的替换关系而不是叠加执行——在su进入的 shell 中系统默认 rc 不会被额外加载。如果你的自定义配置依赖系统 mkshrc 中的既有内容建议在.ksurc中显式 source 需要的部分或自行补齐相关定义。适用场景与注意事项.ksurc适合以下典型用途统一 root 终端环境为每次su会话注入统一的别名、函数与常用工具路径自动化初始化进入 root shell 时自动执行环境准备如挂载、设置代理变量、加载密钥等替换厂商 rc屏蔽厂商在/system/etc/mkshrc中注入的、你不需要的行为。同时请注意以下边界与限制只对 KernelSUsu授予的 shell 生效不改变adb shell未走 su 路径时的默认行为若环境中已存在ENV变量ksud 路径下不会覆盖su.rsadbroot 路径下则会替换掉已有ENVadbroot.cc两处策略略有差异使用时需留意该功能位于 website/docs/zh_CN/guide/hidden-features.md 所述的“隐藏功能”分类下不随主文档展开介绍属于“知道就能用”的进阶特性与 KernelSU 的其他隐藏能力如 app-profile、module-config相互独立.ksurc只作用于 shell 环境层面。小结.ksurc是 KernelSU 提供给高级用户的一处“小而实用”的隐藏开关只需在/data/adb/ksu/下创建该文件即可让所有通过su获得的 root shell 加载自定义启动脚本替代 Android 默认的/system/etc/mkshrc。其背后是 ksudsu.rs与 libadbrootadbroot.cc两条路径对ENV环境变量的统一改写配合 defs.rs 中约定的固定路径构成了完整的实现闭环。对于需要批量定制 root 终端环境、希望摆脱厂商 mkshrc 约束的开发者这是一个低成本、高收益的切入点。【免费下载链接】KernelSUA Kernel based root solution for Android项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

从无状态聊天到有状态 Agent:用 Hindsight 为 Hermes 接入跨会话持久记忆

从无状态聊天到有状态 Agent:用 Hindsight 为 Hermes 接入跨会话持久记忆

从无状态聊天到有状态 Agent:用 Hindsight 为 Hermes 接入跨会话持久记忆 【免费下载链接】hindsight Hindsight: Agent Memory That Learns 项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight Hindsight 为 Hermes Agent 提供持久化记忆…

2026/9/13 17:25:08 阅读更多 →
ClickHouse 在智能体链路日志与行为分析中的海量存储实践

ClickHouse 在智能体链路日志与行为分析中的海量存储实践

ClickHouse 在智能体链路日志与行为分析中的海量存储实践在构建面向全网数千万级调用的多智能体(MAS)企业级可观测与行为审计平台时,系统每天会产生海量高维、包含长文本 Prompt、复杂工具入参、Token 消耗与执行耗时的结构化与半结构化链路日…

2026/9/13 17:24:08 阅读更多 →
OpenSEO Alchemy 预览部署实践:Cloudflare Access 共享边界、PR 暂存环境到生产割接的完整链路

OpenSEO Alchemy 预览部署实践:Cloudflare Access 共享边界、PR 暂存环境到生产割接的完整链路

OpenSEO Alchemy 预览部署实践:Cloudflare Access 共享边界、PR 暂存环境到生产割接的完整链路 【免费下载链接】open-seo Open source alternative to Semrush and Ahrefs 项目地址: https://gitcode.com/GitHub_Trending/op/open-seo OpenSEO(一…

2026/9/13 17:24:08 阅读更多 →

最新新闻

STM32F407 FSMC驱动7寸800x480电容屏:时序、触摸与刷新优化实战

STM32F407 FSMC驱动7寸800x480电容屏:时序、触摸与刷新优化实战

简介:面向STM32F4系列单片机的七英寸800480分辨率TFT LCD电容触摸屏驱动代码包,适用于嵌入式显示与触控交互开发,重点解决屏幕初始化、图像绘制、触摸坐标解析等常见问题。压缩包共235个文件,以123个.h头文件和108个.c源文件为主体…

2026/9/13 18:12:28 阅读更多 →
氮化镓充电器原理与实战:从器件特性到选购避坑

氮化镓充电器原理与实战:从器件特性到选购避坑

1. 为什么氮化镓正在悄悄“吃掉”你桌面上的充电器?这两年,如果你留意过数码配件柜台,或者拆开过新买的笔记本原装充电器,大概率会发现一个共同点:体积比五年前小了一半,重量轻了三分之一,但输出…

2026/9/13 18:12:28 阅读更多 →
authelia-gen docs manage 命令详解:Authelia 文档生成器的受管文档与架构决策记录(ADR)工具链

authelia-gen docs manage 命令详解:Authelia 文档生成器的受管文档与架构决策记录(ADR)工具链

authelia-gen docs manage 命令详解:Authelia 文档生成器的受管文档与架构决策记录(ADR)工具链 【免费下载链接】authelia The Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready. …

2026/9/13 18:12:28 阅读更多 →
PSO-SVM回归预测:粒子群优化支持向量机参数实现

PSO-SVM回归预测:粒子群优化支持向量机参数实现

简介:这是一套基于Matlab的PSO-SVM回归预测完整程序,适用于需要处理多变量输入回归预测的算法研究人员、研究生及相关工程技术人员。代码利用粒子群算法自动搜索支持向量回归机的惩罚因子c与核函数参数g,避免人工反复试参,并结合l…

2026/9/13 18:12:28 阅读更多 →
Twitter情感分析全栈实战:从TF-IDF到LoRA微调

Twitter情感分析全栈实战:从TF-IDF到LoRA微调

简介:本资源是一套面向机器学习与自然语言处理初学者及进阶学习者的Twitter情感分析实战项目,聚焦文本分类、特征工程、模型训练与评估全流程。资源包含23个文件:20个可直接运行的Python脚本(覆盖LSTM、CNN、XGBoost、Lightning、…

2026/9/13 18:12:28 阅读更多 →
Nuclear 安装指南:全平台发行版选择、macOS 放行与自动更新机制详解

Nuclear 安装指南:全平台发行版选择、macOS 放行与自动更新机制详解

Nuclear 安装指南:全平台发行版选择、macOS 放行与自动更新机制详解 【免费下载链接】nuclear Streaming music player that finds free music for you 项目地址: https://gitcode.com/GitHub_Trending/nu/nuclear 本文以 Nuclear 官方用户手册中的安装文档&…

2026/9/13 18:11:28 阅读更多 →

日新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/13 0:00:24 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/13 0:00:24 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/13 0:00:24 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/13 0:00:24 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/13 0:00:24 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/13 0:00:24 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/13 16:51:11 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/12 18:29:34 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/12 19:02:44 阅读更多 →