Red Hat Training

A Red Hat training course is available for RHEL 8

3.3. 使用 GPG 检查存储库元数据

要检测和避免损坏的软件包,您可以使用 DNF 软件包管理器检查 RPM 软件包上的 GNU Privacy Guard (GPG)签名,并检查存储库元数据是否已使用 GPG 密钥进行了签名。

您可以使用密钥 URL 设置 gpgkeys 字段,输入您要通过 https 进行检查的 gpgkey。或者,为了提高安全性,您还可以将整个密钥嵌入到 gpgkeys 字段中,来直接导入它,而不是直接从 URL 获取密钥。

先决条件

  • 您要用作存储库的目录存在,且包含软件包。

流程

  1. 访问您要创建存储库的文件夹:

    $ cd repo/
  2. 运行 createrepo_c 来从 RPM 软件包创建存储库:

    $ createrepo_c .
  3. 访问 repodata 所在的目录:

    $ cd repodata/
  4. repomd.xml 文件签名:

    $ gpg -u <_gpg-key-email_> --yes --detach-sign --armor /srv/repo/example/repomd.xml
  5. 要在存储库中启用 GPG 签名检查:

    1. 在存储库源中设置 check_repogpg = true
    2. 输入您要进行检查的 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