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

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

apt-get找不到公钥时,validation源包完整性的官方方法是什么?

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

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

dsc文件上的gpg签名是完整性validation的关键部分吗? 一个中间的人或一个胭脂镜子可以提供该文件的恶意版本,其中来自gpg的警告是唯一表明发生了什么不好的事情? 或者apt-get是否有其他方法来validation完整性?

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

下载的完整输出是这样的:

 $ 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 

可以在不validationdsc文件上的gpg签名的情况下validation源包的完整性。

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

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

以下是我可以手动validation完整性的方法。 据我所知, apt-get source做了同样的validation。

  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检查签名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.gzgrep main/source/Sources.gz Release sha256sum Sources.gz获得的哈希值
  5. 比较从sha256sum pam_1.1.8-1ubuntu2.dsczcat Sources.gz | grep pam_1.1.8-1ubuntu2.dsc sha256sum pam_1.1.8-1ubuntu2.dsc获得的哈希值 zcat Sources.gz | grep pam_1.1.8-1ubuntu2.dsc
  6. validation在dsc文件中找到的哈希值: cat pam_1.1.8-1ubuntu2.dsc | sed -e 's/^ //;s/ [1-9][0-9]* / /' | sha256sum -c cat pam_1.1.8-1ubuntu2.dsc | sed -e 's/^ //;s/ [1-9][0-9]* / /' | sha256sum -c

您看到该警告的原因是源包由开发人员自己的密钥签名,而您从repo获得的二进制包由repo签名密钥签名。 由于ubuntu-keyring只给出了最终repo debian-keyringdebian-keyring实际上也提供了所有维护者的公钥), apt无法找到密钥并认为该软件包未经过身份validation。

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

在这种情况下,最后一个更改包的人是StéphaneGraber,而他的密钥恰好在debian-keyring (具体来说,在/usr/share/keyrings/debian-maintainers.gpg )。 您可以安装debian-keyring包,从该密钥环导出其密钥,并将该密钥导入您自己的密钥环,以便apt可以validation它是否已正确签名。