Как безопасно скачать и проверить gpg исходный пакет Debian?

13

Мне нужны конкретные (исходные или бинарные) пакеты из Debian.

Могу ли я скачать пакет, используя apt-get?

Как я могу добавить репозиторий Debian в мой sources.list, чтобы он использовался только в каждом конкретном случае? Не портите мою систему, используя весь репозиторий Debian?

Как получить ключ gpg для репозитория Debian, чтобы убедиться, что пакет подписан архивом Debian?

(Пожалуйста, не говорите мне, что система может сломаться. Я знаю об этом и мне наплевать, потому что я могу легко восстановить снимок виртуальной машины.)

Джеймс Митч
источник
Частью решения может быть пакет debian-archive-keyring, который включает /usr/share/keyrings/debian-archive-keyring.gpg.
Джеймс Митч
Другая часть решения может быть Apt-Pinning: jaqque.sbih.org/kplug/apt-pinning.html
Джеймс Митч
Мой этот ответ поможет тебе? askubuntu.com/questions/263705/…
andol

Ответы:

14

Есть несколько вопросов, на которые я отвечу индивидуально:

Как скачать (а не установить) отдельный двоичный пакет?

apt-get имеет возможность загрузить только пакет:

-d  Download only - do NOT install or unpack archives

Вы найдете загруженный пакет в /var/cache/apt/archives/. В этом случае вам нужно будет добавить новую конфигурацию списка источников в apt.

Как скачать отдельный пакет с исходным кодом?

apt-get source <package>

или когда вы знаете местоположение файла .dsc:

dget http://http.debian.net/debian/pool/main/k/knot/knot_1.2.0~rc3-1.dsc

Оба подхода проверяют подпись на файлах

Как закрепить sources.list, иначе, как не испортить мою установку?

Вы уже указали на страницу базового описания APT Pinning , и я хотел бы только добавить, что вы, вероятно, хотите прочитать справочную страницу apt_preferences, на которой также есть хорошие примеры для выполнения необходимых задач . Особенно смотрите раздел «Отслеживание стабильности» в ПРИМЕРАХ, поскольку он описывает что-то очень близкое к вашим потребностям:

При игре с несколькими источниками и APT Pinning есть полезная команда:

# apt-cache policy knot
knot:
  Installed: 1.1.3-1~bpo60+1
  Candidate: 1.2.0~rc3-1~bpo60+1
  Version table:
     1.2.0~rc3-1~bpo60+1 0
        500 http://deb.knot-dns.cz/debian/ squeeze/main amd64 Packages
 *** 1.1.3-1~bpo60+1 0
        100 /var/lib/dpkg/status
     1.0.5-1~bpo60+1 0
        500 http://ppa.sury.org/debian/ squeeze/main amd64 Packages

Это показывает, что установлена ​​версия 1.1.3-1 ~ bpo60 + 1, а кандидат - 1.2.0 ~ rc3-1 ~ bpo60 + 1, которая будет установлена ​​в следующем apt-get upgrade. Также есть более старая версия, доступная из еще одного хранилища.

Как скачать ключ архива Debian?

Ключ архива Debian опубликован на ftp-master . Вам нужно будет импортировать ключ в ваш брелок gpg:

$ gpg --import archive-key-6.0.asc 
gpg: key 473041FA: public key "Debian Archive Automatic Signing Key (6.0/squeeze) <ftpmaster@debian.org>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   9  signed:  31  trust: 0-, 0q, 0n, 0m, 0f, 9u
gpg: depth: 1  valid:  31  signed:  38  trust: 25-, 0q, 0n, 1m, 5f, 0u
gpg: depth: 2  valid:  21  signed:  31  trust: 19-, 0q, 0n, 0m, 2f, 0u
gpg: depth: 3  valid:   3  signed:  12  trust: 2-, 0q, 0n, 0m, 1f, 0u
gpg: depth: 4  valid:   1  signed:   8  trust: 1-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2013-09-22

Тогда вам придется проверить его подписи:

$ gpg --list-sig 473041FA
pub   4096R/473041FA 2010-08-27 [expires: 2018-03-05]
uid                  Debian Archive Automatic Signing Key (6.0/squeeze) <ftpmaster@debian.org>
sig 3        473041FA 2010-08-27  Debian Archive Automatic Signing Key (6.0/squeeze) <ftpmaster@debian.org>
sig          7E7B8AC9 2010-08-27  Joerg Jaspert <joerg@debian.org>
sig     P    B12525C4 2010-08-27  [User ID not found]
sig          D0EC0723 2010-08-27  [User ID not found]
sig          8AEA8FEE 2010-08-27  [User ID not found]
sig          A3AE44A4 2010-08-28  [User ID not found]
sig          00D8CD16 2010-08-28  Alexander Reichle-Schmehl <alexander@reichle.schmehl.info>
sig          CD15A883 2010-08-28  [User ID not found]
sig          672C8B12 2010-08-28  [User ID not found]
sig 2        C4CF8EC3 2010-08-28  [User ID not found]
sig 2        D628A5CA 2010-08-28  [User ID not found]

И отслеживайте отдельные ключи GPG для разработчиков Debian, отслеживая их вручную или проверяя в проекте PGP Key Statistics . И если нет цепочки от вашего ключа PGP / GPG до архива ключей Debian, вам придется совершить прыжок веры в какой-то момент времени.

Как скачать и проверить отдельные пакеты вручную

Таким образом, другой подход более сложный, потому что пакеты deb подписываются не индивидуально, а подписывается только Releaseфайл. Таким образом вам нужно будет скачать и проверить подпись Releaseи Packagesфайлы вместе с отдельным пакетом.

Я добавлю пример, который будет понятнее.

Представьте, что вы хотите загрузить пакет Debian для Knot DNS с его официального PPA для Ubuntu, точнее для архитектуры amd64.

Вам нужно будет просмотреть каталоги и найти эти файлы:

wget http://ppa.launchpad.net/cz.nic-labs/knot-dns/ubuntu/dists/precise/Release
wget http://ppa.launchpad.net/cz.nic-labs/knot-dns/ubuntu/dists/precise/Release.gpg
wget http://ppa.launchpad.net/cz.nic-labs/knot-dns/ubuntu/dists/precise/main/binary-amd64/Packages
wget http://ppa.launchpad.net/cz.nic-labs/knot-dns/ubuntu/pool/main/k/knot/knot_1.2.0~rc3-1~precise+1_amd64.deb

Следующим шагом будет проверка подписи в Releaseфайле:

$ gpg --verify Release.gpg Release
gpg: Signature made Fri 01 Mar 2013 07:14:38 PM CET using RSA key ID F9C59A45
gpg: Good signature from "Launchpad Datové schránky"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 5246 3488 670E 69A0 9200  7C24 F233 1238 F9C5 9A45

Конечно, вам необходимо проверить ключ другими способами (например, ключом сопровождения Debian / Ubuntu, проверкой его с панели запуска и т. Д. И т. Д.)

Когда вы проверили правильную подпись в Releaseфайле, вы можете перейти к следующему шагу - проверке файла пакетов.

sha256sum Packages
c96a524398cf6e9db033c8299974fe324eba47cc8190efec6495c74e251330ad  Packages
$ grep c96a524398cf6e9db033c8299974fe324eba47cc8190efec6495c74e251330ad Release
 c96a524398cf6e9db033c8299974fe324eba47cc8190efec6495c74e251330ad             3379 main/binary-amd64/Packages

Как видите, подпись находится в подписанном Releaseфайле, поэтому мы проверили целостность Packagesфайла, вычислив и сравнив его отпечаток SHA-256.

Последний шаг похож. Вам необходимо вычислить и сравнить отпечаток индивидуальной упаковки:

$ sha1sum knot_1.2.0~rc3-1~precise+1_amd64.deb 
8b34078e9bfef7aa818b2f926a28838b0ede9f43  knot_1.2.0~rc3-1~precise+1_amd64.deb
$ grep -A 13 "Package: knot$" Packages | grep "^SHA1: "
SHA1: 8b34078e9bfef7aa818b2f926a28838b0ede9f43

На данный момент мы надежно приковали пакет к подписанному Releaseфайлу. Так что, если вы уверены, что подпись на Releaseфайле, вы можете быть уверены, что пакет был загружен в целости и сохранности.

Вы можете прочитать больше в статье Secure APT на вики Debian.

oerdnj
источник
Не могли бы вы объяснить, почему gpgкоманде не нужны права root? Это должен быть административный инструмент.
Сопалахо де Арриерес
1
@SopalajodeArrierez Это не административный инструмент; Вы можете прочитать больше о GnuPG здесь: gnupg.org
oerdnj