Red Hat Training

A Red Hat training course is available for RHEL 8

3.3. GPG を使用したリポジトリーのメタデータの確認

破損したパッケージを検出して回避するために、DNF パッケージマネージャーを使用して RPM パッケージの GNU Privacy Guard (GPG) 署名を確認でき、リポジトリーのメタデータが GPG キーで署名されているかどうかも確認できます。

gpgkeys フィールドにキー URL を設定することで、https 経由でチェックを行う gpgkey を入力できます。あるいは、セキュリティーを向上させるために、キー全体を gpgkeys フィールドに埋め込んで、キーを URL から取得する代わりに直接インポートすることもできます。

前提条件

  • リポジトリーとして使用するディレクトリーが存在し、パッケージが含まれている。

手順

  1. リポジトリーを作成するフォルダーにアクセスします。

    $ cd repo/
  2. createrepo_c を実行して、RPM パッケージからリポジトリーを作成します。

    $ createrepo_c .
  3. リポデータがあるディレクトリーにアクセスします。

    $ 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 経由で利用できる場合は、gpgkeys フィールドにキーのキー URL を設定します。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"]

      代わりに、たとえば次のように GPG キーを gpgkeys フィールドに直接追加します。

      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