web-dev-qa-db-ja.com

Debianソースパッケージを安全にダウンロードしてgpg検証する方法は?

Debianからの特定の(ソースまたはバイナリ)パッケージが必要です。

Apt-getを使用してパッケージをダウンロードできますか?

Debianリポジトリをsources.listに追加して、ケースベースでのみ使用されるようにするにはどうすればよいですか? Debianリポジトリ全体を使用してシステムを台無しにしないでください。

Debianリポジトリのgpgキーを取得して、パッケージがDebianアーカイブによって署名されたことを確認するにはどうすればよいですか?

(システムが壊れる可能性があることを教えてはいけません。VMスナップショットを簡単に復元できるので、それを認識しており、それほど気にすることはできません。)

13
James Mitch

個別に回答するいくつかの質問があります。

個々のバイナリパッケージをダウンロードする(インストールしない)方法は?

apt-getには、パッケージのみをダウンロードするオプションがあります。

-d  Download only - do NOT install or unpack archives

ダウンロードしたパッケージは/var/cache/apt/archives/にあります。この場合、aptに新しいソースリスト構成を追加する必要があります。

個々のソースパッケージをダウンロードする方法は?

apt-get source <package>

または、.dscファイルの場所がわかっている場合:

dget http://http.debian.net/debian/pool/main/k/knot/knot_1.2.0~rc3-1.dsc

どちらのアプローチもファイルの署名を検証します

sources.listをピン留めする方法、つまりインストールを台無しにしない方法は?

APT Pinning の基本的な説明のページをすでに指摘しているので、おそらく apt_preferences のマンページを読みたいだけです。あなたが必要です。特に、使用例の「安定性の追跡」セクションを参照してください。これは、ニーズに非常に近いものについて説明しているためです。

複数のソースとAPT Pinningで遊ぶときに便利なコマンドがあります:

# apt-cache policy knot
knot:
  Installed: 1.1.3-1~bpo60+1
  Candidate: 1.2.0~rc3-1~bpo60+1
  Version table:
     1.2.0~rc3-1~bpo60+1 0
        500 http://deb.knot-dns.cz/debian/ squeeze/main AMD64 Packages
 *** 1.1.3-1~bpo60+1 0
        100 /var/lib/dpkg/status
     1.0.5-1~bpo60+1 0
        500 http://ppa.sury.org/debian/ squeeze/main AMD64 Packages

これは、インストールされたバージョンが1.1.3-1〜bpo60 + 1であり、候補が1.2.0〜rc3-1〜bpo60 + 1であり、次のapt-get upgradeにインストールされることを示しています。また、さらに別のリポジトリからいくつかの古いバージョンを入手できます。

Debianアーカイブキーをダウンロードする方法は?

Debianアーカイブキーは ftp-master で公開されています。キーをgpgキーリングにインポートする必要があります。

$ gpg --import archive-key-6.0.asc 
gpg: key 473041FA: public key "Debian Archive Automatic Signing Key (6.0/squeeze) <[email protected]>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   9  signed:  31  trust: 0-, 0q, 0n, 0m, 0f, 9u
gpg: depth: 1  valid:  31  signed:  38  trust: 25-, 0q, 0n, 1m, 5f, 0u
gpg: depth: 2  valid:  21  signed:  31  trust: 19-, 0q, 0n, 0m, 2f, 0u
gpg: depth: 3  valid:   3  signed:  12  trust: 2-, 0q, 0n, 0m, 1f, 0u
gpg: depth: 4  valid:   1  signed:   8  trust: 1-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2013-09-22

次に、署名を確認する必要があります。

$ gpg --list-sig 473041FA
pub   4096R/473041FA 2010-08-27 [expires: 2018-03-05]
uid                  Debian Archive Automatic Signing Key (6.0/squeeze) <[email protected]>
sig 3        473041FA 2010-08-27  Debian Archive Automatic Signing Key (6.0/squeeze) <[email protected]>
sig          7E7B8AC9 2010-08-27  Joerg Jaspert <[email protected]>
sig     P    B12525C4 2010-08-27  [User ID not found]
sig          D0EC0723 2010-08-27  [User ID not found]
sig          8AEA8FEE 2010-08-27  [User ID not found]
sig          A3AE44A4 2010-08-28  [User ID not found]
sig          00D8CD16 2010-08-28  Alexander Reichle-Schmehl <[email protected]>
sig          CD15A883 2010-08-28  [User ID not found]
sig          672C8B12 2010-08-28  [User ID not found]
sig 2        C4CF8EC3 2010-08-28  [User ID not found]
sig 2        D628A5CA 2010-08-28  [User ID not found]

そして、手動で追跡するか、またはf.e.でDebian開発者に対する個々のGPGキーを追跡します。 PGP Key Statistics プロジェクトで確認します。そして、PGP/GPGキーからDebianキーアーカイブへのチェーンがない限り、ある時点で信頼を飛ばす必要があります。

個々のパッケージを手動でダウンロードして検証する方法

したがって、debパッケージは個別に署名されず、Releaseファイルのみが署名されるため、他のアプローチはより複雑です。したがって、個々のパッケージとともにReleaseおよびPackagesファイルの署名をダウンロードして検証する必要があります。

より明確な例を追加します。

Knot DNS から 公式PPA のDebianパッケージをダウンロードしたいと想像してください。AMD64アーキテクチャのUbuntuの場合です。

ディレクトリをクリックして、これらのファイルを見つける必要があります。

wget http://ppa.launchpad.net/cz.nic-labs/knot-dns/ubuntu/dists/precise/Release
wget http://ppa.launchpad.net/cz.nic-labs/knot-dns/ubuntu/dists/precise/Release.gpg
wget http://ppa.launchpad.net/cz.nic-labs/knot-dns/ubuntu/dists/precise/main/binary-AMD64/Packages
wget http://ppa.launchpad.net/cz.nic-labs/knot-dns/ubuntu/pool/main/k/knot/knot_1.2.0~rc3-1~precise+1_AMD64.deb

次のステップは、Releaseファイルの署名を検証することです。

$ gpg --verify Release.gpg Release
gpg: Signature made Fri 01 Mar 2013 07:14:38 PM CET using RSA key ID F9C59A45
gpg: Good signature from "Launchpad Datové schránky"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 5246 3488 670E 69A0 9200  7C24 F233 1238 F9C5 9A45

もちろん、他の方法でキーを確認する必要があります(Debian/Ubuntuメンテナーキー、ランチパッドからチェックするなど)。

Releaseファイルの正しい署名を検証したら、次のステップであるパッケージファイルの検証に進むことができます。

sha256sum Packages
c96a524398cf6e9db033c8299974fe324eba47cc8190efec6495c74e251330ad  Packages
$ grep c96a524398cf6e9db033c8299974fe324eba47cc8190efec6495c74e251330ad Release
 c96a524398cf6e9db033c8299974fe324eba47cc8190efec6495c74e251330ad             3379 main/binary-AMD64/Packages

ご覧のとおり、署名は署名されたReleaseファイルで見つけることができます。したがって、SHA-256フィンガープリントを計算して比較することにより、Packagesファイルの整合性を検証しました。

最後のステップも同様です。個々のパッケージのフィンガープリントを計算して比較する必要があります。

$ sha1sum knot_1.2.0~rc3-1~precise+1_AMD64.deb 
8b34078e9bfef7aa818b2f926a28838b0ede9f43  knot_1.2.0~rc3-1~precise+1_AMD64.deb
$ grep -A 13 "Package: knot$" Packages | grep "^SHA1: "
SHA1: 8b34078e9bfef7aa818b2f926a28838b0ede9f43

この時点で、パッケージを署名済みReleaseファイルに安全にチェーンしました。したがって、Releaseファイルの署名を信じている場合は、パッケージが完全にダウンロードされたことを確認できます。

詳細については、Debian Wikiの Secure APT の記事をご覧ください。

14
oerdnj