大規模で人気のあるRPMリポジトリは、通常、世界中で複製されます。パッケージを提供するプロジェクトや企業は、コンテンツ配信ネットワーク(CDN)とミラーサイトを利用して、パッケージを消費者が利用できるようにします。多くのオープンソースプロジェクトでは、ボランティアによるホスティングが含まれます。悪意のある交換パッケージを検出して回避するために、パッケージの所有者はパッケージファイルに署名し、消費者はそれらの署名を確認できます。
GPGは任意のファイルに署名できますが、パッケージの署名を手動でチェックすることは、システム管理者にとってスケーラブルではありません。 RPM形式には、ヘッダーとペイロードの署名を保持するために特別に予約された領域があります。 rpm
ユーティリティはGPGキーを使用してパッケージに署名し、インポートされた公開キーの独自のコレクションを使用してパッケージを検証します。 YUMとDNFは、リポジトリ構成ファイルを使用してGPG公開鍵の場所へのポインターを提供し、RPMがパッケージを検証できるように鍵のインポートを支援します。
この記事では、EPELのキーとパッケージを使用します。公開鍵はRPMパッケージに含まれており、yum repo
も構成します。 。プロジェクトによっては、キーがソースWebサイトから直接入手できる場合もあります。
rpmユーティリティには独自のキー管理があります
rpm
以降 ユーティリティには独自のキー管理機能があり、GPG公開キーを個人のGPGキーリングにインポートする必要はありません。実際、gpg
でファイルを確認するだけでは不十分です。 署名は.rpmファイル全体のものではないため、コマンド。代わりに、署名はパッケージの重要な部分にのみ関連付けられます。
次のコマンドを実行して、rpm
を使用します パッケージを確認するには:
$ rpm -K epel-release-latest-8.noarch.rpm
epel-release-latest-8.noarch.rpm: digests SIGNATURES NOT OK
この場合、キーがRPMにまだインポートされていないため、「SIGNATURESNOTOK」メッセージが表示されます。 rpm
のデフォルトの動作 コマンドは、インストールまたは相互作用の検証中にパッケージの署名を検証することです。パッケージが署名されていないか、公開鍵が利用できないためにそれが不可能な場合は、--nogpgcheck
を指定する必要があります。 このステップをスキップするオプション。
GPG公開鍵にアクセスできる場合は、次のコマンドを使用して手動で鍵をインポートできます。
$ rpm --import RPM-GPG-KEY-EPEL-8
キーのメタデータはRPMデータベースに保存されているため、他のパッケージと同じようにキーをクエリおよび削除できます。
次のコマンドを使用して、キーを一覧表示します。
$ rpm -qa gpg-pubkey*
gpg-pubkey-7fac5991-4615767f
gpg-pubkey-2f86d6a1-5cf7cefb
次のコマンドを使用して、キーに関する情報を取得します。
$ rpm -qi gpg-pubkey-2f86d6a1-5cf7cefb
Name : gpg-pubkey
Version : 2f86d6a1
Release : 5cf7cefb
Architecture: (none)
Install Date: Mon 01 Jun 2020 12:14:38 PM EDT
Group : Public Keys
Size : 0
License : pubkey
Signature : (none)
Source RPM : (none)
Build Date : Wed 05 Jun 2019 10:17:31 AM EDT
Build Host : localhost
Relocations : (not relocatable)
Packager : Fedora EPEL (8) <[email protected]>
Summary : gpg(Fedora EPEL (8) <[email protected]>)
Description :
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: rpm-4.14.2 (NSS-3)
...omitted...
キーを削除するには、次のコマンドを使用します。
$ sudo rpm -e gpg-pubkey-2f86d6a1-5cf7cefb
キー管理のその他のオプションについては、rpmkey
に含まれているマニュアルページで説明されています。 パッケージ。
YUMとDNFはRPMデータベースにキーを追加できます
他のパッケージマネージャーを使用すると、キー管理がさらに簡単になります。 YUMとDNFは、/etc/yum.repos.d
の構成ファイルを使用します そのリポジトリ内のパッケージの検証に使用されるGPGキーのURLを指定します。キーがまだ検証に使用できない場合、ユーティリティはキーをインポートできます。
yum repo
内 構成ファイル、行 gpgcheck =1 このリポジトリ内のすべてのパッケージに対してGPGチェックを実行する必要があることを示します。これはブール値であり、構成で変更したり、コマンドラインで--nogpgcheck
を使用して一時的に上書きしたりできます。 オプション。
パッケージのインストール開始時にGPG公開鍵がRPMにまだインポートされていない場合は、yum
(またはdnf
)ユーティリティはキーのインポートを開始できます。 gpgkey =URI 行は、インポートするキーのソースを指定します。このソースは、ローカルファイルやリモートWebリンクを含む任意のURIにすることができます。 yum
またはdnf
ユーティリティは一時停止し、キーIDと指紋を表示した後、キーをインポートするための確認を求めます。
warning: /var/cache/dnf/epel-fafd94c310c51e1e/packages/zsh-syntax-highlighting-0.7.1-1.el8.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 2f86d6a1: NOKEY
Extra Packages for Enterprise Linux 8 - x86_64 1.6 MB/s | 1.6 kB 00:00
Importing GPG key 0x2F86D6A1:
Userid : "Fedora EPEL (8) <[email protected]>"
Fingerprint: 94E2 79EB 8D8F 25B2 1810 ADF1 21EA 45AB 2F86 D6A1
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
Is this ok [y/N]: y
キーがRPMに追加された後、パッケージの検証とインストールが続行されます。
パッケージに署名する準備をする
独自のRPMパッケージファイルを作成して配布する場合は、rpmsign
を使用してそれらのパッケージに署名できます。 ユーティリティ。
最初のステップは、署名用のGPGキーペアを作成することです。公開鍵もエクスポートして共有してください。公開されるパッケージの場合、共有の場所で新しいキーペアとキーリングを使用することをお勧めします。さらに、--full-gen-key
を使用します オプションを選択し、デフォルトの代わりに署名専用キーを作成することを選択します。これにより、署名キーと暗号化キーの両方が作成されます。
$ gpg --keyring /shared/rpm/.gpg --no-default-keyring --full-gen-key
1人だけがパッケージに署名するためにキーを使用している場合でも、署名に使用する別のキーペアを作成します。個人の電子メール暗号化など、他の日常的なタスクに同じキーを使用しないでください。
次に、rpm-sign
をインストールする必要があります rpmmacros
をパッケージ化して設定します 使用するキーを指定するファイル。 rpm-sign
パッケージには、rpmsign
のマニュアルページが含まれています プロセスを説明します。パッケージ名には、コマンド名の一部ではないダッシュが含まれていることに注意してください。
$ sudo yum install rpm-sign
$ man rpmsign
RPMコマンドは、いくつかのrpmmacros
から構成を取得します ファイル。 /usr/lib/rpm/macros
には、多数のサンプルを含むデフォルトのファイルがあります。 。複数の人が同じキーを使用してパッケージに署名する責任がある場合は、中央の構成ファイルを/etc/rpm/macros
に配置します 位置。最後に、パッケージに署名する特定の人の場合、ユーザーの~/.rpmmacros
ファイルは正しいGPGキーを指すように構成できます。
rpmmacros
の最小エントリ ファイルはキーの名前を指定することです。名前またはキーIDを使用できます。 gpg --list-keys
を使用してキーIDを取得します コマンド。
ヒント:rpmsign
を実行します gpg_nameを設定する前のコマンド 変数とメッセージにフォーマットが表示されます。
$ rpmsign --addsign my-custom-package.rpm
You must set "%_gpg_name" in your macro file
キー名に加えて、キーリングがデフォルトユーザー~/.gnupg
以外の場所にある場合 ディレクトリには、 gpg_pathを使用します 場所を設定する変数。この値は、--keyring
で使用されるものと同じになります キーが作成されたときのオプション。
GPGバイナリまたはコマンド構文で予想されるデフォルトを超えるものが必要な場合は、追加のオプションを利用できます。
パッケージに署名して公開する
これで、1つまたは複数のパッケージに署名する準備が整いました。 rpmsign
によると マニュアルページ、--addsign
および--resign
コマンドは交換可能です。どちらも、RPMパッケージファイルの署名部分を現在の情報に置き換えます。
次のコマンドは、--addsign
の使用例です。 フラグ:
$ rpmsign --addsign myprod-2.x86_64.rpm myprod-libs-2.x86_64.rpm
rpmbuild
の古いバージョン --sign
が含まれています GPGキーとrpmmacro
の場合、ビルドプロセス中にパッケージに署名できるオプション ファイルが正しく構成されました。 --sign
rpmsign
を使用する別の手順を優先して、このオプションは廃止されました。 。このアプローチは、ビルド、テスト、署名、公開を促進します ワークフロー。
最後に、パッケージとGPG公開鍵をクライアントが利用できるようにします。 1つのオプションは、EPELプロジェクトを模倣し、GPG公開鍵と1つ以上のyum repo
を含むRPMファイルを作成することです。 署名されたパッケージの場所を指すファイル。 Red Hat Satellite Serverでパッケージをホストしている組織の場合、GPG公開鍵をアップロードしてから、署名されたパッケージを保持する製品またはリポジトリーにその鍵を割り当てることから始めます。リポジトリ内のすべてのパッケージは、同じキーで署名する必要があります。これは、サテライト管理者がアップロードする前にパッケージを辞任する一般的な理由です。
まとめ
GPGを使用したRPMパッケージの管理について詳しく理解したので、rpm
の操作方法をよりよく理解できます。 、yum
、およびdnf
。
詳細については、RedHatSatelliteのドキュメントにあるRPM署名キーの保護と管理およびコンテンツ管理ガイドを確認してください。
[セキュリティについてもっと知りたいですか? ITセキュリティとコンプライアンスのチェックリストを確認してください。 ]