第 4 章 高级主题
本节涵盖超出入门教程范围但对真实 RPM 打包很有用的主题。
4.1. 签名软件包
软件包经过签名,以确保没有第三方可以更改其内容。在下载软件包时,用户可以使用 HTTPS 协议添加额外的安全层。
为软件包签名有三种方法:
4.1.1. 创建 GPG 密钥
流程
生成 GNU Privacy Guard(GPG)密钥对:
# gpg --gen-key
确认并查看生成的密钥:
# gpg --list-keys
导出公钥:
# gpg --export -a '<Key_name>' > RPM-GPG-KEY-pmanager
注意包含您为键选择的实际名称,而不是 <Key_name>。
将导出的公钥导入到 RPM 数据库中:
# rpm --import RPM-GPG-KEY-pmanager
4.1.2. 在已经存在的软件包中添加签名
这部分论述了在没有签名的情况下构建软件包时最常见的情况。签名仅在软件包发布前添加。
要在软件包中添加签名,请使用 rpm-sign
软件包提供的 --addsign
选项。
通过多个签名,可以将软件包构建器的所有权路径记录到最终用户。
步骤
在软件包中添加签名:
$ rpm --addsign blather-7.9-1.x86_64.rpm
注意您需要输入密码来解锁签名的机密密钥。
4.1.3. 检查带有多个签名的软件包的签名
流程
要检查带有多个签名的软件包的签名,请运行以下命令:
$ rpm --checksig blather-7.9-1.x86_64.rpm blather-7.9-1.x86_64.rpm: size pgp pgp md5 OK
rpm --checksig
命令的输出中的两个pgp
字符串显示软件包已被签名两次。
4.1.4. 在已经存在的软件包中添加签名的实际示例
这部分论述了在现有软件包中添加签名可能会很有用的示例。
公司的一个部门创建了软件包并使用部门的密钥对其进行签名。然后,公司总部检查软件包的签名,并将企业签名添加到软件包中,说明已签名软件包是验证的。
使用两个签名时,该软件包可让其为零售商采用方法。零售商会检查签名,如果匹配,也会添加其签名。
现在,这个软件包已成为希望部署该软件包的公司。检查软件包中的每个签名后,它们知道它是真实的副本。根据部署公司的内部控制,他们可以选择添加自己的签名,以通知其员工收到其公司批准。
4.1.5. 在已经存在的软件包中替换签名
这个步骤描述了如何在不重建每个软件包的情况下更改公钥。
流程
要更改公钥,请运行以下命令:
$ rpm --resign blather-7.9-1.x86_64.rpm
注意您需要输入密码来解锁签名的机密密钥。
--resign
选项还允许您更改多个软件包的公钥,如以下步骤所示。
步骤
要更改多个软件包的公钥,请执行:
$ rpm --resign b*.rpm
注意您需要输入密码来解锁签名的机密密钥。
4.1.6. 在构建时签名软件包
流程
使用
rpmbuild
命令构建软件包:$ rpmbuild blather-7.9.spec
使用
--addsign
选项使用rpmsign
命令签署软件包:$ rpmsign --addsign blather-7.9-1.x86_64.rpm
- (可选)验证软件包的签名:
$ rpm --checksig blather-7.9-1.x86_64.rpm blather-7.9-1.x86_64.rpm: size pgp md5 OK
在构建和签名多个软件包时,请使用以下语法避免多次输入 Pretty Good Privacy (PGP)密码短语。
$ rpmbuild -ba --sign b*.spec
请注意,您应该输入密码来解锁签名的 secret 密钥。