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

引言

随着 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.mzph.cn/news/893523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9. 神经网络(一.神经元模型)

首先&#xff0c;先看一个简化的生物神经元结构&#xff1a; 生物神经元有多种类型&#xff0c;内部也有复杂的结构&#xff0c;但是可以把单个神经元简化为3部分组成&#xff1a; 树突&#xff1a;一个神经元往往有多个树突&#xff0c;用于接收传入的信息。轴突&#xff1a;…

Web 音视频(二)在浏览器中解析视频

前言 浏览器中已经能直接播放视频&#xff0c;为什么还需要手动写代码解析&#xff1f; 因为&#xff0c;某些场景需要对视频进行更细致的处理&#xff0c;比如截取关键帧、提取视频中的文字、人物打码、极低延时播放视频等等。 总之&#xff0c;除了最单纯的视频播放外&…

代码随想录刷题day14(2)|(链表篇)02.07. 链表相交(疑点)

目录 一、链表理论基础 二、链表相交求解思路 三、相关算法题目 四、疑点 一、链表理论基础 代码随想录 二、链表相交求解思路 链表相交时&#xff0c;是结点的位置&#xff0c;也就是指针相同&#xff0c;不是结点的数值相同&#xff1b; 思路&#xff1a;定义两个指针…

ETLCloud在iPaas中的是关键角色?

在当今的数字化时代&#xff0c;企业越来越依赖于其处理和分析数据的能力。为了实现这一目标&#xff0c;企业需要将各种异构的应用和数据源集成在一起&#xff0c;形成一个统一的数据视图。在这一过程中&#xff0c;ETL&#xff08;Extract, Transform, Load&#xff09;和iPa…

以太网实战AD采集上传上位机——FPGA学习笔记27

一、设计目标 使用FPGA实现AD模块驱动采集模拟电压&#xff0c;通过以太网上传到电脑上位机。 二、框架设计 数据位宽转换模块&#xff08;ad_10bit_to_16bit&#xff09;&#xff1a;为了方便数据传输&#xff0c;数据位宽转换模块实现了将十位的 AD 数据转换成十六位&#…

YOLOv1、YOLOv2、YOLOv3目标检测算法原理与实战第十三天|YOLOv3实战、安装Typora

1.学习哔哩哔哩《YOLOv1、YOLOv2、YOLOv3目标检测算法原理与实战》 炮哥带你学视频链接 第5章 YOLOv3实战 5.1 YOLOv3实战先导 5.2 pycharm与anaconda的安装 之前已经安装过了&#xff0c;见Pytorch框架与经典卷积神经网络与实战第一天|安装PyCharm&Anaconda&#xff0…

C语言常用知识结构深入学习

面试大保健-C语言-变量day01 1. C语言的重要性 大家好&#xff01;今天我们来聊一聊 C 语言。作为嵌入式开发的基础&#xff0c;C语言在面试中必定是一个重点&#xff0c;虽然具体会问到哪些问题不好预测&#xff0c;但可以肯定的是&#xff0c;基础知识绝对不会少问。所以&a…

Java算法——排序

目录 引言1. 插入排序1.1 基本思想1.2 直接插入排序1.3 希尔排序 2. 选择排序2.1 基本思想2.2 直接选择排序2.3 直接选择排序变种2.4 堆排序 3. 交换排序3.1 基本思想3.2 冒泡排序3.3 快速排序3.3.1 快速排序的基本结构3.3.2 Hoare法3.3.3 挖坑法3.3.4 双指针法 3.4 快速排序非…

java字典注入与关联注入

一、注解类 import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;Documented Target(ElementType.METHOD) Retent…

数据库SQLite和SCADA DIAView应用教程

课程简介 此系列课程大纲主要包含七个课时。主要使用到的开发工具有&#xff1a;SQLite studio 和 SCADA DIAView。详细的可成内容大概如下&#xff1a; 1、SQLite 可视化管理工具SQLite Studio &#xff1a;打开数据库和查询数据&#xff1b;查看视频 2、创建6个变量&#x…

docker 部署.netcore应用优势在什么地方?

目录 1. 环境一致性 2. 简化依赖管理 3. 快速部署与扩展 4. 资源利用率高 5. 版本控制与回滚 6. 安全性 7. 生态系统支持 8. 微服务架构支持 9. 降低成本 10. 开发体验提升 总结 使用 Docker 部署 .NET Core 应用有许多优势&#xff0c;特别是在开发、测试和生产环境…

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

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

Oracle之Merge into函数使用

Merge into函数为Oracle 9i添加的语法&#xff0c;用来合并update和insert语句。所以也经常用于update语句的查询优化&#xff1a; 一、语法格式&#xff1a; merge into A using B on (A.a B.a) --注意on后面带括号&#xff0c;且不能更新join的字段 when matched then upd…

【DGL系列】dgl中为graph指定CSR/COO/CSC矩阵格式

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 只讲几个注意事项&#xff1a; 1、graph.formats() 函数可以查看graph格式&#xff0c;也可以指定graph格式。 g dgl.graph(([0, 0, 1], [2, 3, 2])…

Addressable学习

AssetsBundle是Unity的资源管理机制,将资源打包到AssetsBundle资源包并提供接口能从ab包里面加载资源出来。有了这个机制以后&#xff0c;我们要做资源管理&#xff0c;还需要做: a: 根据项目需求,编写编辑器扩展,提供指定资源打入对应bundle包工具策略; b: 根据项目的需求,资源…

概率密度函数(PDF)分布函数(CDF)——直方图累积直方图——直方图规定化的数学基础

对于连续型随机变量&#xff0c;分布函数&#xff08;Cumulative Distribution Function, CDF&#xff09;是概率密度函数&#xff08;Probability Density Function, PDF&#xff09;的变上限积分&#xff0c;概率密度函数是分布函数的导函数。 如果我们有一个连续型随机变量…

鞅的定义_

内容来源 应用随机过程&#xff08;第五版&#xff09;张波 商豪 邓军 编著 定义 随机过程 { X n } \{X_n\} {Xn​} 称为关于 { Y n } \{Y_n\} {Yn​} 的下鞅&#xff0c;如果 对 n ⩾ 0 n\geqslant0 n⩾0&#xff0c; X n X_n Xn​ 是 Y 0 , Y 1 , ⋯ , Y n Y_0,Y_1,\cd…

深入解析:Docker 容器如何实现文件系统与资源的多维隔离?

目录 一、RootFs1. Docker 镜像与文件系统层2. RootFs 与容器隔离的意义 二、Linux Namespace1. 进程命名空间1.1 lsns 命令说明1.2 查看“祖先进程”命名空间1.3 查看当前用户进程命名空间 2. 容器进程命名空间2.1 查看容器进程命名空间列表2.2 容器进程命名空间的具体体现 三…

深度学习|表示学习|卷积神经网络|由参数共享引出的特征图|08

如是我闻&#xff1a; Feature Map&#xff08;特征图&#xff09;的概念与 Parameter Sharing&#xff08;参数共享&#xff09;密切相关。换句话说&#xff0c;参数共享是生成 Feature Map 的基础。Feature Map 是卷积操作的核心产物&#xff0c;而卷积操作的高效性正是由参数…

【Linux网络编程】传输层协议

目录 一&#xff0c;传输层的介绍 二&#xff0c;UDP协议 2-1&#xff0c;UDP的特点 2-2&#xff0c;UDP协议端格式 三&#xff0c;TCP协议 3-1&#xff0c;TCP报文格式 3-2&#xff0c;TCP三次握手 3-3&#xff0c;TCP四次挥手 3-4&#xff0c;滑动窗口 3-5&#xf…