随着 Debian 11 和 Ubuntu 22.04 版本的推出,APT 的密钥管理方式发生了重大的变化。apt-key
命令被正式弃用,新的密钥管理机制要求使用 /etc/apt/keyrings/
或 /etc/apt/trusted.gpg.d/
来存储和管理密钥。这一变化对管理员和普通用户来说至关重要,特别是当通过 apt update
或 apt upgrade
执行系统更新时,可能会遇到关于 apt-key
弃用的警告信息。
本博客将详细讲解如何处理 apt-key
弃用警告,如何迁移到新的密钥管理方法,同时提供具体的命令、步骤和解释,帮助大家更好地理解这一变更。
过渡步骤概览
当您遇到 apt-key
弃用的警告时,通常是因为系统中存在使用 apt-key
添加的密钥。为了应对这种情况,需要进行以下操作:
/etc/apt/trusted.gpg
文件中。/etc/apt/keyrings/
或 /etc/apt/trusted.gpg.d/
。在 Ubuntu 22.04 或 Debian 11 中,执行 apt update
或 apt 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 引导用户迁移到新的密钥管理方法。
apt-key
被弃用的原因主要有以下几点:
apt-key
将所有密钥存储在单个文件中(如 /etc/apt/trusted.gpg
),这使得密钥容易受到篡改或丢失的风险。/etc/apt/keyrings/
或 /etc/apt/trusted.gpg.d/
目录来管理密钥,增强了安全性和可维护性。这些问题促使了新的密钥管理方式的出现,它可以提高系统的安全性和灵活性,更好地满足现代化需求。
新的密钥管理方法建议将密钥文件存储在 /etc/apt/keyrings/
或 /etc/apt/trusted.gpg.d/
目录,并通过 APT 配置文件中的 Signed-By
选项来指定每个软件源的密钥。这样做有几个优点:
apt-key
所带来的密钥泄露风险。首先,检查当前系统中的所有密钥,并删除不再需要的密钥。
使用 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 <[email protected]>
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) <[email protected]>
sub rsa4096 2025-01-20 [S] [expires: 2028-01-19]
这些密钥是用来验证各个软件源包的。可以看到,密钥文件中包含多个软件源的密钥,如 Example 和 Google 等。
可以使用 apt-key del
命令删除不再需要的 GPG 密钥,指定要删除的密钥标识符(通常是一组四位数的十六进制数字)。例如,删除与 Example
相关的密钥,可以执行以下命令:
sudo apt-key del A9D4 7D52 12F0 E256 1D84 0C32 A63A 9211 3F6A 6E32
请根据实际情况替换命令中的密钥标识符删除不需要的密钥。删除密钥后,相关存储库将无法使用此密钥进行认证。如果仍需访问该存储库,必须为其添加新的密钥。
获取和安装新的 GPG 密钥是确保从外部软件源安装软件包时,保持系统安全的一个重要步骤。密钥的获取方法会根据应用程序的不同而有所不同,取决于具体的应用程序。
以下是详细的操作步骤和示例:
大多数应用程序会在其官方网站提供用于验证软件包的 GPG 密钥,以便验证软件包的完整性和真实性。可以使用 wget
或 curl
命令从应用程序的官方网站下载 GPG 密钥。
wget
或 curl
下载 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.gpg
:tee
命令会将密钥保存到 /etc/apt/keyrings/
目录中。使用 curl
下载密钥:
curl -fsSL https://myapp.example.com/repo/myapp.gpg | sudo tee /etc/apt/keyrings/myapp.gpg
解释:
-fsSL
:curl
的选项,确保下载时不显示进度信息、若失败则不输出错误信息,并且支持 SSL。https://myapp.example.com/repo/myapp.gpg
:GPG 密钥文件的 URL。sudo tee /etc/apt/keyrings/myapp.gpg
:保存密钥到 /etc/apt/keyrings/
目录。确保密钥文件的权限安全,以防止其他用户篡改密钥。
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 用户能够修改,其他用户可以读取。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
的软件源。要确保密钥已正确配置并生效,可以使用以下命令查看 /etc/apt/keyrings/
目录下的文件列表:
ls -l /etc/apt/keyrings/
输出应该类似于:
-rw-r--r-- 1 root root 7821 Sep 2 10:55 myapp.gpg
如果看到类似的输出,说明密钥已经正确配置。这些文件代表着不同软件包源的密钥文件。
完成上述步骤后,可以运行 apt update
命令来检查迁移是否成功。一旦密钥迁移完成,系统将不再显示关于 apt-key
弃用的警告。
sudo apt update
如果一切顺利,更新过程将顺利完成,而不会再显示弃用的警告或错误信息。
以下示例展示了如何添加 MyApp 软件源并确保其安全性。操作步骤包括下载 GPG 密钥、配置软件源、设置文件权限、并最终安装所需的软件包。
操作步骤概览:
sudo apt-key list
命令查看系统中存储的 GPG 密钥。sudo apt-key del
命令删除不需要的密钥。wget
或 curl
命令下载 GPG 密钥。/etc/apt/keyrings/
目录。Signed-By
选项指定密钥路径。具体步骤:
假设要安装 MyApp
,并且该应用程序的 GPG 密钥和软件源都提供了。以下是完整的操作步骤:
sudo apt-key list
删除不需要的 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
下载 GPG 密钥并保存到 /etc/apt/keyrings/
目录:
wget -qO - https://myapp.example.com/repo/myapp.gpg | sudo tee /etc/apt/keyrings/myapp.gpg
设置密钥文件的权限:
sudo chown root:root /etc/apt/keyrings/myapp.gpg
sudo chmod 644 /etc/apt/keyrings/myapp.gpg
配置 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
更新软件包列表并安装应用程序:
sudo apt update
sudo apt install myapp
为了帮助大家更好地理解迁移过程,下面提供了一个流程图,简明扼要地展示了迁移步骤:
图解说明:
apt-key list
列出当前密钥,确定哪些是过时的或不再需要的。apt-key del
命令删除不再需要的密钥。/etc/apt/trusted.gpg.d
或 /etc/apt/keyrings/
目录。apt update
检查迁移结果,APT 将不会再显示弃用警告。通过迁移 apt-key
的密钥管理方式,可以更安全地管理系统的存储库和软件包源,避免将来因 apt-key
被废弃而导致的兼容性问题。通过这篇博客的步骤和示例,应该能够顺利完成密钥的迁移,并确保系统能够继续顺利地进行软件包更新。
对于未来的版本,APT 可能会继续改进密钥管理方式,因此保持系统的更新和对新技术的适应将帮助你保持系统的安全性和稳定性。
在实际操作中,现在可以使用 apt update
而不会遇到与废弃密钥配置相关的警告或错误。需要注意的是,用户应当根据新的要求调整依赖于 apt-key
的旧安装方法,改用将密钥安装到 /etc/apt/trusted.gpg.d/
或 /etc/apt/keyrings/
目录下的方式,并根据需要使用 gpg
来管理密钥。
如果你觉得这篇文章对你有帮助,请留言讨论或分享给更多需要的人!