debian 通过 apt 的 gpg 签名与 sha256 校验保障软件源及包可信性;需检查 sources.list 配置、密钥状态、release 文件签名与哈希一致性,用 debsums 检测已安装文件完整性,并依提示处理 no_pubkey、badsig 等异常。

Debian 系统通过 APT 机制保障软件源和安装包的可信性,核心依赖 GPG 签名验证与 SHA256 校验。只要正确配置并定期更新,无需手动校验每个包也能保证完整性;但若怀疑源被篡改、遇到安装失败或安全审计需求,则需主动介入检查。
确认软件源配置与签名密钥状态
APT 默认启用 Release 文件签名验证。先检查 /etc/apt/sources.list 及 /etc/apt/sources.list.d/ 下文件是否使用 https 或官方镜像(如 deb.debian.org),避免明文 http 源。再确认信任的发行版密钥是否已导入:
- 运行 apt-key list(旧方式)或更推荐的 gpg --dearmor -o /usr/share/keyrings/debian-archive-keyring.gpg /usr/share/keyrings/debian-archive-keyring.asc(Debian 12+ 推荐 keyring 方式)
- 检查 /usr/share/keyrings/ 中是否存在 debian-archive-keyring.gpg,且时间较新(密钥通常随系统升级自动更新)
- 执行 apt update,观察输出中是否出现 “Signed by …” 而非 “NO_PUBKEY” 或 “BADSIG”
手动验证 Release 文件签名与哈希一致性
APT 下载的 Release 和 Release.gpg 是校验链起点。可离线复现验证流程:
- 进入缓存目录:cd /var/lib/apt/lists/,找到类似 deb.debian.org_debian_dists_bookworm_Release 及对应 _gpg 文件
- 用 gpg 验证签名:gpg --verify deb.debian.org_debian_dists_bookworm_Release.gpg deb.debian.org_debian_dists_bookworm_Release,应显示 “Good signature from Debian Archive Automatic Signing Key”
- 比对 Release 文件中声明的 Packages 文件哈希:grep -A 1 "Packages.*amd64" deb.debian.org_debian_dists_bookworm_Release,提取 SHA256 值,再计算本地下载的 Packages.gz 解压后哈希:zcat Packages.gz | sha256sum,两者应一致
检查已安装二进制文件是否被篡改
Debian 不对已安装文件持续签名,但提供 debsums 工具基于包内自带的 md5sums 列表做完整性扫描:
- 安装工具:sudo apt install debsums
- 检查所有已安装包的文件(较慢):sudo debsums -c,仅输出被修改或缺失的文件路径
- 快速检查关键系统包:sudo debsums -c coreutils dpkg apt bash
- 注意:debsums 无法发现未打包的文件变动(如 /tmp 下新建文件),也不覆盖配置文件(默认被标记为 conffile,不校验);若需更强保障,建议结合 aide 或 tripwire 做主机完整性监控
应对常见异常的实用操作
当遇到校验失败提示时,优先排除临时问题再深入排查:
- “NO_PUBKEY XXX”:运行 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys XXX(旧方式)或更安全地从 debian.org 下载 keyring 包重装
- “BADSIG” 或 “EXPKEYSIG”:说明 Release 文件被篡改或密钥过期,先 sudo rm -f /var/lib/apt/lists/* 清缓存,再 apt update;若持续发生,检查系统时间是否准确(NTP 同步)、DNS 是否被污染
- 安装特定 deb 包时提示校验失败:dpkg -I package.deb 查看其 Maintainer 和 Signature 字段,再用 gpg --verify package.deb.asc package.deb(如有签名);无签名则仅能依赖来源可信度










