3.3. GPG を使用したリポジトリーのメタデータの確認
破損したパッケージを検出して回避するために、DNF パッケージマネージャーを使用して RPM パッケージの GNU Privacy Guard (GPG) 署名を確認でき、リポジトリーのメタデータが GPG キーで署名されているかどうかも確認できます。
gpgkeys
フィールドにキー URL を設定することで、https
経由でチェックを行う gpgkey
を入力できます。あるいは、セキュリティーを向上させるために、キー全体を gpgkeys
フィールドに埋め込んで、キーを URL から取得する代わりに直接インポートすることもできます。
前提条件
- リポジトリーとして使用するディレクトリーが存在し、パッケージが含まれている。
手順
リポジトリーを作成するフォルダーにアクセスします。
$ cd repo/
createrepo_c
を実行して、RPM パッケージからリポジトリーを作成します。$ createrepo_c .
リポデータがあるディレクトリーにアクセスします。
$ cd repodata/
repomd.xml
ファイルに署名します。$ gpg -u <_gpg-key-email_> --yes --detach-sign --armor /srv/repo/example/repomd.xml
リポジトリーで GPG 署名チェックを有効にするには、以下を行います。
-
リポジトリーソースで
check_repogpg = true
を設定します。 チェックを行う
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