如何安全地下载和gpg验证Debian源码包?


13

我需要来自Debian的特定(源或二进制)软件包。

我可以使用apt-get下载软件包吗?

我如何才能将Debian存储库添加到我的sources.list中,使其仅在基于案例的情况下使用?不会通过使用整个Debian存储库弄乱我的系统吗?

如何获得Debian存储库的gpg密钥,以确保该软件包已由Debian档案文件签名?

(请不要告诉我,系统可能会崩溃。我知道这一点,所以不在乎,因为我可以轻松地还原VM快照。)


解决方案的一部分可能是debian-archive-keyring软件包,其中包括/usr/share/keyrings/debian-archive-keyring.gpg。
詹姆斯·米奇

解决方案的另一部分可能是Apt-Pinning:jaqque.sbih.org/kplug/apt-pinning.html
James

我的这个答案对您有帮助吗?askubuntu.com/questions/263705/...
andol

Answers:


14

我将单独回答几个问题:

如何下载(而不是安装)单个二进制软件包?

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固定时,有一个有用的命令:

# 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) <ftpmaster@debian.org>" 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) <ftpmaster@debian.org>
sig 3        473041FA 2010-08-27  Debian Archive Automatic Signing Key (6.0/squeeze) <ftpmaster@debian.org>
sig          7E7B8AC9 2010-08-27  Joerg Jaspert <joerg@debian.org>
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 <alexander@reichle.schmehl.info>
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]

并通过手动跟踪GPG密钥或在PGP Key Statistics项目中进行检查来跟踪单个GPG密钥给Debian开发人员。而且,除非从您的PGP / GPG密钥到Debian密钥档案之间没有链条,否则您将不得不在某个时间点实现信念上的飞跃。

如何手动下载和验证单个软件包

因此,另一种方法更加复杂,因为deb软件包不是单独签名的,而是仅Release文件签名的。因此,您将需要下载并验证签名ReleasePackages文件以及单独的软件包。

我将添加一个更清晰的示例。

假设您要从amd64架构上的Ubuntu 官方PPA下载用于Knot DNS的 Debian软件包。

您将必须单击目录并找到以下文件:

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文件中找到,因此我们Packages通过计算和比较其SHA-256指纹验证了文件的完整性。

最后一步是相似的。您需要计算并比较单个包装的指纹:

$ 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文章中阅读更多内容。


您能否解释一下为什么该gpg命令不需要root特权?它应该是一种管理工具。
Sopalajo de Arrierez,2015年

1
@SopalajodeArrierez这不是一个管理工具;您可以在此处了解有关GnuPG的更多信息:gnupg.org
oerdnj 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.