如何安全获取Ubuntu内核源码?含apt-get与Git签名验证问题
刚好之前深入折腾过Ubuntu内核源码的签名验证,给你把两个获取方式的细节拆解清楚:
1. 通过
apt-get获取内核源码的签名验证 - 是否由Ubuntu团队签名?
没错,Ubuntu官方仓库里的所有内核源码包,都是由Ubuntu内核开发/安全团队用官方GPG密钥签名的,这是Ubuntu软件供应链安全的核心环节之一。 - 下载时系统会自动验证签名吗?
必须会!默认情况下,Ubuntu的apt工具链已经预装并信任了Ubuntu官方的GPG密钥池。当你执行apt-get source linux-image-$(uname -r)这类命令时,apt会自动校验源码包的签名完整性:如果签名不匹配、密钥不受信任,或者包被篡改,apt会直接报错终止,不会继续下载。 - 自行手动验证的方法?
如果你想自己走一遍验证流程,可以这么做:- 找到对应内核版本的
.dsc源码描述文件和对应的.dsc.asc签名文件(通过Ubuntu官方软件包索引定位) - 导入Ubuntu内核团队的官方GPG密钥,比如执行:
gpg --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32(这个是Ubuntu主归档密钥,涵盖内核包签名) - 执行验证命令:
gpg --verify linux_<具体版本号>.dsc.asc linux_<具体版本号>.dsc,如果输出显示"Good signature from Ubuntu Archive Automatic Signing Key",就说明验证通过。
- 找到对应内核版本的
2. 通过Git获取内核源码的签名验证
- Git源码本身未签名,何处找对应签名?
你说的没错,Git仓库里的普通提交是没有签名的,但Ubuntu内核团队会对重要的发布版本标签进行GPG签名——这些签名直接嵌入在Git标签对象里,不需要单独下载额外的签名文件。 - 如何验证标签签名的安全性?
关键是先拿到官方可信的公钥,再验证标签:- 导入Ubuntu内核团队的官方GPG公钥,比如执行:
gpg --keyserver keyserver.ubuntu.com --recv-keys E9C74FEEA2098A6E(这是Ubuntu Kernel Team的签名密钥) - 确认公钥的合法性:你可以通过Ubuntu官方文档、安全公告或者官方社区的公开信息核对密钥ID,确保你导入的不是伪造的密钥(别随便从陌生来源拿密钥!)
- 验证Git标签:切换到内核Git仓库后,执行
git tag -v <标签名>,比如git tag -v v5.15.0-78-generic,如果输出显示"Good signature from Ubuntu Kernel Team",且你已经信任该公钥,就说明这个标签是官方签名的,对应的代码版本可信。
- 导入Ubuntu内核团队的官方GPG公钥,比如执行:
- 小提示:如果要确保代码的官方性,尽量基于签名过的标签来checkout,不要直接用master分支或者未签名的临时标签。
内容的提问来源于stack exchange,提问作者Poperton
相关产品推荐
相关产品推荐

