GNU/Linux >> Znalost Linux >  >> Linux

RPM a GPG:Jak ověřit linuxové balíčky před jejich instalací

Velká a oblíbená úložiště RPM se obvykle replikují po celém světě. Projekty a společnosti poskytující balíčky využívají distribuční sítě obsahu (CDN) a zrcadlové weby, aby své balíčky zpřístupnily spotřebitelům. U mnoha projektů s otevřeným zdrojovým kódem to zahrnuje hostování dobrovolníky. Vlastníci balíčků mohou soubory balíčku podepsat a spotřebitelé mohou tyto podpisy ověřit a odhalit a vyhnout se jim.

Přestože GPG může podepsat jakýkoli soubor, manuální kontrola podpisů balíčků není pro správce systému škálovatelná. Formát RPM má oblast speciálně vyhrazenou pro uložení podpisu záhlaví a užitečného zatížení. rpm nástroj používá klíče GPG k podepisování balíčků a vlastní sbírku importovaných veřejných klíčů k ověření balíčků. YUM a DNF používají konfigurační soubory úložiště k poskytování ukazatelů na umístění veřejných klíčů GPG a pomáhají při importu klíčů, aby RPM mohlo balíčky ověřit.

Pro tento článek použiji klíče a balíčky od EPEL. Veřejný klíč je součástí balíčku RPM, který také konfiguruje yum repo . U některých projektů může být klíč dostupný také přímo ze zdrojového webu.

Nástroj rpm má vlastní správu klíčů

Od rpm nástroj má vlastní správu klíčů, není třeba importovat veřejné klíče GPG do vaší osobní GPG klíčenky. Ve skutečnosti nemůžete pouze ověřit soubor pomocí gpg příkazy, protože podpis nepochází z celého souboru .rpm. Místo toho je podpis spojen pouze s kritickými částmi balíčku.

Chcete-li použít rpm, spusťte následující příkaz pro ověření balíčku:

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

V tomto případě se zobrazí zpráva „PODPISY NEJSOU OK“, protože klíč ještě nebyl importován pro RPM. Výchozí chování rpm příkazy je ověřit podpis balíků během jakékoli instalace nebo ověřit interakce. Pokud to není možné, protože balíček není podepsaný nebo veřejný klíč není k dispozici, možná budete muset zadat --nogpgcheck možnost tento krok přeskočit.

Pokud máte přístup k veřejnému klíči GPG, můžete klíč importovat ručně pomocí následujícího příkazu:

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

Vzhledem k tomu, že metadata pro klíč jsou uložena v databázi RPM, můžete se dotazovat a mazat klíče stejně jako jakýkoli balíček.

K zobrazení seznamu klíčů použijte následující příkaz:

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

Pomocí tohoto příkazu získáte informace o klíči:

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

K odstranění klíče se používá následující příkaz:

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

Další možnosti pro správu klíčů jsou popsány v manuálové stránce, která je součástí rpmkey balíček.

YUM a DNF mohou přidávat klíče do databáze RPM

Ostatní správci balíčků správu klíčů ještě usnadňují. YUM a DNF používají konfigurační soubory v /etc/yum.repos.d k zadání adresy URL klíče GPG používaného k ověření balíčků v daném úložišti. Nástroje pak mohou importovat klíč, pokud ještě není k dispozici pro ověření.

V yum repo konfiguračního souboru, řádek gpgcheck=1 označuje, že kontrola GPG by měla být provedena pro všechny balíčky v tomto úložišti. Je to booleovská hodnota, kterou lze změnit v konfiguraci nebo dočasně přepsat na příkazovém řádku pomocí --nogpgcheck možnost.

Pokud veřejný klíč GPG ještě nebyl importován do RPM při zahájení instalace balíčku, pak yum (nebo dnf ) může spustit import klíče. gpgkey=URI řádek určuje zdroj klíče, který má být importován. Tímto zdrojem může být libovolný URI, včetně místního souboru nebo vzdáleného webového odkazu. yum nebo dnf po zobrazení ID klíče a otisku prstu se nástroj pozastaví a požádá o potvrzení importu klíče.

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

Klíč je přidán do RPM a poté pokračuje ověřování a instalace balíčku.

Připravte se na podpis balíčku

Pokud vytváříte a distribuujete své vlastní soubory RPM balíčků, můžete tyto balíčky podepsat pomocí rpmsign utility.

Prvním krokem je vytvoření páru klíčů GPG pro podepisování. Nezapomeňte také exportovat a sdílet veřejný klíč. U balíčků, které budou distribuovány veřejně, je dobré použít nový pár klíčů a svazek klíčů ve sdíleném umístění. Dále použijte --full-gen-key a poté zvolte vytvoření klíče pouze pro podepisování namísto výchozího, který vytvoří jak podpisový, tak šifrovací klíč.

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

I když klíč k podepisování balíčků používá pouze jedna osoba, vytvořte samostatný pár klíčů, který budete k podepisování používat. Nepoužívejte stejný klíč pro jiné každodenní úkoly, jako je šifrování osobních e-mailů.

Dále musíme nainstalovat rpm-sign balíček a nastavte rpmmacros soubor určující klíč, který se má použít. rpm-sign balíček obsahuje manuálovou stránku pro rpmsign který popisuje proces. Všimněte si, že název balíčku obsahuje pomlčku, která není součástí názvu příkazu.

$ sudo yum install rpm-sign
$ man rpmsign

Příkazy RPM získávají konfiguraci z několika rpmmacros soubory. Na adrese /usr/lib/rpm/macros je výchozí soubor se spoustou vzorků . Pokud je za podepisování balíčků pomocí stejného klíče odpovědných více lidí, umístěte centrální konfigurační soubor do /etc/rpm/macros umístění. Nakonec, pro konkrétní osobu podepisující balíčky, ~/.rpmmacros uživatele soubor lze nakonfigurovat tak, aby ukazoval na správný klíč GPG.

Minimální položka pro rpmmacros soubor je specifikovat název klíče. Můžete použít jméno nebo ID klíče. Získejte ID klíče pomocí gpg --list-keys příkaz.

Tip:Spusťte rpmsign před nastavením gpg_name proměnná a ve zprávě se zobrazí formát.

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

Kromě názvu klíče, pokud je svazek klíčů kdekoli jinde než výchozí uživatel ~/.gnupg adresář, použijte gpg_path proměnnou pro nastavení umístění. Tato hodnota bude stejná jako u --keyring možnost při vytvoření klíče.

Pokud binární GPG nebo syntaxe příkazů vyžaduje něco, co přesahuje očekávané výchozí hodnoty, jsou k dispozici další možnosti.

Podepište a publikujte balíčky

Nyní jste připraveni podepsat balíček nebo balíčky. Podle rpmsign manuálová stránka, --addsign a --resign příkazy jsou zaměnitelné. Oba nahradí podpisovou část souboru balíčku RPM aktuálními informacemi.

Následující příkaz je příkladem použití --addsign příznak:

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

Starší verze rpmbuild obsahoval --sign možnost, která by mohla podepsat balíček během procesu sestavování, pokud jsou klíče GPG a rpmmacro soubory byly správně nakonfigurovány. --sign volba je nyní zastaralá ve prospěch samostatného kroku použití rpmsign . Tento přístup podporuje sestavení, testování, podepisování, publikování pracovní postup.

Nakonec zpřístupněte balíčky a veřejný klíč GPG klientům. Jednou z možností je napodobit projekt EPEL a vytvořit soubor RPM, který bude obsahovat veřejný klíč GPG a jedno nebo více yum repo soubory ukazující na umístění podepsaných balíčků. U organizací hostujících balíčky na Red Hat Satellite Server začněte nahráním veřejného klíče GPG a poté přiřazením tohoto klíče produktu nebo úložišti, které obsahuje podepsané balíčky. Všechny balíčky v úložišti musí být podepsány stejným klíčem. Toto je běžný důvod, proč správci satelitu rezignují na balíčky před nahráním.

Zabalit

Nyní, když víte více o správě RPM balíčků pomocí GPG, můžete lépe pochopit, jak pracovat s rpm , yum a dnf .

Další informace naleznete v části Zabezpečení podpisových klíčů RPM a v příručkách Správa a Správa obsahu v dokumentaci Red Hat Satellite.

[ Chcete se dozvědět více o zabezpečení? Podívejte se na kontrolní seznam zabezpečení IT a dodržování předpisů. ]


Linux
  1. Jak povolit Snap na Linux Mint 20 a nainstalovat balíčky Snap

  2. Jak zkontrolovat verzi balíčku Linux před jeho instalací

  3. Jak se dotazovat na soubory, balíčky a úložiště v Linuxu

  1. Jak sestavit rpm balíčky

  2. Jak uložit příkazy Linuxu a používat je na vyžádání

  3. Jak zkontrolovat dodavatele nainstalovaných RPM balíčků v Linuxu

  1. Pochopení cest k souborům a jejich použití v Linuxu

  2. Jak nainstalovat RPM soubory (balíčky) na CentOS Linux

  3. Jak zašifrovat a dešifrovat soubor pomocí GnuPG v Linuxu