GNU/Linux >> LINUX-Kenntnisse >  >> Linux

RPM und GPG:So überprüfen Sie Linux-Pakete vor der Installation

Große und beliebte RPM-Repositories werden normalerweise auf der ganzen Welt repliziert. Die Projekte und Unternehmen, die die Pakete bereitstellen, nutzen Content Distribution Networks (CDNs) und Mirror-Sites, um ihre Pakete den Verbrauchern zur Verfügung zu stellen. Bei vielen Open-Source-Projekten gehört dazu das Hosting durch Freiwillige. Um böswillige Ersatzpakete zu erkennen und zu vermeiden, können Paketbesitzer die Paketdateien signieren und Verbraucher können diese Signaturen überprüfen.

Während GPG jede Datei signieren kann, ist die manuelle Überprüfung von Paketsignaturen für Systemadministratoren nicht skalierbar. Das RPM-Format hat einen Bereich, der speziell für eine Signatur des Headers und der Nutzdaten reserviert ist. Die rpm Das Dienstprogramm verwendet GPG-Schlüssel zum Signieren von Paketen und seine eigene Sammlung importierter öffentlicher Schlüssel zum Verifizieren der Pakete. YUM und DNF verwenden Repository-Konfigurationsdateien, um Verweise auf die Speicherorte der öffentlichen GPG-Schlüssel bereitzustellen und beim Importieren der Schlüssel zu helfen, damit RPM die Pakete überprüfen kann.

Für diesen Artikel werde ich Schlüssel und Pakete von EPEL verwenden. Der öffentliche Schlüssel ist in einem RPM-Paket enthalten, das auch das yum repo konfiguriert . Bei einigen Projekten ist der Schlüssel möglicherweise auch direkt von einer Quellwebsite verfügbar.

Das RPM-Dienstprogramm verfügt über eine eigene Schlüsselverwaltung

Da die rpm Utility über eine eigene Schlüsselverwaltung verfügt, müssen die öffentlichen GPG-Schlüssel nicht in Ihren persönlichen GPG-Schlüsselbund importiert werden. Tatsächlich können Sie die Datei nicht einfach mit gpg überprüfen Befehle, da die Signatur nicht von der gesamten RPM-Datei stammt. Stattdessen wird die Signatur nur den kritischen Teilen des Pakets zugeordnet.

Führen Sie den folgenden Befehl aus, um rpm zu verwenden um ein Paket zu verifizieren:

$ rpm -K epel-release-latest-8.noarch.rpm 
epel-release-latest-8.noarch.rpm: digests SIGNATURES NOT OK

In diesem Fall wird die Meldung "SIGNATURES NOT OK" angezeigt, da der Schlüssel noch nicht für RPM importiert wurde. Das Standardverhalten von rpm Befehlen besteht darin, die Signatur von Paketen während der Installation oder Überprüfung von Interaktionen zu überprüfen. Wenn das nicht möglich ist, weil das Paket nicht signiert ist oder der öffentliche Schlüssel nicht verfügbar ist, müssen Sie möglicherweise den --nogpgcheck angeben Möglichkeit, diesen Schritt zu überspringen.

Wenn Sie Zugriff auf den öffentlichen GPG-Schlüssel haben, können Sie den folgenden Befehl verwenden, um einen Schlüssel manuell zu importieren:

$ rpm --import RPM-GPG-KEY-EPEL-8 

Da die Metadaten für den Schlüssel in der RPM-Datenbank gespeichert sind, können Sie Schlüssel wie jedes Paket abfragen und löschen.

Verwenden Sie den folgenden Befehl, um die Schlüssel aufzulisten:

$ rpm -qa gpg-pubkey*
gpg-pubkey-7fac5991-4615767f
gpg-pubkey-2f86d6a1-5cf7cefb

Verwenden Sie diesen Befehl, um die Informationen zu einem Schlüssel abzurufen:

$ rpm -qi gpg-pubkey-2f86d6a1-5cf7cefb
Name : gpg-pubkey
Version : 2f86d6a1
Release : 5cf7cefb
Architecture: (none)
Install Date: Mon 01 Jun 2020 12:14:38 PM EDT
Group : Public Keys
Size : 0
License : pubkey
Signature : (none)
Source RPM : (none)
Build Date : Wed 05 Jun 2019 10:17:31 AM EDT
Build Host : localhost
Relocations : (not relocatable)
Packager : Fedora EPEL (8) <[email protected]>
Summary : gpg(Fedora EPEL (8) <[email protected]>)
Description :
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: rpm-4.14.2 (NSS-3)
...omitted...

Der folgende Befehl wird verwendet, um einen Schlüssel zu entfernen:

$ sudo rpm -e gpg-pubkey-2f86d6a1-5cf7cefb

Weitere Optionen für die Schlüsselverwaltung sind in der Manpage beschrieben, die dem rpmkey beiliegt Paket.

YUM und DNF können Schlüssel zur RPM-Datenbank hinzufügen

Andere Paketmanager machen die Schlüsselverwaltung noch einfacher. YUM und DNF verwenden Konfigurationsdateien in /etc/yum.repos.d um eine URL für den GPG-Schlüssel anzugeben, der zum Überprüfen von Paketen in diesem Repository verwendet wird. Die Dienstprogramme können dann den Schlüssel importieren, wenn er nicht bereits zur Überprüfung verfügbar ist.

Im yum repo Konfigurationsdatei die Zeile gpgcheck=1 gibt an, dass die GPG-Prüfung für alle Pakete in diesem Repository durchgeführt werden soll. Es ist ein boolescher Wert, der in der Konfiguration geändert oder auf der Kommandozeile mit --nogpgcheck temporär überschrieben werden kann Option.

Wenn der öffentliche GPG-Schlüssel zu Beginn einer Paketinstallation noch nicht in RPM importiert wurde, wird der yum (oder dnf )-Dienstprogramm kann einen Import des Schlüssels initiieren. Der gpgkey=URI line gibt die Quelle des zu importierenden Schlüssels an. Diese Quelle kann ein beliebiger URI sein, einschließlich einer lokalen Datei oder eines Remote-Weblinks. Das yum oder dnf Das Dienstprogramm pausiert und fragt nach einer Bestätigung zum Importieren des Schlüssels, nachdem die Schlüssel-ID und der Fingerabdruck angezeigt wurden.

warning: /var/cache/dnf/epel-fafd94c310c51e1e/packages/zsh-syntax-highlighting-0.7.1-1.el8.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 2f86d6a1: NOKEY

Extra Packages for Enterprise Linux 8 - x86_64 1.6 MB/s | 1.6 kB 00:00    

Importing GPG key 0x2F86D6A1:

 Userid : "Fedora EPEL (8) <[email protected]>"

 Fingerprint: 94E2 79EB 8D8F 25B2 1810 ADF1 21EA 45AB 2F86 D6A1

 From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8

Is this ok [y/N]: y

Der Schlüssel wird zu RPM hinzugefügt, und dann wird die Überprüfung und Installation des Pakets fortgesetzt.

Bereiten Sie sich darauf vor, ein Paket zu signieren

Wenn Sie Ihre eigenen RPM-Paketdateien erstellen und verteilen, können Sie diese Pakete mit dem rpmsign signieren Dienstprogramm.

Der erste Schritt besteht darin, ein GPG-Schlüsselpaar zum Signieren zu erstellen. Stellen Sie sicher, dass Sie auch den öffentlichen Schlüssel exportieren und teilen. Für Pakete, die öffentlich verteilt werden, empfiehlt es sich, ein neues Schlüsselpaar und einen Schlüsselring an einem gemeinsam genutzten Speicherort zu verwenden. Verwenden Sie zusätzlich den --full-gen-key Option und wählen Sie dann die Erstellung eines Nur-Signatur-Schlüssels anstelle des Standardschlüssels, der sowohl einen Signatur- als auch einen Verschlüsselungsschlüssel erstellt.

$ gpg --keyring /shared/rpm/.gpg --no-default-keyring --full-gen-key 

Auch wenn nur eine Person den Schlüssel zum Signieren von Paketen verwendet, erstellen Sie ein separates Schlüsselpaar zum Signieren. Verwenden Sie denselben Schlüssel nicht für andere tägliche Aufgaben wie die persönliche E-Mail-Verschlüsselung.

Als nächstes müssen wir das rpm-sign installieren Paket und richten Sie ein rpmmacros ein Datei, die den zu verwendenden Schlüssel angibt. Das rpm-sign Paket enthält eine Manpage für rpmsign die den Vorgang beschreibt. Beachten Sie, dass der Paketname einen Bindestrich hat, der nicht Teil des Befehlsnamens ist.

$ sudo yum install rpm-sign
$ man rpmsign

RPM-Befehle erhalten ihre Konfiguration von mehreren rpmmacros Dateien. Es gibt eine Standarddatei mit vielen Beispielen unter /usr/lib/rpm/macros . Wenn mehrere Personen für das Signieren von Paketen mit demselben Schlüssel verantwortlich sind, legen Sie eine zentrale Konfigurationsdatei in /etc/rpm/macros ab Lage. Schließlich, für eine bestimmte Person, die die Pakete signiert, der ~/.rpmmacros des Benutzers Datei kann so konfiguriert werden, dass sie auf den richtigen GPG-Schlüssel verweist.

Der Mindesteintrag für die rpmmacros Datei soll den Namen des Schlüssels angeben. Sie können einen Namen oder die Schlüssel-ID verwenden. Erhalten Sie die Schlüssel-ID mit gpg --list-keys Befehl.

Tipp:Führen Sie das rpmsign aus Befehl, bevor Sie gpg_name festlegen Variable und die Nachricht zeigt das Format.

$ rpmsign --addsign my-custom-package.rpm 
You must set "%_gpg_name" in your macro file

Zusätzlich zum Schlüsselnamen, wenn sich der Schlüsselbund an einem anderen Ort als dem Standardbenutzer ~/.gnupg befindet verwenden Sie den gpg_path Variable, um den Speicherort festzulegen. Dieser Wert ist der gleiche wie bei --keyring Option, als der Schlüssel erstellt wurde.

Es sind zusätzliche Optionen verfügbar, wenn die GPG-Binär- oder Befehlssyntax etwas erfordert, das über die erwarteten Standardwerte hinausgeht.

Pakete signieren und veröffentlichen

Sie können nun das Paket oder die Pakete signieren. Gemäß dem rpmsign Manpage, die --addsign und --resign Befehle sind austauschbar. Beide ersetzen den Signaturteil einer RPM-Paketdatei durch aktuelle Informationen.

Der folgende Befehl ist ein Beispiel für die Verwendung von --addsign Flagge:

$ rpmsign --addsign myprod-2.x86_64.rpm myprod-libs-2.x86_64.rpm

Ältere Versionen von rpmbuild ein --sign enthalten Option, die das Paket während des Erstellungsprozesses signieren könnte, wenn die GPG-Schlüssel und rpmmacro Dateien wurden korrekt konfiguriert. Das --sign Die Option ist jetzt zugunsten des separaten Schritts der Verwendung von rpmsign veraltet . Dieser Ansatz fördert ein Erstellen, Testen, Signieren, Veröffentlichen Arbeitsablauf.

Stellen Sie abschließend die Pakete und den öffentlichen GPG-Schlüssel den Clients zur Verfügung. Eine Option besteht darin, das EPEL-Projekt nachzuahmen und eine RPM-Datei zu erstellen, die den öffentlichen GPG-Schlüssel und ein oder mehrere yum repo enthält Dateien, die auf den Speicherort der signierten Pakete verweisen. Für Organisationen, die Pakete auf einem Red Hat Satellite Server hosten, beginnen Sie damit, den öffentlichen GPG-Schlüssel hochzuladen und diesen Schlüssel dann dem Produkt oder Repository zuzuweisen, das die signierten Pakete enthält. Alle Pakete in einem Repository müssen mit demselben Schlüssel signiert werden. Dies ist ein häufiger Grund für Satellite-Administratoren, Pakete vor dem Hochladen zu resignieren.

Schluß

Jetzt, da Sie mehr über die Verwaltung von RPM-Paketen mit GPG wissen, können Sie besser verstehen, wie Sie mit rpm arbeiten , yum , und dnf .

Weitere Informationen finden Sie unter Securing RPM Signing Keys und in den Administration and Content Management-Handbüchern in der Red Hat Satellite-Dokumentation.

[ Möchten Sie mehr über Sicherheit erfahren? Sehen Sie sich die Checkliste für IT-Sicherheit und Compliance an. ]


Linux
  1. So aktivieren Sie Snap unter Linux Mint 20 und installieren Snap-Pakete

  2. So speichern Sie Linux-Befehle und verwenden sie bei Bedarf

  3. So überprüfen Sie die Linux-Paketversion vor der Installation

  4. So fragen Sie Dateien, Pakete und Repositories in Linux ab

  5. So verschlüsseln und entschlüsseln Sie eine Datei mit GnuPG unter Linux

So finden Sie doppelte Dateien in Linux und entfernen sie

So laden Sie Pakete mit APT herunter, ohne sie zu installieren

Wie generiert und verwendet man einen SSH-Schlüssel in einem Linux-System?

Grundlegende Linux-Verzeichnisberechtigungen und wie man sie überprüft

Grundtypen von Linux-Benutzern und wie man sie überprüft

So führen Sie .run- und .bin-Pakete im Linux-System aus