news 2026/5/24 2:45:04

不止于Docker:详解Ubuntu中apt-key弃用后,所有第三方源GPG密钥的通用管理手册

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
不止于Docker:详解Ubuntu中apt-key弃用后,所有第三方源GPG密钥的通用管理手册

不止于Docker:Ubuntu第三方软件源GPG密钥的全面管理指南

当你在Ubuntu服务器上执行apt update时,是否曾被突如其来的"NO_PUBKEY"错误打断?这背后是Linux软件包安全验证机制在发挥作用。随着apt-key的正式弃用,我们需要重新审视整个GPG密钥管理体系——这不仅是Docker安装的问题,更是每个系统管理员必须掌握的核心技能。

1. 理解GPG密钥在APT生态中的角色

GPG密钥在Debian/Ubuntu的软件包管理中扮演着数字签章的角色。当软件仓库发布新包时,会用私钥生成签名;你的系统则用对应的公钥验证这些签名。过去十年间,apt-key一直是管理这些密钥的主流工具,但它的设计存在明显缺陷:

  • 全局信任问题apt-key add会将密钥添加到全局信任列表,相当于给所有软件源开绿灯
  • 缺乏隔离性:不同源的密钥混在一起,难以单独管理或撤销
  • 安全隐患:被入侵的软件源可能利用全局信任危害整个系统

新的trusted.gpg.d机制采用分而治之的策略,每个软件源的密钥独立存储为.gpg文件,权限管理更精细。这种改变虽然增加了初期迁移成本,但从长期看显著提升了系统安全性。

2. 密钥迁移实战:从传统方式到现代方案

2.1 现有密钥的识别与导出

首先需要盘点系统现有的密钥:

# 列出当前通过apt-key管理的密钥 gpg --keyring /usr/share/keyrings/ubuntu-keyring.gpg --list-keys

对于需要迁移的密钥,建议使用以下工作流:

  1. 获取密钥指纹
    sudo apt-key list | grep -A 1 "pub"
  2. 导出特定密钥
    sudo apt-key export KEY_FINGERPRINT | sudo gpg --dearmor -o /usr/share/keyrings/vendor-name.gpg
  3. 清理旧密钥
    sudo apt-key del KEY_FINGERPRINT

2.2 新密钥的标准导入流程

以NodeSource仓库为例,演示符合新规范的操作:

# 创建专属目录(如果不存在) sudo mkdir -p /usr/share/keyrings # 直接下载并转换为.gpg格式 curl -fsSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/nodesource.gpg >/dev/null # 在sources.list中引用密钥文件 echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/nodesource.list

关键参数说明:

参数作用典型值示例
signed-by指定验证签名用的密钥文件/usr/share/keyrings/xxx.gpg
arch限定CPU架构amd64,arm64
trusted=yes跳过签名验证(不推荐)仅限内网可信源

3. 高级管理技巧与自动化方案

3.1 密钥生命周期管理

定期检查密钥过期情况:

gpg --keyring /usr/share/keyrings/mongodb.gpg --list-keys --with-colons | grep -i expire

常见维护操作:

  • 密钥轮换:提前下载新密钥,与旧密钥并行部署一段时间
  • 吊销处理:立即删除被撤销的密钥文件并更新仓库配置
  • 权限控制:确保密钥文件权限为644,目录权限为755

3.2 自动化管理脚本

以下脚本可批量处理多个软件源的密钥:

#!/usr/bin/env bash set -eo pipefail declare -A KEY_MAP=( ["docker"]="https://download.docker.com/linux/ubuntu/gpg" ["kubernetes"]="https://packages.cloud.google.com/apt/doc/apt-key.gpg" ["jenkins"]="https://pkg.jenkins.io/debian/jenkins.io.key" ) for key in "${!KEY_MAP[@]}"; do echo "Processing $key..." curl -fsSL "${KEY_MAP[$key]}" | gpg --dearmor > "/tmp/${key}.gpg" sudo mv "/tmp/${key}.gpg" "/usr/share/keyrings/${key}-archive.gpg" echo "Created /usr/share/keyrings/${key}-archive.gpg" done

4. 疑难排查与最佳实践

4.1 常见错误解决方案

问题1E: The repository '...' is not signed

  • 检查sources.list中是否包含signed-by指向正确的.gpg文件
  • 确认密钥文件未被截断:file /usr/share/keyrings/xxx.gpg应显示"PGP public key block"

问题2NO_PUBKEY ABCDEF1234567890

  • 使用gpg --keyserver hkp://keyserver.ubuntu.com --recv-key ABCDEF1234567890获取密钥
  • 转换为.gpg格式:gpg --export --armor ABCDEF1234567890 | sudo gpg --dearmor -o /usr/share/keyrings/custom.gpg

4.2 安全增强建议

  1. 密钥来源验证

    • 对比官网公布的指纹:gpg --keyring /usr/share/keyrings/xxx.gpg --fingerprint
    • 通过HTTPS下载,避免中间人攻击
  2. 仓库配置规范

    • 每个第三方源使用独立的.list文件
    • 注释中注明添加日期和维护者
    • 示例:
      # Added 2023-08-20 by admin@example.com deb [arch=amd64 signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable
  3. 审计工具

    # 列出所有已配置的软件源 find /etc/apt/sources.list.d/ -type f -name "*.list" -exec grep -H '^deb' {} \; # 检查未使用的密钥文件 for key in /usr/share/keyrings/*.gpg; do if ! grep -qrl "$(basename "$key")" /etc/apt; then echo "Orphaned key: $key" fi done

在管理生产环境服务器时,我习惯为每个密钥创建README文件,记录添加目的、维护周期和紧急联系人。这个简单的实践在团队协作时尤其有用,当下一位管理员接手时,能快速理解每个密钥的来龙去脉。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/24 2:43:14

知识图谱与大语言模型协同:构建材料科学精准智能问答系统

1. 项目概述:当知识图谱遇见大语言模型“想象一下,未来有这样一个设备……个人可以存储他所有的书籍、记录和通信,并且它被机械化,可以以极高的速度和灵活性进行查阅。它是他记忆的一个放大的、亲密的补充。”——范内瓦布什&…

作者头像 李华
网站建设 2026/5/24 2:41:55

FP8量化与稀疏注意力优化视频生成模型

1. 项目概述在视频生成领域,计算效率和内存占用一直是制约模型规模和应用场景的关键瓶颈。传统全精度(FP32/FP16)模型虽然能保证生成质量,但对硬件资源的需求使得实时或大规模部署面临巨大挑战。我们提出了一种创新的联合优化方案…

作者头像 李华
网站建设 2026/5/24 2:41:47

Windows命令行高效安装与卸载Arm开发工具指南

1. Windows命令行安装与卸载Arm开发工具全指南作为一名长期使用Arm开发工具链的嵌入式工程师,我经常需要在多台Windows设备上批量部署Arm Development Studio和DS-5。相比图形界面安装,命令行方式能显著提升效率,特别是在自动化部署和远程配置…

作者头像 李华
网站建设 2026/5/24 2:31:56

Unity动画中断控制:Interruption Source与Ordered Interruption详解

1. 这不是“换个动画播放方式”那么简单:为什么中断控制是Unity动画系统里最常被忽视的硬核能力你刚在Unity里拖进一个角色模型,双击打开Animator窗口,新建几个状态,连几条Transition箭头,点下Play——角色动起来了。恭…

作者头像 李华
网站建设 2026/5/24 2:29:24

ASCEND框架:协同设计攻克ViT随机计算加速中的GELU与Softmax难题

1. 项目概述:当随机计算遇上Vision Transformer在边缘AI和端侧部署的浪潮下,我们这些搞硬件加速的工程师,每天都在和功耗、面积、延迟这几个“硬骨头”较劲。传统的二进制计算虽然精度高,但乘法器、加法器这些单元又大又耗电&…

作者头像 李华