Quiero agregar una función a pam y pensé que un buen punto de partida era descargar la libpam-modules
fuente. 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-get
no se puede encontrar la clave pública?
La versión más reciente de ubuntu-keyring
y debian-keyring
los 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 dsc
archivo para decirme qué clave pública usar para verificar la firma en el dsc
archivo.
¿Es la firma gpg en el dsc
archivo 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-get
tiene 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 dsc
archivo.
Cada fuente de instalación tiene un par de archivos llamados Release
y 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 Release
es la única que debe verificarse.
La firma en el dsc
archivo 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, dsc
se puede ignorar la firma del archivo.
Así es como pude verificar manualmente la integridad. Por lo que puedo decir, apt-get source
hace la misma validación.
- Descargar
http://dk.archive.ubuntu.com/ubuntu/dists/trusty/Release
yhttp://dk.archive.ubuntu.com/ubuntu/dists/trusty/Release.gpg
. - 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
) - Descargar
http://dk.archive.ubuntu.com/ubuntu/dists/trusty/main/source/Sources.gz
- Comparar hashes obtenidos de
sha256sum Sources.gz
ygrep main/source/Sources.gz Release
- Comparar hashes obtenidos de
sha256sum pam_1.1.8-1ubuntu2.dsc
yzcat Sources.gz | grep pam_1.1.8-1ubuntu2.dsc
- Valide los hashes encontrados dentro del
dsc
archivo: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-keyring
solo proporciona el conjunto de claves del repositorio final ( debian-keyring
en realidad, también proporciona las claves públicas de todos sus mantenedores), apt
no 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 ( pam
esaquí), 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-keyring
paquete, exportar su clave desde ese conjunto de claves e importar esa clave a su propio conjunto de claves para apt
poder verificar que esté firmada correctamente.