¿Cómo descargar de forma segura y gpg verificar un paquete fuente de Debian?

13

Necesito paquetes específicos (fuente o binarios) de Debian.

¿Puedo descargar el paquete usando apt-get?

¿Cómo puedo agregar el repositorio de Debian a mi sources.list para que solo se use caso por caso? ¿Sin estropear mi sistema usando todo el repositorio de Debian?

¿Cómo puedo obtener la clave gpg para el repositorio de Debian para asegurarme de que el paquete fue firmado por el archivo de Debian?

(Por favor, no me diga que el sistema puede romperse. Soy consciente de eso y no podría importarme menos, porque puedo restaurar fácilmente una instantánea de VM).

James Mitch
fuente
Parte de la solución podría ser el paquete debian-archive-keyring que incluye /usr/share/keyrings/debian-archive-keyring.gpg.
James Mitch
Otra parte de la solución podría ser Apt- Pinning
James Mitch
Mi esta respuesta te ayuda? askubuntu.com/questions/263705/...
Andol

Respuestas:

14

Hay varias preguntas que responderé individualmente:

¿Cómo descargar (y no instalar) un paquete binario individual?

apt-get tiene una opción para descargar solo el paquete:

-d  Download only - do NOT install or unpack archives

Encontrará el paquete descargado en /var/cache/apt/archives/. En este caso, tendrá que agregar una nueva configuración de lista de fuentes a apt.

¿Cómo descargar el paquete fuente individual?

apt-get source <package>

o cuando conozca la ubicación del archivo .dsc:

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

Ambos enfoques verifican la firma en los archivos

¿Cómo anclar las fuentes.list, también conocido como cómo no estropeo mi instalación?

Ya ha señalado la página de descripción básica para APT Pinning , y solo agregaría que probablemente desee leer la página de manual de apt_preferences que también tiene buenos ejemplos para lograr las cosas que necesita. Consulte especialmente la sección 'Rastreo estable' en EJEMPLOS, ya que describe algo muy cercano a sus necesidades:

Hay un comando útil cuando se juega con múltiples fuentes y 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

Esto muestra que la versión instalada es 1.1.3-1 ~ bpo60 + 1, y el candidato es 1.2.0 ~ rc3-1 ~ bpo60 + 1, que se instalará el próximo apt-get upgrade. También hay alguna versión anterior disponible desde otro repositorio.

¿Cómo descargar la clave de archivo de Debian?

Clave del archivo de Debian se publica en ftp-master . Deberá importar la clave en su llavero gpg:

$ gpg --import archive-key-6.0.asc 
gpg: key 473041FA: public key "Debian Archive Automatic Signing Key (6.0/squeeze) <[email protected]>" 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

Luego deberá verificar sus firmas:

$ gpg --list-sig 473041FA
pub   4096R/473041FA 2010-08-27 [expires: 2018-03-05]
uid                  Debian Archive Automatic Signing Key (6.0/squeeze) <[email protected]>
sig 3        473041FA 2010-08-27  Debian Archive Automatic Signing Key (6.0/squeeze) <[email protected]>
sig          7E7B8AC9 2010-08-27  Joerg Jaspert <[email protected]>
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 <[email protected]>
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]

Y rastree las claves GPG individuales para los desarrolladores de Debian, ya sea rastreándolas manualmente o comprobando en el proyecto PGP Key Statistics . Y a menos que haya una cadena desde su clave PGP / GPG al archivo de claves Debian, tendrá que dar un salto de fe en algún momento.

Cómo descargar y verificar paquetes individuales a mano

Entonces, el otro enfoque es más complicado, porque los paquetes deb no están firmados individualmente, sino que solo el Releasearchivo está firmado. Por lo tanto, deberá descargar y verificar la firma Releasey los Packagesarchivos junto con el paquete individual.

Agregaré un ejemplo que será más claro.

Imagine que desea descargar el paquete Debian para Knot DNS desde su PPA oficial para Ubuntu preciso en la arquitectura amd64.

Tendrá que hacer clic en los directorios y encontrar estos archivos:

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

El siguiente paso sería verificar la firma en el Releasearchivo:

$ 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

Por supuesto, deberá verificar la clave de alguna otra manera (como la clave de mantenimiento de Debian / Ubuntu, verificarla desde el launchpad, etc., etc.)

Cuando haya verificado la firma correcta en el Releasearchivo, puede ir al siguiente paso: verificar el archivo de paquetes.

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

Como puede ver, la firma se puede encontrar en el Releasearchivo firmado , por lo tanto, hemos verificado la integridad del Packagesarchivo calculando y comparando su huella digital SHA-256.

El último paso es similar. Necesita calcular y comparar la huella digital del paquete individual:

$ 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

En este punto, hemos encadenado de forma segura el paquete al Releasearchivo firmado . Entonces, si cree en la firma del Releasearchivo, puede estar seguro de que el paquete se descargó intacto.

Puede leer más en el artículo de APT seguro en Debian Wiki.

oerdnj
fuente
¿Podría explicar por qué el gpgcomando no debería necesitar privilegios de root? Se supone que es una herramienta administrativa.
Sopalajo de Arrierez
1
@SopalajodeArrierez No es una herramienta administrativa; Puede leer más sobre GnuPG aquí: gnupg.org
oerdnj