termux-adb安全审查:install.sh脚本逐行解读与GPG密钥验证机制详解
【免费下载链接】termux-adbRun adb in Termux without root permissions!项目地址: https://gitcode.com/gh_mirrors/ter/termux-adb
termux-adb 是一个让 Android 手机上的 Termux 环境免 root 运行 adb 与 fastboot 的开源项目,核心卖点是用另一台手机通过 USB 线调试设备。多数用户安装时只会复制一条curl | bash命令——但这一行命令背后,脚本到底做了什么?本文对 install.sh 做逐行安全审查,并详解 APT 软件源的 GPG 密钥验证机制,帮你在享受便捷的同时守住设备安全底线。
为什么Termux免root的adb值得一次安全审查
📱 先说清楚 termux-adb 解决什么问题:
- Termux 官方
android-tools包里的 adb/fastboot 通常只支持 root 设备,因为枚举 USB 设备需要遍历/dev/bus/usb/*,权限不足直接看不到设备 - termux-adb 对 adb 和 fastboot 打补丁,改为调用
termux-usb提供的 Android API:用户手动授权后,拿到 USB 设备的文件描述符,完全无需 root - 补丁后的源码位于仓库的
android-tools/子模块(见 .gitmodules 配置)
⚠️ 问题在于安装方式。README 推荐用一条curl命令直接下载脚本并执行,属于典型的"管道执行"(pipe to bash)。对这类脚本做安全审查,重点就两个:
- 脚本本身是否做了危险操作(提权、删文件、隐藏行为)
- 软件源信任链是否完整——GPG 公钥从哪来、怎么校验、失效了会怎样
install.sh逐行解读:16行脚本的安全拆解
install.sh全文只有 16 行,完全可读:
#!/data/data/com.termux/files/usr/bin/bash apt-get update apt-get --assume-yes upgrade apt-get --assume-yes install coreutils gnupg wget if [ ! -f "$PREFIX/etc/apt/sources.list.d/termux-adb.list" ]; then mkdir -p $PREFIX/etc/apt/sources.list.d echo -e "deb https://nohajc.github.io termux extras" > $PREFIX/etc/apt/sources.list.d/termux-adb.list wget -qP $PREFIX/etc/apt/trusted.gpg.d https://nohajc.github.io/nohajc.gpg apt update else echo "Repo already installed" fi apt install termux-adb echo "done!"第1行:Shebang锁定Termux专用Bash
#!/data/data/com.termux/files/usr/bin/bash是 Termux 前缀下的 bash 绝对路径。它保证脚本只在 Termux 环境运行,避免被误粘贴到其它发行版执行——一个小的环境隔离信号。
第3–5行:更新系统并安装三个依赖
apt-get update+--assume-yes upgrade:非交互地刷新索引并升级已有包- 安装
coreutils、gnupg、wget:其中gnupg用于 GPG 密钥生态,wget仅作为下载器,负责把作者的公钥文件拉到本地
✅ 安全审查要点:全部是标准包管理器命令,无编译、无提权、无rm/sudo之外的越权操作,行为透明。
第6–13行:幂等性检查 + 添加软件源 + 导入GPG公钥
这是全脚本最关键的一段:
- 幂等设计:先判断
$PREFIX/etc/apt/sources.list.d/termux-adb.list是否已存在。已存在则打印Repo already installed直接跳过——脚本可安全重复执行,不会重复污染软件源配置 - 写入软件源:在
sources.list.d/下新建termux-adb.list,指向作者的extras仓库 - 导入公钥:用
wget -qP静默下载nohajc.gpg,存放路径是$PREFIX/etc/apt/trusted.gpg.d——这是 APT 的受信任公钥目录,放入即表示"信任此目录中密钥签名的所有包" - 最后
apt update拉取新仓库索引,签名校验在此时发生
第14–16行:安装包并收尾
apt install termux-adb完成安装,termux-adb与termux-fastboot即可作为原生命令的直接替代品使用。README 也说明:后续升级会随常规的pkg upgrade一起完成,无需单独维护安装渠道。
GPG密钥验证机制详解:APT如何防止恶意包
🔐 很多新手以为"装了公钥 = 安全",实际信任链是这样的:
第一步:公钥入库nohajc.gpg是作者的 GPG 公钥,落在trusted.gpg.d/后,APT 自动将其视为受信任签名者。
第二步:软件源签名校验apt update时,APT 用该公钥验证仓库Release文件的签名。签名不符 → 直接报错,索引不会被使用。
第三步:包级哈希校验apt install时,每个.deb包的哈希值必须与签名过的Release索引匹配——即"包本身没被篡改"由 Release 签名间接保证。
第四步:防降级/防投毒没有有效签名的包、签名与公钥不匹配的源,APT 一律拒绝,安装流程中止。
⚠️ 审查结论中唯一的弱环:公钥的"首次信任"(TOFU)
脚本通过 HTTPS 从作者站点下载公钥,但没有在脚本里硬编码公钥指纹。这意味着:如果作者网站在某一时刻被入侵或发生中间人攻击,恶意公钥可能被静默信任,后续所有包校验都会对"错误的公钥"通过。
💡 加固建议(适用于所有 apt 第三方源,不限于本项目):
- 安装前手动核对
nohajc.gpg的指纹,与作者官方公布值一致 - 核对命令:
gpg --show-keys $PREFIX/etc/apt/trusted.gpg.d/nohajc.gpg - 重要设备可定期执行
apt update观察是否有签名告警
安全审查结论:快速自查清单
| 审查项 | 结果 |
|---|---|
| 脚本是否可读、无隐藏命令 | ✅ 仅 16 行,全部为包管理器标准操作 |
| 是否提权/删文件/外传数据 | ✅ 无 |
| 是否幂等、可重复执行 | ✅ 有仓库存在性判断 |
公钥是否独立存放于trusted.gpg.d | ✅ 标准位置 |
| 包升级是否纳入统一渠道 | ✅ 随pkg upgrade |
| 公钥指纹是否脚本内固定 | ⚠️ 未固定,建议手动核对指纹 |
📌 总结:termux-adb 的安装脚本干净、透明、幂等,GPG 校验走的是 APT 标准信任链;唯一需要注意的是首次信任公钥环节,手动核对一次指纹即可补齐。想亲自审查脚本源码,可先克隆仓库再打开install.sh对照本文:
git clone https://gitcode.com/gh_mirrors/ter/termux-adb项目采用 MIT 协议(见 LICENSE),代码可自由审计,这正是开源软件安全审查最大的底气。
【免费下载链接】termux-adbRun adb in Termux without root permissions!项目地址: https://gitcode.com/gh_mirrors/ter/termux-adb
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考