检查源包完整性的官方方法是什么?

检查源包完整性的官方方法是什么?

我想为 pam 添加一个功能,我认为一个好的起点是下载源libpam-modules代码。下载时,我注意到这个警告:gpgv: Can't check signature: public key not found

apt-get当找不到公钥时,官方用于验证源包完整性的方法是什么?

最新版本的ubuntu-keyringdebian-keyring包已经安装。

方法找到相应的公钥并安装它。然而,这本身并不能提供完整性,因为实际上它信任文件的内容dsc来告诉我使用哪个公钥来验证dsc文件上的签名。

文件上的 gpg 签名是否是dsc完整性验证的关键部分?中间人或流氓镜像是否会提供恶意版本的文件,而 gpg 发出的警告是发生坏事的唯一迹象?或者是否有apt-get其他方法来验证完整性?

在哪里可以找到有关安全模型的官方文档?理想情况下,我希望了解从安装映像到我正在下载的源包的完整信任路径。

下载的完整输出如下:

$ apt-get source libpam-modules
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Picking 'pam' as source package instead of 'libpam-modules'
NOTICE: 'pam' packaging is maintained in the 'Bzr' version control system at:
https://code.launchpad.net/~ubuntu-core-dev/pam/ubuntu
Please use:
bzr branch https://code.launchpad.net/~ubuntu-core-dev/pam/ubuntu
to retrieve the latest (possibly unreleased) updates to the package.
Need to get 2,043 kB of source archives.
Get:1 http://dk.archive.ubuntu.com/ubuntu/ trusty/main pam 1.1.8-1ubuntu2 (dsc) [2,510 B]
Get:2 http://dk.archive.ubuntu.com/ubuntu/ trusty/main pam 1.1.8-1ubuntu2 (tar) [1,893 kB]
Get:3 http://dk.archive.ubuntu.com/ubuntu/ trusty/main pam 1.1.8-1ubuntu2 (diff) [147 kB]
Fetched 2,043 kB in 6s (316 kB/s)                                              
gpgv: Signature made Fri 31 Jan 2014 11:12:23 PM CET using RSA key ID 64792D67
gpgv: Can't check signature: public key not found
dpkg-source: warning: failed to verify signature on ./pam_1.1.8-1ubuntu2.dsc

答案1

无需验证文件上的 gpg 签名即可验证源包的完整性dsc

每个安装源都有一对名为Release和的文件Release.gpg。这两个文件是哈希树的根,可用于验证存档中所有内容的完整性。 上的 gpg 签名Release是唯一需要验证的签名。

dsc在将文件放入存储库并通过 间接签名之前,文件上的签名可能起着重要作用Release.gpg。一旦文件进入存储库,dsc就可以忽略文件上的签名。

以下是我手动验证完整性的方法。据我所知,apt-get source验证是一样的。

  1. 下载http://dk.archive.ubuntu.com/ubuntu/dists/trusty/Releasehttp://dk.archive.ubuntu.com/ubuntu/dists/trusty/Release.gpg
  2. 使用以下方式检查签名gpg --keyring /etc/apt/trusted.gpg --verify Release.gpg Release(公钥也可以在中找到/usr/share/keyrings/ubuntu-archive-keyring.gpg
  3. 下载http://dk.archive.ubuntu.com/ubuntu/dists/trusty/main/source/Sources.gz
  4. 比较从sha256sum Sources.gz和获得的哈希值grep main/source/Sources.gz Release
  5. 比较从sha256sum pam_1.1.8-1ubuntu2.dsc和获得的哈希值zcat Sources.gz | grep pam_1.1.8-1ubuntu2.dsc
  6. 验证文件中找到的哈希值dsccat pam_1.1.8-1ubuntu2.dsc | sed -e 's/^ //;s/ [1-9][0-9]* / /' | sha256sum -c

答案2

您看到该警告的原因是因为源包由开发人员自己的密钥签名,而您从存储库获得的二进制包由存储库签名密钥签名。由于ubuntu-keyring仅提供最终存储库的密钥环(debian-keyring实际上还提供了其所有维护者的公钥),因此apt找不到密钥并认为该包未经认证。

因此,这里的解决方案是从密钥服务器导入密钥。您也可以在 Launchpad 上查找源包pam这里),点击对包进行最后更改的人员的电子邮件地址,然后从那里检查密钥指纹。

在这种情况下,最后一个更改软件包的人是 Stéphane Graber,碰巧他的密钥在debian-keyring(具体来说,在/usr/share/keyrings/debian-maintainers.gpg)。您可以安装debian-keyring软件包,从该密钥环导出他的密钥,然后将该密钥导入您自己的密钥环,以便apt可以验证它是否已正确签名。

相关内容