【Linux】解决 apt-key 弃用问题:GPG 直接管理密钥取代 apt-key ...

火影  金牌会员 | 2025-3-10 03:31:46 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 976|帖子 976|积分 2928

引言

在 Linux 系统,尤其是 Debian 和 Ubuntu 中,APT(Advanced Package Tool)是广泛利用的包管理工具,负责安装、更新和管理系统软件包。汗青上,apt-key 下令一直被用来管理 GPG 密钥,验证软件包的合法性和完备性。然而,随着 Linux 系统的安全性需求提升,apt-key 已被标记为弃用,并且将逐步被替换为更加当代和安全的密钥管理方式。新的方法推荐直接利用 GPG 来管理密钥,进一步进步了灵活性和安全性。本文将探究 apt-key 被弃用的背景,并具体阐述如何解决这一问题,通过 GPG 直接管理密钥,以保证软件包验证过程的安全与完备性。

  
一、什么是 apt-key 及其作用

在 Debian 和 Ubuntu 系统中,apt-key 是用来管理用于验证包管理系统(APT)中软件包签名的 GPG 密钥的工具。APT 利用 GPG 密钥来确保下载的包的来源可靠,从而克制包被篡改。apt-key 管理的密钥可以存储在 /etc/apt/trusted.gpg 文件中。
随着时间的推移,apt-key 下令逐渐被标记为“弃用”,意味着将来会被移除或替换。
1.1 apt-key 的工作流程

1.1.1 添加软件源

当你添加新的软件源时,系统会要求你为该源提供一个公钥,用于验证软件包的签名。没有这个密钥,APT 将无法验证软件包是否可信,从而导致安全风险。软件源的公钥可以从软件发布者获取,通常通过官方网站或某些安全渠道提供。
1.1.2 下载并验证软件包

每次通过 APT 安装或更新软件包时,APT 会检查软件包的签名与存储在本地的密钥是否匹配。假如匹配,软件包就被认为是可信的,并且安装过程继续进行。假如签名不匹配,则会显示警告,甚至拒绝安装该软件包。
1.1.3 管理密钥

apt-key 主要用于管理这些公钥。通过 apt-key 下令,用户可以添加、删除或查看 GPG 密钥。全部密钥都会被保存在 /etc/apt/trusted.gpg 文件中,APT 会从该文件中获取公钥以进行验证。
1.2 GPG 密钥的作用



  • 签名验证:每个软件包都有一个 GPG 签名,apt-key 用于验证这些签名。
  • 确保软件包来源可信:通过验证签名,APT 可以确认软件包是否来自预期的软件源。
  • 防止软件包篡改:假如软件包的签名无效,APT 会拒绝安装该软件包,克制恶意篡改。
二、为什么 apt-key 被弃用?

随着安全性需求的进步和技能的进步,apt-key 的一些设计缺陷和局限性逐渐暴暴露来。为了提供更好的密钥管理,APT 的开发团队决定弃用 apt-key 下令。apt-key 的管理方式过于简单,可能导致密钥管理不够灵活,也难以有效区分不同来源的密钥。因此,为了进步安全性和灵活性,现在推荐利用更当代化的密钥管理方法。
根据官方文档,apt-key 将在 Debian 11 和 Ubuntu 22.04 之后完全弃用。因此,发起用户尽早开始过渡到新方法。
APT 团队决定弃用 apt-key,主要是出于以下几个安全和管理原因:

  • 密钥管理混乱:apt-key 将全部公钥保存在一个单一的文件 /etc/apt/trusted.gpg 中,如许的做法会导致密钥的管理变得复杂且不够安全。当多个软件源利用同一文件存储密钥时,可能会发生密钥冲突或管理不善的环境。
  • 无法区分来源:旧的 apt-key 管理方式没有办法清晰地标识和区分不同软件源的密钥,使得更新和打消某个源的密钥变得困难。
  • 密钥更新困难:假如需要打消或更新某个源的密钥,必须手动编辑整个文件,如许既繁琐又轻易出错。
  • 不符合当代安全要求:随着安全性要求的提升,密钥管理需要更加灵活和细粒度,apt-key 不能满足这些需求。新的密钥管理方式通过利用单独的 GPG 密钥文件,能够更好地适应当代的安全标准。
三、apt-key 已弃用的警告信息

在 Debian 10(Buster)和 Ubuntu 20.04 及之后的版本中,apt-key 被逐步弃用。运行 apt update 或其他与包管理相关的下令时,假如系统仍然依赖 apt-key,用户会看到类似以下的警告信息
  1. Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
复制代码
这表明,APT 已不再推荐利用 apt-key,而是发起用户利用 /etc/apt/trusted.gpg.d/ 目录来存储密钥。这个警告提示用户要尽早过渡到新的密钥管理方式。
四、如何以新的方式管理 GPG 密钥

APT 采用新的密钥管理机制,将每个软件源的 GPG 公钥存储在 /etc/apt/trusted.gpg.d/ 目录下,而不再利用 apt-key 来统一管理全部密钥。这种方式使得密钥管理更加细粒度化,增加了安全性和可维护性。
4.1 利用新方法添加 GPG 密钥

4.1.1 长途添加 GPG 密钥

为了增强安全性,推荐通过 curl 或 wget 从软件源提供的链接中获取 GPG 公钥,并导入到 APT 密钥环中。示例操作步调如下:
  1. curl -s https://example.com/repo/key.pub | sudo gpg --no-default-keyring --keyring /etc/apt/trusted.gpg.d/repo-name.gpg --import
复制代码


  • curl -s https://example.com/repo/key.pub:curl 下令从长途服务器下载指定的 GPG 公钥文件。-s 参数表示静默模式,不显示额外的进度信息。
  • sudo gpg --no-default-keyring --keyring /etc/apt/trusted.gpg.d/repo-name.gpg --import:gpg 下令将下载的公钥导入到指定的密钥环文件 /etc/apt/trusted.gpg.d/repo-name.gpg。此路径确保密钥被正确地存储并可用于验证相应的源。

    • --no-default-keyring:克制利用默认的密钥环,而是指定一个新的密钥环文件(即你所指定的文件)。
    • --keyring /etc/apt/trusted.gpg.d/repo-name.gpg:为每个软件源创建一个独立的密钥文件。
    • --import:导入公钥。

导入公钥后,你应该设置合适的权限来确保密钥文件的安全性:
  1. sudo chmod 644 /etc/apt/trusted.gpg.d/repo-name.gpg
复制代码


  • chmod 644:确保文件权限为 644,即全部用户可以读取,但只有管理员(root 用户)可以修改文件内容。
4.1.2 本地添加 GPG 密钥

假如你已经从某个地方下载了 GPG 密钥文件,可以直接将它导入到 APT 中。利用如下下令:
  1. cat /path/to/keyfile.pub | sudo gpg --no-default-keyring --keyring /etc/apt/trusted.gpg.d/repo-name.gpg --import
复制代码


  • cat /path/to/keyfile.pub:读取本地的公钥文件。
  • |:将文件内容传输给 gpg 下令进行处理惩罚。
  • 其他部分与之前相同,将密钥导入到指定的密钥环文件中。
导入公钥后,你应该设置合适的权限来确保密钥文件的安全性:
  1. sudo chmod 644 /etc/apt/trusted.gpg.d/repo-name.gpg
复制代码


  • chmod 644:确保文件权限为 644,即全部用户可以读取,但只有管理员(root 用户)可以修改文件内容。
4.2 从 GPG 密钥服务器获取密钥

有时间,你可能需要从 GPG 密钥服务器(比方 Ubuntu 密钥服务器)获取密钥,这时可以利用以下下令:
  1. sudo gpg --no-default-keyring --keyring /etc/apt/trusted.gpg.d/repo-name.gpg --keyserver keyserver.ubuntu.com --recv 6B73A36E6026DFCA
复制代码


  • --keyserver keyserver.ubuntu.com:指定从哪个密钥服务器下载公钥。你可以根据实际需要选择其他密钥服务器。
  • --recv 6B73A36E6026DFCA:接收并导入密钥,6B73A36E6026DFCA 是要导入的密钥的指纹。你需要根据提供源的要求指定正确的密钥 ID 或指纹。
导入密钥后,同样需要设置文件权限:
  1. sudo chmod 644 /etc/apt/trusted.gpg.d/repo-name.gpg
复制代码
4.3 查看已安装的 GPG 密钥

要查看系统中已导入的 GPG 密钥,你可以利用以下下令:
  1. gpg --list-keys --keyring /etc/apt/trusted.gpg.d/repo-name.gpg
复制代码


  • 这会显示特定密钥文件中的全部公钥信息,包罗密钥 ID、指纹等。
假如你希望查看全部系统中安装的 GPG 密钥,可以利用 apt-key 下令:
  1. sudo apt-key list
复制代码
此下令将列出全部在 APT 中利用的密钥,包罗通过 /etc/apt/trusted.gpg 和 /etc/apt/trusted.gpg.d/ 存储的密钥。固然 APT 正在逐步弃用 apt-key,但是此下令仍然可以用于查看传统的密钥管理系统中的密钥。
比方,输出可能类似于:
  1. /etch/apt/trusted.gpg.d/earth.gpg
  2. ------------------------------
  3. pub   rsa4096 2025-01-20 [SC] [expires: 2028-05-20]
  4.       A9D4 7D52 12F0 E256 1D84 0C32 A63A 9211 3F6A 6E32
  5. uid           [ unknown] Earth Software <support@earth.com>
  6. sub   rsa4096 2025-01-20 [E]
复制代码
具体分析:


  • pub:表示这是公钥(Public Key)。
  • rsa4096:表示密钥采用 RSA 算法,长度为 4096 位。
  • 2025-01-20:表示密钥的创建日期是 2025 年 1 月 20 日。
  • [SC]:表示该密钥用于签名(S)认证(C),即该密钥可以用来验证信息的真实性及其完备性。
  • [expires: 2028-05-20]:表示密钥的有效期至 2028 年 5 月 20 日,逾期后将无法利用该密钥。
  • A9D4 7D52 12F0 E256 1D84 0C32 A63A 9211 3F6A 6E32:是该公钥的唯一标识符(Key ID),可用于引用和辨认此密钥。
  • uid:表示与该密钥相关的用户标识,Earth Software <support@earth.com> 是该密钥的持有者及其联系邮箱地点。
  • sub:表示该密钥还拥有一个子密钥(Subkey),范例同样为 rsa4096,用于加密数据(标记为 [E])。
  • 密钥的用途分为[SC]和[E](SC 表示用于签名和认证,E 表示用于加密)。
4.4 删除 GPG 密钥

删除不再需要的 GPG 密钥,确保系统的安全。你可以直接删除 .gpg 文件:
  1. sudo rm /etc/apt/trusted.gpg.d/repo-name.gpg
复制代码
假如你是通过 apt-key 添加的密钥,可以通过以下下令删除:
  1. sudo apt-key del KEY_ID
复制代码


  • KEY_ID 是你要删除的密钥的 ID。可以通过 apt-key list 找到该 ID。
4.5 权限管理

密钥文件的权限非常紧张,应该确保密钥文件的权限设置为 644(对全部用户可读,只有 root 用户可写)。这有助于防止非授权用户修改密钥文件:
  1. sudo chmod 644 /etc/apt/trusted.gpg.d/repo-name.gpg
复制代码
别的,确保 /etc/apt/trusted.gpg.d/ 目录本身的权限正确,克制任何非法访问:
  1. sudo chmod 700 /etc/apt/trusted.gpg.d
复制代码
这会确保只有管理员可以访问该目录。
五、如何过渡到新的密钥管理方法

随着 apt-key 方法的弃用,推荐过渡到新的密钥管理方法以进步安全性。以下是过渡的具体步调:
步调 1:查看现有的密钥

起首,运行以下下令查看当前系统中已经添加的密钥:
  1. sudo apt-key list
复制代码
通过此下令,你可以列出系统中的全部密钥,并辨认出需要替换的旧密钥。记下不再需要的密钥 ID。
步调 2:删除旧的密钥

一旦辨认出过期的密钥,利用 apt-key del 删除旧的密钥,大概直接删除相关的 .gpg 文件:
  1. sudo apt-key del KEY_ID
复制代码
大概,直接删除存储在 /etc/apt/trusted.gpg.d/ 目录中的相关 .gpg 文件:
  1. sudo rm /etc/apt/trusted.gpg.d/old-key.gpg
复制代码
以 A9D4 7D52 12F0 E256 1D84 0C32 A63A 9211 3F6A 6E32 为示例密钥 ID:
  1. sudo apt-key del `A9D4 7D52 12F0 E256 1D84 0C32 A63A 9211 3F6A 6E32`
复制代码
此中 A9D4 7D52 12F0 E256 1D84 0C32 A63A 9211 3F6A 6E32 是您要删除的密钥 ID。删除后,您将看到类似以下的输出:
  1. OK
复制代码
这表示密钥已成功从系统中删除。
验证删除
可以利用 gpg --list-keys 或 apt-key list 来验证密钥是否被成功删除。
利用以下下令确认密钥已被删除:
  1. gpg --list-keys --keyring /etc/apt/trusted.gpg.d/earth.gpg
复制代码
假如文件已被删除,您应该会看到类似下面的输出,表示没有密钥:
  1. /etc/apt/trusted.gpg.d/earth.gpg
  2. ------------------------------
  3. gpg: keyblock resource `/etc/apt/trusted.gpg.d/earth.gpg': file open failed: No such file or directory
复制代码
这表明 earth.gpg 文件以及此中的密钥已经成功删除。
步调 3:添加新的密钥

在删除旧密钥后,按照以下步调添加新的 GPG 密钥:


  • 从长途 URL 获取密钥:
    1. curl -fsSL https://example.com/repo-public.gpg | sudo tee /etc/apt/trusted.gpg.d/repo-name.gpg
    复制代码
  • 大概,从密钥服务器导入:
    1. sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys KEY_ID
    复制代码
  • 大概,从本地文件添加:
    1. sudo cp /path/to/key.gpg /etc/apt/trusted.gpg.d/
    复制代码
确保将新密钥添加到 /etc/apt/trusted.gpg.d/ 目录中。
步调 4:确保密钥的权限正确

为了保证密钥文件的安全性,请检查并设置得当的文件权限:
  1. sudo chmod 644 /etc/apt/trusted.gpg.d/repo-name.gpg
复制代码
此下令确保文件可以被系统读取,但只有管理员有权修改。
六、密钥管理流程图

以下是添加、删除和管理 GPG 密钥的基本流程图,资助您更清晰地理解过渡过程。
     此流程图展示了从查看现有密钥到添加新密钥的步调。
总结

APT 包管理器的广泛利用意味着密钥管理在保障系统安全性中饰演偏紧张脚色。随着 apt-key 的逐步弃用,过渡到基于 GPG 的新密钥管理方法成为当务之急。固然 apt-key 在较长时间内仍然可用,但为了提升系统的安全性,过早开始适应新方法是明智的选择。本文具体介绍了如何有效地迁移到新的密钥管理方法,包罗添加、删除和查看 GPG 密钥的操作,同时提供了直观的引导,资助用户顺利完成这一过渡,以确保 Linux 系统的稳定性与安全性。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

火影

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表