【Linux】APT 密钥管理迁移指南:有效解决 apt-key 弃用警告

embedded/2025/1/24 1:47:25/

引言

随着 Debian 11 和 Ubuntu 22.04 版本的推出,APT 的密钥管理方式发生了重大的变化。apt-key 命令被正式弃用,新的密钥管理机制要求使用 /etc/apt/keyrings//etc/apt/trusted.gpg.d/ 来存储和管理密钥。这一变化对管理员和普通用户来说至关重要,特别是当通过 apt updateapt upgrade 执行系统更新时,可能会遇到关于 apt-key 弃用的警告信息。

本博客将详细讲解如何处理 apt-key 弃用警告,如何迁移到新的密钥管理方法,同时提供具体的命令、步骤和解释,帮助大家更好地理解这一变更。

过渡步骤概览

当您遇到 apt-key 弃用的警告时,通常是因为系统中存在使用 apt-key 添加的密钥。为了应对这种情况,需要进行以下操作:

  1. 确定哪些密钥存储在 /etc/apt/trusted.gpg 文件中
  2. 删除过时的密钥,避免产生警告信息。
  3. 安装并配置替代的密钥,使用新的密钥存储路径 /etc/apt/keyrings//etc/apt/trusted.gpg.d/

目录

  • 引言
  • 一、apt-key 弃用警告解析
    • 1.1 发生了什么?
    • 1.2 为什么要迁移?
    • 1.3 新的密钥管理方式
  • 二、迁移密钥管理的步骤
    • 2.1 查找和删除密钥
      • 2.1.1 查找已存储的密钥
      • 2.1.2 删除不需要的密钥
    • 2.2 获取新的密钥并添加
      • 2.2.1 从官方网站获取 GPG 密钥
      • 2.2.2 使用 `wget` 或 `curl` 下载 GPG 密钥
      • 2.2.3 设置文件权限
    • 2.3 使用 `Signed-By` 选项
    • 2.4 验证密钥是否有效
    • 2.5 完成迁移
  • 三、完整示例:迁移密钥管理密钥
  • 四、迁移流程图
  • 总结

一、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 被弃用的原因主要有以下几点:

  • 安全问题apt-key 将所有密钥存储在单个文件中(如 /etc/apt/trusted.gpg),这使得密钥容易受到篡改或丢失的风险。
  • 缺乏灵活性:它无法细粒度地管理每个软件源的独立密钥,尤其是在需要管理多个源时不够方便。
  • 新的标准:推荐使用/etc/apt/keyrings//etc/apt/trusted.gpg.d/ 目录来管理密钥,增强了安全性和可维护性。

这些问题促使了新的密钥管理方式的出现,它可以提高系统的安全性和灵活性,更好地满足现代化需求。

1.3 新的密钥管理方式

新的密钥管理方法建议将密钥文件存储在 /etc/apt/keyrings//etc/apt/trusted.gpg.d/ 目录,并通过 APT 配置文件中的 Signed-By 选项来指定每个软件源的密钥。这样做有几个优点:

  • 独立管理:每个存储库可以使用单独的密钥,避免了 apt-key 所带来的密钥泄露风险。
  • 增强安全性:通过将密钥存储在专用的目录下,密钥管理变得更加安全,且每个密钥的使用场景更加清晰。
  • 灵活性提升:可以更精细地管理每个软件源的认证,提高密钥管理的灵活性。

二、迁移密钥管理的步骤

2.1 查找和删除密钥

首先,检查当前系统中的所有密钥,并删除不再需要的密钥。

2.1.1 查找已存储的密钥

使用 apt-key list 命令查看系统中存储的所有密钥:

$ sudo apt-key list

此命令会显示当前存储在 /etc/apt/trusted.gpg 文件和 /etc/apt/trusted.gpg.d/ 目录中的所有 GPG 密钥。输出信息包括密钥的 ID、相关的仓库以及该密钥的创建日期等信息。

输出示例:

Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8))./etc/apt/trusted.gpg
--------------------
pub   rsa4096 2025-01-20 [SC]A9D4 7D52 12F0 E256 1D84 0C32 A63A 9211 3F6A 6E32
uid           [ unknown] Example <support@example.com>
sub   rsa4096 2025-01-20 [E]pub   rsa4096 2025-01-20 [SC]A4B6 2D8F 8F54 6B7A 5E88 7F16 24B2 A562 54D6 5F76
uid           [ unknown] Google Inc. (Linux Packages Signing Authority) <linux-packages-keymaster@google.com>
sub   rsa4096 2025-01-20 [S] [expires: 2028-01-19]

这些密钥是用来验证各个软件源包的。可以看到,密钥文件中包含多个软件源的密钥,如 Example 和 Google 等。

2.1.2 删除不需要的密钥

可以使用 apt-key del 命令删除不再需要的 GPG 密钥,指定要删除的密钥标识符(通常是一组四位数的十六进制数字)。例如,删除与 Example 相关的密钥,可以执行以下命令:

sudo apt-key del A9D4 7D52 12F0 E256 1D84 0C32 A63A 9211 3F6A 6E32

请根据实际情况替换命令中的密钥标识符删除不需要的密钥。删除密钥后,相关存储库将无法使用此密钥进行认证。如果仍需访问该存储库,必须为其添加新的密钥。

2.2 获取新的密钥并添加

获取和安装新的 GPG 密钥是确保从外部软件源安装软件包时,保持系统安全的一个重要步骤。密钥的获取方法会根据应用程序的不同而有所不同,取决于具体的应用程序。

以下是详细的操作步骤和示例:

2.2.1 从官方网站获取 GPG 密钥

大多数应用程序会在其官方网站提供用于验证软件包的 GPG 密钥,以便验证软件包的完整性和真实性。可以使用 wgetcurl 命令从应用程序的官方网站下载 GPG 密钥。

2.2.2 使用 wgetcurl 下载 GPG 密钥

首先,假设要安装一个应用程序,比如 MyApp,并且该应用程序提供了 GPG 密钥。可以从其官方网站下载密钥。

使用 wget 下载密钥:

wget -qO - https://myapp.example.com/repo/myapp.gpg | sudo tee /etc/apt/keyrings/myapp.gpg

解释:

  • -qO -wget 将以安静模式下载文件并将其输出到标准输出(即终端)。
  • https://myapp.example.com/repo/myapp.gpg:这是应用程序的 GPG 密钥文件的 URL。
  • sudo tee /etc/apt/keyrings/myapp.gpgtee 命令会将密钥保存到 /etc/apt/keyrings/ 目录中。

使用 curl 下载密钥:

curl -fsSL https://myapp.example.com/repo/myapp.gpg | sudo tee /etc/apt/keyrings/myapp.gpg

解释:

  • -fsSLcurl 的选项,确保下载时不显示进度信息、若失败则不输出错误信息,并且支持 SSL。
  • https://myapp.example.com/repo/myapp.gpg:GPG 密钥文件的 URL。
  • sudo tee /etc/apt/keyrings/myapp.gpg:保存密钥到 /etc/apt/keyrings/ 目录。

2.2.3 设置文件权限

确保密钥文件的权限安全,以防止其他用户篡改密钥。

sudo chown root:root /etc/apt/keyrings/myapp.gpg
sudo chmod 644 /etc/apt/keyrings/myapp.gpg
  • chown root:root:确保密钥文件属于 root 用户和 root 用户组。
  • chmod 644:确保文件具有适当的权限,使得只有 root 用户能够修改,其他用户可以读取。

2.3 使用 Signed-By 选项

为确保每个软件源使用正确的密钥,可以将密钥存放在 /etc/apt/keyrings/ 目录,并通过 Signed-By 选项在 APT 配置文件 /etc/apt/sources.list/etc/apt/sources.list.d/ 文件中指定密钥。这样可以提高密钥管理的精确性和安全性。

例如,假设 MyApp 提供了一个软件源,可以将其添加到 APT 的源列表中并使用 Signed-By 指定密钥:

echo "deb [signed-by=/etc/apt/keyrings/myapp.gpg] https://myapp.example.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/myapp.list

解释:

  • deb [signed-by=/etc/apt/keyrings/myapp.gpg] https://myapp.example.com/debian/ stable main:将 MyApp 的软件源添加到 APT 源列表中,并使用 Signed-By 选项指定 GPG 密钥的路径。
  • deb [signed-by=/etc/apt/keyrings/myapp.gpg]:指定软件源使用 /etc/apt/keyrings/myapp.gpg 作为 GPG 密钥。
  • https://myapp.example.com/debian/ stable main:添加 MyApp 的软件源。

2.4 验证密钥是否有效

要确保密钥已正确配置并生效,可以使用以下命令查看 /etc/apt/keyrings/ 目录下的文件列表:

ls -l /etc/apt/keyrings/

输出应该类似于:

-rw-r--r-- 1 root root 7821 Sep  2 10:55 myapp.gpg

如果看到类似的输出,说明密钥已经正确配置。这些文件代表着不同软件包源的密钥文件。

2.5 完成迁移

完成上述步骤后,可以运行 apt update 命令来检查迁移是否成功。一旦密钥迁移完成,系统将不再显示关于 apt-key 弃用的警告。

sudo apt update

如果一切顺利,更新过程将顺利完成,而不会再显示弃用的警告或错误信息。

三、完整示例:迁移密钥管理密钥

以下示例展示了如何添加 MyApp 软件源并确保其安全性。操作步骤包括下载 GPG 密钥、配置软件源、设置文件权限、并最终安装所需的软件包。

操作步骤概览:

  1. 查找 GPG 密钥:使用 sudo apt-key list 命令查看系统中存储的 GPG 密钥。
  2. 删除不需要的 GPG 密钥:使用 sudo apt-key del 命令删除不需要的密钥。
  3. 下载 GPG 密钥:通过 wgetcurl 命令下载 GPG 密钥。
  4. 存储密钥:将密钥存储到 /etc/apt/keyrings/ 目录。
  5. 设置文件权限:确保密钥文件的权限安全。
  6. 配置 APT 使用密钥:在软件源配置文件中使用 Signed-By 选项指定密钥路径。
  7. 安装软件包:更新软件包列表并安装所需的软件包。

具体步骤:
假设要安装 MyApp,并且该应用程序的 GPG 密钥和软件源都提供了。以下是完整的操作步骤:

  1. 查找系统中已有的 GPG 密钥
sudo apt-key list
  1. 删除不需要的 GPG 密钥

    如果 myapp 密钥的标识符是 A9D4 7D52 12F0 E256 1D84 0C32 A63A 9211 3F6A 6E32,删除命令如下:

    sudo apt-key del A9D4 7D52 12F0 E256 1D84 0C32 A63A 9211 3F6A 6E32
    
  2. 下载 GPG 密钥并保存到 /etc/apt/keyrings/ 目录:

    wget -qO - https://myapp.example.com/repo/myapp.gpg | sudo tee /etc/apt/keyrings/myapp.gpg
    
  3. 设置密钥文件的权限:

    sudo chown root:root /etc/apt/keyrings/myapp.gpg
    sudo chmod 644 /etc/apt/keyrings/myapp.gpg
    
  4. 配置 APT添加软件源并指定 GPG 密钥:

    echo "deb [signed-by=/etc/apt/keyrings/myapp.gpg] https://myapp.example.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/myapp.list
    
  5. 更新软件包列表并安装应用程序:

    sudo apt update
    sudo apt install myapp
    

四、迁移流程图

为了帮助大家更好地理解迁移过程,下面提供了一个流程图,简明扼要地展示了迁移步骤:

CSDN @ 2136
旧的 GPG 密钥存储
删除不必要的旧密钥
获取新的 GPG 密钥
将密钥添加到 APT 配置文件中
验证密钥是否有效
完成迁移, 避免 apt-key 弃用警告
CSDN @ 2136

图解说明

  1. 旧的 GPG 密钥存储:首先,使用 apt-key list 列出当前密钥,确定哪些是过时的或不再需要的。
  2. 删除旧密钥:通过 apt-key del 命令删除不再需要的密钥。
  3. 获取新的 GPG 密钥:根据不同的应用程序或软件源,获取并下载新的 GPG 密钥。
  4. 添加密钥到指定位置:将新的密钥存储到 /etc/apt/trusted.gpg.d/etc/apt/keyrings/ 目录。
  5. 验证密钥有效性:检查密钥是否已正确添加,确保 APT 使用新的密钥进行包验证。
  6. 完成迁移:完成所有步骤后,运行 apt update 检查迁移结果,APT 将不会再显示弃用警告。

总结

通过迁移 apt-key 的密钥管理方式,可以更安全地管理系统的存储库和软件包源,避免将来因 apt-key 被废弃而导致的兼容性问题。通过这篇博客的步骤和示例,应该能够顺利完成密钥的迁移,并确保系统能够继续顺利地进行软件包更新。

对于未来的版本,APT 可能会继续改进密钥管理方式,因此保持系统的更新和对新技术的适应将帮助你保持系统的安全性和稳定性。

在实际操作中,现在可以使用 apt update 而不会遇到与废弃密钥配置相关的警告或错误。需要注意的是,用户应当根据新的要求调整依赖于 apt-key 的旧安装方法,改用将密钥安装到 /etc/apt/trusted.gpg.d//etc/apt/keyrings/ 目录下的方式,并根据需要使用 gpg 来管理密钥。

如果你觉得这篇文章对你有帮助,请留言讨论或分享给更多需要的人!



http://www.ppmy.cn/embedded/156448.html

相关文章

【Python】笔试面试题之生成器、闭包、字典

文章目录 一、生成器是什么1. 最简单的生成器2. 在函数中使用yield关键字 二、闭包是什么&#xff1f;怎么理解&#xff1f;1. 案例12. 案例2&#xff1a;实现项目的日志处理3. 案例3&#xff1a;装饰器就是一种闭包4. 总结 三、Python中字典的底层是怎么实现的1. 相关概念2. P…

Python从0到100(八十五):神经网络-使用迁移学习完成猫狗分类

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

1. 基于图像的三维重建

1. 基于图像的三维重建 核心概念三维重建中深度图、点云的区别&#xff1f;深度图点云总结 深度图到点云还需要什么步骤&#xff1f;1. **获取相机内参**2. **生成相应的像素坐标**3. **计算三维坐标**4. **构建点云**5. **处理颜色信息&#xff08;可选&#xff09;**6. **去除…

centos哪个版本建站好?centos最稳定好用的版本

在信息化飞速发展的今天&#xff0c;服务器操作系统作为构建网络架构的基石&#xff0c;其稳定性和易用性成为企业和个人用户关注的重点。CentOS作为一款广受欢迎的开源服务器操作系统&#xff0c;凭借其强大的性能、出色的稳定性和丰富的软件包资源&#xff0c;成为众多用户建…

Windows7搭建Hadoop-2.7.3源码阅读环境问题解决列表

个人博客地址:Window7搭建Hadoop-2.7.3源码阅读环境问题解决列表 | 一张假钞的真实世界 环境说明 Windows 7java version “1.7.0_80”Apache Maven 3.2.3ProtocolBuffer 2.5.0cmake version 3.7.2 win64 x64Windows SDK 7.1构建过程参照源代码目录下BUILDING.txt说明文件中的…

YOLOv8改进,YOLOv8检测头融合DSConv(动态蛇形卷积),并添加小目标检测层(四头检测),适合目标检测、分割等

精确分割拓扑管状结构例如血管和道路,对各个领域至关重要,可确保下游任务的准确性和效率。然而,许多因素使任务变得复杂,包括细小脆弱的局部结构和复杂多变的全局形态。在这项工作中,注意到管状结构的特殊特征,并利用这一知识来引导 DSCNet 在三个阶段同时增强感知:特征…

Vue3+Element Plus 实现 el-table 表格组件滚动是否触底监听判断

问题描述 Element Plus 中的 el-table 组件暴露出了 scroll 事件&#xff0c;表格被用户滚动后会触发&#xff0c;暴露出横向和竖向的滚动距离&#xff0c;未暴露出表格的DOM对象。 ({ scrollLeft: number, scrollTop: number }) > void此时&#xff0c;可以通过表格的引用…

摄影交流平台项目Uniapp+Springboot已完成

后端项目结构 前端项目结构 前端效果