Wie man apt-key und add-apt-repository-Veraltetung behandelt Mit gpg externe Repositories unter Ubuntu 22.04 hinzufügen

Einführung

apt-key ist ein Dienstprogramm zur Verwaltung der Schlüssel, die APT zur Authentifizierung von Paketen verwendet. Es ist eng mit dem Dienstprogramm add-apt-repository verwandt, das externe Repositories mithilfe von Keyserven zur Liste der vertrauenswürdigen Quellen einer APT-Installation hinzufügt. Schlüssel, die jedoch mithilfe von apt-key und add-apt-repository hinzugefügt werden, werden von apt global vertraut. Diese Schlüssel sind nicht darauf beschränkt, das einzelne Repository zu autorisieren, für das sie gedacht waren. Jeder auf diese Weise hinzugefügte Schlüssel kann verwendet werden, um die Hinzufügung eines beliebigen anderen externen Repositorys zu autorisieren, was ein wichtiges Sicherheitsproblem darstellt.

Ab Ubuntu 20.10 wird bei der Verwendung von apt-key eine Warnung angezeigt, dass das Tool in naher Zukunft veraltet sein wird; ebenso wird add-apt-repository bald veraltet sein. Obwohl diese Veraltungswarnungen die Verwendung von apt-key und add-apt-repository mit Ubuntu 22.04 nicht strikt verhindern, ist es ratsam, sie nicht zu ignorieren.

Die aktuelle bewährte Methode besteht darin, gpg anstelle von apt-key und add-apt-repository zu verwenden, und in zukünftigen Versionen von Ubuntu wird es die einzige Option sein. apt-key und add-apt-repository haben selbst immer als Wrapper fungiert und im Hintergrund gpg aufgerufen. Die direkte Verwendung von gpg umgeht den Vermittler. Aus diesem Grund ist die gpg-Methode abwärtskompatibel mit älteren Versionen von Ubuntu und kann als Ersatz für apt-key verwendet werden.

In diesem Tutorial werden zwei Verfahren vorgestellt, die Alternativen zu apt-key und add-apt-repository verwenden. Erstens das Hinzufügen eines externen Repositories unter Verwendung eines öffentlichen Schlüssels mit gpg anstelle von apt-key. Zweitens, als Ergänzung, wird dieses Tutorial das Hinzufügen eines externen Repositories unter Verwendung eines Schlüsselservers mit gpg als Alternative zur Verwendung von add-apt-repository abdecken.

Voraussetzungen

Um dieses Tutorial abzuschließen, benötigen Sie einen Ubuntu 22.04-Server. Stellen Sie sicher, dass Sie dies gemäß unserer Anleitung zur Einrichtung eines Servers für Ubuntu 22.04 mit einem nicht-Root-Benutzer mit sudo-Berechtigungen und aktivierter Firewall einrichten.

Schritt 1 – Identifizierung der Komponenten und des Schlüsselformats

PGP oder Pretty Good Privacy ist ein proprietäres Verschlüsselungsprogramm, das zum Signieren, Verschlüsseln und Entschlüsseln von Dateien und Verzeichnissen verwendet wird. PGP-Dateien sind öffentliche Schlüsseldateien, die in diesem Prozess verwendet werden, um Repositories als gültige Quellen innerhalb von apt zu authentifizieren. GPG oder GNU Privacy Guard ist eine Open-Source-Alternative zu PGP. GPG-Dateien sind in der Regel Schlüsselringe, die Dateien sind, die mehrere Schlüssel enthalten. Beide Dateitypen werden häufig zum Signieren und Verschlüsseln von Dateien verwendet.

gpg ist das Befehlszeilentool von GPG, das verwendet werden kann, um externe Repositories für die Verwendung mit apt zu autorisieren. Allerdings akzeptiert gpg nur GPG-Dateien. Um dieses Befehlszeilentool mit PGP-Dateien zu verwenden, müssen Sie sie konvertieren.

Elasticsearch stellt ein häufiges Szenario für die Schlüsselkonvertierung dar und wird als Beispiel für diesen Abschnitt verwendet. Sie werden einen für PGP formatierten Schlüssel herunterladen und ihn in ein mit .gpg Dateierweiterung kompatibles Format für apt konvertieren. Sie werden dies tun, indem Sie den gpg-Befehl mit dem --dearmor-Flag ausführen. Anschließend fügen Sie den Repository-Link zur Liste der Paketquellen hinzu, während Sie einen direkten Verweis auf Ihren konvertierten Schlüssel anhängen. Schließlich werden Sie diesen Prozess überprüfen, indem Sie das Elasticsearch-Paket installieren.

Projekte, die das Hinzufügen von Repositories mit Schlüsselüberprüfung erfordern, stellen Ihnen immer einen öffentlichen Schlüssel und eine Repository-URI zur Verfügung, die seinen genauen Speicherort darstellt. Für unser Elasticsearch-Beispiel gibt die Dokumentation diese Komponenten auf ihrer Installationsseite.

Hier sind die angegebenen Komponenten für Elasticsearch:

  • Schlüssel: https://artifacts.elastic.co/GPG-KEY-elasticsearch
  • Repository: https://artifacts.elastic.co/packages/7.x/apt stable main

Anschließend müssen Sie feststellen, ob Ihnen eine PGP- oder GPG-Datei zur Verfügung steht, mit der Sie arbeiten können. Sie können die Schlüsseldatei überprüfen, indem Sie die URL mit curl öffnen:

  1. curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch

Dadurch werden die Inhalte der Schlüsseldatei ausgegeben, die mit dem folgenden Text beginnt:

Output
-----BEGIN PGP PUBLIC KEY BLOCK----- . . .

Trotz der Verwendung von GPG in der URL zeigt die erste Zeile an, dass es sich tatsächlich um eine PGP-Schlüsseldatei handelt. Beachten Sie dies, da apt nur das GPG-Format akzeptiert. Ursprünglich erkannte apt-key PGP-Dateien und wandelte sie automatisch in GPG um, indem es im Hintergrund gpg aufrief. Schritt 2 wird sowohl die manuelle Umwandlung von PGP in GPG als auch das Vorgehen behandeln, wenn keine Umwandlung erforderlich ist.

Schritt 2 — Herunterladen des Schlüssels und Konvertieren in einen für apt geeigneten Dateityp

Mit der Methode gpg müssen Sie immer den Schlüssel herunterladen, bevor Sie ihn zur Liste der Paketquellen hinzufügen. Früher wurde diese Reihenfolge nicht immer mit apt-key durchgesetzt. Jetzt müssen Sie den Pfad zur heruntergeladenen Schlüsseldatei in Ihrer Quellenliste angeben. Wenn Sie den Schlüssel nicht heruntergeladen haben, können Sie offensichtlich keinen vorhandenen Pfad referenzieren.

Bei Elasticsearch arbeiten Sie mit einer PGP-Datei, die Sie nach dem Herunterladen in das GPG-Dateiformat konvertieren müssen. Das folgende Beispiel verwendet curl, um den Schlüssel herunterzuladen, wobei der Download in einen gpg-Befehl geleitet wird. gpg wird mit dem Flag --dearmor aufgerufen, um den PGP-Schlüssel in das GPG-Dateiformat zu konvertieren, wobei -o für die Dateiausgabe verwendet wird.

Auf Ubuntu ist das Verzeichnis /usr/share/keyrings der empfohlene Speicherort für Ihre konvertierten GPG-Dateien, da es der Standardort ist, an dem Ubuntu seine Schlüsselbunde speichert. Die Datei wird in diesem Beispiel als elastic-7.x.gpg bezeichnet, aber jeder Name funktioniert:

  1. curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-7.x.gpg

Dies konvertiert die PGP-Datei in das richtige GPG-Format, sodass sie zur Liste der Quellen für apt hinzugefügt werden kann.

Hinweis: Wenn die heruntergeladene Datei bereits im GPG-Format vorlag, könnten Sie stattdessen die Datei direkt nach /usr/share/keyrings herunterladen, ohne sie zu konvertieren, indem Sie einen Befehl wie das folgende Beispiel verwenden:

  1. curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo tee /usr/share/keyrings/elastic-7.x.gpg

In diesem Fall würde die Ausgabe des curl-Befehls in tee geleitet, um die Datei am richtigen Ort zu speichern.

Schritt 3 — Hinzufügen des Repositories zu Ihrer Liste der Paketquellen

Mit dem heruntergeladenen Schlüssel im richtigen GPG-Dateiformat können Sie das Repository zur Liste der apt-Paketquellen hinzufügen und es explizit mit dem erhaltenen Schlüssel verknüpfen. Es gibt drei Methoden, dies zu erreichen, die alle damit zusammenhängen, wie apt Quellen findet. apt zieht Quellen aus einer zentralen sources.list-Datei, .list-Dateien im Verzeichnis sources.list.d und .source-Dateien im Verzeichnis sources.list.d. Obwohl es keinen funktionalen Unterschied zwischen den drei Optionen gibt, wird empfohlen, die drei Optionen zu berücksichtigen und die Methode auszuwählen, die Ihren Anforderungen am besten entspricht.

Option 1 — Direktes Hinzufügen zu sources.list

Die erste Methode besteht darin, eine Zeile, die die Quelle direkt repräsentiert, in die Datei /etc/apt/sources.list einzufügen, die die primäre Datei mit apt-Quellen enthält. Es gibt mehrere Quellen in dieser Datei, einschließlich der Standardquellen, die mit Ubuntu geliefert werden. Es ist durchaus akzeptabel, diese Datei direkt zu bearbeiten, obwohl Option 2 und Option 3 eine modularere Lösung bieten, die einfacher zu bearbeiten und zu pflegen sein kann.

Öffnen Sie /etc/apt/sources.list mit nano oder Ihrem bevorzugten Texteditor:

  1. sudo nano /etc/apt/sources.list

Fügen Sie dann das externe Repository am Ende der Datei hinzu:

/etc/apt/sources.list
. . .
deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/elastic-7.x.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main

Diese Zeile enthält folgende Informationen über die Quelle:

  • deb: Dies gibt an, dass die Quelle eine reguläre Debian-Architektur verwendet.
  • arch=amd64,arm64 gibt die Architekturen an, für die die APT-Daten heruntergeladen werden sollen. Hier sind es amd64 und arm64.
  • signed-by=/usr/share/keyrings/elastic-7.x.gpg: Dies gibt den Schlüssel an, der verwendet wird, um diese Quelle zu autorisieren, und hier zeigt er auf Ihre .gpg-Datei, die in /usr/share/keyrings gespeichert ist. Dieser Teil der Zeile muss enthalten sein, obwohl er zuvor bei der Verwendung von apt-key nicht erforderlich war. Diese Ergänzung ist die wichtigste Änderung beim Umstieg von apt-key, da sie den Schlüssel mit einem einzigen Repository verknüpft, das er autorisieren darf, und die ursprüngliche Sicherheitslücke in apt-key behebt.
  • https://artifacts.elastic.co/packages/7.x/apt stable main: Dies ist die URI, die den genauen Speicherort der Daten im Repository repräsentiert.
  • /etc/apt/sources.list.d/elastic-7.x.list: Dies ist der Ort und der Name der neuen Datei, die erstellt werden soll.
  • /dev/null: Dies wird verwendet, wenn die Ausgabe eines Befehls nicht erforderlich ist. Wenn tee auf diesen Speicherort zeigt, wird die Ausgabe ausgelassen.

Speichern und beenden Sie durch Drücken von STRG+O und anschließend STRG+X.

Option 2 – Erstellen einer neuen .list-Datei in sources.list.d

Bei dieser Option erstellen Sie stattdessen eine neue Datei im Verzeichnis sources.list.d. apt analysiert sowohl dieses Verzeichnis als auch sources.list nach Repository-Ergänzungen. Diese Methode ermöglicht es Ihnen, Repository-Ergänzungen physisch in separaten Dateien zu isolieren. Wenn Sie diese Ergänzung später entfernen oder bearbeiten müssen, können Sie diese Datei löschen, anstatt die zentrale sources.list-Datei zu bearbeiten. Durch die separate Aufbewahrung Ihrer Ergänzungen wird die Wartung erleichtert, und das Bearbeiten von sources.list kann fehleranfälliger sein und andere Repositories in der Datei beeinflussen.

Um dies zu tun, leiten Sie einen echo-Befehl in einen tee-Befehl, um diese neue Datei zu erstellen und die entsprechende Zeile einzufügen. In folgendem Beispiel ist die Datei mit dem Namen elastic-7.x.list benannt, aber jeder Name funktioniert, solange es sich um einen eindeutigen Dateinamen im Verzeichnis handelt:

  1. 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

Diese Befehl ist identisch mit dem manuellen Erstellen der Datei und dem Einfügen der entsprechenden Textzeile.

Option 3 — Erstellen einer .sources-Datei in sources.list.d

Die dritte Methode schreibt in eine .sources-Datei anstelle einer .list-Datei. Diese Methode ist relativ neu und verwendet das mehrzeilige Format deb822, das im Vergleich zur Deklaration deb . . . weniger mehrdeutig ist, jedoch funktional identisch ist. Erstellen Sie eine neue Datei:

  1. sudo nano /etc/apt/sources.list.d/elastic-7.x.sources

Dann fügen Sie das externe Repository im Format deb822 hinzu:

/etc/apt/sources.list.d/elastic-7.x.sources
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

Speichern und verlassen Sie nach dem Einfügen des Textes.

Dies entspricht dem einzeiligen Format, und ein zeilenweiser Vergleich zeigt, dass die Informationen in beiden identisch sind, nur anders organisiert. Eine Sache ist zu beachten: Dieses Format verwendet keine Kommas, wenn es mehrere Argumente gibt (wie bei amd64,arm64), sondern verwendet stattdessen Leerzeichen.

Als nächstes überprüfen Sie diesen Vorgang durch eine Testinstallation.

Schritt 4 — Installation des Pakets aus dem externen Repository

Sie müssen apt update aufrufen, um apt dazu zu bringen, die Hauptdatei sources.list sowie alle Dateien mit der Endung .list und .sources in sources.list.d zu durchsuchen. Das Ausführen von apt install ohne vorheriges Update führt zu einer fehlgeschlagenen Installation oder zur Installation eines veralteten Standardpakets von apt.

Aktualisieren Sie Ihre Paketquellen:

  1. sudo apt update

Dann installieren Sie Ihr Paket:

  1. sudo apt install elasticsearch

In diesem Schritt ändert sich nichts im Vergleich zur Verwendung von apt-key. Sobald dieser Befehl abgeschlossen ist, ist die Installation abgeschlossen.

Zusatz – Hinzufügen eines externen Repositorys mit einem Schlüsselserver

In diesem Abschnitt wird kurz erläutert, wie Sie gpg mit einem Schlüsselserver verwenden können, um anstelle eines öffentlichen Schlüssels ein externes Repository hinzuzufügen. Der Prozess ist nahezu identisch mit der Methode mit öffentlichem Schlüssel, der Unterschied besteht darin, wie gpg aufgerufen wird.

add-apt-repository ist das keyserverbasierte Pendant zu apt-key, und beide stehen kurz vor der Ausphasung. Dieses Szenario verwendet unterschiedliche Komponenten. Anstelle eines Schlüssels und eines Repositories erhalten Sie eine Keyserver-URL und eine Schlüssel-ID. In diesem Fall können Sie direkt vom Keyserver in das entsprechende .gpg-Format herunterladen, ohne etwas konvertieren zu müssen. Da add-apt-repository bald veraltet sein wird, verwenden Sie stattdessen gpg, um in eine Datei herunterzuladen und dabei das Standardverhalten von gpg beim Importieren in einen vorhandenen Schlüsselbund zu überschreiben.

Als Beispiel verwenden wir die Open-Source-Programmiersprache R, hier sind die gegebenen Komponenten, die auch in den Installationsanweisungen auf der offiziellen Projektseite gefunden werden können:

  • Keyserver: keyserver.ubuntu.com
  • Schlüssel-ID: E298A3A825C0D65DFD57CBB651716619E084DAB9
  • Repository: https://cloud.r-project.org/bin/linux/ubuntu jammy-cran40/

Zuerst direkt vom Keyserver herunterladen, indem Sie gpg verwenden. Beachten Sie, dass je nach Download-Traffic dieser Download-Befehl einige Zeit dauern kann, um abzuschließen:

  1. sudo gpg --homedir /tmp --no-default-keyring --keyring /usr/share/keyrings/R.gpg --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9

Dieser Befehl enthält die folgenden Flags, die sich von der Verwendung von gpg mit einem öffentlichen Schlüssel unterscheiden:

  • --no-default-keyring in Kombination mit --keyring ermöglicht die Ausgabe in eine neue Datei anstelle des Imports in einen vorhandenen Schlüsselbund, was das Standardverhalten von gpg in diesem Szenario ist.
  • --keyserver in Kombination mit --recv-keys gibt den spezifischen Schlüssel und den Ort an, von dem du herunterlädst.
  • --homedir wird verwendet, um den Standardort von gpg zum Erstellen temporärer Dateien zu überschreiben. gpg muss diese Dateien erstellen, um den Befehl abzuschließen. Andernfalls versucht gpg, in /root zu schreiben, was einen Berechtigungsfehler verursacht. Stattdessen platziert dieser Befehl die temporären Dateien im entsprechenden /tmp-Verzeichnis.

Als Nächstes füge das Repository einer .list-Datei hinzu. Dies erfolgt auf die gleiche Weise wie das Hinzufügen eines externen Repositories mit einem öffentlichen Schlüssel, indem ein echo-Befehl in einen tee-Befehl gepiped wird:

  1. 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

Als Nächstes aktualisiere deine Liste der Repositories:

  1. sudo apt update

Dann kannst du das Paket installieren:

  1. sudo apt install r-base

Die Verwendung von gpg zum Hinzufügen externer Repositories ist ähnlich zwischen öffentlichen Schlüsseln und Keyserven, der Unterschied besteht darin, wie du gpg aufrufst.

Abschluss

Das Hinzufügen eines externen Repositories mithilfe eines öffentlichen Schlüssels oder eines Keyservers kann über gpg erfolgen, ohne apt-key oder add-apt-repository als Vermittler zu verwenden. Verwenden Sie diese Methode, um sicherzustellen, dass Ihr Prozess in zukünftigen Ubuntu-Versionen nicht veraltet wird, da apt-key und add-apt-repository veraltet sind und in einer zukünftigen Version entfernt werden. Durch das Hinzufügen externer Repositories mit gpg wird sichergestellt, dass ein Schlüssel nur dazu verwendet wird, ein einzelnes Repository gemäß Ihren Absichten zu autorisieren.

Source:
https://www.digitalocean.com/community/tutorials/how-to-handle-apt-key-and-add-apt-repository-deprecation-using-gpg-to-add-external-repositories-on-ubuntu-22-04