Red Hat Training

A Red Hat training course is available for Red Hat Satellite

B.2. Red Hat Network パッケージ用のデジタル署名

Red Hat Network から配信されるパッケージにはすべて デジタル署名 がなければなりません。デジタル署名は固有となるプライベートキーで作成され、対応するパブリックキーを使って検証することができます。パッケージを作成したら、SRPM (ソース RPM) と RPM は GnuPG キーでデジタルに署名することができます。パッケージのインストールが行われる前に、信頼できる機関によってパッケージが署名されているか、また署名後にパッケージに変更が行われていないことがパブリックキーを使用して検証されます。

B.2.1. GnuPG キーペアの作成

GnuPG キーペアはプライベートキーとパブリックキーで構成されます。以下のようにしてキーペアを生成します。
  1. シェルプロンプトで root ユーザーになり次のコマンドを入力します。
    gpg --gen-key
    GPG キーペアは root ユーザー以外のユーザーが作成するべきではありません。root ユーザーは、root ユーザー以外のユーザーとは異なりメモリページをロックできるため、情報がディスクに書き込まれることはありません。
  2. キーペア生成のコマンドを実行すると、次のようなキーペア生成に関するオプション選択を求める画面が表示されます。
    gpg (GnuPG) 2.0.14; Copyright (C) 2009 Free Software Foundation, Inc.
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    
    Please select what kind of key you want:
       (1) RSA and RSA (default)
       (2) DSA and Elgamal
       (3) DSA (sign only)
       (4) RSA (sign only)
    Your selection?
  3. オプション 1 を選択し、Enter を押します。
  4. 次にキーの長さを指定するキーサイズを選択します。キーが長いほどユーザーのメッセージに対する攻撃への対抗力が増します。 少なくとも 2048 ビットの長さのキーを作成することを推奨します。
  5. 次のオプションはキーの有効期間を指定するように求めます。有効期限の日付を選択する場合には、そのパブリックキーを使用するユーザーにも有効期限の日付を知らせ、新しいパブリックキーを渡さなければならないので注意してください。期限は設定しないことを推奨します。期限を選択しない場合、その選択についての確認することが求められます。
    Key does not expire at all Is this correct (y/n)?
  6. y を押して決定を確認します。
  7. 次にユーザー名、Email アドレス、オプションのコメントなどを含むユーザー ID を入力します。これらは別々に入力が求められます。終了すると入力した情報の要約が表示されます。
  8. 選択を承認したらパスフレーズを入力します。

    注記

    アカウントのパスワードと同様、GnuPG でも最善のセキュリティー対策には適切なパスフレーズが欠かせません。パスフレーズは大文字、小文字、数字を混ぜて句読点も入れると良いでしょう。
  9. パスフレーズの入力と確認を行うとキーが生成されます。次のようなメッセージが表示されます。
    We need to generate a lot of random bytes. It is a good idea to perform some
    other action (type on the keyboard, move the mouse, utilize the disks)
    during the prime generation; this gives the random number generator a
    better chance to gain enough entropy.
    
    +++++.+++++.++++++++....++++++++++..+++++.+++++.+++++++.+++++++ +++.
    ++++++++++++++++++++++++++++++++++++++..........................++++
    画面上の生成動作が完了すると、root のホームディレクトリー内の .gnupg ディレクトリーに新しいキーが配置されます。これは、root ユーザーでキーペアを生成した場合にキーが配置されるデフォルトの場所になります。
root のキーを表示させるには、次のコマンドを使用します。
gpg --list-keys
出力は以下のようになります。
gpg: key D97D1329 marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   3  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 3u
gpg: next trustdb check due at 2013-08-28
pub   2048D/D97D1329 2013-08-27 [expires: 2013-08-28]
      Key fingerprint = 29C7 2D2A 5F9B 7FF7 6411  A9E7 DE3E 5D0F D97D 1329
uid                   Your Name<you@example.com>
sub   2048g/0BE0820D 2013-08-27 [expires: 2013-08-28]
パブリックキーを検索する場合は、次のコマンドを発行します。
gpg --export -a 'Your Name' > public_key.txt
パブリックキーが public_key.txt ファイル内に書き込まれます。
このパブリックキーは非常に重要となります。yum でカスタムのソフトウェアを受信する全クライアントシステムに配備しなければならないキーになります。このキーを組織全体に配備する手法については 『Red Hat Network クライアント設定ガイド』 で扱われます。

B.2.2. パッケージの署名

パッケージに署名を行なう前に、 まず ~/.rpmmacros ファイルに次の行を含ませます。
%_signature gpg
%_gpg_name B7085C8A
_gpg_name キー ID 値の B7085C8A は、パッケージの署名に使用する GPG キーリングのキー ID に置き換えます。この値で RPM にどの署名を使用するのか指示します。
パッケージ package-name-1.0-1.noarch.rpm に署名を行なうには、次のコマンドを使用します。
rpm --resign package-name-1.0-1.noarch.rpm
パスフレーズを入力します。パッケージが署名されていることを確認するには次のコマンドを使用します。
rpm --checksig -v package-name-1.0-1.noarch.rpm

注記

rpm --checksig -v コマンドを実行する前に、GPG キーをインポートします。さらに詳しくは、次のセクションの 「カスタム GPG キーのインポート」 を参照してください。
出力に Good signature from "Your Name" のフレーズが表示されるはずです。 Your Name は署名キーに関連付けした名前になります。

B.2.3. カスタム GPG キーのインポート

独自の RPM を安全にビルドして配付する予定の場合、カスタムの RPM はすべて GNU Privacy Guard (GPG) を使用して署名することを強くお勧めします。GPG キーを生成して GPG 署名のパッケージをビルドする方法については、「GnuPG キーペアの作成」 に記載されています。
パッケージに署名したら、これらの RPM をインポートする全システムにパブリックキーを配備する必要があります。この作業は 2 つのステップに分けられます。まず、各クライアントがキーを取り込めるようパブリックキーの中央となる場所を作成します。次に、各システムのローカルの GPG キーリングにキーを追加します。
最初のステップは一般的であり、Red Hat Network のクライアントアプリケーション導入で推奨している Web サイトを利用した方法を使って行うことができます。これを実行するには、Web サーバー上にパブリックディレクトリーを作成して GPG のパブリック署名をその中に置きます。
cp /some/path/YOUR-RPM-GPG-KEY /var/www/html/pub/
次に Wget を使用してクライアントシステムからキーをダウンロードします。
wget -O- -q http://your_proxy_or_sat.your_domain.com/pub/YOUR-RPM-GPG-KEY
-O- オプションは結果を標準出力に送るのに対し、-q オプションを使用すると Wget を出力なしの quiet モードで実行します。YOUR-RPM-GPG-KEY 変数を、使用するキーのファイル名に必ず置き換えてください。
キーがクライアントのファイルシステムで使用できるようになったら、ローカルの GPG キーリングにインポートします。インポート方法については、オペレーティングシステムによって異なる場合があります。
Red Hat Enterprise Linux 3 以降の場合は、次のコマンドを使用します。
rpm --import /path/to/YOUR-RPM-GPG-KEY
GPG キーがクライアントに正常に追加されると、該当キーを使って署名したカスタム RPM の検証が可能になるはずです。

注記

カスタムの RPM とチャンネルを使用する場合は、それらのパッケージに対してカスタムの GPG キーを必ず作成してください。 GPG キーの配置場所についても、キックスタートプロファイルに追加する必要があります。
カスタムの GPG キーはクライアントシステムに追加する必要があり、これが行なわれないとキックスタートインストールに失敗する可能性があります。