RPMパッケージの署名
Calvin Buckley著 (2020年7月23日)
現在行っている RPM の作業では、PHP のパッケージにデジタル署名を追加してセキュリティを強化しています。
パッケージの署名は、パッケージの改ざんを検出して抑止することで、 パッケージの完全性を保証します。パッケージは秘密鍵で署名され、パッケージ作成者が提供する公開鍵で検証され、 ユーザによってインストールされます。この技術は TLS 暗号化を補完するもので、トランスポートにおける改ざんやスヌーピングを防ぎます。
この記事の残りの部分では、IBM i 用の RPM をインストール、またはビルドする際に RPM パッケージ署名を使用する方法について説明します。
ユーザー視点
IBM i にリポジトリをインストールし、Yum で設定する際には、リポジトリのメンテナーが提供する公開鍵もインストールする必要があります。これらの鍵がないと、システムは各パッケージの整合性を判断することができません – パッケージは署名されているかもしれませんが、誰が署名したのでしょうか? 公開鍵の重要性を考え、あなたが持っている公開鍵が正当なものであるかどうかを常に確認してください。
RPM に公開鍵をインストールするには、ファイルや URL に rpm –import コマンドを使用します。rpm -q gpg-pubkey –qf ‘%{name}-%{version}-%{release} –> %{summary}n’ このコマンドを使用すると、インストールされている公開鍵を確認できます。
リポジトリがリポジトリファイルに署名オプションを持っている場合、Yumを使用すると検証が自動的に行われます。(これは /QOpenSys/etc/yum/repos.d のリポジトリファイルを見れば自分で確認できます。) RPM を手動でインストールしている場合は、RPM 上で rpm –checksig コマンドを使用して、署名とチェックサムの両方を含む整合性チェックを行うことができます。PGPはパスすると記載されているはずです。
RPMパッケージは署名されていませんか?
リポジトリの中には、まだパッケージ署名をサポートしていないものもあります。明示されていなくても、どのような鍵を持っているかについては言及されていないのでわかるでしょう。それでも署名をサポートしていないリポジトリを使いたいのであれば、セキュリティ上の理由から、リポジトリのメンテナに追加を依頼してください。
パッケージャー視点
GPG キーを生成し、それを使用するための RPM 環境を設定する必要があります。他の場所でビルドしたパッケージであっても、どのシステムからでも署名することができます。これは、ローカルで信頼できるシステムに鍵を保管したい場合に便利かもしれません。
GPGキーを作成するには、gpg –gen-keyコマンドを実行し、その指示に従います。gpg –list-keys コマンドは、生成されたことを確認するために使用できます。
公開鍵ファイルを作成するには、gpg –export -a ‘My Name’ > public_key_filer コマンドを実行します (名前を代入したり、万が一の場合に曖昧さを解消するために必要なものを入れたり、鍵のファイル名を入れたりします。)。これで、鍵を RPM にインポートすることができます。
あなたの鍵に関連付けられた名前を RPM マクロファイル (~/.rpmmacros); に入力します。 例えば、%_gpg_name My Name (ここでも名前やその他の必要な詳細を代入します)。これが完了したら、RPM上でrpm –signコマンドを使うことができます。ここでも rpm –checksig コマンドを使って GPG の検証が行われていることを確認できます。
複数の鍵
複数の鍵を持っている場合 (例えば、別々のリポジトリを管理している場合など)、RPM のマクロファイルから _gpg_name を削除して (オプションで、誤って間違った鍵で署名しないようにするために)、sign コマンドを実行する際にどの鍵で署名したいかを明示的に指定することができます; 例えば、rpm -D “_gpg_name My Name (Comment)” –addsign package.rpm.ここでは、同じ名前のキーを複数持っていて、それらを曖昧にするためにコメントを使っているかもしれません。
鍵作成時にコメントを追加するには、GPGで–full-gen-keyフラグを使う必要があるかもしれません。同様に、GPG公開鍵をエクスポートする際に、曖昧性を解消するためにコメントやメールを指定することができます。