Ubuntu/Debian 中 Nginx 通过 apt 安装默认启用 GPG 和哈希校验,确保包来源可信、内容未篡改,但仅限下载安装阶段且依赖官方仓库密钥有效、系统时间准确及不绕过 apt。

Ubuntu/Debian 系统中,Nginx 通过 apt 安装时,默认已启用 APT 的完整性校验机制(基于 GPG 签名和软件包哈希),无需额外配置即可验证安装包来源可信、内容未被篡改。但需注意:校验发生在下载与安装阶段,而非运行时;且仅对官方仓库(如 nginx.org 的 apt 源或系统默认源)有效。
确认 APT 密钥是否已正确导入
APT 使用 GPG 密钥验证仓库元数据(Release 文件)签名。若密钥缺失或过期,会提示 NO_PUBKEY 或 INVALIDSIG 错误。
- 查看已安装的 Nginx 相关密钥:
apt-key list | grep -A1 -B1 "nginx\|NGINX"(旧版 apt-key 已弃用,建议优先用/etc/apt/trusted.gpg.d/下文件) - 若使用 nginx.org 官方源,应有
nginx signing key,指纹通常为573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62 - 若密钥缺失,按官网指引重新导入(如:
curl https://nginx.org/keys/nginx_signing.key | sudo gpg --dearmor -o /usr/share/keyrings/nginx-archive-keyring.gpg)
检查软件包下载时的校验行为
APT 在安装前自动校验 Packages 文件哈希及每个 .deb 包的 SHA256/SHA512 值,这些信息来自仓库的 Release 和 Release.gpg 文件。
- 执行
sudo apt update后,可查看日志确认校验状态:grep -i "gpg\|hash" /var/log/apt/term.log - 若出现
WARNING: The following packages cannot be authenticated!,说明签名验证失败,apt install将中止(除非加--allow-unauthenticated,不推荐) - 手动验证某个已下载的 .deb 包(如
nginx-full_*.deb):dpkg-deb --info /var/cache/apt/archives/nginx-full_*.deb 2>/dev/null | head -5(仅看结构);真实校验由 apt 内部完成,用户无需重复
验证已安装 Nginx 二进制文件未被意外修改
APT 自身不持续监控已安装文件完整性(那是 aide 或 tripwire 的职责),但可通过 debsums 工具比对原始包记录的校验和。
- 安装 debsums:
sudo apt install debsums - 检查 Nginx 相关包文件完整性:
sudo debsums nginx-core nginx-common(根据实际安装的包名调整) - 输出为空表示全部匹配;若有差异行,如
FAILED,说明对应文件(如/usr/sbin/nginx)内容已被修改(可能因手动编辑、升级残留或入侵) - 补充说明:debsums 依赖包安装时生成的
/var/lib/dpkg/info/*.md5sums,该文件在安装后即固定,不随后续更新自动刷新
避免常见校验失效场景
以下情况会导致 APT 校验形同虚设,需主动规避:
- 使用
dpkg -i xxx.deb绕过 apt 直接安装,完全跳过 GPG 和哈希校验 - 添加了未签名或自建的第三方 apt 源(
deb [trusted=yes] ...),等同于关闭校验 - 系统时间严重偏差(>5 分钟),导致 GPG 签名时间验证失败(
EXPKEYSIG错误) - 手动删除
/var/lib/apt/lists/下的Release.gpg或篡改Release文件










