当前位置: 首页 > article >正文

【Linux】APT 密钥管理:官方推荐的解决方案应对 apt-key 弃用

引言

在 Ubuntu 和 Debian 系统中,apt-key 命令用于管理 GPG 密钥,验证来自软件包存储库的包是否合法并且未被篡改。然而,从 Debian 11Ubuntu 22.04 开始,apt-key 被弃用,并将在未来的版本中完全移除。因此,需要逐步适应新的密钥管理方式,以确保系统的安全性和高效性。本篇博客将详细介绍如何处理 apt-key 的弃用警告,如何使用官方推荐的新方法来管理 GPG 密钥,并对相关命令进行优化和解释。

目录

  • 引言
  • 一、apt-key 弃用警告解析
    • 1.1 发生了什么?
    • 1.2 什么是 apt-key 及其作用?
    • 1.3 apt-key 被弃用的警告信息
    • 1.4 `apt-key` 的使用已不推荐
  • 二、替代 `apt-key` 使用方式的推荐方法
    • 2.1 `apt-key` 使用的传统方式
    • 2.2 推荐的新方法
      • 2.2.1 使用 `tee` 命令保存密钥到指定目录
      • 2.2.2 ASCII 装甲密钥与二进制 OpenPGP 密钥
      • 2.2.3 使用 `Signed-By` 选项
      • 2.2.4 使用 `deb822` 格式的 `sources.list`
    • 2.3 验证源的有效性
    • 2.4 何时使用 `apt-key del`
  • 三、优势与新方法的安全性
    • 3.1 更加安全
    • 3.2 增强的灵活性
    • 3.3 更好的兼容性
  • 四、图示:APT 密钥管理方法比较
  • 五、常见问题解答
    • 5.1 使用新方法管理密钥时,如何删除旧的密钥?
    • 5.2 为什么不直接将密钥存储到 `/etc/apt/trusted.gpg` 文件中?
    • 5.3 APT 2.4 或更高版本的兼容性如何?
    • 5.4 如何删除所有使用 `apt-key add` 添加的密钥?
  • 总结
  • 参考资料

一、apt-key 弃用警告解析

1.1 发生了什么?

在 Ubuntu 22.04 或 Debian 11 及更新版本中,当执行 apt updateapt upgrade 等命令时,可能会看到类似如下的警告:

W: https://updates.example.com/desktop/apt/dists/xenial/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.

此警告表明,apt-key 命令不再推荐使用,并将逐步淘汰。原因是 apt-key 的传统机制存在一定的安全隐患,同时也不符合现代 Linux 系统对密钥管理的需求。因此,APT 开发团队推荐用户尽早过渡到新的密钥管理方法,以提高系统的安全性和灵活性。

1.2 什么是 apt-key 及其作用?

在 Debian 和 Ubuntu 系统中,apt-key 是用来管理用于验证包管理系统(APT)中软件包签名的 GPG 密钥的工具。APT 使用 GPG 密钥来确保下载的软件包来自可信的源,从而避免包被篡改。apt-key 管理的密钥一般存储在 /etc/apt/trusted.gpg 文件中。

然而,apt-key 已逐渐被标记为“弃用”,意味着将来它将被移除或替代。APT 开发团队决定弃用 apt-key 的原因包括:

  • 安全性问题apt-key 将所有密钥存储在一个统一的文件中,这种管理方式容易遭受篡改或丢失的风险。
  • 灵活性不足:在大规模部署场景下,apt-key 缺乏足够的灵活性,尤其是在需要管理多个密钥的情况下。
  • 新的标准:APT 推荐使用 /etc/apt/trusted.gpg.d/ 目录来管理密钥,从而提高安全性和可维护性。

1.3 apt-key 被弃用的警告信息

当继续使用 apt-key 时,系统会给出警告,提示该命令已弃用,并建议用户改用新的密钥管理方式。以下是可能遇到的警告信息:

Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).

这表明 apt-key 已经不再推荐使用,用户应将密钥存储在 /etc/apt/trusted.gpg.d/ 目录中,而不是继续使用 apt-key

1.4 apt-key 的使用已不推荐

官方文档明确指出,apt-key 将不再是推荐的密钥管理工具,尤其是在 Debian 11 和 Ubuntu 22.04 版本之后。手册页中的相关描述如下:

apt-key is used to manage the list of keys used by apt to authenticate packages. Packages which have been authenticated using these keys are considered trusted.
Use of apt-key is deprecated, except for the use of apt-key del in maintainer scripts to remove existing keys from the main keyring. If such usage of apt-key is desired, the additional installation of the GNU Privacy Guard suite (packaged in gnupg) is required.
apt-key(8) will last be available in Debian 11 and Ubuntu 22.04.

这段描述强调了 apt-key 的弃用,并且提到仅在某些特定场景下(例如,在维护脚本中删除密钥)还可以使用 apt-key del 命令。

手册页的后续部分中,还详细介绍了如何替代旧的 apt-key 使用方式,特别是在 apt update 时触发的弃用警告部分:

DEPRECATION
Except for using apt-key del in maintainer scripts, the use of apt-key is deprecated. This section shows how to replace the existing use of apt-key.
If your existing use of apt-key add looks like this:

wget -qO- https://myrepo.example/myrepo.asc | sudo apt-key add -

Then you can directly replace this with (though note the recommendation below):

wget -qO- https://myrepo.example/myrepo.asc | sudo tee /etc/apt/trusted.gpg.d/myrepo.asc

Make sure to use the "asc" extension for ASCII armored keys and the "gpg" extension for the binary OpenPGP format (also known as "GPG key public ring"). The binary OpenPGP format works for all apt versions, while the ASCII armored format works for apt version >= 1.4.

Recommended: Instead of placing keys into the /etc/apt/trusted.gpg.d directory, you can place them anywhere on your filesystem by using the Signed-By option in your sources.list and pointing to the filename of the key. See sources.list(5) for details. Since APT 2.4, /etc/apt/keyrings is provided as the recommended location for keys not managed by packages. When using a deb822-style sources.list, and with apt version >= 2.4, the Signed-By option can also be used to include the full ASCII armored keyring directly in the sources.list without an additional file.

二、替代 apt-key 使用方式的推荐方法

2.1 apt-key 使用的传统方式

apt-key 被弃用之前,用户通常通过如下命令来下载并添加 GPG 密钥:

wget -qO- https://myrepo.example/myrepo.asc | sudo apt-key add -

这条命令首先使用 wget 从指定 URL 下载 GPG 密钥,然后通过 apt-key add 将密钥添加到系统的信任密钥库中。

2.2 推荐的新方法

2.2.1 使用 tee 命令保存密钥到指定目录

为了替代 apt-key add,推荐使用 tee 命令将 GPG 密钥直接存储到 /etc/apt/trusted.gpg.d/ 目录中,命令如下:

wget -qO- https://myrepo.example/myrepo.asc | sudo tee /etc/apt/trusted.gpg.d/myrepo.asc

在这个命令中,wget 从远程地址下载密钥并传递给 tee 命令,后者将下载的 GPG 密钥存储到 /etc/apt/trusted.gpg.d/ 目录中。

扩展说明:

  • 文件扩展名:对于 ASCII 装甲格式的密钥,文件扩展名应使用 .asc,而对于二进制 OpenPGP 格式的密钥,则应使用 .gpg
  • APT 版本要求:如果APT 版本是 1.4 或更高版本,推荐使用 .asc 格式。

2.2.2 ASCII 装甲密钥与二进制 OpenPGP 密钥

  • ASCII 装甲格式(.asc):这是一个以 ASCII 字符形式编码的 GPG 密钥,适用于 APT 版本 >= 1.4。
  • 二进制 OpenPGP 格式(.gpg):这种格式更适用于所有版本的 APT。

通常,建议使用 ASCII 装甲格式(.asc),因为它在现代版本的 APT 中得到了更好的支持。

2.2.3 使用 Signed-By 选项

推荐的方式是将密钥存放在任何一个目录,并在 sources.list 文件中通过 Signed-By 选项引用该密钥,而不是直接将密钥存储到 /etc/apt/trusted.gpg.d/ 目录中。这样的做法不仅增加了灵活性,还提高了安全性。

例如,假设有一个名为 myrepo.asc 的 GPG 密钥文件,可以通过如下方式在 sources.list 文件中指定该密钥:

deb [signed-by=/etc/apt/keyrings/myrepo.asc] https://myrepo.example/ubuntu/ focal main

在这种方法中,signed-by 选项告诉 APT 使用指定路径下的 GPG 密钥来验证该软件源的软件包。

自 APT 2.4 版本起,推荐将密钥存储到 /etc/apt/keyrings/ 目录。也可以使用 deb822 格式的 sources.list,直接在文件中包含完整的 ASCII 装甲密钥。

2.2.4 使用 deb822 格式的 sources.list

APT 从 2.4 版本起,支持使用 deb822 格式的 sources.list文件。这个格式允许用户将密钥直接嵌入到源列表文件中,Signed-By 选项可以直接引用密钥文件,而无需将其存储在特定目录下。通过这种方式,您可以更加灵活地管理密钥,尤其是在需要避免文件管理复杂性时。
例如,在 sources.list 文件中,您可以直接嵌入 ASCII 装甲格式的公钥:

deb [signed-by=/etc/apt/keyrings/myrepo.asc] https://myrepo.example/ubuntu/ focal main

这样,APT 将使用 myrepo.asc 作为密钥验证软件源。

2.3 验证源的有效性

执行以下命令,检查源是否有效并且没有任何警告或错误:

sudo apt update

如果没有与过时密钥相关的警告或错误,说明密钥配置有效,源可以正常工作。

2.4 何时使用 apt-key del

查看现有的密钥

首先,运行 apt-key list 命令列出当前系统中添加的所有 GPG 密钥:

sudo apt-key list

这将显示所有现有的密钥及其对应的 ID。找到需要替换的密钥,并记下它们的 ID。

使用 apt-key del 删除密钥

尽管 apt-key 已经被废弃,并不推荐在日常操作中使用。但在某些情况下(如维护旧脚本时),仍然可以通过 apt-key del 来删除已经添加的密钥。
如果需要删除一个 GPG 密钥,可以使用以下命令:

sudo apt-key del <key_id>

其中 <key_id> 是您在前面步骤中记下的密钥 ID。

注意事项

  • 这种方法仅适用于删除 GPG 密钥。请避免在日常操作中频繁使用 apt-key,并尽可能迁移到新的密钥管理方法。
  • apt-key 被废弃后,推荐使用其他更安全的密钥管理方式,例如将 GPG 密钥存储在 /etc/apt/trusted.gpg.d/ 目录下。

三、优势与新方法的安全性

3.1 更加安全

新的方法通过将每个软件源的密钥与其源进行明确关联,避免了共享密钥带来的潜在风险。特别是通过 Signed-By 选项,密钥仅与特定软件源相关联,减少了密钥泄漏和滥用的风险。

3.2 增强的灵活性

新的密钥管理方法提供了更高的灵活性。用户可以轻松地为每个软件源指定独立的密钥文件,而不再受限于 /etc/apt/trusted.gpg.d/ 目录。这使得密钥管理变得更加清晰和可维护。

3.3 更好的兼容性

随着 APT 项目的更新,新的密钥管理方式与未来版本的 APT 兼容性更好。采用新的方法,用户可以避免未来版本中出现的兼容性问题。

四、图示:APT 密钥管理方法比较

CSDN @ 2136
APT 密钥管理
传统方法: 使用 apt-key
下载 GPG 密钥并使用 apt-key 添加
将密钥添加到系统的信任密钥库
弃用警告
官方推荐方法
使用 wget 下载 GPG 密钥
使用 tee 将密钥保存到指定目录
存储到 /etc/apt/trusted.gpg.d/ 目录
使用 Signed-By 选项
APT 2.4 版本及以上
推荐将密钥存储到 `/etc/apt/keyrings/` 目录
支持使用 deb822 格式的 sources.list
允许将密钥直接嵌入源列表中
无需将密钥存储在特定目录
在 sources.list 文件中指定密钥路径
验证源的有效性
删除旧的 apt-key 管理密钥
CSDN @ 2136

图解说明:

  1. APT 密钥管理

    • 管理APT包源的安全性,确保软件包来自可信源。
  2. 传统方法: 使用 apt-key

    • 下载并添加 GPG 密钥:通过 apt-key 下载密钥并添加到系统。
    • 信任密钥库:将密钥添加到系统信任库。
    • 弃用警告apt-key 已被弃用,不再推荐使用。
  3. 推荐方法

    • 使用 wget 下载 GPG 密钥:通过 wget 获取密钥。
    • 使用 tee 保存密钥:保存密钥到系统指定目录。
    • 存储到 /etc/apt/trusted.gpg.d/:密钥存储在此目录。
    • 使用 Signed-By 选项:在源配置中使用 Signed-By 指定密钥。
  4. APT 2.4 版本及更高

    • 推荐存储密钥到 /etc/apt/keyrings/ 目录:新的密钥存储目录。
    • 支持 deb822 格式:使用新的源列表格式。
    • 允许嵌入密钥到源列表:密钥可以直接嵌入在源列表文件中。
    • 无需特定目录存储:无需专门目录来存储密钥。
  5. 验证与删除旧密钥

    • 指定密钥路径:在源列表文件中配置密钥路径。
    • 验证源有效性:确保源的有效性和安全性。
    • 删除旧的 apt-key 密钥:清理已弃用的密钥管理方法。

五、常见问题解答

5.1 使用新方法管理密钥时,如何删除旧的密钥?

如果曾使用过 apt-key 添加过密钥,并且希望移除它们,可以使用 apt-key del 命令,如下所示:

sudo apt-key del <keyid>

这将在系统中删除指定的密钥。删除后,请确保通过新的方法(如 tee 命令或 signed-by 选项)重新配置密钥,以保证系统继续能够验证包的合法性。

5.2 为什么不直接将密钥存储到 /etc/apt/trusted.gpg 文件中?

将密钥存储在 /etc/apt/trusted.gpg 中不再推荐,主要是因为:

  • 安全性:将所有密钥放在同一个文件中容易遭受篡改风险,尤其是在多密钥管理的情况下。
  • 灵活性:将每个密钥单独存储在 /etc/apt/trusted.gpg.d/ 目录下,能够更灵活地管理和更新密钥,并减少单一故障点。
  • 符合标准:新的方法符合现代 Linux 系统的密钥管理要求,提供了更高的安全性和可维护性。

5.3 APT 2.4 或更高版本的兼容性如何?

APT 2.4 版本和更高版本引入了 signed-by 选项的增强功能。可以通过在 sources.list 文件中直接指定密钥的路径或文件来管理 GPG 密钥,并不再依赖 /etc/apt/trusted.gpg 文件。这为多密钥管理提供了更多灵活性,同时增强了系统的安全性。

5.4 如何删除所有使用 apt-key add 添加的密钥?

要删除所有通过 apt-key add 添加的密钥,您只需删除 /etc/apt/trusted.gpg 文件:

sudo rm /etc/apt/trusted.gpg

注意事项

  • 删除该文件将移除系统中所有的 GPG 密钥,因此在执行此操作之前,请确保不再需要这些密钥。
  • 为了更好地管理密钥,建议使用新的密钥管理方法(如将密钥存储在 /etc/apt/trusted.gpg.d/ 目录中)。

总结

随着 APT 2.4 版本的发布,apt-key 已被弃用,用户需迁移至新的密钥管理方法。这一变化是为了提高系统的安全性和灵活性,适应日益复杂的安全需求。在官方推荐的新方法中,用户可以使用 tee 命令将 GPG 密钥保存至 /etc/apt/keyrings/ 目录,并通过 Signed-By 选项在 sources.list 文件中指定密钥路径,从而确保软件源的验证更加安全、可维护。

这一过渡不仅符合未来 APT 版本的兼容性需求,还能加强密钥管理的灵活性。虽然迁移过程可能需要一些时间适应,但长远来看,这种新的密钥管理方法将提高系统的安全性,减少潜在的安全风险,并增强对新版本 APT 的支持。因此,尽早采用新方法是非常必要的,以确保系统的稳定性和安全性。

参考资料

  • APT 官方文档


http://www.kler.cn/a/515447.html

相关文章:

  • 学到一些小知识关于Maven 与 logback 与 jpa 日志
  • Plotly 函数图像绘制
  • ZooKeeper 中的 ZAB 一致性协议与 Zookeeper 设计目的、使用场景、相关概念(数据模型、myid、事务 ID、版本、监听器、ACL、角色)
  • QT调用OpenSceneGraph
  • opengrok_windows_环境搭建
  • 代码随想录算法训练营第 14 天(树2)| 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度
  • J1打卡——鸟类识别
  • 智慧公安(实景三维公安基层基础平台)建设方案——第4章
  • Spring的条件加载
  • Github配置ssh详细步骤
  • Linux 系统服务开机自启动指导手册
  • owasp SQL 手工注入 - 02 (技巧)
  • Android 问题00_IncompatibleComposeRuntimeVersionException
  • Fastapi + vue3 自动化测试平台(4)-- fastapi分页查询封装
  • 前端jquery 实现文本框输入出现自动补全提示功能
  • yolov11 推理保存json
  • Windows 环境下 Docker Desktop + Kubernetes 部署项目指南
  • 免费SSL证书申请,springboot 部署证书
  • 【自动化测试】—— Appium使用保姆教程
  • SoftGNSS软件接收机源码阅读(一)程序简介、运行调试、执行流程
  • 数据结构——树和二叉树
  • Linux 下注册分析(1)
  • 用AI生成PPT,办公效率提升新方式
  • 基于 Vue3 + Canvas + Web Worker 实现高性能图像黑白转换工具的设计与实现
  • Linux通过docker部署京东矩阵容器服务
  • canvas基础