Tenemos el resultado a este apuro, o por lo menos eso pensamos. Si presentas preguntas compártelo en un comentario y sin dudas
Solución:
Necesitas saber por quéapt-key add
es obsoleto
Todas las respuestas hasta ahora funcionan en torno al síntoma (“No use apt-key add
“) pero no abordan el problema real eso llevó a apt-key add
siendo obsoleto. El problema no es una cuestin de anexar un key a un archivo de llavero grande etc/apt/trusted.gpg
vs poner manualmente un solokey archivos de llavero en el directorio /etc/apt/trusted.gpg.d/
. Estas dos cosas son equivalentes, y hacer cualquiera de ellas es un gran riesgo de seguridad.
El problema es que cualquier key tu agregas a cualquiera de lo anterior cuenta con la confianza total e incondicional de apt. Esto significa que cualquier repositorio de terceros cuya firma apta key está adentro está permitido reemplazar cualquier paquete en todo su sistema, sin preguntas. Incluso si asumimos que ninguno de los propietarios de repositorios es malintencionado, un atacante podría comprometer un repositorio, que tiene el mismo resultado final.
Las instrucciones dadas en la respuesta de Ugo Delle Donne para convertir el key para el formato (heredado) keyring v4 que apt aceptará son correctos y útiles, pero eso es solo la mitad de la solución. Los reiteraré aquí (limpiados un poco) para que todos los pasos se consoliden en un solo lugar:
- Descargar el key:
wget https://host.domain.tld/path/to/
. (No es necesario
-O
o>
;wget
predeterminado para guardar el archivo en su directorio actual con el mismo nombre de archivo que tiene en el servidor).
- Verifique que el tipo de archivo sea “PGP público key block Public-Key (antiguo) “:
file
.
- Convierta el key importándolo en un llavero temporal, luego exportándolo nuevamente:
gpg --no-default-keyring --keyring ./temp-keyring.gpg --import
. gpg --no-default-keyring --keyring ./temp-keyring.pgp --export --output
.gpg rm temp-keyring.gpg
Ahora que tienes tu convertido key, no agregarlo a apt
almacén de claves de confianza copiándolo en /etc/apt/trusted.gpg.d/
. En cambio, ponlo en algún lugar como /usr/local/share/keyrings/
. (Necesitarás crear eso keyrings
directorio primero). No hay nada especial en esa ubicación, es solo una convención que /usr/local
es para cosas específicas de esta máquina, share
porque no es un binario o una biblioteca o específico para un usuario determinado, y keyrings
es solo un nombre descriptivo.
En este punto, nada ha cambiado y apt
no conoce el key existe. El último paso es modificar el específico .list
archivo para que el repositorio le diga a apt dónde encontrar el key por ese repositorio específico.
- Edita el archivo
/etc/apt/sources.list.d/
, y en el medio.list deb
y la URL, agregue[signed-by=/usr/local/share/keyrings/
.gpg]
Ahora apt aceptará eso keyla firma de todos los paquetes en ese repositorio y solamente ese repositorio.
Notas:
- Si ya tiene archivos de anillo de claves en
/etc/apt/trusted.gpg.d/
, usted puedeCopiarmoverse a ellos/usr/local/share/keyrings/
tal como está y, a continuación, actualice todos los.list
archivos para que cada uno tenga unsigned-by
campo apuntando a su propio key. - Si ya tienes keys en el
/etc/apt/trusted.gpg
archivo de llavero más allá del repositorio oficial keys, esta respuesta detalla los pasos para ubicarlos y eliminarlos. Luego, puede seguir los mismos pasos anteriores para configurarlos de la manera más segura. (También es posible exportarlos desde ese llavero, pero los pasos exactos se dejan como ejercicio para el lector). - Para importar un repositorio key de un servidor de llaves a un archivo independiente:
gpg --no-default-keyring --keyring
.gpg --keyserver --recv-keys - Esto debería darte una key que apto aceptará sin conversión.
- Apt sigue siendo muy confiado, y un repositorio malicioso o comprometido puede eludir esta medida fácilmente porque los paquetes actualmente pueden ejecutar código de shell arbitrario como raíz en sus scripts de configuración. Sin embargo, cerrar un vector de ataque no hace daño, y se está progresando (lentamente) en otros frentes.
- Opcionalmente, puede cambiar a la versión más nueva y más detallada
Deb822
formato usando individual.sources
archivos en lugar de.list
archivos. Es más trabajo, pero personalmente encuentro el resultado mucho más legible.
Fuentes:
- Wiki de Debian
- Respuesta excelente y detallada sobre Unix y Linux StackExchange
Me encontré con el mismo problema y afortunadamente alguna otra pregunta iluminó el camino. En mi ejemplo, estaba tratando de agregar un repositorio de teamviewer a un Kali Linux reciente y estaba siendo bloqueado por key verificación.
Estoy bastante seguro de que hay una forma más elegante de hacer esto, pero los siguientes pasos me ayudaron a solucionar el problema:
-
Descarga el relevante key
wget -O - https://download.teamviewer.com/download/linux/signature/TeamViewer2017.asc > ~/teamviewer.key
-
Verificar el tipo de archivo
file ~/teamviewer.key
debería ser PGP público key bloquear la clave pública (antiguo)
-
Crea un llavero
gpg --no-default-keyring --keyring ./teamviewer_keyring.gpg --import teamviewer.key
-
Este archivo todavía no es válido key que se puede agregar a /etc/apt/trusted.gpg.d/ ya que es un llavero, pero del llavero podemos extraer el key con
gpg --no-default-keyring --keyring ./teamviewer_keyring.gpg --export > ./teamviewer.gpg
-
Este archivo es el key quieres mudarte a la de confianza key carpeta
sudo mv ./teamviewer.gpg /etc/apt/trusted.gpg.d/
contento sudo apt update
!!!
La razón de esta desaprobación es porque el uso de apt-key add
simplemente agrega el gpg key al llavero APT global de confianza. Es similar al método preferido de agregar local_repo.list
para /etc/apt/sources.list.d/
En lugar de usar add-apt-repository dep /link/to/repo version
, que agrega el mensaje a la global sources.list
expediente.
Creo que es un poco más incómodo de entender que usar la carpeta .d, pero esencialmente queremos obtener el gpg key en un archivo de anillo de claves independiente, luego apunte a este archivo de anillo de claves en la lista de fuentes. La ubicación predeterminada del archivo del anillo de claves es /usr/share/keyrings
y puede ser un archivo .asc o .gpg. No estoy seguro de la diferencia, pero sé que los archivos de llavero globales son archivos binarios, no texto sin formato.
Por ejemplo:
El uso de nombres genéricos puede ser un poco difícil de entender a veces, así que aquí hay un ejemplo de instalación de mongoDB:
Obtenga el gpg de MongoDB key y agregarlo a un nuevo archivo de llavero
curl https://www.mongodb.org/static/pgp/server-4.2.asc | sudo tee -a /usr/share/keyrings/buster-mongodb-org-4_2.asc
Agregue una entrada de fuente para apt, apuntando a este nuevo llavero
echo "deb [signed-by=/usr/share/keyrings/buster-mongodb-org-4_2.asc] https://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main
Instale mongodb desde este repositorio recién agregado
sudo apt install -y mongodb-org
Referencia
Esto todavía es nuevo para mí, pero la mayor parte de lo que sé proviene de esta excelente respuesta en unix SE
Tienes la opción de estimular nuestra misión exponiendo un comentario y dejando una valoración te damos la bienvenida.