检查源包的完整性的官方方法是什么?
我想为pam添加一个function,我认为一个很好的起点是下载libpam-modules
源代码。 在下载时,我注意到这个警告: gpgv: Can't check signature: public key not found
当apt-get
找不到公钥时,validation源包完整性的官方方法是什么?
已经安装了最新版本的ubuntu-keyring
和debian-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源包的完整性。
每个安装源都有一对名为Release
和Release.gpg
的文件。 这两个文件是哈希树的根,可用于validation存档中所有内容的完整性。 Release
上的gpg签名是唯一需要validation的签名。
在将文件放入存储库并通过Release.gpg
间接签名之前, dsc
文件上的签名可能起到重要作用。 一旦文件在存储库中,就可以忽略dsc
文件上的签名。
以下是我可以手动validation完整性的方法。 据我所知, apt-get source
做了同样的validation。
- 下载
http://dk.archive.ubuntu.com/ubuntu/dists/trusty/Release
和http://dk.archive.ubuntu.com/ubuntu/dists/trusty/Release.gpg
。 - 使用
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
找到) - 下载
http://dk.archive.ubuntu.com/ubuntu/dists/trusty/main/source/Sources.gz
- 比较从
sha256sum Sources.gz
和grep main/source/Sources.gz Release
sha256sum Sources.gz
获得的哈希值 - 比较从
sha256sum pam_1.1.8-1ubuntu2.dsc
和zcat 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
- 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-keyring
( debian-keyring
实际上也提供了所有维护者的公钥), apt
无法找到密钥并认为该软件包未经过身份validation。
因此,此处的解决方案是从密钥服务器导入密钥。 您还可以在Launchpad上查找源包( pam
在这里 ),单击对包进行最后一次更改的人的电子邮件地址,然后从那里检查密钥指纹。
在这种情况下,最后一个更改包的人是StéphaneGraber,而他的密钥恰好在debian-keyring
(具体来说,在/usr/share/keyrings/debian-maintainers.gpg
)。 您可以安装debian-keyring
包,从该密钥环导出其密钥,并将该密钥导入您自己的密钥环,以便apt
可以validation它是否已正确签名。