Hlavní navigace

Nástroj apt-key končí. Jak dál spravovat klíče balíčkovacího systému?

22. 6. 2021
Doba čtení: 3 minuty

Sdílet

 Autor: Depositphotos
Příští rok zmizí utilita apt-key z vývojových verzí distribucí Debian a Ubuntu. Jde o populární nástroj pro správu klíčů v balíčkovacím systému. Proč k této změně dochází a čím bude utilita nahrazena?

apt-key

Utilita apt-key slouží mnoho let ke správě klíčů, kterými tvůrci balíčků podepisují distribuovaný software. Tento mechanismus je velmi užitečný a dovoluje přenášet balíčky napříč různými zrcadly, aniž bychom riskovali jejich kompromitaci. Každý balíček je podepsaný samostatně, důvěřujeme danému veřejnému klíči a umíme tedy podpis ověřit.

Klíče tvůrců distribucí jsou součástí automaticky instalovaného balíčku debian-keyring a nemusíme je tedy nikde shánět. Pokud ovšem přidáváme do systému nový repozitář, musíme někde získat veřejné klíče a naimportovat je. Jistě jste někdy v návodu viděli podobný příkaz:

$ wget -qO - http://deb.example.com/archive.key | sudo apt-key add -

Vývojové verze distribucí Debian a Ubuntu však při použití tohoto příkazu informují uživatele, že zmíněná utilita končí a je čas přestat ji postupně používat.

Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).

Proč?

Pochopitelně vás teď zajímá, proč je tahle populární a užitečná utilita označována za zastaralou. Odpověď je jednoduchá: kvůli bezpečnosti. Přidáním klíče do jednotného úložiště v souboru /etc/apt/trusted.gpg  či adresáři /etc/apt/trusted.gpg.d/ jej totiž činíte pro APT bezvýhradně důvěryhodným. 

Klíče tedy mají univerzální platnost a mohou podepsat cokoliv. V běžném režimu neexistuje vazba mezi repozitáři a jejich klíči. Držitel soukromého klíče pak může ve svém repozitáři vystavit libovolný balíček a váš systém mu bude bezpodmínečně důvěřovat. Může tedy nahradit libovolný balíček v systému, protože k tomu od vás dostal oprávnění.

Aktuální manuálová stránka hovoří o tom, že apt-key bude naposled k dispozici v Debianu 11 a Ubuntu 22.04. Není zatím úplně jasné, co se stane příští rok. Podle popisu v manuálu to vypadá, že utilita z distribucí prostě zmizí. Může ale také nakonec zůstat jako volitelně doinstalovatelný doplněk kvůli zpětné kompatibilitě (jako třeba staré  net-tools).

Znovu a lépe

Doporučovaný způsob správy klíčů třetí strany je jejich ukládání mimo prostor v /etc/apt/. Takové klíče pak nebudou univerzálně důvěryhodné a musíme si jejich použití explicitně vyžádat parametrem signed-by, který si ukážeme dále.

Soubory v něm by měly mít nějaký rozumně popisný název a příponu .gpg  nebo .asc. Výše uvedený příklad pro přidání nového klíče by tedy měl být upraven do nové podoby:

$ sudo wget -qO /usr/share/keyrings/archive.gpg http://deb.example.com/archive.key

Pokud si chcete obsah souboru prohlédnout, použijte utilitu  gpg:

$ gpg --list-keys --keyring /usr/share/keyrings/archive.gpg

Poznámka: Soubory se liší jen formátem. Zatímco klasický .gpg je binární, varianta armored .asc je textová. Lze mezi nimi konvertovat pomocí utility gpg a parametrů --enarmor a --dearmor. Pokud si nejste jisti, kterou verzi nabízet a stahovat, pak vězte, že formát .gpg je obecně více podporován, zejména ve starších verzích systémů.

Použití klíčů

Popsaný postup vede k tomu, že jsou jednotlivé klíče rozděleny do samostatných souborů podle repozitářů. Nyní tedy můžeme přiřadit konkrétní klíče k určité cestě, ze které budeme stahovat balíčky.

Uděláme to v příslušném souboru v  /etc/apt/sources.list.d/, ve kterém definujeme cestu ke konkrétnímu repozitáři. K původnímu záznamu jednoduše přidáme parametr signed-by, ve kterém definujeme cestu k souboru s klíči. Výsledek bude vypadat nějak takto:

deb [signed-by=/usr/share/keyrings/archive.gpg] https://repository.example.com/debian/ stable main

Pokud tuto volbu u repozitáře neuvedeme, balíčkovací systém pro tento konkrétní repozitář použije všechny klíče dostupné v souboru /etc/apt/trusted.gpg a adresáři /etc/apt/trusted.gpg.d/. My tam ovšem už klíče z nového repozitáře nemáme, takže balíčky jsou podepsané nedůvěryhodnými klíči. Pokud ovšem použijeme výše uvedenou úpravu, budeme od daného repozitáře vyžadovat použití klíčů v konkrétním souboru a vše bude fungovat.

Odstranění starých klíčů

Pokud jste do systému přidali klíče výše uvedeným postupem, budete je chtít odstranit z původního místa, abyste je neměli v systému dvakrát. Pak by oddělení do samostatných souborů postrádalo smysl, protože by klíč byl i na původním místě a byl by stále důvěryhodný.

CS24 tip temata

Budete tedy nejprve muset vypsat známé klíče:

sudo apt-key list

Nejprve jsou vypsány klíče z původního úložiště v souboru, poté následuje obsah adresáře. Pokud se rozhodnete některý klíč odstranit, stačí si opsat posledních osm znaků jeho otisku (key ID) a poté jej nechat smazat.

sudo apt-key del 2980AECF

Odkazy

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.