RPM是在Red Hat和SUSE上安装和管理软件的标准。像Yum和Zypper这样的元数据包处理软件可以很容易地安装软件包。但是RPM可能有风险,因为其在安装过程中以root权限自动执行脚本。因此要确保你使用的RPM包值得信任。如果是你自己创建的RPM包,用Gnu隐私保护(GnuPG或GPG)密钥来签署它们是一个好主意。
GPG使用公共/私有密钥对来确保机密性。你可以用它们来加密文件或作为确保邮件确实是由列表中的发送者发出的数字签名。它们同样可以用来签署PRM软件包。
当签署RPM软件包时,该RPM包的创建者需要通过签约步骤。这个签名可以用来核对GPG密钥,这个密钥应该是公开的,安装这个软件包的用户也应该可以使用它。如果这个签名匹配此公开的GPG密钥,那么下载这个软件包的用户得到一个保证:这个软件包是由同其捆绑在一起的GPG密钥签名过的。这个程序很方便,但是它不提供100%的保证。如果提供软件包的源头被黑客攻破,那么RPM软件包和密钥都可能是伪造的。签名的软件包确实增强了软件包的安全性,因为黑客需要在提供伪造包之前执行两个黑客程序。
如果你想提供签署过的RPM包,你需要如下的应用程序:
1.创建一个GPG密钥对。
这将生成一个多用途的通用密钥对。要创建它,使用GPG——gen-key命令并指定密钥的属性。在密钥生成前,您还需要生成一些随机数据,所以一定要让磁盘活跃来加快密钥生成的过程。以下是GPG——gen-key命令的结果:
gpg: key 455F7CBF marked as ultimately trusted public and secret key created and signed. gpg: checking the trustdb gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2u pub 1024R/455F7CBF 2011-04-07 Key fingerprint = 4C78 4A47 1B84 E769 4ADD C43D 31DA C76F 455F 7CBF uid Sander van Vugt sub 1024R/68D74CDD 2011-04-07
2.现在你有了密钥对,你需要密钥的ID。使用密钥ID,你需要创建一个密钥文件。
密钥ID是你在GPG的命令输出行pub中看到的。在上面的例子中,密钥的ID是455F7CBF。下面的命令将在当前用户的home目录创建一个可以用来签署键值的文件:
gpg -a -o ~/RPM-GPG-KEY-test --export 455F7CBF
3.接下来,在同一用户的主目录,你必须创建一个具有以下内容的.rpmmacros文件:
%_gpg_name 455F7CBF
4.在这一步,你可以(重新)签署软件包。
下面的命令用于签署刚刚在RPM创建的目录中创建的RPM包:
rpm --resign ~/rpmbuild/RPMS/x86_64/test-1.0-1.fc14.x86_64.rpm
5.在这一步骤,你有一个签名的软件包和一个用户用于验证所用软件包完整性的密钥。
你需要发布签名过的软件包的密钥。不过,首先您需要对其进行测试。下面的两个命令实施了一个本地测试;第一个命令引入了GPG软件包,下一个命令使用yum的本地安装在不启动库的情况下来安装软件包。
rpm --import ~/RPM-GPG-KEY-test yum localinstall ~/rpmbuild/RPMS/x86_64/test-1.0-1.fc14.x86_64.rpm
【编辑推荐】