apt-key 已弃用。 如何在没有它的情况下在 Debian、Ubuntu、Linux Mint、Pop!_OS 等上添加 OpenPGP 存储库签名密钥。

[ad_1]

本文解释了如何在 Debian、Ubuntu 和基于这些的 Linux 发行版(如 Linux Mint、Pop!_OS、Elementary OS 等)上安全地添加 OpenPGP 密钥和第三方 APT 存储库,以替换已弃用的 apt-key.

当您尝试使用添加 APT 存储库密钥时 apt-key 在基于这些的 Debian、Ubuntu 和 Linux 发行版上,您将看到以下消息:“警告:不推荐使用 apt-key。 改为在 trust.gpg.d 中管理密钥环文件(请参阅 apt-key(8))”。

apt-key 手册页提到“不推荐使用 apt-key,除了在维护者脚本中使用 apt-key del 从主密钥环中删除现有密钥”。 更重要的是, ”apt-key 将在 Debian 11 和 Ubuntu 22.04 中最后可用。

此更改的原因是在添加用于签署 APT 存储库的 OpenPGP 密钥时 /etc/apt/trusted.gpg 或者 /etc/apt/trusted.gpg.d,在系统上配置的所有其他存储库上,APT 无条件信任该密钥,这些存储库没有 signed-by (见下文)选项,甚至是官方的 Debian / Ubuntu 存储库。 因此,任何将其签名密钥添加到的非官方 APT 存储库 /etc/apt/trusted.gpg 或者 /etc/apt/trusted.gpg.d 可以替换系统上的任何包。 因此,此更改是出于安全原因(您的安全)。

还值得注意的是,虽然 apt-key 弃用消息说“改为在 trust.gpg.d 中管理密钥环文件”,Debian wiki 另有说明。 那是因为将 OpenPGP 密钥添加到 /etc/apt/trusted.gpg/etc/apt/trusted.gpg.d 如上所述,同样不安全。

您现在可以继续使用 apt-key,因为它仍然有效。 但是,开始过渡到使用 signed-by 选项如下所述,特别是如果您维护第三方存储库。

那么在基于这些的 Debian、Ubuntu 和 Linux 发行版(如 Linux Mint、Pop!_OS、Elementary OS 等)上添加第三方(非官方)存储库及其 OpenPGP 签名密钥的正确、安全的方法是什么,以替换不推荐使用 apt-key?

1.下载APT存储库密钥

根据 Debian wiki,密钥应该通过 HTTPS 下载到一个只能由 root 写入的位置,例如 /usr/share/keyrings. 密钥名称应包含描述存储库的短名称,后跟 archive-keyring. 例如,如果存储库被调用 myrepository,密钥文件应命名为 myrepository-archive-keyring.gpg.

OpenPGP 密钥文件可以是 ascii-armored,也可以不是。 验证密钥文件是否为 ascii-armored, 下载密钥文件并运行此命令 (请注意,密钥扩展名可以是 .gpg、.asc、.key,也可能是其他):

file <repo-key>.gpg

如果此命令的输出类似于以下内容,则密钥为 ascii-armored:

repo-key.gpg: PGP public key block Public-Key (old)

话虽如此,这就是如何正确、安全地下载存储库签名密钥并将其添加到您的系统:

  • 对于 ascii-armored OpenPGP 密钥

要使用 wget 下载并将这样的 OpenPGP 密钥添加到您的系统,请使用:

wget -O- <https://example.com/key/repo-key.gpg> | gpg --dearmor | sudo tee /usr/share/keyrings/<myrepository>-archive-keyring.gpg

此命令中的所有内容/含义:

  • wget 从下载密钥 https://example.com/key/repo-key.gpg 并将密钥输出到标准输出(-O-)。 将此处的 URL 替换为要下载并添加到系统的密钥的 URL
  • gpg --dearmor: 这 gpg command是OpenPGP加密和签名工具; 它的 --dearmor 选项解包来自 OpenPGP ASCII 盔甲的输入
  • sudo tee /usr/share/keyrings/<myrepository>-archive-keyring.gpg: 作为超级用户 (sudo),读取标准输入,在这种情况下是由提供的输出 gpg --dearmor,并将其写入 /usr/share/keyrings/<myrepository>-archive-keyring.gpg 文件。 更换 <myrepository> name 带有您要添加的存储库密钥的描述性名称

例如,要添加 Signal 应用程序 APT 存储库,您可以使用:

wget -O- https://updates.signal.org/desktop/apt/keys.asc | gpg --dearmor | sudo tee /usr/share/keyrings/signal-archive-keyring.gpg

或者使用 Debian wiki 上作为示例给出的命令(您需要以 root 身份运行它,例如在运行后 sudo -i; 它用 curl 代替 wget 下载密钥):

curl <https://example.com/key/repo-key.gpg> | gpg --dearmor > /usr/share/keyrings/<myrepository>-archive-keyring.gpg

使用此命令添加 Signal APT 存储库的示例:

curl https://updates.signal.org/desktop/apt/keys.asc | gpg --dearmor > /usr/share/keyrings/signal-archive-keyring.gpg
  • 对于非 ascii-armored OpenPGP 密钥

使用 wget 下载 OpenPGP 密钥并将其添加到您的系统中:

wget -O- <https://example.com/key/repo-key.gpg> | sudo tee /usr/share/keyrings/<myrepository-archive-keyring.gpg>

或者使用在 Debian wiki 上作为示例给出的命令(您需要以 root 身份运行它,例如在运行之后 sudo -i):

wget -O /usr/share/keyrings/<myrepository-archive-keyring.gpg> <https://example.com/key/repo-key.gpg>

我没有在这里添加示例,因为我找不到使用非 ascii-armored OpenPGP 密钥的第三方存储库。

  • 将 OpenPGP 密钥直接从密钥服务器导入到文件 /usr/share/keyrings
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/<myrepository>-archive-keyring.gpg --keyserver <hkp://keyserver.ubuntu.com:80> --recv-keys <fingerprint>

代替 hkp://keyserver.ubuntu.com:80,如果您愿意,您可以使用其他一些密钥服务器。

我们将 Linux Uprising Shutter PPA 的 OpenPGP 密钥导入到的示例 /usr/share/keyrings/linux-uprising-shutter-archive-keyring.gpg (指纹可以通过单击 PPA 页面上的绿色“有关此 PPA 的技术详细信息”链接获取 – 它位于“将此 PPA 添加到您的系统”下):

sudo gpg --no-default-keyring --keyring /usr/share/keyrings/linux-uprising-shutter-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 1CC3D16E460A94EE17FE581CEA8CACC073C3DB2A

如何防止软件包在 Ubuntu、Debian 或 Linux Mint 中更新 [APT]


2.添加存储库sources.list条目

第三方存储库 sources.list 条目应添加到 /etc/apt/sources.list.d 目录,而不是直接在 /etc/apt/sources.list 文件。

以前,sources.list 文件来自 /etc/apt/sources.list.d 目录如下所示:

deb https://repository.example.com/debian/ stable main

但是,为了能够使用在第 1 步中添加的密钥,sources.list 条目现在必须如下所示(/etc/apt/sources.list.d/<myrepository.list>):

deb [signed-by=/usr/share/keyrings/<myrepository>-archive-keyring.gpg] <https://repository.example.com/debian/ stable main>

重要的是要注意,如果您还想添加 arch=amd64 选项与 signed-by,您需要用空格分隔这两个选项,如下所示:

deb [arch=amd64 signed-by=/usr/share/keyrings/<myrepository>-archive-keyring.gpg] <https://repository.example.com/debian/ stable main>

例如,要将 Signal 存储库添加到您的 Debian / Ubuntu 系统,请创建一个文件(以 root 身份;例如,使用此文件打开 Nano 命令行文本编辑器: sudo nano /etc/apt/sources.list.d/signal.list) 称为 signal.list/etc/apt/sources.list.d 包含以下内容(假设您已经按照上述说明下载了密钥,如 /usr/share/keyrings/signal-archive-keyring.gpg):

deb [arch=amd64 signed-by=/usr/share/keyrings/signal-archive-keyring.gpg] https://updates.signal.org/desktop/apt xenial main

记得跑 sudo apt update 添加新的签名密钥和存储库后,更新软件源。

您也可以添加 Deb822 文件格式的存储库,但为了尽量不让事情变得更加复杂,我不会在这里解释。 您可以在 Debian wiki 上阅读相关内容。

您可能还喜欢:如何在 Ubuntu、Debian 或 Linux Mint 上查找提供文件(已安装或未安装)的软件包

如何删除已添加到 APT 可信密钥环(/etc/apt/trusted.gpg 或 /etc/apt/trusted.gpg.d)的现有 OpenPGP 密钥

如上所述添加 OpenGPG 密钥时,您需要从 /etc/apt/trusted.gpg 或 /etc/apt/trusted.gpg.d 中删除相同的密钥,以防您之前已将其添加到那里。 如果不这样做,就没有额外的安全优势。

从现有的 OpenPGP 密钥中删除 /etc/apt/trusted.gpg.d 目录 应该很容易。 那是因为密钥文件名应该非常具有描述性。 例如,我系统上此目录中的 Tor 存储库 gpg 密钥文件名是 deb.torproject.org-keyring.gpg

因此,要摆脱已添加到的现有密钥 /etc/apt/trusted.gpg.d,您所要做的就是删除密钥文件。 您需要以 root 身份执行此操作,因此要么以 root 身份打开您选择的文件管理器,使用 admin:// (例如,要在 Nautilus 中以 root 身份打开一个位置,请按 Ctrl + L 所以你可以输入它的地址栏,然后输入 admin:///etc/apt/trusted.gpg.d),或从命令行中删除它们,使用:

sudo rm /etc/apt/trusted.gpg.d/<myrepository-keyring.gpg>

下面的说明也适用于从 /etc/apt/trusted.gpg.d 目录。

至于 删除存储在的 APT gpg 密钥 /etc/apt/trusted.gpg,事情有点复杂。 使用以下命令列出所有导入的 APT OpenPGP 密钥 /etc/apt/trusted.gpg/etc/apt/trusted.gpg.d

apt-key list

存储在的密钥 /etc/apt/trusted.gpg 应该列在顶部,然后是来自 /etc/apt/trusted.gpg.d 目录。 你需要检查钥匙 uid 为了找出您要删除的密钥。 通常,uid 应该显示签署密钥的公司或用户,然后是他们的电子邮件地址。

钥匙来自 /etc/apt/trusted.gpg 被列出 apt-key 像这样的列表(示例):

pub   rsa4096 2016-04-22 [SC]

      B9F8 D658 297A F3EF C18D  5CDF A2F6 83C5 2980 AECF

uid           [ unknown] Oracle Corporation (VirtualBox archive signing key) <[email protected]>

sub   rsa4096 2016-04-22 [E]

密钥 ID 是 GPG 密钥指纹的最后 8 个字符(因此在本例中,即 2980AECF)。

删除一个键(从任一 /etc/apt/trusted.gpg 或者 /etc/apt/trusted.gpg.d),您现在可以使用:

sudo apt-key del <KEY-ID>

例如,要从上面的示例中删除密钥,您可以使用:

sudo apt-key del 2980AECF

您可能喜欢:如何在 Ubuntu、Debian 或 Linux Mint 上列出存储库中的所有软件包 [APT]

参考:

  • https://wiki.debian.org/DebianRepository/UseThirdParty
  • https://askubuntu.com/a/1307181/1149075
  • https://zebnemeth.wordpress.com/2021/01/15/install-signal-desktop-using-gpg/
  • https://github.com/docker/docker.github.io/issues/11625

感谢 u/ZebNemeth 的建议!

[ad_2]

Related Posts