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