GPG署名がパッケージから欠落しているか、欠落しているキーが原因で検証できない場合、rpm
およびyum
を強制的に失敗させるにはどうすればよいですか?以下の例では、RPMは署名されているが鍵はインストールされていないと想定します。
RPMを使用すると警告が表示されますが、署名キーを手動でインストールするように強制されるため、これを失敗させたいと思います。
# rpm -q gpg-pubkey --qf '%{name}-%{version}-%{release} --> %{summary}\n'
gpg-pubkey-c105b9de-4e0fd3a3 --> gpg(CentOS-6 Key (CentOS 6 Official Signing Key) <[email protected]>)
# rpm -ivh http://yum.example.com/company-release-el-6.noarch.rpm
Retrieving http://yum.example.com/company-release-el-6.noarch.rpm
warning: /var/tmp/rpm-tmp.3VmFk2: Header V4 RSA/SHA1 Signature, key ID 3bd6ec30: NOKEY
Preparing... ########################################### [100%]
1:company-release ########################################### [100%]
Yumでは、署名鍵がインストールされていないという事実に関する警告は表示されません。
# yum install -vy http://yum.example.com/company-release-el-6.noarch.rpm
これらのコマンドに渡すことができる追加のフラグや、動作を変更するために変更できる構成設定はありますか?または、インストールの前にRPMをダウンロードしてrpm --checksig
を実行する必要がありますか?
パッケージのGPGチェックについて理解する主なポイントは、GPG署名がパッケージ内に埋め込まれており、GPGキーがrpmdbに格納されていることです。 「パッケージXが署名されているキーは何か」を確認するための安全なAPIはありません。「パッケージXはrpmdbのキーで署名されていますか」と「キーYはrpmdbに存在しますか」のみを確認できます。また、これはパッケージが1つのキーでのみ署名できること、および署名を変更するとパッケージが変更されることにも注意してください。
Yumは、「gpgcheck = 1」(デフォルト)で設定されたリポジトリからパッケージをダウンロードするときに、いくつかの手順を実行します。
リポジトリから最初のパッケージがダウンロードされた後、単純な「このパッケージは既知のgpgkeyで署名されていますか」という呼び出しが行われます。そうであれば、何も行われません。そうでない場合、ユーザーに警告が表示されます。これは純粋に情報提供です。
トランザクションが開始する前に、パッケージが有効で他の手順が実行されていない場合、yumはパッケージが既知のgpgkey(rpmdbにすでにインストールされているもの)で署名されていることを確認します。そうでない場合は、#3に進みます。
Yumは、パッケージのソースであるリポジトリーの「gpgkey」データで指定されたすべてのファイルをダウンロードします。 Yumは、rpmdbにすでに存在するキーを無視して、それを解析します。新しいキーがない場合、yumは失敗します。
リポジトリに「gpgcakey」が指定されている場合、yumは「gpgcakey」データで指定されたすべてのファイルをダウンロードします。 Yumは、そのリポジトリのgpgキーリングにすでに存在するキーを無視して、それを解析します。ファイルの解析後にgpgcakeysがインストールされていない場合、yumは失敗します。新しいgpgcakeysがある場合、それらがすでにある場合別のリポジトリのCAキーとしてインポートされます。それらは自動的にインポートされます。これがこのCAキーを初めて見た場合、ユーザーはキーをインストールするかどうかを尋ねられます(-yが指定されていない場合)。 anyキー、yumは失敗します(ただし、インポートされたすべてのキーはリポジトリのgpgキーリングに残ります)。
有効な「gpgcakey」が少なくとも1つある場合、yumは「gpgkey」.ascファイルをダウンロードしようとします。それが存在しない場合、yumはgpgcakeyがないかのようにステップ6に進みます。存在する場合、「gpgkey」は「gpgcakey」に対してテストされ、合格するとrpmdbに追加され、失敗するとyumが失敗します(インポートされたすべてのキーはrpmdbに残ります)。
新しいgpgkeysがある場合、ユーザーは各キーをインストールするかどうかを尋ねられます(-yが指定されていない場合)。 anyキーにノーと言った場合、yumは失敗します。
新しいキーをインストールした後、yumは再度rpmdbのgpgkeysに対してパッケージの署名をチェックします。これが失敗すると、yumは失敗します。
localpkg_gpgcheck=1
/etc/yum.confで、rpmをインストールするために常にyumを実行するようにしてください。
ローカルファイルシステムにrpmがある場合は、
yum install <rpm-on-local-filesys>
/etc/yum.repos.dのすべてのリポジトリにもこれらを設定してください。
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/SOME-APPROVED-GPG-KEY
あなたが述べたように、rpm経由でインストールすることで得られる最善のものは警告であり、存在しないGPGキーへのインストールを拒否するように設定する手段はありません。