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:
- 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:
- 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:
- 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:
- sudo nano /etc/apt/sources.list
Fügen Sie dann das externe Repository am Ende der Datei hinzu:
. . .
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 esamd64
undarm64
. -
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 vonapt-key
nicht erforderlich war. Diese Ergänzung ist die wichtigste Änderung beim Umstieg vonapt-key
, da sie den Schlüssel mit einem einzigen Repository verknüpft, das er autorisieren darf, und die ursprüngliche Sicherheitslücke inapt-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. Wenntee
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:
- 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:
- sudo nano /etc/apt/sources.list.d/elastic-7.x.sources
Dann fügen Sie das externe Repository im Format deb822
hinzu:
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:
- sudo apt update
Dann installieren Sie Ihr Paket:
- 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:
- 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 vongpg
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 vongpg
zum Erstellen temporärer Dateien zu überschreiben.gpg
muss diese Dateien erstellen, um den Befehl abzuschließen. Andernfalls versuchtgpg
, 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:
- 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:
- sudo apt update
Dann kannst du das Paket installieren:
- 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.