我想為 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
答案1
無需驗證檔案上的 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
答案2
您看到該警告的原因是因為來源套件是由開發人員自己的金鑰簽署的,而您從儲存庫取得的二進位套件是由儲存庫簽署金鑰簽署的。由於ubuntu-keyring
只提供了最終儲存庫的金鑰環(debian-keyring
實際上還提供了其所有維護者的公鑰),因此apt
無法找到金鑰並認為該套件未經身份驗證。
因此,這裡的解決方案是從密鑰伺服器導入密鑰。您也可以在Launchpad上尋找原始碼包(pam
是這裡),按一下對包裹進行最後更改的人員的電子郵件地址,然後從那裡檢查密鑰指紋。
在本例中,最後一個更改包的人是 Stéphane Graber,而他的金鑰恰好位於debian-keyring
(具體來說,位於/usr/share/keyrings/debian-maintainers.gpg
)中。您可以安裝debian-keyring
軟體包,從該金鑰環匯出他的金鑰,然後將該金鑰匯入到您自己的金鑰環中,以便apt
可以驗證它是否已正確簽署。