Difference between revisions of "Pacman/Package signing (Español)"

From ArchWiki
Jump to: navigation, search
m (Visión general de llaves y los "keyid": accent.)
(Actualización de acuerdo con la versión EN)
(29 intermediate revisions by 6 users not shown)
Line 1: Line 1:
[[Category:Package Management (Español)]]
+
[[Category:Package management (Español)]]
{{i18n|Pacman-key}}{{lowercase title}}
+
[[Category:Pacman development (Español)]]
 +
[[en:Pacman-key]]
 
[[fr:pacman-key]]
 
[[fr:pacman-key]]
 +
[[it:Pacman-key]]
 +
[[ru:Pacman-key]]
 +
[[tr:pacman paket imzaları]]
 +
[[zh-CN:Pacman-key]]
 +
{{lowercase title}}
  
pacman-key es una nueva herramienta incluida con [[Pacman (Español)|pacman]] 4. Cumple la función de manejar la lista de llaves [http://es.wikipedia.org/wiki/Pretty_Good_Privacy PGP] que mantiene pacman en la nueva implementación de la firma de paquetes.
+
La herramienta pacman-key se usa tanto para configurar como para administrar las firmas de los paquetes con los que trabaja [[Pacman (Español)|pacman]], el gestor de paquetes de Arch Linux, mediante claves [http://es.wikipedia.org/wiki/Pretty_Good_Privacy PGP].
  
==Visión general de llaves y los "keyid"==
+
==Introducción==
Una '''llave PGP''' les deja a los desarrolladores firmar sus paquetes de una forma única, asegurando que hicieron ellos el paquete y no un impostor.
+
  
Un '''keyid''' es una versión corta de la llave que se puede usar para identificar la llave sin escribirla completa, que pueden ser muy largas.  
+
Pacman se sirve de [http://www.gnupg.org/ claves GnuPG] siguiendo el modelo de la [http://www.gnupg.org/gph/en/manual.html#AEN385 red de confianza] para comprobar la autenticidad de los paquetes. Actualmente hay cinco [https://www.archlinux.org/master-keys/ Claves Maestras de firmado]. Se usan por lo menos tres de esas Claves Maestras para firmar los paquetes de los desarrolladores oficiales y las subclaves de los usuarios de confianza o TUs —del inglés: ''trusted user''— con las que estos firman sus paquetes. El usuario también posee una clave PGP exclusiva que se genera cuando se configura pacman-key. La clave del usuario queda enlazada por tanto a las cinco Claves Maestras.  
  
Formatos de keyid:
+
Ejemplos de redes de confianza:
* Keyids como "6645 B0A8 C700 5E78 DB1D  7864 F99F FE0F EAE9 99BD" tienen que ser comprimidas a "6645B0A8C7005E78DB1D7864F99FFE0FEAE999BD" (sin espacios).
+
*'''Paquetes propios''': el usuario elabora el paquete y lo firma con su clave personal.
* El bit "0x" es opcional.
+
*'''Paquetes no oficiales''': paquetes creados y firmados por desarrolladores. El usuario usa su clave personal para firmar las de cada uno de esos desarrolladores.
 +
*'''Paquetes oficiales''': paquetes creados y firmados por desarrolladores. Las claves de esos desarrolladores se firmaron previamente usando las claves maestras de Arch Linux. El usuario usa su clave para firmar las claves maestras y, por tanto, tiene plena confianza en los desarrolladores.
  
==Configuración==
+
{{Nota|el protocolo HKP usa el puerto 11371 para establecer la conexión. Este puerto es necesario para obtener las claves firmadas de los servidores mediante pacman-key.}}
Para deshabilitar el chequeo de llaves completamente, agregue lo siguiente a {{Filename|/etc/pacman.conf}}:
+
SigLevel    = Never
+
  
Para configurar el almacenaje de llaves PGP {{Codeline|pacman-key}} use:
+
==Instalación==
 +
===Configuración de pacman===
 +
 
 +
La opción {{ic|SigLevel}} en {{ic|/etc/pacman.conf}} será la que determine el nivel de confianza a la hora de instalar un paquete. Para una explicación más detallada de SigLevel, consultar la [https://www.archlinux.org/pacman/pacman.conf.5.html#_package_and_database_signature_checking página man de pacman.conf] y los comentarios en la misma. La comprobación del firmado de claves se puede establecer de forma global o por repositorio. En caso de configurar SigLevel globalmente en la sección [options] para exigir que todos los paquetes estén firmados, los paquetes que el usuario compile también tendrán que estar firmados usando {{ic|makepkg}}.
 +
 
 +
{{Nota|aunque todos los paquetes oficiales están firmados; a fecha de junio de 2012, la firma de la bases de datos de paquetes está todavía en proceso. Si se especifica {{ic|Required}} entonces también hay que poner {{ic|DatabaseOptional}}. Por ejemplo:
 +
{{bc|1=SigLevel = Required DatabaseOptional TrustedOnly}}
 +
Pacman instalará así tan sólo aquellos paquetes que estén firmados con claves que sean de confianza.}}
 +
 
 +
{{Nota|parece ser que {{ic|1=SigLevel = PackageRequired}} va a ser el estándar para verificar paquetes oficiales::
 +
 
 +
{{bc|1=[core]
 +
SigLevel = PackageRequired
 +
Include = /etc/pacman.d/mirrorlist}}}}
 +
 
 +
{{Advertencia|la opción {{ic|TrustAll}} solamente existe para fines de depuración de código y hace que sea muy fácil confiar en claves que no se han verificado. Hay que usar {{ic|TrustedOnly}} sólo para los repositorios oficiales.}}
 +
 
 +
===Inicializar el archivo de claves o ''keyring''===
 +
Para configurar el archivo de claves de pacman hay que ejecutar:
 
  # pacman-key --init
 
  # pacman-key --init
  
Para generar la llave principal del llavero pacman, puede hacer falta crear bytes aleatorios. Esto se logra por mover el ratón, usar el teclado, mover ventanas, &etc. Vea [[Wikipedia:Entropy (computing)#Entropy in the Linux kernel|entropía en Linux]] (en inglés).
+
Arch Linux necesita [https://es.wikipedia.org/wiki/Entrop%C3%ADa_%28computaci%C3%B3n%29 entropía] para arrancar el archivo de claves de pacman. Mover el ratón, presionar teclas aleatoriamente o ejecutar algún tipo de tarea que haga funcionar a una unidad. He aquí algunos ejemplos de esto último: {{ic|ls -R /}}, {{ic|find / -name foo}} o {{ic|1=dd if=/dev/sda8 of=/dev/tty7}}. Si el sistema no tiene suficiente entropía, este paso puede durar horas. Generando entropía de forma activa se puede completar este proceso mucho más rápidamente.
 +
 
 +
La aleatoriedad que se crea se usa para configurar un archivo de claves ({{ic|/etc/pacman.d/gnupg}}) y la firma de la clave GPG del sistema.
 +
 
 +
{{Nota|si se quiere ejecutar {{ic|pacman-key --init}} de forma remota a través de SSH, hay que instalar el paquete {{Pkg|haveged}} en el equipo en el que se está configurando el archivo de claves. Hay que conectarse usando SSH y ejecutar lo siguiente:
 +
# haveged -w 1024
 +
# pacman-key --init
 +
 
 +
Tan sólo hay que detener y eliminar haveged cuando pacman-key esté funcionando.
 +
# pkill haveged
 +
# pacman -Rs haveged
 +
Usar {{Pkg|haveged}} no sirve sólo para cuando se instala a través de SSH; es una buena forma de generar entropía rápidamente. Si el usuario nota que el proceso de {{ic|pacman-key --init}} tarda demasiado en completarse, es buena idea usarlo.
 +
}}
 +
 +
==Gestión del archivo de claves==
 +
===Verificación de las cinco Claves Maestras===
 +
Para empezar a configurar las claves hay que ejecutar:
 +
# pacman-key --populate archlinux
 +
No hay que tener prisa a la hora de verificar las [https://www.archlinux.org/master-keys/ Claves Maestras] cuando el sistema pregunte por ellas puesto que son las que se van a usar para firmar y, por ende, validar las claves de todos los demás paquetes.
 +
 
 +
Las llaves PGP son demasiado extensas (2048 bits o más) para que las personas trabajen con ellas. Es por esto que normalmente se reducen a un código hash para crear una huella de 40 dígitos hexadecimales que puede usarse para comparar manualmente que dos claves son exactamente iguales. Los últimos 8 dígitos son el 'nombre' la clave y se les conoce como el ID de la clave (key ID).
 +
 
 +
===Añadir claves de Desarrolladores===
 +
Las claves oficiales de los desarrolladores y las de los TUs se firman con las claves maestras por lo que no es necesario que el usuario las firme por si mismo haciendo uso de la herramienta pacman-key. Cuando pacman se encuentra con una clave que no reconoce, pedirá descargarla del {{ic|keyserver}} establecido en {{ic|/etc/pacman.d/gnupg/gpg.conf}} (o usando la opción {{ic|--keyserver}} en la consola). En la Wikipedia se puede encontrar una [[wikipedia:Key server (cryptographic)|lista de servidores de claves]].
 +
 
 +
Una vez que se ha descargado una clave de un desarrollador no es necesario descargarla de nuevo. Además, se puede usar para verificar otros paquetes que ese desarrollador haya firmado.
 +
 
 +
{{Nota|el paquete {{Pkg|archlinux-keyring}}, que figura entre las dependencias de pacman, contiene las claves actualizadas. En cualquier caso, es posible actualizarlas ejecutando:
 +
# pacman-key --refresh-keys
 +
Al ejecutar pacman-key con la opción {{ic|--refresh-keys}}, se buscará la clave local en el servidor de claves remoto y aparecerá un mensaje alertando de que no ha sido posible encontrar dicha clave. Esto es normal y no es algo por lo que haya que preocuparse.}}
 +
 
 +
===Añadir claves no oficiales===
 +
Lo primero es obtener la ID del dueño de la clave. Ejecutar para ello:
 +
{{bc|# pacman-key -r <keyid>}}
 +
para descargarla de un servidor de claves. Hay que asegurarse de verificar la huella; como si de una clave maestra o cualquier otra clave que se va a firmar se tratase. Una vez verificada la huella hay que firmar esta clave en el sistema:
 +
{{bc|# pacman-key --lsign-key <keyid>}}
 +
Ahora se confía en esta clave para firmar paquetes.
 +
 
 +
===Using gpg===
 +
Si pacman-key no es suficiente, se puede administrar el archivo de claves de pacman con '''gpg''':
 +
# gpg --homedir /etc/pacman.d/gnupg $OPTIONS
 +
o con
 +
# env GNUPGHOME=/etc/pacman.d/gnupg gpg $OPTIONS
 +
 
 +
==Solución de problemas==
 +
 
 +
{{Advertencia|pacman-key depende de [[time]]. Si la hora del sistema no es la correcta, aparecerá lo siguiente:
 +
:error: PackageName: signature from "User <email@archlinux.org>" is invalid
 +
:error: failed to commit transaction (invalid or corrupted package (PGP signature))
 +
:Errors occured, no packages were upgraded. }}
 +
 
 +
===No puedo importar llaves===
  
==Agregando llaves==
+
Algunos proveedores de internet o ISPs —del inglés: ''Internet Service Provider''— bloquean el puerto que se usa para importar las claves PGP. Una forma de solventar este problema es usar el servidor de claves MIT, el cual se sirve de un puerto alternativo. Para ello hay que editar el fichero {{ic|/etc/pacman.d/gnupg/gpg.conf}} y cambiar la línea del servidor de claves por:
Cuando pacman encuentra una llave desconocida en un paquete, pide si la quiere importar.
+
{{bc|keyserver hkp://pgp.mit.edu:11371}}
  
Esto agrega la llave al llavero, pero la deja en un estado de confianza desconocida (unknown trust).
+
En caso de olvidar ejecutar {{ic|pacman-key --populate archlinux}}, cabe la posibilidad de encontrarse con algunos errores al importar las claves.
  
Para listar las llaves presentes:
+
===Desactivar la comprobación de firmas===
$ pacman-key -l
+
{{Advertencia|usar con precaución. Desactivar las firmas de los paquetes hará que pacman instale automáticamente paquetes de fuentes no confiables.}}
  
==Firmar llaves==
+
Si no se está interesado en el firmado de paquetes, se puede desactivar la comprobación de las claves PGP por completo. Editar el fichero{{ic|/etc/pacman.conf}} y descomentar la siguiente lína en [options]:
Para que funcione la llave, el nivel de confianza tiene que ser cambiado.
+
SigLevel = Never
 +
Hay que descomentar las opciones específicas de SigLevel de cada repositorio también ya que ignoran la configuración global. Esto hará que no haya comprobación alguna de firmas de claves; así es como se procedía habitualmente antes de la llegada de pacman 4. No es necesario configurar el archivo de claves con pacman-key si se decide optar por esta opción. Esta opción se puede modificar más adelante sin problema alguno si se decide activar la verificación de paquetes.
  
Encuentre el desarrollador a quien le pertenece la llave en https://www.archlinux.org/developers/; el texto del enlace "PGP Key" es el '''keyid'''. Para entrar al menú de manejo de la llave, use el comando:
+
===Restablecer todas las llaves===
  
# pacman-key --edit-key <keyid>
+
Para eliminar o restablecer todas las claves instaladas en el sistema, eliminar el directorio {{ic|/etc/pacman.d/gnupg}} como root y volver a ejecutar {{ic|pacman-key --init}} . Una vez hecho esto, se pueden añadir las claves que se consideren necesarias.
  
y ahora mete la opción {{Codeline|tsign}}. (También se puede entrar {{Codeline|help}} aquí para listar las otras opciones.)
+
===Eliminar paquetes inservibles===
  
Pacman le pide si realmente quiere firmar los IDs de usuario. Si esta seguro que la llave es legitima, dígale que si, y que confía totalmente. Sigua las instrucciones, y entre {{Codeline|quit}} al terminar.
+
Si hay paquetes que siguen dando error y se está seguro de haber configurado correctamente pacman-key, entonces hay que probar a eliminarlos como por ejemplo con {{ic|rm /var/cache/pacman/pkg/paqueteconflictivo*}} para que se vuelvan a descargar.
  
Actualizando de nuevo con {{Codeline|pacman -Syu}}, se debería verificar bien la integridad del paquete.
+
Probablemente esta sea la solución al problema del mensaje que aparece al actualizar <code>error: linux: signature from "Some Person <Some.Person@example.com>" is invalid</code>; o parecido. Esto no tiene por qué significar que se esté siendo de un ataque; ni mucho menos. Es tan sólo que el fichero descargargado está corrupto.
  
Al contrario, pacman se puede configurar para confiar en cualquier llave en su llavero. Para hacer esto, agregue UNA de las siguientes lineas a {{Filename|/etc/pacman.conf}}:
+
==Bibliografía complementaria==
SigLevel    = Required TrustAll
+
* [[Package Signing Proposal for Pacman|DeveloperWiki:Package Signing Proposal for Pacman]]
SigLevel    = Optional TrustAll
+
* [http://allanmcrae.com/2011/08/pacman-package-signing-1-makepkg-and-repo-add/ El cifrado de paquetes de pacman – 1: Makepkg y Repo-add ]
 +
* [http://allanmcrae.com/2011/08/pacman-package-signing-2-pacman-key/ El cifrado de paquetes de pacman – 2: Pacman-key]
 +
* [http://allanmcrae.com/2011/08/pacman-package-signing-3-pacman/ El cifrado de paquetes de pacman – 3: Pacman]
 +
* [http://allanmcrae.com/2011/12/pacman-package-signing-4-arch-linux/ El cifrado de paquetes de pacman – 4: Arch Linux]

Revision as of 14:49, 29 March 2013

La herramienta pacman-key se usa tanto para configurar como para administrar las firmas de los paquetes con los que trabaja pacman, el gestor de paquetes de Arch Linux, mediante claves PGP.

Introducción

Pacman se sirve de claves GnuPG siguiendo el modelo de la red de confianza para comprobar la autenticidad de los paquetes. Actualmente hay cinco Claves Maestras de firmado. Se usan por lo menos tres de esas Claves Maestras para firmar los paquetes de los desarrolladores oficiales y las subclaves de los usuarios de confianza o TUs —del inglés: trusted user— con las que estos firman sus paquetes. El usuario también posee una clave PGP exclusiva que se genera cuando se configura pacman-key. La clave del usuario queda enlazada por tanto a las cinco Claves Maestras.

Ejemplos de redes de confianza:

  • Paquetes propios: el usuario elabora el paquete y lo firma con su clave personal.
  • Paquetes no oficiales: paquetes creados y firmados por desarrolladores. El usuario usa su clave personal para firmar las de cada uno de esos desarrolladores.
  • Paquetes oficiales: paquetes creados y firmados por desarrolladores. Las claves de esos desarrolladores se firmaron previamente usando las claves maestras de Arch Linux. El usuario usa su clave para firmar las claves maestras y, por tanto, tiene plena confianza en los desarrolladores.
Nota: el protocolo HKP usa el puerto 11371 para establecer la conexión. Este puerto es necesario para obtener las claves firmadas de los servidores mediante pacman-key.

Instalación

Configuración de pacman

La opción SigLevel en /etc/pacman.conf será la que determine el nivel de confianza a la hora de instalar un paquete. Para una explicación más detallada de SigLevel, consultar la página man de pacman.conf y los comentarios en la misma. La comprobación del firmado de claves se puede establecer de forma global o por repositorio. En caso de configurar SigLevel globalmente en la sección [options] para exigir que todos los paquetes estén firmados, los paquetes que el usuario compile también tendrán que estar firmados usando makepkg.

Nota: aunque todos los paquetes oficiales están firmados; a fecha de junio de 2012, la firma de la bases de datos de paquetes está todavía en proceso. Si se especifica Required entonces también hay que poner DatabaseOptional. Por ejemplo:
SigLevel = Required DatabaseOptional TrustedOnly
Pacman instalará así tan sólo aquellos paquetes que estén firmados con claves que sean de confianza.
Nota: parece ser que SigLevel = PackageRequired va a ser el estándar para verificar paquetes oficiales::
[core]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
Advertencia: la opción TrustAll solamente existe para fines de depuración de código y hace que sea muy fácil confiar en claves que no se han verificado. Hay que usar TrustedOnly sólo para los repositorios oficiales.

Inicializar el archivo de claves o keyring

Para configurar el archivo de claves de pacman hay que ejecutar:

# pacman-key --init

Arch Linux necesita entropía para arrancar el archivo de claves de pacman. Mover el ratón, presionar teclas aleatoriamente o ejecutar algún tipo de tarea que haga funcionar a una unidad. He aquí algunos ejemplos de esto último: ls -R /, find / -name foo o dd if=/dev/sda8 of=/dev/tty7. Si el sistema no tiene suficiente entropía, este paso puede durar horas. Generando entropía de forma activa se puede completar este proceso mucho más rápidamente.

La aleatoriedad que se crea se usa para configurar un archivo de claves (/etc/pacman.d/gnupg) y la firma de la clave GPG del sistema.

Nota: si se quiere ejecutar pacman-key --init de forma remota a través de SSH, hay que instalar el paquete haveged en el equipo en el que se está configurando el archivo de claves. Hay que conectarse usando SSH y ejecutar lo siguiente:
# haveged -w 1024
# pacman-key --init

Tan sólo hay que detener y eliminar haveged cuando pacman-key esté funcionando.

# pkill haveged
# pacman -Rs haveged

Usar haveged no sirve sólo para cuando se instala a través de SSH; es una buena forma de generar entropía rápidamente. Si el usuario nota que el proceso de pacman-key --init tarda demasiado en completarse, es buena idea usarlo.

Gestión del archivo de claves

Verificación de las cinco Claves Maestras

Para empezar a configurar las claves hay que ejecutar:

# pacman-key --populate archlinux

No hay que tener prisa a la hora de verificar las Claves Maestras cuando el sistema pregunte por ellas puesto que son las que se van a usar para firmar y, por ende, validar las claves de todos los demás paquetes.

Las llaves PGP son demasiado extensas (2048 bits o más) para que las personas trabajen con ellas. Es por esto que normalmente se reducen a un código hash para crear una huella de 40 dígitos hexadecimales que puede usarse para comparar manualmente que dos claves son exactamente iguales. Los últimos 8 dígitos son el 'nombre' la clave y se les conoce como el ID de la clave (key ID).

Añadir claves de Desarrolladores

Las claves oficiales de los desarrolladores y las de los TUs se firman con las claves maestras por lo que no es necesario que el usuario las firme por si mismo haciendo uso de la herramienta pacman-key. Cuando pacman se encuentra con una clave que no reconoce, pedirá descargarla del keyserver establecido en /etc/pacman.d/gnupg/gpg.conf (o usando la opción --keyserver en la consola). En la Wikipedia se puede encontrar una lista de servidores de claves.

Una vez que se ha descargado una clave de un desarrollador no es necesario descargarla de nuevo. Además, se puede usar para verificar otros paquetes que ese desarrollador haya firmado.

Nota: el paquete archlinux-keyring, que figura entre las dependencias de pacman, contiene las claves actualizadas. En cualquier caso, es posible actualizarlas ejecutando:
# pacman-key --refresh-keys
Al ejecutar pacman-key con la opción --refresh-keys, se buscará la clave local en el servidor de claves remoto y aparecerá un mensaje alertando de que no ha sido posible encontrar dicha clave. Esto es normal y no es algo por lo que haya que preocuparse.

Añadir claves no oficiales

Lo primero es obtener la ID del dueño de la clave. Ejecutar para ello:

# pacman-key -r <keyid>

para descargarla de un servidor de claves. Hay que asegurarse de verificar la huella; como si de una clave maestra o cualquier otra clave que se va a firmar se tratase. Una vez verificada la huella hay que firmar esta clave en el sistema:

# pacman-key --lsign-key <keyid>

Ahora se confía en esta clave para firmar paquetes.

Using gpg

Si pacman-key no es suficiente, se puede administrar el archivo de claves de pacman con gpg:

# gpg --homedir /etc/pacman.d/gnupg $OPTIONS

o con

# env GNUPGHOME=/etc/pacman.d/gnupg gpg $OPTIONS

Solución de problemas

Advertencia: pacman-key depende de time. Si la hora del sistema no es la correcta, aparecerá lo siguiente:
error: PackageName: signature from "User <email@archlinux.org>" is invalid
error: failed to commit transaction (invalid or corrupted package (PGP signature))
Errors occured, no packages were upgraded.

No puedo importar llaves

Algunos proveedores de internet o ISPs —del inglés: Internet Service Provider— bloquean el puerto que se usa para importar las claves PGP. Una forma de solventar este problema es usar el servidor de claves MIT, el cual se sirve de un puerto alternativo. Para ello hay que editar el fichero /etc/pacman.d/gnupg/gpg.conf y cambiar la línea del servidor de claves por:

keyserver hkp://pgp.mit.edu:11371

En caso de olvidar ejecutar pacman-key --populate archlinux, cabe la posibilidad de encontrarse con algunos errores al importar las claves.

Desactivar la comprobación de firmas

Advertencia: usar con precaución. Desactivar las firmas de los paquetes hará que pacman instale automáticamente paquetes de fuentes no confiables.

Si no se está interesado en el firmado de paquetes, se puede desactivar la comprobación de las claves PGP por completo. Editar el fichero/etc/pacman.conf y descomentar la siguiente lína en [options]:

SigLevel = Never

Hay que descomentar las opciones específicas de SigLevel de cada repositorio también ya que ignoran la configuración global. Esto hará que no haya comprobación alguna de firmas de claves; así es como se procedía habitualmente antes de la llegada de pacman 4. No es necesario configurar el archivo de claves con pacman-key si se decide optar por esta opción. Esta opción se puede modificar más adelante sin problema alguno si se decide activar la verificación de paquetes.

Restablecer todas las llaves

Para eliminar o restablecer todas las claves instaladas en el sistema, eliminar el directorio /etc/pacman.d/gnupg como root y volver a ejecutar pacman-key --init . Una vez hecho esto, se pueden añadir las claves que se consideren necesarias.

Eliminar paquetes inservibles

Si hay paquetes que siguen dando error y se está seguro de haber configurado correctamente pacman-key, entonces hay que probar a eliminarlos como por ejemplo con rm /var/cache/pacman/pkg/paqueteconflictivo* para que se vuelvan a descargar.

Probablemente esta sea la solución al problema del mensaje que aparece al actualizar error: linux: signature from "Some Person <Some.Person@example.com>" is invalid; o parecido. Esto no tiene por qué significar que se esté siendo de un ataque; ni mucho menos. Es tan sólo que el fichero descargargado está corrupto.

Bibliografía complementaria