Come scaricare in sicurezza e gpg verificare un pacchetto sorgente Debian?


13

Ho bisogno di pacchetti specifici (sorgente o binari) da Debian.

Posso scaricare il pacchetto usando apt-get?

Come posso aggiungere il repository Debian al mio sources.list in modo che venga utilizzato solo caso per caso? Senza incasinare il mio sistema usando l'intero repository Debian?

Come posso ottenere la chiave gpg per il repository Debian per essere sicuro che il pacchetto sia stato firmato dall'archivio Debian?

(Per favore, non dirmi che il sistema potrebbe rompersi. Ne sono consapevole e non me ne potrebbe fregare di meno, perché posso facilmente ripristinare uno snapshot VM.)


Parte della soluzione potrebbe essere il pacchetto debian-archive-keyring che include /usr/share/keyrings/debian-archive-keyring.gpg.
James Mitch,

Un'altra parte della soluzione potrebbe essere Apt-Pinning: jaqque.sbih.org/kplug/apt-pinning.html
James Mitch,

Mia questa risposta ti aiuta? askubuntu.com/questions/263705/…
andol

Risposte:


14

Ci sono diverse domande a cui risponderò individualmente:

Come scaricare (e non installare) singoli pacchetti binari?

apt-get ha un'opzione per scaricare solo il pacchetto:

-d  Download only - do NOT install or unpack archives

Troverai il pacchetto scaricato in /var/cache/apt/archives/. In questo caso dovrai aggiungere una nuova configurazione dell'elenco delle fonti ad apt.

Come scaricare il pacchetto sorgente individuale?

apt-get source <package>

o quando si conosce la posizione del file .dsc:

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

Entrambi gli approcci verificano la firma sui file

Come bloccare il sources.list aka come non pasticciare la mia installazione?

Hai già indicato la pagina della descrizione di base per APT Pinning , e aggiungerei solo che probabilmente vorrai leggere la manpage apt_preferences che contiene anche dei buoni esempi per realizzare le cose di cui hai bisogno. Soprattutto vedi la sezione 'Tracking Stable' in EXAMPLES, poiché descrive qualcosa di molto vicino alle tue esigenze:

C'è un comando utile quando si gioca con più fonti e Pinning APT:

# 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

Ciò dimostra che la versione installata è 1.1.3-1 ~ bpo60 + 1 e il candidato è 1.2.0 ~ rc3-1 ~ bpo60 + 1, che verrà installato successivamente apt-get upgrade. Inoltre è disponibile una versione precedente di un altro repository.

Come scaricare la chiave di archivio Debian?

La chiave di archivio Debian è pubblicata su ftp-master . Dovrai importare la chiave nel tuo portachiavi 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

Quindi dovrai controllare le sue firme:

$ 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]

E traccia le singole chiavi GPG per gli sviluppatori Debian, monitorandole manualmente o controllando il progetto PGP Key Statistics . E a meno che non ci sia una catena dalla tua chiave PGP / GPG all'archivio delle chiavi Debian, in un certo momento dovrai fare un salto di fiducia.

Come scaricare e verificare manualmente i singoli pacchetti

Quindi l'altro approccio è più complicato, perché i pacchetti deb non sono firmati individualmente, ma solo il Releasefile è firmato. Quindi dovrai scaricare e verificare la firma Releasee i Packagesfile insieme al singolo pacchetto.

Aggiungerò un esempio che sarà più chiaro.

Immagina di voler scaricare il pacchetto Debian per Knot DNS dal suo PPA ufficiale per Ubuntu preciso sull'architettura amd64.

Dovrai fare clic sulle directory e trovare questi file:

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

Il prossimo passo sarebbe verificare la firma sul Releasefile:

$ 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

Ovviamente dovrai verificare la chiave in altri modi (come la chiave dei manutentori Debian / Ubuntu, controllandola dal launchpad, ecc, ecc ...)

Dopo aver verificato la firma corretta sul Releasefile, puoi andare al passaggio successivo, verificando il file Pacchetti.

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

Come puoi vedere, la firma si trova nel Releasefile firmato , quindi abbiamo verificato l'integrità del Packagesfile calcolando e confrontando la sua impronta digitale SHA-256.

L'ultimo passo è simile. È necessario calcolare e confrontare l'impronta digitale del singolo pacchetto:

$ 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

A questo punto abbiamo incatenato in modo sicuro il pacchetto al Releasefile firmato . Quindi, se ritieni che la firma sul Releasefile, puoi essere sicuro che il pacchetto sia stato scaricato intatto.

Puoi leggere di più nell'articolo Secure APT su Debian Wiki.


Potresti spiegare perché il gpgcomando non dovrebbe aver bisogno dei privilegi di root? Dovrebbe essere uno strumento amministrativo.
Sopalajo de Arrierez,

1
@SopalajodeArrierez Non è uno strumento amministrativo; puoi leggere di più su GnuPG qui: gnupg.org
oerdnj,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.