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

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

Можно ли загрузить пакет с помощью apt-get?

Как я могу добавить репозиторий Debian в свой source.list, поэтому он будет использоваться только по отдельности? Без испортить мою систему, используя весь репозиторий Debian?

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

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

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

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

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 

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

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

Вы уже указали на страницу базового описания для APT Pinning , и я бы добавил, что вы, вероятно, захотите прочитать man- страницу 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 and 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 вы можете перейти к следующему шагу – проверка файла Packages.

 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 Wiki.