如果包中缺少 GPG 签名或由于缺少密钥而无法验证,我该如何强制执行rpm
并失败?yum
对于下面的示例,假设 RPM 已签名但尚未安装密钥。
使用 RPM,我看到一条警告,但我希望此操作失败,以便我被迫手动安装签名密钥。
# rpm -q gpg-pubkey --qf '%{name}-%{version}-%{release} --> %{summary}\n'
gpg-pubkey-c105b9de-4e0fd3a3 --> gpg(CentOS-6 Key (CentOS 6 Official Signing Key) <[email protected]>)
# rpm -ivh http://yum.example.com/company-release-el-6.noarch.rpm
Retrieving http://yum.example.com/company-release-el-6.noarch.rpm
warning: /var/tmp/rpm-tmp.3VmFk2: Header V4 RSA/SHA1 Signature, key ID 3bd6ec30: NOKEY
Preparing... ########################################### [100%]
1:company-release ########################################### [100%]
使用 yum,我没有看到与未安装签名密钥相关的警告。
# yum install -vy http://yum.example.com/company-release-el-6.noarch.rpm
是否有其他标志可以传递给这些命令或可以修改配置设置以更改行为?或者我必须rpm --checksig
在安装之前下载 RPM 并运行?
答案1
了解 GPG 检查软件包的要点是 GPG 签名嵌入在软件包中,并且 GPG 密钥存储在 rpmdb 中。没有安全的 API 可以询问“包 X 是用什么密钥签名的”,您只能询问“包 X 是否用 rpmdb 中的密钥签名”和“密钥 Y 是否存在于 rpmdb 中”。另请注意,这意味着一个包只能由一个密钥进行签名,并且更改签名会更改包。
当 Yum 从配置了“gpgcheck = 1”(默认值)的存储库下载软件包时,它会执行许多步骤。
从存储库下载第一个包后,将完成一个简单的“此包是否使用已知的 gpgkey 签名”调用。如果是,则什么也不做。如果不是,则会向用户显示警告。这纯粹是信息性的。
在事务开始之前,yum 检查该软件包是否使用已知的 gpgkey(已安装在 rpmdb 中)进行签名,如果是,则该软件包有效并且不执行其他步骤。如果没有,则继续#3。
Yum 下载包来源存储库的“gpgkey”数据中给出的所有文件。 Yum 解析它,忽略 rpmdb 中已经存在的任何键。如果没有新的密钥,yum 将失败。
如果为存储库指定了“gpgcakey”,则 yum 将下载“gpgcakey”数据中给出的所有文件。 Yum 解析它,忽略该存储库 gpg 密钥环中已经存在的任何密钥。如果解析文件后没有安装 gpgcakeys,则 yum 将失败。如果有新的 gpgcakey,那么它们是否已作为另一个存储库的 CA 密钥导入。它们会自动导入。如果这是我们第一次看到此 CA 密钥,则会询问用户是否要安装该密钥(除非给出 -y)。如果他说不任何key,yum 失败(尽管所有导入的密钥都保留在 repo.gpg 密钥环中)。
如果至少有一个有效的“gpgcakey”,yum 将尝试下载“gpgkey”.asc 文件。如果该文件不存在,则 yum 会继续执行步骤 #6,就好像没有 gpgcakey 一样。如果确实存在,则针对“gpgcakey”测试“gpgkey”,如果通过,则将其添加到 rpmdb,如果失败,则 yum 失败(尽管所有导入的密钥都保留在 rpmdb 中)。
如果有新的 gpgkey,则会询问用户是否要安装每个密钥(除非给出 -y)。如果他说不任何关键,yum 失败了。
安装任何新密钥后,yum 再次根据 rpmdb 中的 gpgkey 检查软件包签名。如果失败,则 yum 失败。
答案2
放入localpkg_gpgcheck=1
/etc/yum.conf 并确保您始终 yum 来安装 rpm。
如果本地文件系统上有 rpm,只需执行以下操作
yum install <rpm-on-local-filesys>
确保您还在 /etc/yum.repos.d 中的所有存储库中设置了这些
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/SOME-APPROVED-GPG-KEY
正如您所提到的,通过 rpm 安装得到的最好结果就是一个警告,并且无法将其配置为拒绝在不存在的 GPG 密钥上安装。