Introduction
apt-key
est un utilitaire utilisé pour gérer les clés que APT utilise pour authentifier les paquets. Il est étroitement lié à l’utilitaire add-apt-repository
, qui ajoute des dépôts externes à une installation APT en utilisant des serveurs de clés pour une liste de sources de confiance. Cependant, les clés ajoutées à l’aide de apt-key
et de add-apt-repository
sont globalement considérées comme de confiance par apt
. Ces clés ne se limitent pas à autoriser le dépôt unique pour lequel elles étaient destinées. Toute clé ajoutée de cette manière peut être utilisée pour autoriser l’ajout de tout autre dépôt externe, ce qui présente un problème de sécurité important.
À partir d’Ubuntu 20.10, l’utilisation de apt-key
génère un avertissement indiquant que l’outil sera bientôt obsolète ; de même, add-apt-repository
sera également bientôt obsolète. Bien que ces avertissements d’obsolescence n’empêchent pas strictement l’utilisation de apt-key
et de add-apt-repository
avec Ubuntu 22.04, il n’est pas conseillé de les ignorer.
La meilleure pratique actuelle est d’utiliser gpg
à la place de apt-key
et add-apt-repository
, et dans les futures versions d’Ubuntu, ce sera la seule option. apt-key
et add-apt-repository
ont toujours agi comme des enveloppes, appelant gpg
en arrière-plan. Utiliser gpg
directement supprime l’intermédiaire. Pour cette raison, la méthode gpg
est rétrocompatible avec les anciennes versions d’Ubuntu et peut être utilisée comme remplacement direct de apt-key
.
Ce tutoriel va présenter deux procédures qui utilisent des alternatives à apt-key
et add-apt-repository
, respectivement. Tout d’abord, nous ajouterons un référentiel externe en utilisant une clé publique avec gpg
au lieu d’utiliser apt-key
. Ensuite, en complément, ce tutoriel couvrira l’ajout d’un référentiel externe en utilisant un serveur de clés avec gpg
comme alternative à l’utilisation de add-apt-repository
.
Prérequis
Pour terminer ce tutoriel, vous aurez besoin d’un serveur Ubuntu 22.04. Assurez-vous de le configurer selon notre guide de configuration de serveur initial pour Ubuntu 22.04, avec un utilisateur non-root avec des privilèges sudo
et un pare-feu activé.
Étape 1 — Identification des composants et du format clé
PGP, ou Pretty Good Privacy, est un programme de chiffrement propriétaire utilisé pour signer, chiffrer et déchiffrer des fichiers et répertoires. Les fichiers PGP sont des fichiers de clé publique, utilisés dans ce processus pour authentifier les référentiels en tant que sources valides dans apt
. GPG, ou GNU Privacy Guard, est une alternative open source à PGP. Les fichiers GPG sont généralement des trousseaux de clés, qui sont des fichiers contenant plusieurs clés. Ces deux types de fichiers sont couramment utilisés pour signer et chiffrer des fichiers.
gpg
est l’outil en ligne de commande de GPG qui peut être utilisé pour autoriser les référentiels externes à être utilisés avec apt
. Cependant, gpg
n’accepte que les fichiers GPG. Pour utiliser cet outil en ligne de commande avec des fichiers PGP, vous devez les convertir.
Elasticsearch présente un scénario courant de conversion de clé et sera utilisé comme exemple pour cette section. Vous téléchargerez une clé formatée pour PGP et la convertirez dans un format compatible avec apt
en utilisant une extension de fichier .gpg
. Vous ferez cela en exécutant la commande gpg
avec le drapeau --dearmor
. Ensuite, vous ajouterez le lien du référentiel à la liste des sources de paquets, tout en attachant une référence directe à votre clé convertie. Enfin, vous vérifierez ce processus en installant le paquet Elasticsearch.
Projects nécessitant l’ajout de référentiels avec vérification de clé vous fournira toujours une clé publique et une URI de référentiel représentant son emplacement exact. Pour notre exemple Elasticsearch, la documentation donne ces composants sur leur page d’installation.
Voici les composants donnés pour Elasticsearch:
- Clé:
https://artifacts.elastic.co/GPG-KEY-elasticsearch
- Référentiel:
https://artifacts.elastic.co/packages/7.x/apt stable main
Ensuite, vous devez déterminer si un fichier PGP ou GPG vous est fourni. Vous pouvez inspecter le fichier clé en ouvrant l’URL avec curl
:
- curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch
Cela affichera le contenu du fichier clé, qui commence par ce qui suit:
Output-----BEGIN PGP PUBLIC KEY BLOCK-----
. . .
Malgré la présence de GPG
dans l’URL, la première ligne indique qu’il s’agit en réalité d’un fichier clé PGP. Notez ceci, car apt
n’accepte que le format GPG. À l’origine, apt-key
détectait les fichiers PGP et les convertissait automatiquement en GPG en appelant gpg
en arrière-plan. Étape 2 couvrira à la fois la conversion manuelle de PGP à GPG, et aussi que faire lorsque la conversion n’est pas nécessaire.
Étape 2 — Téléchargement de la clé et conversion en un type de fichier compatible avec apt
Avec la méthode gpg
, vous devez toujours télécharger la clé avant de l’ajouter à la liste des sources de paquets. Auparavant, avec apt-key
, cet ordre n’était pas toujours imposé. Maintenant, vous devez indiquer le chemin vers le fichier de clé téléchargé dans votre liste de sources. Si vous n’avez pas téléchargé la clé, vous ne pouvez évidemment pas faire référence à un chemin existant.
Avec Elasticsearch, vous travaillez avec un fichier PGP, que vous convertirez en format de fichier GPG après le téléchargement. L’exemple suivant utilise curl
pour télécharger la clé, avec le téléchargement transmis à une commande gpg
. gpg
est appelé avec le drapeau --dearmor
pour convertir la clé PGP en format de fichier GPG, avec -o
utilisé pour indiquer le fichier de sortie.
Sous Ubuntu, le répertoire /usr/share/keyrings
est l’emplacement recommandé pour vos fichiers GPG convertis, car c’est l’emplacement par défaut où Ubuntu stocke ses trousseaux. Le fichier est nommé elastic-7.x.gpg
dans cet exemple, mais n’importe quel nom fonctionne:
- curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-7.x.gpg
Cela convertit le fichier PGP dans le format GPG correct, le rendant prêt à être ajouté à la liste des sources pour apt
.
Note: Si le fichier téléchargé était déjà au format GPG, vous pourriez plutôt le télécharger directement dans /usr/share/keyrings
sans le convertir à l’aide d’une commande comme l’exemple suivant:
- curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo tee /usr/share/keyrings/elastic-7.x.gpg
Dans ce cas, la sortie de la commande curl
serait transmise à tee
pour enregistrer le fichier à l’emplacement correct.
Étape 3 — Ajouter le référentiel à votre liste de sources de packages
Avec la clé téléchargée et dans le bon format de fichier GPG, vous pouvez ajouter le référentiel à la source de packages apt
tout en le liant explicitement à la clé que vous avez obtenue. Il existe trois méthodes pour y parvenir, toutes liées à la façon dont apt
trouve les sources. apt
extrait les sources d’un fichier central sources.list
, de fichiers .list
dans le répertoire sources.list.d
et de fichiers .source
également dans le répertoire sources.list.d
. Bien qu’il n’y ait aucune différence fonctionnelle entre les trois options, il est recommandé de considérer les trois options et de choisir la méthode qui correspond le mieux à vos besoins.
Option 1 — Ajout direct à sources.list
La première méthode consiste à insérer une ligne représentant la source directement dans /etc/apt/sources.list
, le fichier principal contenant les sources apt
. Il y a plusieurs sources dans ce fichier, y compris les sources par défaut fournies avec Ubuntu. Il est tout à fait acceptable de modifier ce fichier directement, bien que l’Option 2 et l’Option 3 présentent une solution plus modulaire qui peut être plus facile à modifier et à maintenir.
Ouvrez /etc/apt/sources.list
avec nano
ou votre éditeur de texte préféré :
- sudo nano /etc/apt/sources.list
Ensuite, ajoutez le dépôt externe en bas du fichier :
. . .
deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/elastic-7.x.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main
Cette ligne contient les informations suivantes sur la source :
deb
: Cela spécifie que la source utilise une architecture Debian régulière.arch=amd64,arm64
spécifie les architectures vers lesquelles les données APT seront téléchargées. Ici, il s’agit deamd64
etarm64
.signed-by=/usr/share/keyrings/elastic-7.x.gpg
: Cela spécifie la clé utilisée pour autoriser cette source, et ici elle pointe vers votre fichier.gpg
stocké dans/usr/share/keyrings
. Cette partie de la ligne doit être incluse, alors qu’elle n’était pas requise précédemment dans la méthodeapt-key
. Cette addition est le changement le plus critique dans le passage deapt-key
, car elle lie la clé à un référentiel singulier qu’elle est autorisée à autoriser et corrige la faille de sécurité originale dansapt-key
.https://artifacts.elastic.co/packages/7.x/apt stable main
: C’est l’URI représentant l’emplacement exact où les données du référentiel peuvent être trouvées./etc/apt/sources.list.d/elastic-7.x.list
: C’est l’emplacement et le nom du nouveau fichier à créer./dev/null
: Ceci est utilisé lorsque la sortie d’une commande n’est pas nécessaire. En redirigeant la sortie vers cet emplacement, on exclut la sortie de la commandetee
.
Enregistrez et quittez en appuyant sur CTRL+O
puis CTRL+X
.
Option 2 — Créer un Nouveau Fichier .list
dans sources.list.d
Avec cette option, vous allez plutôt créer un nouveau fichier dans le répertoire sources.list.d
. apt
analyse à la fois ce répertoire et sources.list
pour les ajouts de dépôts. Cette méthode vous permet d’isoler physiquement les ajouts de dépôts dans des fichiers distincts. Si vous devez ultérieurement supprimer cet ajout ou apporter des modifications, vous pouvez supprimer ce fichier au lieu de modifier le fichier central sources.list
. Garder vos ajouts séparés facilite la maintenance, et éditer sources.list
peut être plus sujet aux erreurs d’une manière qui affecte d’autres dépôts dans le fichier.
Pour ce faire, redirigez une commande echo
vers une commande tee
pour créer ce nouveau fichier et insérer la ligne appropriée. Le fichier est nommé elastic-7.x.list
dans l’exemple suivant, mais n’importe quel nom fonctionne tant que c’est un nom de fichier unique dans le répertoire.
- echo "deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/elastic-7.x.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list > /dev/null
Cette commande est identique à la création manuelle du fichier et à l’insertion de la ligne de texte appropriée.
Option 3 — Création d’un fichier .sources
dans sources.list.d
La troisième méthode écrit dans un fichier .sources
plutôt que dans un fichier .list
. Cette méthode est relativement nouvelle et utilise le format multiligne deb822
qui est moins ambigu que la déclaration deb . . .
, bien qu’elle soit fonctionnellement identique. Créez un nouveau fichier :
- sudo nano /etc/apt/sources.list.d/elastic-7.x.sources
Ensuite, ajoutez le dépôt externe en utilisant le format deb822
:
Types: deb
Architectures: amd64 arm64
Signed-By: /usr/share/keyrings/elastic-7.x.gpg
URIs: https://artifacts.elastic.co/packages/7.x/apt
Suites: stable
Components: main
Enregistrez et quittez une fois que vous avez inséré le texte.
Ceci est analogue au format d’une ligne, et une comparaison ligne par ligne montre que les informations dans les deux sont identiques, simplement organisées différemment. À noter que ce format n’utilise pas de virgules lorsqu’il y a plusieurs arguments (comme avec amd64,arm64
), et utilise plutôt des espaces.
Ensuite, vous vérifierez ce processus en effectuant une installation de test.
Étape 4 — Installation du paquet depuis le dépôt externe
Vous devez appeler apt update
pour inciter apt
à parcourir le fichier principal sources.list
, ainsi que tous les fichiers .list
et .sources
dans sources.list.d
. Appeler apt install
sans mise à jour préalable entraînera un échec de l’installation, ou une installation d’un package par défaut obsolète à partir de apt
.
Mettez à jour vos dépôts:
- sudo apt update
Ensuite, installez votre package:
- sudo apt install elasticsearch
Il n’y a aucun changement à cette étape par rapport à la méthode apt-key
. Une fois cette commande terminée, vous aurez terminé l’installation.
Annexe – Ajout d’un dépôt externe en utilisant un serveur de clés
Cette section passera brièvement en revue l’utilisation de gpg
avec un serveur de clés au lieu d’une clé publique pour ajouter un dépôt externe. Le processus est presque identique à la méthode de la clé publique, la différence étant la manière dont gpg
est appelé.
add-apt-repository
est le pendant basé sur le serveur de clés de apt-key
, et les deux sont en passe d’être obsolètes. Ce scénario utilise des composants différents. Au lieu d’une clé et d’un référentiel, vous disposez d’une URL de serveur de clés et d’un identifiant de clé. Dans ce cas, vous pouvez télécharger directement depuis le serveur de clés dans le format .gpg
approprié sans avoir à convertir quoi que ce soit. Parce que add-apt-repository
sera bientôt obsolète, vous utiliserez plutôt gpg
pour télécharger dans un fichier tout en remplaçant le comportement par défaut de gpg
qui consiste à importer dans un trousseau de clés existant.
En utilisant le langage de programmation open-source R comme exemple, voici les composants donnés, qui peuvent également être trouvés dans les instructions d’installation sur le site officiel du projet:
- Serveur de clés :
keyserver.ubuntu.com
- Identifiant de clé :
E298A3A825C0D65DFD57CBB651716619E084DAB9
- Référentiel :
https://cloud.r-project.org/bin/linux/ubuntu jammy-cran40/
Tout d’abord, téléchargez directement depuis le serveur de clés en utilisant gpg
. Notez que selon le trafic de téléchargement, cette commande de téléchargement peut prendre un certain temps pour s’achever :
- sudo gpg --homedir /tmp --no-default-keyring --keyring /usr/share/keyrings/R.gpg --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9
Cette commande inclut les indicateurs suivants, qui diffèrent de l’utilisation de gpg
avec une clé publique :
--no-default-keyring
combiné avec--keyring
permet de produire une sortie vers un nouveau fichier au lieu d’importer dans un trousseau de clés existant, ce qui est le comportement par défaut degpg
dans ce scénario.--keyserver
combiné avec--recv-keys
fournit la clé spécifique et l’emplacement à partir duquel vous téléchargez.--homedir
est utilisé pour remplacer l’emplacement par défaut degpg
pour la création de fichiers temporaires.gpg
doit créer ces fichiers pour exécuter la commande, sinongpg
tentera d’écrire dans/root
, ce qui provoque une erreur de permission. Au lieu de cela, cette commande place les fichiers temporaires dans le répertoire approprié/tmp
.
Ensuite, ajoutez le dépôt à un fichier .list
. Cela se fait de la même manière que l’ajout d’un dépôt externe en utilisant une clé publique en redirigeant une commande echo
vers une commande tee
:
- echo "deb [arch=amd64 signed-by=/usr/share/keyrings/R.gpg] https://cloud.r-project.org/bin/linux/ubuntu jammy-cran40/" | sudo tee /etc/apt/sources.list.d/R.list > /dev/null
Ensuite, mettez à jour votre liste de dépôts:
- sudo apt update
Enfin, vous pouvez installer le paquet:
- sudo apt install r-base
L’utilisation de gpg
pour ajouter des dépôts externes est similaire entre les clés publiques et les serveurs de clés, la différence étant la manière dont vous appelez gpg
.
Conclusion
Ajouter un dépôt externe à l’aide d’une clé publique ou d’un serveur de clés peut être réalisé via gpg
, sans utiliser apt-key
ou add-apt-repository
comme intermédiaire. Utilisez cette méthode pour garantir que votre processus ne devienne pas obsolète dans les futures versions d’Ubuntu, car apt-key
et add-apt-repository
sont dépréciés et seront supprimés dans une version future. Ajouter des dépôts externes en utilisant gpg
garantit qu’une clé ne sera utilisée que pour autoriser un seul dépôt, comme vous l’avez prévu.