Як безпечно завантажити та gpg перевірити вихідний пакет Debian?


13

Мені потрібні конкретні (вихідні або двійкові) пакети від Debian.

Чи можна завантажити пакет за допомогою apt-get?

Як я можу додати сховище Debian до свого source.list, щоб він використовувався лише на базі випадків? Не псуючи мою систему, використовуючи все сховище Debian?

Як я можу отримати ключ gpg для сховища Debian, щоб переконатися, що пакет був підписаний архівом Debian?

(Будь ласка, не кажіть мені, що система може зламатися. Я знаю про це і не можу менше турбуватися, тому що я можу легко відновити знімок VM.)


Частиною рішення може бути пакет debian-archive-keyring, який включає /usr/share/keyrings/debian-archive-keyring.gpg.
Джеймс Мітч

Іншою частиною рішення може бути Apt- Pinning
Джеймс Мітч

Моя ця відповідь допоможе тобі? askubuntu.com/questions/263705/…
andol

Відповіді:


14

Є кілька питань, на які я відповім індивідуально:

Як завантажити (а не встановити) індивідуальний бінарний пакет?

apt-get є можливість завантажити тільки пакет:

-d  Download only - do NOT install or unpack archives

Ви знайдете завантажений пакет у /var/cache/apt/archives/. У цьому випадку вам доведеться додати нову конфігурацію списку джерел, щоб підходити.

Як завантажити окремий вихідний пакет?

apt-get source <package>

або коли вам відомо розташування файлу .dsc:

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

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

Як закріпити джерела.list aka як мені не зіпсувати установку?

Ви вже вказали на сторінку основного опису 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 або відстежуючи їх вручну, або fe перевіряючи в проекті статистики ключових статистик PGP . І якщо у вашому ключі PGP / GPG до архіву ключів Debian не з’явиться ланцюжок, вам доведеться зробити стрибок віри в якийсь момент часу.

Як завантажити та перевірити окремі пакети вручну

Отже, інший підхід є складнішим, оскільки дебетові пакети не підписуються індивідуально, а підписується лише 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файлі можна перейти до наступного кроку - перевірки файлу 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файлі, ви можете бути впевнені, що пакет завантажено недоторканим.

Ви можете прочитати більше в статті про безпечну APT на Debian Wiki.


Чи можете ви пояснити, чому цій gpgкоманді не потрібно кореневих привілеїв? Він повинен бути адміністративним інструментом.
Sopalajo de Arrierez

1
@SopalajodeArrierez Це не адміністративний інструмент; Ви можете прочитати більше про GnuPG тут: gnupg.org
oerdnj
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.