Wie kann man erzwingen, dass RPM und YUM fehlschlagen, wenn eine GPG-Signatur fehlt oder nicht anderweitig überprüft werden kann?

7

Wie kann ich erzwingen rpmund yumfehlschlagen, wenn eine GPG-Signatur in einem Paket fehlt oder auf andere Weise aufgrund eines fehlenden Schlüssels nicht überprüft werden kann? Nehmen Sie für das folgende Beispiel an, dass die Drehzahl signiert wurde, der Schlüssel jedoch nicht installiert wurde.

Bei RPM wird eine Warnung angezeigt, die jedoch fehlschlagen soll, sodass ich gezwungen bin, den Signaturschlüssel manuell zu installieren.

# rpm -q gpg-pubkey --qf '%{name}-%{version}-%{release} --> %{summary}\n'
gpg-pubkey-c105b9de-4e0fd3a3 --> gpg(CentOS-6 Key (CentOS 6 Official Signing Key) <[email protected]>)

# rpm -ivh http://yum.example.com/company-release-el-6.noarch.rpm
Retrieving http://yum.example.com/company-release-el-6.noarch.rpm
warning: /var/tmp/rpm-tmp.3VmFk2: Header V4 RSA/SHA1 Signature, key ID 3bd6ec30: NOKEY
Preparing...                ########################################### [100%]
    1:company-release     ########################################### [100%]

Bei yum werden keine Warnungen angezeigt, die darauf hinweisen, dass der Signaturschlüssel nicht installiert ist.

# yum install -vy http://yum.example.com/company-release-el-6.noarch.rpm

Gibt es zusätzliche Flags, die ich an diese Befehle übergeben kann, oder eine Konfigurationseinstellung, die ich ändern kann, um das Verhalten zu ändern? Oder muss ich das RPM herunterladen und rpm --checksigvor der Installation ausführen ?

AJ
quelle

Antworten:

4

Der wichtigste Punkt zur GPG-Prüfung für Pakete ist, dass die GPG-Signatur in das Paket eingebettet ist und die GPG-Schlüssel in der RPM-Datenbank gespeichert sind. Es gibt keine sichere API, um zu fragen, mit welchem ​​Schlüssel Paket X signiert ist. Sie können nur fragen, ob Paket X mit einem Schlüssel in der RPM-Datenbank signiert ist und ob der Schlüssel Y in der RPM-Datenbank vorhanden ist. Beachten Sie auch, dass dies bedeutet, dass ein Paket nur mit einem Schlüssel signiert werden kann und dass das Ändern der Signatur die Pakete ändert.

Yum führt eine Reihe von Schritten aus, wenn ein Paket aus einem Repository heruntergeladen wird, das mit "gpgcheck = 1" (Standardeinstellung) konfiguriert ist.

  1. Nachdem das erste Paket aus einem Repository heruntergeladen wurde, wird ein einfacher Aufruf "Wird dieses Paket mit einem bekannten gpgkey signiert" ausgeführt. Wenn ja, wird nichts getan. Wenn dies nicht der Fall ist, wird dem Benutzer eine Warnung angezeigt. Dies ist rein informativ.

  2. Bevor die Transaktion beginnt, prüft yum, ob das Paket mit einem bekannten gpgkey signiert ist (einer, der bereits in der rpmdb installiert ist), ob das Paket gültig ist und keine weiteren Schritte ausgeführt werden. Wenn nicht, geht es weiter zu # 3.

  3. Yum lädt alle Dateien herunter, die in den "gpgkey" -Daten für das Repository angegeben sind, aus dem das Paket stammt. Yum analysiert das und ignoriert alle Schlüssel, die bereits in der rpmdb vorhanden sind. Wenn keine neuen Schlüssel vorhanden sind, schlägt yum fehl.

  4. Wenn für das Repository ein "gpgcakey" angegeben ist, lädt yum alle in den "gpgcakey" -Daten angegebenen Dateien herunter. Yum analysiert das und ignoriert alle Schlüssel, die bereits in diesem gpg-Schlüsselring des Repositorys vorhanden sind. Wenn nach dem Parsen der Datei keine gpgcakeys installiert sind, schlägt yum fehl. Wenn es neue gpgcakeys gibt, werden diese bereits als CA-Schlüssel für ein anderes Repo importiert. Sie werden automatisch importiert. Wenn dies das erste Mal ist, dass wir diesen CA-Schlüssel gesehen haben, wird der Benutzer gefragt, ob er den Schlüssel installieren möchte (es sei denn, -y ist angegeben). Wenn er zu einem Schlüssel Nein sagt , schlägt yum fehl (obwohl alle importierten Schlüssel im Repo-GPG-Schlüsselring verbleiben).

  5. Wenn es mindestens eine gültige "gpgcakey" gibt, wird yum versuchen, eine "gpgkey" .asc-Datei herunterzuladen. Wenn das nicht existiert, fährt yum mit Schritt 6 fort, als ob es kein gpgcakey gäbe. Wenn es existiert, wird der "gpgkey" gegen den "gpgcakey" getestet und wenn er bestanden wird, wird er der rpmdb hinzugefügt. Wenn dies fehlschlägt, schlägt yum fehl (obwohl alle importierten Schlüssel in der rpmdb bleiben).

  6. Wenn es neue gpgkeys gibt, wird der Benutzer gefragt, ob er jeden Schlüssel installieren möchte (es sei denn, -y ist angegeben). Wenn er zu einem Schlüssel nein sagt , schlägt yum fehl.

  7. Nach der Installation neuer Schlüssel überprüft yum erneut die Paketsignatur anhand der gpgkeys in der rpmdb. Wenn dies fehlschlägt, schlägt yum fehl.

ValeriRangelov
quelle
2

Setzen Sie localpkg_gpgcheck=1in /etc/yum.conf und sicherzustellen , dass Sie immer yum RPMs zu installieren.

Wenn Sie eine Drehzahl im lokalen Dateisystem haben, tun Sie dies einfach

yum install <rpm-on-local-filesys>

Stellen Sie sicher, dass Sie diese auch in allen Repos in /etc/yum.repos.d festlegen

gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/SOME-APPROVED-GPG-KEY

Wie Sie bereits erwähnt haben, ist das Beste, was Sie aus der Installation über RPM herausholen können, eine Warnung, und es gibt keine Möglichkeit, sie so zu konfigurieren, dass die Installation auf einem nicht vorhandenen GPG-Schlüssel abgelehnt wird.

philbert
quelle