web-dev-qa-db-ja.com

GPG署名がないか、検証できない場合にrpmとyumを強制的に失敗させる方法は?

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を実行する必要がありますか?

7
A J

パッケージのGPGチェックについて理解する主なポイントは、GPG署名がパッケージ内に埋め込まれており、GPGキーがrpmdbに格納されていることです。 「パッケージXが署名されているキーは何か」を確認するための安全なAPIはありません。「パッケージXはrpmdbのキーで署名されていますか」と「キーYはrpmdbに存在しますか」のみを確認できます。また、これはパッケージが1つのキーでのみ署名できること、および署名を変更するとパッケージが変更されることにも注意してください。

Yumは、「gpgcheck = 1」(デフォルト)で設定されたリポジトリからパッケージをダウンロードするときに、いくつかの手順を実行します。

  1. リポジトリから最初のパッケージがダウンロードされた後、単純な「このパッケージは既知のgpgkeyで署名されていますか」という呼び出しが行われます。そうであれば、何も行われません。そうでない場合、ユーザーに警告が表示されます。これは純粋に情報提供です。

  2. トランザクションが開始する前に、パッケージが有効で他の手順が実行されていない場合、yumはパッケージが既知のgpgkey(rpmdbにすでにインストールされているもの)で署名されていることを確認します。そうでない場合は、#3に進みます。

  3. Yumは、パッケージのソースであるリポジトリーの「gpgkey」データで指定されたすべてのファイルをダウンロードします。 Yumは、rpmdbにすでに存在するキーを無視して、それを解析します。新しいキーがない場合、yumは失敗します。

  4. リポジトリに「gpgcakey」が指定されている場合、yumは「gpgcakey」データで指定されたすべてのファイルをダウンロードします。 Yumは、そのリポジトリのgpgキーリングにすでに存在するキーを無視して、それを解析します。ファイルの解析後にgpgcakeysがインストールされていない場合、yumは失敗します。新しいgpgcakeysがある場合、それらがすでにある場合別のリポジトリのCAキーとしてインポートされます。それらは自動的にインポートされます。これがこのCAキーを初めて見た場合、ユーザーはキーをインストールするかどうかを尋ねられます(-yが指定されていない場合)。 anyキー、yumは失敗します(ただし、インポートされたすべてのキーはリポジトリのgpgキーリングに残ります)。

  5. 有効な「gpgcakey」が少なくとも1つある場合、yumは「gpgkey」.ascファイルをダウンロードしようとします。それが存在しない場合、yumはgpgcakeyがないかのようにステップ6に進みます。存在する場合、「gpgkey」は「gpgcakey」に対してテストされ、合格するとrpmdbに追加され、失敗するとyumが失敗します(インポートされたすべてのキーはrpmdbに残ります)。

  6. 新しいgpgkeysがある場合、ユーザーは各キーをインストールするかどうかを尋ねられます(-yが指定されていない場合)。 anyキーにノーと言った場合、yumは失敗します。

  7. 新しいキーをインストールした後、yumは再度rpmdbのgpgkeysに対してパッケージの署名をチェックします。これが失敗すると、yumは失敗します。

4
ValeriRangelov

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キーへのインストールを拒否するように設定する手段はありません。

2
philbert