3.3. 使用 GPG 检查存储库元数据
要检测和避免损坏的软件包,您可以使用 DNF 软件包管理器检查 RPM 软件包上的 GNU Privacy Guard (GPG)签名,以及检查存储库元数据是否已使用 GPG 密钥进行了签名。
您可以使用密钥 URL 设置 gpgkeys
字段,输入您要通过 https
进行检查的 gpgkey
。或者,为了提高安全性,您还可以将整个密钥嵌入到 gpgkeys
字段中,来直接导入它,而不是直接从 URL 获取密钥。
先决条件
- 您要用作存储库的目录存在,且包含软件包。
步骤
访问您要创建存储库的文件夹:
$ cd repo/
运行
createrepo_c
,来从 RPM 软件包创建存储库:$ createrepo_c .
访问 repodata 的目录:
$ cd repodata/
为
repomd.xml
文件签名:$ gpg -u <_gpg-key-email_> --yes --detach-sign --armor /srv/repo/example/repomd.xml
要在存储库中启用 GPG 签名检查:
-
在存储库源中设置
check_repogpg = true
。 输入您要进行检查的
gpgkey
。如果您的密钥可以通过https
使用,请使用密钥的密钥 URL 设置gpgkeys
字段。您可以根据需要添加任意数量的 URL 密钥。以下是一个示例:
check_gpg = true check_ssl = true id = "signed local packages" name = "repository_name" type = "yum-baseurl" url = "https://local/repos/projectrepo/" check_repogpg = true gpgkeys=["https://local/keys/repokey.pub"]
作为替代方案,直接在
gpgkeys
字段中添加 GPG 密钥,例如:check_gpg = true check_ssl = true check_repogpg id = "custom-local" name = "signed local packages" type = "yum-baseurl" url = "https://local/repos/projectrepo/" gpgkeys=["https://remote/keys/other-repokey.pub", '''-----BEGIN PGP PUBLIC KEY BLOCK----- … -----END PGP PUBLIC KEY BLOCK-----''']
如果测试没有找到签名,GPG 工具会显示一个类似如下的错误:
$ GPG verification is enabled, but GPG signature is not available. This may be an error or the repository does not support GPG verification: Status code: 404 for http://repo-server/rhel/repodata/repomd.xml.asc (IP: 192.168.1.3)
如果签名无效,GPG 工具会显示一个类似如下的错误:
repomd.xml GPG signature verification error: Bad GPG signature
-
在存储库源中设置
验证
手动测试存储库的签名:
$ gpg --verify /srv/repo/example/repomd.xml.asc