BT07

在 Ubuntu 上校验 ISO:先验证 GPG 签名,再比较 SHA256

用 Ubuntu 官方校验流程检查 ISO:准备同版本校验文件,核对清单的 GPG 签名,再确认目标 ISO 的 SHA256。命令按 Ubuntu/Linux 环境说明;官方教程中的旧密钥示例不能当作所有发行版通用的当前密钥。

更新日期:

准备镜像和校验文件

准备三个文件:Ubuntu ISO 镜像、SHA256SUMS 校验清单以及 SHA256SUMS.gpg 分离签名文件。后两个文件应来自你要安装的同一 Ubuntu 版本,并与 ISO 放在同一目录中。不要使用其他版本或旧版本的校验文件来检查当前镜像。

本文按 Ubuntu/Linux 命令行环境说明。先运行 sha256sum --version 和 gpg --list-keys,确认工具可用。Ubuntu 官方教程指出相关工具由 coreutils 与 gnupg 提供;其他 Linux 系统若缺少工具,应通过该发行版的软件包管理器安装。本文不提供 macOS 或 Windows 的命令替代方案。

如果最初没有下载 SHA256SUMS 和 SHA256SUMS.gpg,应从对应 Ubuntu 发布版本的官方发布目录取得它们。校验清单可能包含多个桌面版、服务器版以及不同架构的镜像,因此文件扩展名相似并不意味着它们可以互换。

  1. 进入包含 ISO、SHA256SUMS 和 SHA256SUMS.gpg 的目录。
  2. 运行 sha256sum --version 和 gpg --version,确认 SHA256 与 GPG 工具可用。
  3. 确认 SHA256SUMS 清单中确实包含你的 ISO 文件名,并留意 Ubuntu 版本和 CPU 架构。

先验证校验清单,而不是直接信任摘要

运行 gpg --keyid-format long --verify SHA256SUMS.gpg SHA256SUMS。这里验证的对象是 SHA256SUMS 清单;ISO 本身将在后一步检查。

若输出 No public key,先记录输出列出的全部长密钥 ID,再按下一节处理。一个签名文件可能包含多条签名,不能只导入第一条显示的密钥就认为全部签名都已验证。

Good signature 表示签名与所用公钥在密码学上匹配;密钥身份仍需核对。BAD signature 或仍有无法验证的签名时,不要把清单当成已经验证的标准。unknown trust 警告与签名不匹配是不同情况,不应通过盲目设置最终信任来消除警告。

  1. 运行 gpg --keyid-format long --verify SHA256SUMS.gpg SHA256SUMS。
  2. 阅读全部签名结果;记录每一个缺失公钥的完整长密钥 ID。
  3. 如有缺失公钥,先完成下一节导入和指纹核对,再重新验证。

导入所有缺失公钥,并核对完整指纹

官方教程第 4 节用 Ubuntu 密钥服务器演示导入公钥。命令模板为 gpg --keyid-format long --keyserver hkp://keyserver.ubuntu.com --recv-keys 0xKEY_ID_1 0xKEY_ID_2;其中 KEY_ID_1、KEY_ID_2 是占位符,执行前必须替换成你实际输出中所有缺失的长密钥 ID,按实际数量增减。不要原样复制占位符。

随后运行 gpg --keyid-format long --list-keys --with-fingerprint 0xKEY_ID_1 0xKEY_ID_2,同样替换全部占位符,查看完整指纹。文末官方教程第 4 节列出的旧示例包含两把密钥:46181433FBB75451 的完整指纹为 C598 6B4F 1257 FFA8 6632 CBA7 4618 1433 FBB7 5451;D94AA3F0EFE21092 的完整指纹为 8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092。只有实际使用同一密钥时,这些示例才可用于对照。

这些是官方文档的历史示例,不是本文确认过的所有当前发行版密钥清单。若实际签名使用其他密钥,或完整指纹无法与所引用的官方资料核对,应先停下查证,不要用示例密钥替代,也不要只依据密钥名称或 Good signature 判断来源。完成核对后重新运行签名验证,检查全部签名结果。

  1. 从实际验证输出收集全部缺失的长密钥 ID。
  2. 用这些 ID 替换导入命令中的占位符,从 Ubuntu 密钥服务器获取公钥。
  3. 用完整指纹核对所引用的官方教程示例;若不是同一密钥,本文的示例不足以确认其身份,应暂停查证。
  4. 重新执行签名验证;确认各条签名有效且所用密钥身份已核对后,再检查 ISO。

比较 ISO 的 SHA256 摘要

SHA256SUMS 已通过可信签名验证后,它才可以作为 ISO 的校验基准。运行 sha256sum 加上实际的 ISO 文件名,输出格式为摘要值、空格和文件名。把摘要值逐字与 SHA256SUMS 中同一文件名对应的值比较。

在 GNU coreutils 环境中也可以运行 sha256sum -c SHA256SUMS。该命令会检查清单中的各个条目;目标 ISO 对应行显示 OK 才表示匹配。由于清单可能列出多个未下载的镜像,缺少其他文件产生的错误不应与目标 ISO 的结果混为一谈,应单独查看目标行。

若摘要不同,文件可能下载不完整、来自错误版本、遭到修改,或本地文件已经损坏。不要继续制作启动介质;应从可信来源重新下载对应版本,并再次校验两个清单文件。

  1. 运行 sha256sum 后接本地 ISO 的实际文件名。示例 sha256sum ubuntu-版本-架构.iso 中的文件名是占位符,执行前必须替换。
  2. 在 SHA256SUMS 中查找完全相同的文件名,比较开头的 SHA256 摘要值;或者运行 sha256sum -c SHA256SUMS 并只依据目标 ISO 对应条目的结果判断。
  3. 若目标条目不是 OK,删除或隔离当前副本,从对应版本的官方目录重新下载 ISO 和校验文件。
  4. 若目标条目为 OK,保留并使用该 ISO 制作启动介质。

常见问题与版本差异

校验失败不一定都表示有人篡改镜像。常见原因包括 ISO 与 SHA256SUMS 来自不同版本、文件未完整下载、文件名或 CPU 架构选错,以及发布后镜像被重新构建。

开发版和测试版有时不会为每次构建都更新完整校验清单,因此不要把缺少某个校验条目直接解释为安全结论,也无法把稳定版流程中的示例密钥默认用于其他版本。

如果 ISO 本身通过 SHA256 比较,但 SHA256SUMS.gpg 验证失败,则不能仅凭 ISO 摘要看起来正常就认定来源可信。应先解决签名或密钥指纹问题,再继续使用镜像。

官方参考

🔥精彩内容📢Telegram