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ů. ]