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

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

セキュリティー上の理由から、GPG キーを https 経由で利用できるようにすることで、RPM とは別のチャネルでキーを配布できます。ソース内で check_repogpg = true を設定することで、チェックの実行にどの GPG キーを使用するかを指定できます。キーが https 経由で利用できる場合は、gpgkeys エントリーをキーの URL に設定します。オプションで、キー全体をソース gpgkeys エントリーに埋め込んで、URL から取得する代わりに直接インポートすることもできます。

手順

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

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

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

    $ cd repodata/
  4. repomd.xml ファイルに署名してリポジトリーをセットアップします。

    $ gpg -u YOUR-GPG-KEY-EMAIL --yes --detach-sign --armor repomd.xml
  5. GPG 署名を確認します。

    1. リポジトリーソースで check_repogpg = true を設定します。
    2. キーが https 経由で利用できる場合は、gpgkeys フィールドにキーのキー URL を設定します。URL キーは必要なだけ追加できます。次に例を示します。

      check_gpg = true
      check_ssl = true
      id = "repository_id"
      name = "repository_name"
      system = false
      type = "repository_type"
      url = "repository_URL"
      check_repogpg = true
      gpgkeys=["_GPG_key_URL"]
    3. オプション: キー全体を gpgkeys フィールドに埋め込むことができます。必要なだけキーを追加できます。たとえば、GPG キーを gpgkeys フィールドに直接追加します。

      check_gpg = true
      check_ssl = true
      check_repogpg
      id = "repository_id"
      name = "repository_name"
      system = false
      type = "repository_type"
      url = "repository_URL"
      gpgkeys=["GPG_key"]

検証

  • リポジトリーの署名を手動でテストします。

    $ gpg --verify repomd.xml.asc
  • テストで署名が見つからない場合は、次のようなエラーが表示されます。

    $ 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)
  • 署名が無効な場合は、次のようなエラーが表示されます。

    repomd.xml GPG signature verification error: Bad GPG signature