GNU/Linux >> Tutoriales Linux >  >> Linux

RPM y GPG:cómo verificar los paquetes de Linux antes de instalarlos

Los repositorios RPM grandes y populares generalmente se replican en todo el mundo. Los proyectos y las empresas que proporcionan los paquetes utilizan redes de distribución de contenido (CDN) y sitios espejo para que sus paquetes estén disponibles para los consumidores. Para muchos proyectos de código abierto, eso incluye el alojamiento por parte de voluntarios. Para detectar y evitar paquetes de reemplazo maliciosos, los propietarios de los paquetes pueden firmar los archivos del paquete y los consumidores pueden verificar esas firmas.

Si bien GPG puede firmar cualquier archivo, la verificación manual de firmas de paquetes no es escalable para los administradores del sistema. El formato RPM tiene un área específicamente reservada para contener una firma del encabezado y la carga útil. Las rpm La utilidad utiliza claves GPG para firmar paquetes y su propia colección de claves públicas importadas para verificar los paquetes. YUM y DNF usan archivos de configuración de repositorio para proporcionar punteros a las ubicaciones de claves públicas de GPG y ayudar a importar las claves para que RPM pueda verificar los paquetes.

Para este artículo, usaré claves y paquetes de EPEL. La clave pública se incluye en un paquete RPM, que también configura el yum repo . Para algunos proyectos, la clave también puede estar disponible directamente desde un sitio web de origen.

La utilidad rpm tiene su propia gestión de claves

Dado que las rpm La utilidad tiene su propia gestión de claves, no es necesario importar las claves públicas GPG a su conjunto de claves GPG personal. De hecho, no puede simplemente verificar el archivo con gpg comandos porque la firma no es del archivo .rpm completo. En cambio, la firma solo se asocia con las partes críticas del paquete.

Ejecute el siguiente comando para usar rpm para verificar un paquete:

$ rpm -K epel-release-latest-8.noarch.rpm 
epel-release-latest-8.noarch.rpm: digests SIGNATURES NOT OK

En este caso, aparece el mensaje "FIRMAS INCORRECTAS" porque la clave aún no se ha importado para RPM. El comportamiento predeterminado de rpm comandos es verificar la firma de los paquetes durante cualquier instalación o verificar interacciones. Si eso no es posible, porque el paquete no está firmado o la clave pública no está disponible, es posible que deba especificar el --nogpgcheck opción para omitir este paso.

Si tiene acceso a la clave pública GPG, puede usar el siguiente comando para importar manualmente una clave:

$ rpm --import RPM-GPG-KEY-EPEL-8 

Dado que los metadatos de la clave se almacenan en la base de datos de RPM, puede consultar y eliminar claves de la misma manera que cualquier paquete.

Use el siguiente comando para enumerar las claves:

$ rpm -qa gpg-pubkey*
gpg-pubkey-7fac5991-4615767f
gpg-pubkey-2f86d6a1-5cf7cefb

Utilice este comando para obtener la información de una clave:

$ rpm -qi gpg-pubkey-2f86d6a1-5cf7cefb
Name : gpg-pubkey
Version : 2f86d6a1
Release : 5cf7cefb
Architecture: (none)
Install Date: Mon 01 Jun 2020 12:14:38 PM EDT
Group : Public Keys
Size : 0
License : pubkey
Signature : (none)
Source RPM : (none)
Build Date : Wed 05 Jun 2019 10:17:31 AM EDT
Build Host : localhost
Relocations : (not relocatable)
Packager : Fedora EPEL (8) <[email protected]>
Summary : gpg(Fedora EPEL (8) <[email protected]>)
Description :
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: rpm-4.14.2 (NSS-3)
...omitted...

El siguiente comando se utiliza para eliminar una clave:

$ sudo rpm -e gpg-pubkey-2f86d6a1-5cf7cefb

Se describen más opciones para la administración de claves en la página man incluida con rpmkey paquete.

YUM y DNF pueden agregar claves a la base de datos RPM

Otros administradores de paquetes facilitan aún más la administración de claves. YUM y DNF usan archivos de configuración en /etc/yum.repos.d para especificar una URL para la clave GPG utilizada para verificar paquetes en ese repositorio. Las utilidades pueden importar la clave si aún no está disponible para su verificación.

En el yum repo archivo de configuración, la línea gpgcheck=1 indica que se debe realizar una verificación de GPG para todos los paquetes en este repositorio. Es un valor booleano que se puede cambiar en la configuración o anular temporalmente en la línea de comandos con --nogpgcheck opción.

Si la clave pública GPG aún no se ha importado a RPM cuando comienza la instalación de un paquete, entonces yum (o dnf ) la utilidad puede iniciar una importación de la clave. El gpgkey=URI línea especifica el origen de la clave que se va a importar. Esta fuente puede ser cualquier URI, incluido un archivo local o un enlace web remoto. El yum o dnf la utilidad hará una pausa y pedirá confirmación para importar la clave después de mostrar la identificación de la clave y la huella digital.

warning: /var/cache/dnf/epel-fafd94c310c51e1e/packages/zsh-syntax-highlighting-0.7.1-1.el8.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 2f86d6a1: NOKEY

Extra Packages for Enterprise Linux 8 - x86_64 1.6 MB/s | 1.6 kB 00:00    

Importing GPG key 0x2F86D6A1:

 Userid : "Fedora EPEL (8) <[email protected]>"

 Fingerprint: 94E2 79EB 8D8F 25B2 1810 ADF1 21EA 45AB 2F86 D6A1

 From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8

Is this ok [y/N]: y

La clave se agrega a RPM y luego continúa la verificación e instalación del paquete.

Prepárate para firmar un paquete

Si está creando y distribuyendo sus propios archivos de paquetes RPM, puede firmar esos paquetes con rpmsign utilidad.

El primer paso es crear un par de llaves GPG para firmar. Asegúrese de exportar y compartir también la clave pública. Para los paquetes que se distribuirán públicamente, es una buena idea usar un nuevo par de claves y un conjunto de claves en una ubicación compartida. Además, use la --full-gen-key y luego elija crear una clave de solo firma en lugar de la predeterminada, que crea una clave de firma y de cifrado.

$ gpg --keyring /shared/rpm/.gpg --no-default-keyring --full-gen-key 

Incluso si solo una persona está usando la clave para firmar paquetes, haga un par de claves separado para usar para firmar. No utilice la misma clave para otras tareas diarias, como el cifrado de correo electrónico personal.

A continuación, necesitamos instalar el rpm-sign paquete y configure un rpmmacros archivo especificando la clave a utilizar. El rpm-sign el paquete incluye una página man para rpmsign que describe el proceso. Tenga en cuenta que el nombre del paquete tiene un guión que no forma parte del nombre del comando.

$ sudo yum install rpm-sign
$ man rpmsign

Los comandos RPM obtienen su configuración de varios rpmmacros archivos Hay un archivo predeterminado con muchas muestras ubicado en /usr/lib/rpm/macros . Si varias personas son responsables de firmar paquetes con la misma clave, coloque un archivo de configuración central en /etc/rpm/macros localización. Finalmente, para una persona específica que firma los paquetes, el ~/.rpmmacros del usuario El archivo se puede configurar para que apunte a la clave GPG correcta.

La entrada mínima para rpmmacros archivo es especificar el nombre de la clave. Puede utilizar un nombre o el ID de clave. Obtenga el ID de clave con gpg --list-keys comando.

Sugerencia:ejecute rpmsign comando antes de establecer el gpg_name variable y el mensaje mostrará el formato.

$ rpmsign --addsign my-custom-package.rpm 
You must set "%_gpg_name" in your macro file

Además del nombre de la clave, si el conjunto de claves está en cualquier lugar que no sea el usuario predeterminado ~/.gnupg directorio, utilice gpg_path variable para establecer la ubicación. Este valor será el mismo que se usa con el --keyring opción cuando se creó la clave.

Hay opciones adicionales disponibles si el binario GPG o la sintaxis de comandos requieren algo más allá de los valores predeterminados esperados.

Firmar y publicar paquetes

Ahora está listo para firmar el paquete o paquetes. Según el rpmsign página man, el --addsign y --resign los comandos son intercambiables. Ambos reemplazarán la parte de la firma de un archivo de paquete RPM con información actual.

El siguiente comando es un ejemplo del uso de --addsign bandera:

$ rpmsign --addsign myprod-2.x86_64.rpm myprod-libs-2.x86_64.rpm

Versiones anteriores de rpmbuild incluido un --sign opción que podría firmar el paquete durante el proceso de compilación si las claves GPG y rpmmacro los archivos se configuraron correctamente. El --sign la opción ahora está en desuso en favor del paso separado de usar rpmsign . Este enfoque fomenta un construir, probar, firmar, publicar flujo de trabajo.

Finalmente, ponga a disposición de los clientes los paquetes y la clave pública GPG. Una opción es imitar el proyecto EPEL y crear un archivo RPM que incluya la clave pública GPG y uno o más yum repo archivos que apuntan a la ubicación de los paquetes firmados. Para las organizaciones que alojan paquetes en un Red Hat Satellite Server, comience cargando la clave pública GPG y luego asigne esa clave al producto o repositorio que contiene los paquetes firmados. Todos los paquetes en un repositorio deben estar firmados con la misma clave. Esta es una razón común para que los administradores de Satélite renuncien a los paquetes antes de cargarlos.

Terminar

Ahora que sabe más sobre cómo administrar paquetes RPM con GPG, puede comprender mejor cómo trabajar con rpm , yum y dnf .

Para obtener más información, consulte Asegurar las claves de firma de RPM y las guías de administración y administración de contenido en la documentación de Red Hat Satellite.

[ ¿Quiere obtener más información sobre seguridad? Consulte la lista de verificación de cumplimiento y seguridad de TI. ]


Linux
  1. Cómo construir paquetes rpm

  2. Cómo habilitar Snap en Linux Mint 20 e instalar paquetes Snap

  3. Cómo guardar comandos de Linux y usarlos bajo demanda

  4. Cómo consultar archivos, paquetes y repositorios en Linux

  5. Cómo verificar el proveedor de paquetes RPM instalados en Linux

Cómo encontrar archivos duplicados en Linux y eliminarlos

Cómo descargar paquetes usando APT sin instalarlos

¿Cómo generar y usar la clave SSH en el sistema Linux?

Permisos básicos de directorio de Linux y cómo verificarlos

Tipos básicos de usuarios de Linux y cómo comprobarlos

Cómo ejecutar paquetes .run y .bin en el sistema Linux