Я хочу добавить функцию в 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
этоздесь), щелкните по адресу электронной почты человека, который внес последние изменения в пакет, и проверьте отпечаток ключа оттуда.
В этом случае последним человеком, изменившим пакет, был Стефан Грабер, и так уж получилось, что его ключ находится в debian-keyring
(конкретно, в /usr/share/keyrings/debian-maintainers.gpg
). Вы можете установить debian-keyring
пакет, экспортировать его ключ из этой связки ключей и импортировать этот ключ в свою собственную связку ключей, чтобы apt
убедиться, что он правильно подписан.