¿Cuál es el método oficial para verificar la integridad de un paquete fuente?

¿Cuál es el método oficial para verificar la integridad de un paquete fuente?

Quiero agregar una función a pam y pensé que un buen punto de partida era descargar la libpam-modulesfuente. Al descargar, noto esta advertencia:gpgv: Can't check signature: public key not found

¿Cuál es el método oficial para verificar la integridad de los paquetes fuente cuando apt-getno se puede encontrar la clave pública?

La versión más reciente de ubuntu-keyringy debian-keyringlos paquetes ya están instalados.

Haymaneraspara encontrar la clave pública correspondiente e instalarla. Sin embargo, eso en sí mismo no proporciona integridad, porque en realidad es confiar en el contenido del dscarchivo para decirme qué clave pública usar para verificar la firma en el dscarchivo.

¿Es la firma gpg en el dscarchivo una parte crítica de la verificación de integridad? ¿Podría un hombre en el medio o un espejo rojo entregar una versión maliciosa del archivo donde la advertencia de gpg es la única indicación de que algo malo está sucediendo? ¿O apt-gettiene otros medios para validar la integridad?

¿Dónde puedo encontrar documentación oficial sobre el modelo de seguridad? Idealmente, me gustaría comprender la ruta de plena confianza desde la imagen de instalación hasta el paquete fuente que estoy descargando.

El resultado completo de la descarga fue este:

$ apt-get source libpam-modules
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Picking 'pam' as source package instead of 'libpam-modules'
NOTICE: 'pam' packaging is maintained in the 'Bzr' version control system at:
https://code.launchpad.net/~ubuntu-core-dev/pam/ubuntu
Please use:
bzr branch https://code.launchpad.net/~ubuntu-core-dev/pam/ubuntu
to retrieve the latest (possibly unreleased) updates to the package.
Need to get 2,043 kB of source archives.
Get:1 http://dk.archive.ubuntu.com/ubuntu/ trusty/main pam 1.1.8-1ubuntu2 (dsc) [2,510 B]
Get:2 http://dk.archive.ubuntu.com/ubuntu/ trusty/main pam 1.1.8-1ubuntu2 (tar) [1,893 kB]
Get:3 http://dk.archive.ubuntu.com/ubuntu/ trusty/main pam 1.1.8-1ubuntu2 (diff) [147 kB]
Fetched 2,043 kB in 6s (316 kB/s)                                              
gpgv: Signature made Fri 31 Jan 2014 11:12:23 PM CET using RSA key ID 64792D67
gpgv: Can't check signature: public key not found
dpkg-source: warning: failed to verify signature on ./pam_1.1.8-1ubuntu2.dsc

Respuesta1

La integridad del paquete fuente se puede verificar sin validar la firma gpg en el dscarchivo.

Cada fuente de instalación tiene un par de archivos llamados Releasey Release.gpg. Estos dos archivos son la raíz de un árbol hash, que se puede utilizar para validar la integridad de todo el contenido del archivo. La firma gpg Releasees la única que debe verificarse.

La firma en el dscarchivo puede tener un propósito importante antes de que el archivo se coloque en un repositorio y se firme indirectamente a través de Release.gpg. Una vez que el archivo está en el repositorio, dscse puede ignorar la firma del archivo.

Así es como pude verificar manualmente la integridad. Por lo que puedo decir, apt-get sourcehace la misma validación.

  1. Descargar http://dk.archive.ubuntu.com/ubuntu/dists/trusty/Releasey http://dk.archive.ubuntu.com/ubuntu/dists/trusty/Release.gpg.
  2. Verifique la firma usando gpg --keyring /etc/apt/trusted.gpg --verify Release.gpg Release(La clave pública también se puede encontrar en /usr/share/keyrings/ubuntu-archive-keyring.gpg)
  3. Descargarhttp://dk.archive.ubuntu.com/ubuntu/dists/trusty/main/source/Sources.gz
  4. Comparar hashes obtenidos de sha256sum Sources.gzygrep main/source/Sources.gz Release
  5. Comparar hashes obtenidos de sha256sum pam_1.1.8-1ubuntu2.dscyzcat Sources.gz | grep pam_1.1.8-1ubuntu2.dsc
  6. Valide los hashes encontrados dentro del dscarchivo:cat pam_1.1.8-1ubuntu2.dsc | sed -e 's/^ //;s/ [1-9][0-9]* / /' | sha256sum -c

Respuesta2

La razón por la que ve esa advertencia es porque los paquetes fuente están firmados con la clave del desarrollador, mientras que los paquetes binarios que obtiene del repositorio están firmados con la clave de firma del repositorio. Dado que ubuntu-keyringsolo proporciona el conjunto de claves del repositorio final ( debian-keyringen realidad, también proporciona las claves públicas de todos sus mantenedores), aptno puede encontrar la clave y considera que el paquete no está autenticado.

Por lo tanto, la solución aquí es importar la clave desde un servidor de claves. También puede buscar el paquete fuente en Launchpad ( pamesaquí), haga clic en la dirección de correo electrónico de la persona que realizó el último cambio en un paquete y verifique la huella digital de la clave desde allí.

En este caso, la última persona en cambiar el paquete fue Stéphane Graber, y resulta que su clave está en debian-keyring(concretamente, en /usr/share/keyrings/debian-maintainers.gpg). Puede instalar el debian-keyringpaquete, exportar su clave desde ese conjunto de claves e importar esa clave a su propio conjunto de claves para aptpoder verificar que esté firmada correctamente.

información relacionada