pacman-key (简体中文)

From ArchWiki
Jump to: navigation, search
Tango-preferences-desktop-locale.png 本页面或部分需要翻译,部分内容可能已经与英文文章脱节。如果您希望贡献翻译,请访问简体中文翻译组
附注: please use the first argument of the template to provide more detailed indications.
Tango-preferences-desktop-locale.png

pacman-key 是 pacman 4 新加的工具。有了它,用户可以管理 pacman 新签名系统的授信密钥。

Contents

原理

Pacman 中的软件包签名使用"信任网络"模型以保证软件包来自开发者而不是伪装者。软件包开发者和 TU 都有各自的 PGP 密钥并用它们签名软件包。这些签名能够保证软件包确实来自他们。而每个用户使用 pacman-key 时也会获得一个唯一 PGP 密钥。

密钥也可以用来签名其它的密钥,也就是说签名密钥的所有者能够保证被签名密钥的安全性。要信任一个软件包,需要在用户自己的 PGP 密钥和软件包签名间建立一个密钥链。在 Arch 的密钥结构中,有三种方式:

  • 自定义软件包: 用户自己构建软件包并用自己的密钥签名认证。
  • 非官方软件包: 开发者构建软件包并签名它。用户需要用自己的密钥签名开发者的密钥,将其变为可信。
  • 官方软件包: 开发者构建软件包,而开发者的密钥已经被 Arch 主密钥签名。最终用户用自己的密钥签名主密钥,这样就能信任所有官方开发者。

关于此问题的背景,请访问博客 [1][2][3][4]软件包签名提议 wiki 页面。

配置

配置 pacman

首先通过 /etc/pacman.conf 中的 SigLevel 确定要使用的检查级别。文件的注释中列出了几个可选设置, pacman.conf手册页面 有详细介绍。

警告: TrustAll 选项仅用来进行调试,非常容易信任未验证的签名。所有官方软件源都应该使用 TrustedOnly

直到 2012 四月, 数据库签名还未实现,所以如果使用 Required 选项,应该加入 DatabaseOptional 例如:

SigLevel = Required DatabaseOptional TrustedOnly

初始化密钥环

要初始化 pacman 密钥:

# pacman-key --init

这会在 /etc/pacman.d/gnupg 建立新密钥并生成系统主密钥。要检查软件包签名,需要先通过下面介绍的方式导入密钥。

管理密钥

用来验证软件包的密钥保存在 pacman-key 管理的 "keyring" 中。pacman 在软件包中遇到未知密钥时,pacman 和 pacman-key 可以从密钥服务器下载。密钥服务器通过 /etc/pacman.d/gnupg/gpg.conf 配置,可以在命令行中用 --keyserver 选项指定。Wikipedia 文章 列出了可用的密钥服务器。

PGP 通常很长(2048 位或更长),不太容易使用,所以通常创建一个40位十六进制指纹,最后八位被称为密钥 ID,是密钥的名字。长签名可以用来检测两个密钥是否相同。

主密钥

有 5 个 Arch Linux 主密钥被用来签名开发者和 TU 的密钥。用户的密钥环中应该包含这些密钥并信任它。可以通过 Master Signing Keys 页面的密钥 ID ("Master Key"列)获取它们。

官方开发者密钥

官方开发者和 TU 的密钥已经被主密钥签名认证,所以不需要用 pacman-key 认证它们。pacman 遇到不认识的签名时,它将会询问是否从密钥服务器下载,下载开发者密钥后,以后都不需要下载。以后会用它验证所有这个开发者构建的软件包。

热锅开发者和 TU 的密钥是较早之前导入,它们的签名可能还不存在于本地数据库,用下面命令更新:

# pacman-key --refresh-keys
注意: --refresh-keys 时,本地签名也会被远程查找,并收到未找到的消息,这是正常的。

导入主密钥和开发者密钥

Arch linux 提供了 archlinux-keyring 软件包,安装时可以自动装入主密钥和开发者密钥。如果密钥环中没有主密钥,安装时会询问是否信任主密钥,可以检查 这些指纹是否正确。

非官方密钥

要加入非官方密钥,需要手动运行 pacman-key,先从密钥所有者那里得到 ID,然后运行下面命令下载密钥:

# pacman-key -r <keyid>

请和主密钥一样验证指纹,然后本地签名验证此密钥:

# pacman-key --lsign-key <keyid>

这样这个密钥就可以用来验证软件包了。

问题解决

如何收集熵

移动鼠标、不停的随机按键盘按键或者执行磁盘操作例如 updatedb 可以生成足够的熵,可能需要一段时间,请保持耐心。Alt+F2-6 到第二个终端不起作用。


如果需要通过 ssh 运行 pacman-key --init,请在目标机器编译安装 AUR 中的 rng-tools 软件包,通过 ssh 连接并运行:

# sed -i 's/0/10/' /etc/conf.d/rngd
# rngd -f -r /dev/urandom &
# pacman-key --init

pacman-key 成功运行后停止 rngd 并删除软件包。

# killall rngd
# pacman -Rns rng-tools

密钥导入失败处理

可能某些服务商屏蔽了导入 GPG 的端口。

编辑 /etc/pacman.d/gnupg/gpg.confkeyserver hkp://keys.gnupg.net 替换为

keyserver hkp://pgp.mit.edu:11371

禁用签名检查

警告: 小心使用,禁用签名检查,pacman 会自动安装不信任的软件包。

如果不在意软件包签名,可以完全禁用 PGP 签名检查,编辑 /etc/pacman.conf 并注释掉 [options] 下的如下行:

SigLevel = Never

需要同时注释掉软件源的 SigLevel 设置。

这样就不会进行任何签名检查,和 pacman 4 之前一样。如果这样,就不需要用 pacman-key 建立密钥环。

重置所有密钥

如果要删除或重置系统,删除 /etc/pacman.d/gnupg 目录并重新运行 pacman-key --init,然后添加需要的密钥。