El contenido del artículo
Cómo arreglar la clave se almacena en el llavero trusted.gpg heredado en Ubuntu
A partir de Ubuntu 20.10, al actualizar un sistema o agregar repositorios usando apt-add-repositorio y teclas con tecla-apt es posible que vea el error Key is stored in legacy trusted.gpg keyring o apt-key está en desuso. En términos generales, esto no es un error, sino solo una advertencia y todo funcionará a pesar de ello.
Pero si no quieres ver este mensaje, puedes arreglarlo. En este artículo, veremos cómo arreglar el error de llavero de llave trusted.gpg heredado y por qué ocurre.
El contenido del artículo
¿Por qué se produce el error?
Este error significa que la clave del repositorio de terceros está almacenada en un almacén de claves heredado /etc/apt/trusted.gpg. Es similar a lo que era hace unos años con las cadenas de configuración de repositorios de terceros. Inmediatamente se almacenaron en el /etc/apt/sources.list, y luego fueron transferidos a /etc/apt/sources.list.d/. Pero esto no es lo único.
Todos los paquetes en repositorios de terceros que puede agregar a Ubuntu, incluidos los del PPA, deben estar firmados con una clave GPG, que se encuentra en la lista de claves de confianza del sistema. Al agregar un repositorio, no solo se agrega la entrada del repositorio al archivo /etc/sources.list o /etc/sources.list.d, sino también su clave, que se almacenaba de forma predeterminada en /etc/apt/trusted.gpg.
Esto funciona, pero el problema es que apt confía plenamente en las claves de esta ubicación, así como de la ubicación /etc/apt/trusted.gpg.d/. Todas estas claves se pueden utilizar para verificar la firma de todos los repositorios. Por ejemplo, se puede usar una clave de Elasticsearch para verificar paquetes de un repositorio de MySQL. Los desarrolladores consideran que se trata de un problema de seguridad, ya que puede provocar que los paquetes de los repositorios oficiales sean sustituidos por paquetes maliciosos de repositorios de terceros. Quieren alejarse de la firma cruzada y asegurarse de que los paquetes de cada repositorio de terceros se validen con su clave. Si se prioriza correctamente, esto puede proteger los paquetes de los repositorios oficiales de la suplantación de identidad.
Este es el enfoque correcto. Pero parece que en el momento de escribir este artículo, Ubuntu 22.04 y Debian 11 no implementan dicha protección por defecto. E incluso si coloca las claves como se recomienda, los paquetes de los repositorios oficiales aún pueden ser falsificados. Por lo tanto, se trata de una reserva para el futuro. Si me equivoco y sabes cómo implementar dicha protección, cuéntanos en los comentarios.
Para hacer realidad esta idea, primero es necesario tener una clave que cada repositorio utilice para validar sus paquetes. Para ello, los desarrolladores recomiendan guardar las claves de cada paquete en archivos separados. No en /etc/apt/trusted.gpg.d/y /etc/apt/llaveros y especificar en la descripción del repositorio la ruta a la clave que se debe utilizar para verificar la firma mediante el método Firmado por.
Por el momento, la utilidad ha sido declarada obsoleta tecla-apt, así como almacenar las claves de repositorios de terceros en un archivo compartido /etc/apt/trusted.gpg. Al mismo tiempo, almacene las claves en /etc/apt/trusted.gpg.d Todavía puedes hacerlo. Y muchos repositorios lo hacen. Aunque algunos, por ejemplo, Elasticsearch, ya están utilizando un nuevo enfoque. Este movimiento no cambia mucho, pero es el primer paso para hacerlo bien en el futuro.
Cómo arreglar La clave está almacenada en el llavero trusted.gpg heredado
Es posible que haya notado que muchas instrucciones solían recomendar el uso de tecla-apt para agregar la clave, y ahora el GPG. De hecho, el GPGy tecla-apt actuaba como un shell y especificaba automáticamente los parámetros necesarios. Ahora tienes que hacer todo explícitamente. Por lo tanto, nada ha cambiado para el sistema y los nuevos comandos GPG Se puede utilizar en versiones anteriores de distribuciones.
Para eliminar esta advertencia, evítala en el futuro y hacer todo bien, debes seguir algunos pasos:
- Olvídate de tecla-apt y agregue claves manualmente usando GPG;
- Olvídate de apt-add-repositorio y añadir PPAs manualmente;
- Transfiera todas las claves de /etc/apt/trusted.gpg/ en /etc/apt/llaveros y escriba una ruta de acceso clave para cada repositorio.
Sugiero comenzar con el último paso y transferir todas las claves de terceros del archivo confiable.gpg a la carpeta /etc/apt/llaveros.
Transferencia de llaves a /etc/apt/keyrings (de la manera correcta)
Para evitar que el sistema emita una advertencia de que el método de almacenamiento de claves está desactualizado o para mejorar la seguridad en el futuro, debe mover todas las claves de los repositorios de terceros de la carpeta confiable.gpg a la carpeta /etc/apt/llaveros y escriba la ruta de acceso a las claves para cada repositorio en el archivo /etc/apt/sources.list.d. En primer lugar, tienes que encontrar todas las llaves que quieres mover. Para ello, ejecute el comando:
sudo apt-key list
Aquí se mostrarán todas las claves de confianza del sistema. Debe revisarlos y encontrar solo aquellos que están almacenados en el archivo confiable.gpg. Por lo general, en la salida de la utilidad, todas las claves se dividen en archivos y las claves de confiable.gpg estará en lo más alto. En este ejemplo, esta es la clave del repositorio MySQL. Además, hay una clave de Google Chrome, pero está en confiable.gpg.d Y apt está bien con eso hasta ahora. Pero para mejorar la seguridad en el futuro, también puede moverlo a /etc/apt/llaveros.
Para exportar la clave a un archivo separado, busque la línea de publicación y tome los últimos 8 dígitos de ella. En este ejemplo, es 3A79BD29. A continuación, ejecute el siguiente comando:
sudo apt-key export 3A79BD29 | sudo gpg --dearmour -o /etc/apt/keyrings/mysql.gpg
El nombre del archivo no es muy importante aquí, pero para que comprenda a qué repositorio pertenece la clave, es mejor dar nombres significativos a los archivos de clave.
Este procedimiento debe realizarse con cada llave. Luego, para cada repositorio, debe anotar la clave que se utilizará para verificarlo. En este ejemplo, el repositorio se agrega mediante el método /etc/apt/sources.list.d/mysql.list. Para cada línea de deb en este archivo, debe agregar el atributo Firmado por con un camino a la llave. Por ejemplo:
/etc/apt/sources.list.d/mysql.list/etc/apt/sources.list.d/mysql.list
deb (signed-by=/etc/apt/keyrings/mysql.gpg) http://repo.mysql.com/apt/ubuntu/ jammy mysql-apt-config
deb (signed-by=/etc/apt/keyrings/mysql.gpg) http://repo.mysql.com/apt/ubuntu/ jammy mysql-8.0
deb (signed-by=/etc/apt/keyrings/mysql.gpg) http://repo.mysql.com/apt/ubuntu/ jammy mysql-tools
Si ya hay otras opciones, cada nueva opción debe estar separada por una coma. A continuación, puede eliminar la clave de la bóveda confiable.gpg:
sudo apt-key del 3A79BD29
A continuación, puede ejecutar el comando update y asegurarse de que no haya más errores:
sudo apt update
Transferencia de claves a /etc/apt/trusted.gpg.d/ (método válido)
Como mencioné anteriormente, solo el almacenamiento de claves en trusted.gpg ha quedado obsoleto por el momento. Si no quieres iniciar sesión para todos los repositorios, puedes mover las claves a confiable.gpg.d. A continuación, se seguirán utilizando para verificar la firma de los paquetes de todos los repositorios, pero apt no emitirá una advertencia en la actualización. El procedimiento es el mismo. En primer lugar, tienes que mirar la lista de claves en trusted.gpg:
sudo apt-key list
A continuación, exporte cada clave a confiable.gpg.d. Por ejemplo:
sudo apt-key export 3A79BD29 | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/mysql.gpg
Y elimínalo de la carpeta confiable.gpg:
sudo apt-key del 3A79BD29
En este caso, escriba las claves en el archivo Firmado por No es necesario hacerlo para todos los repositorios, ya que todos los repositorios de APT confían en ellos.
Si eliges este método, no tienes que buscar más. La utilidad apt-key en las últimas versiones de Ubuntu 22.04 ya guarda las claves de repositorios de terceros en el archivo /etc/apt/trusted.gpg.d Y para eliminar el error, basta con convertir las claves antiguas. Si quieres hacer lo que recomiendan los desarrolladores de Ubuntu, busca más allá.
Cómo agregar una tecla sin apt-key
Por el momento, la utilidad apt-key se considera obsoleta y no se recomienda agregar claves usándola. Para hacer esto, necesitas usar gpg. Tenga en cuenta que hay dos tipos de claves. Ya sea en formato ASCII con la extensión .asc o en formato binario .gpg. Sin embargo, apt solo puede trabajar con claves en formato OpenPGP y la extensión .gpg. Por lo tanto, no puede simplemente copiar la clave recibida en la carpeta /etc/apt/trusted.gpg.d o /etc/apt/keyrings.
Por lo general, las claves se distribuyen en formato ASCII, puede descargarlo, convertirlo y solo luego agregarlo al sistema usando gpg. Por ejemplo, ejecute el siguiente comando para descargar una clave de Google Chrome:
wget https://dl.google.com/linux/linux_signing_key.pub
Y luego conviértelo en un archivo binario:
cat linux_signing_key.pub | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/chrome.gpg
Lo mismo se puede hacer con un comando:
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo gpg --dearmor -o /etc/apt/keyrings/chrome.gpg
Y no te olvides de añadir el atributo chamuscado por para el repositorio. Por ejemplo, para Google Chrome, el nuevo comando add repository tendrá el siguiente aspecto:
sudo sh -c 'echo "deb (arch=amd64 signed-by=/etc/apt/keyrings/chrome.gpg) http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google.list'
Después de eso, puede verificar que todo esté funcionando y que la clave se reconozca correctamente.
Si la clave se distribuye en formato binario, puede colocarla inmediatamente en el almacén de claves:
wget -q -O - https://url | sudo tee /etc/apt/trusted.gpg.d/reponame.gpg
Cómo agregar un PPA sin apt-add-repository
Dado que apt-add-repository usa apt-key, ya no puede usar esta utilidad para agregar PPA. No hay una manera fácil de obtener la ruta al repositorio y su clave en la línea de comandos por su nombre, pero toda la información necesaria está disponible en la página del repositorio. Simplemente expanda el artículo Detalles técnicos sobre este PPA en los comandos Agregar repositorio. Por ejemplo, para Firefox:
Hay una huella dactilar clave aquí, en este caso AF316E81A155146718A6FBD7A6DCF7707EBC211F. Puede agregar una clave al sistema mediante el siguiente comando:
sudo gpg --homedir /tmp --no-default-keyring --keyring /etc/apt/keyrings/firefox.gpg --keyserver keyserver.ubuntu.com --recv-keys AF316E81A155146718A6FBD7A6DCF7707EBC211F
Después de eso, debe agregar una entrada sobre este repositorio a la carpeta /etc/sources.list.d. En la página PPA, seleccione la versión de su distribución y copie las líneas sobre la clave:
Crear un archivo /etc/apt/sources.list.d/firefox.list y pegar lo que se copió en él.
Si decide no guardar sus llaves en /etc/apt/trusted.gpg.d, también debe especificar la ruta de acceso a la clave del repositorio mediante el comando Firmado por. Si la clave se guardó en /etc/apt/llaveros/firefox.gpg, el resultado se verá así:
/etc/apt/sources.list.d/firefox.listdeb (signed-by=/etc/apt/keyrings/firefox.gpg) https://ppa.launchpadcontent.net/ubuntu-mozilla-security/ppa/ubuntu jammy main
deb-src (signed-by=/etc/apt/keyrings/firefox.gpg) https://ppa.launchpadcontent.net/ubuntu-mozilla-security/ppa/ubuntu jammy main
Después de eso, puede actualizar la lista de paquetes y asegurarse de que todo funcione.
Resultados
Ahora ya sabe qué significa la clave almacenada en el llavero trusted.gpg heredado y cómo corregir este error. Los desarrolladores han comenzado una transformación seria e importante del sistema de seguridad del administrador de paquetes, pero todavía es bastante difícil para los usuarios comunes. Es mucho más fácil agregar una clave con apt-key y agregar un repositorio por su nombre con apt-add-repository. Quizás en el futuro, estas utilidades se actualicen para admitir una nueva forma de trabajar con teclas.
Muchos repositorios ya ofrecen los comandos correctos para instalarlos en el sistema. Para todos los demás, puede hacer todo manualmente, continuar usando apt-key o simplemente ignorar la advertencia de que las claves están almacenadas en un lugar desactualizado.