GNU/Linux >> Znalost Linux >  >> Ubuntu

Linux Kernel Live Patching na Ubuntu 20.04 LTS

Co se stalo s příslibem živého záplatování linuxových jader? Tento článek se zabývá jeho historií, jeho problémy a nejlevnějšími a nejjednoduššími způsoby, jak toho dosáhnout na Ubuntu Focal Fossa (20,04 LTS).

Úvod

„Live patching“ je akt aktualizace programu bez zastavení systému, na kterém běží. Nejprve se to dělalo pájkou a drátem, později nůžkami a lepidlem – není to nic nového. Dnes je živé záplatování linuxových jader mnohem méně lepkavé.

V tomto článku vysvětlím, co to je, jak to funguje (netechnickým způsobem) a odkud pochází. Zakončím ukázkou, jak automatizovat aktualizace zabezpečení jádra na Ubuntu 20.04 LTS (Focal Fossa) pomocí Canonical Livepatch Service a KernelCare.

Co je to Live Patching?

V softwaru je záplata malý kousek opravného kódu. Patching je oprava nebo vylepšení malé části programu bez narušení fungování nebo specifikací celku. Živé (nebo horké) záplatování znamená změnu běžícího programu bez jeho zastavení.

Představte si, že jste uvězněni v jedoucím autě a potřebujete opravit žárovku. Není to tak špatné, dalo by se říct, pokud je to uvnitř, trochu složitější venku. Nyní si představte opravu vačkového hřídele, výměnu pístnice nebo utěsnění prasklého bloku.

To je podobné tomu, o co se živé patchování pokouší na linuxovém jádře. Snaží se opravit části něčeho v pohybu, aniž by to změnilo nebo rozbilo, ale co je nejdůležitější, aniž by to zastavilo. Jádro je jediná část linuxového systému, která potřebuje vypnout a restartovat, aby se mohla použít aktualizace. Když prodejce vydá aktualizaci jádra, správci systému nemají jinou možnost, než naplánovat restart serveru.

Co je na restartování tak špatného?

Restartování znamená pro různé lidi různé věci v závislosti na tom, zda jsou v systému nebo ho mají na starosti. Mnoho systémových administrátorů považuje pravidelné restartování za známku dobrého zdraví, jako je běžné střevo. Stejně jako mnozí to nedělají, vzdorují jakémukoli narušení aplikací, do kterých investují, a vydělávají peníze, například aplikací, jako jsou tyto.

  • webové servery s vytíženými, aktivními uživateli v mnoha časových pásmech
  • online hry pro více hráčů
  • platba za zhlédnutí živého nebo nahraného streamování videa
  • těžba kryptoměn
  • vzdálené nepřetržité sledování a nahrávání videa

Pro mě je nejspolehlivějším důvodem obava, že systém poté nebude stejný a že se nespustí kritické (výdělečné) aplikace. Myslím, že je to právě toto, a ne vize běsnících uživatelů, co nutí mnoho systémových administrátorů odkládat aktualizace jádra, dokonce i ty nejdůležitější, bezpečnostní aktualizace.

(Tady mluvím pouze o aktualizacích . Upgrade jádra jsou něco jiného. Upgrady jsou zcela nová jádra. Záplaty jsou aktualizace částí jádra, obvykle opravy chyb, které nemohou čekat, protože mají bezpečnostní nebo jiné rozsáhlé důsledky.)

Když prodejce Linuxu vydá opravu jádra, je to obvykle kvůli vyřešení problému se zabezpečením. Související upozornění bude říkat něco jako:„Nainstalujte si co nejdříve.“ Na stejné stránce bude verze:„Pokud to neuděláte, budete zranitelní vůči exploitům, které jsme opravili a které nyní každý zná. o. Přeji hezký den.‘

Takové bezcitně psané poznámky zdůrazňují dilema, které stojí za nástupem živého záplatování:měli byste udržovat uživatele ‚bolesti, ale v bezpečí‘, nebo ‚složené, ale vystavené‘? Živé patchování slibuje, že bude rájem mezi Rockem a Hard Place. Živé opravy slibují, že pomohou udržet vaše servery v bezpečí a na nejnovějších úrovních zabezpečení, aniž by to ovlivnilo prostoje a služby.

Rajský ostrov? V čem je háček?

Zatímco zdrojový kód pro živý záplatovací software je volně dostupný, záplaty nejsou. Sladký příslib živého záplatování je kyselý, když musíte psát své vlastní záplaty. Váš krevní tlak se sníží s menším množstvím administrace, ale při zpracování složitého kódu jádra opět stoupá.

Ačkoli je technicky možné vytvořit si vlastní patche, vyžaduje to spoustu práce a mnoho specializovaných znalostí. A je to riskantní – špatně napsaný patch může způsobit zhroucení systému. (Tato zpráva na stránce kpatch github zní jako něco z návodu k obsluze parního kladiva:‚VAROVÁNÍ:Používejte opatrně! Může dojít k selhání jádra, samovolnému restartování a ztrátě dat!‘)

Prodejci Linuxu vědí, jak těžké je správně provádět živé opravy, a vyvinuli nabídky ziskových služeb, aby této skutečnosti využili. Každá hlavní linuxová distribuce má přístup k živému záplatování, který je zdarma k instalaci, ale není k použití. Záplaty, bez kterých je celý nápad k ničemu, se musí zaplatit.

Přesto jsou výhody živého záplatování jádra tak přesvědčivé, že tyto obchodní modely prosperují v převážně bezplatném a open source softwarovém ekosystému Linuxu. Pro mě je to známka toho, že tato technologie má význam a důležitou roli v budoucnosti systémů založených na Linuxu.

Jak funguje živé opravování

Jak byste opravil brzdy, stále uvězněni v tom imaginárním autě, teď hřmící z kopce směrem k imaginární hromadě (doufejme) prázdných kartonových krabic? Postavit dočasný pojízdný zvedák, na kterém budete pracovat? Nakloňte se na třech kolech, počkejte, až se jedno zastaví, sundejte jej a opakujte, dokud nebude hotovo?

Programátoři linuxového jádra museli použít stejný druh myšlení při řešení problému živého záplatování. Cítím, že v jejich řešeních funguje stejný druh koncepčního aparátu (zavěšování, záměna, použití dočasných nosných konstrukcí). Moje hrubá analogie s výměnou brzd výše ilustruje dvě protichůdné strategie implementované živými prodejci záplatovacího softwaru.

  • Zastavte vše a proveďte všechny opravy najednou.
  • Počkejte, až se jednotlivé součásti zastaví, a poté je vyměňte. Opakujte, dokud nebude hotovo.

Toto rozdělení vysvětluje, proč každý dodavatel přišel s různými přístupy k řešení stejného problému. Co však sdílejí, je použití rámce modulů jádra Linuxu, které lze načíst. Software, který organizuje a implementuje proces záplatování, je modul jádra Linuxu. To znamená, že je snadné přidat funkci záplat do kompatibilních jader a stejně snadno ji odstranit.

Než se necháme unést, musím zmínit upozornění.

Rozsah a rozsah softwarových oprav, které můžete použít na běžící systémy, je omezen. Za prvé, přizpůsobená, optimalizovaná nebo nestandardní jádra znesnadňují nebo znemožňují záplatování jádra. Za druhé, živé patchování nemůže přemapovat data nebo paměť napříč patchi; může změnit pouze definice funkcí.

Tyto nedostatky nezabránily společnosti Ksplice stát se první na poli živého patchování Linuxu. Funguje tak, že porovnává starý a nový zdrojový kód, ze kterého vytvoří binární patch. Zmrazí systém, zjistí, které funkce je třeba změnit, a upraví jejich záhlaví. Při volání se funkce přesměrují na nové verze. Pokud je patch dobře napsaný, kontrola pokračuje, jako by se nic nestalo.

Při seismické události (popsané v další části) se na scénu připojili Kpatch z Red Hat a Kgraft ze SUSE se svými vlastními interpretacemi hlavních problémů živého patchování.

Kpatch porovnává starý a nový zdrojový kód a vytváří záplaty. Stejně jako Ksplice funguje tak, že přesměrovává volání funkcí pomocí rámce ftrace jádra a přepíná změněné funkce najednou.

Kgraft funguje jinak. Využívá dvě souběžné sady funkcí, starou a novou, přičemž modul orchestrátoru rozhoduje, kdy přesměrovat funkce v závislosti na tom, kam dosáhlo provedení. Není možné předvídat, kde se ve funkci v kteroukoli chvíli nachází programový ukazatel, takže přechod je postupný, nikoli okamžitý.

Původ živého opravování

Jak se nápad opravit software, aniž by si toho někdo všiml, dostal do neustále se měnícího monolitu lidského úsilí, linuxového jádra?

Ačkoli tento koncept sahá až do nejranějších dnů programovatelného počítání, pro naše účely začíná cesta v roce 2001, kdy Hewlett Packard patentuje způsob dynamické aktualizace softwaru pro kompenzaci chybějící hardwarové funkčnosti. O rok později Microsoft představuje nápad na aktualizaci systému (Windows) bez přerušení.

Ani jeden nezmiňuje Linux, ale aplikace jsou široké a každá popisuje, jak napravit softwarové nebo hardwarové problémy v počítači, aniž by došlo k narušení procesů na něm běžících. (Pokud vám tato myšlenka nepřijde zvláště užitečná, možná vás znovu přimějí k zamyšlení dvě slova:Meltdown a Spectre.)

V roce 2008 Jeff Arnold oznamuje Ksplice, software pro opravu linuxových jader bez jejich restartování. Je to první svého druhu pro Linux. A musíme za to poděkovat neznámému, nejmenovanému hackerovi.

Chcete-li zjistit proč, dovolte mi, abych vás vrátil do Jeffových studentských dnů na MIT. Je členem dobrovolnické skupiny spravující servery pro studentskou komunitu. Jeden ze serverů potřebuje bezpečnostní záplatu. Nechce své uživatele odkopnout, a tak to nechá pár dní uklouznout.

Za těch pár dní, než to stihne aktualizovat, někdo hackne systém. Jediným způsobem, jak jej vrátit online, je jeho úplná přeinstalace od začátku. Předpokládejme, že si toho všimnou jeho kolegové. I za předpokladu, že netrpí, představuji si, že Jeff stráví zbytek semestru pomalým opékáním oharků studentského posměchu.

Pokud je příběh apokryfní, pak to považujte za bajku, připomínku toho, že živé záplatování je dítětem bezpečnosti, nikoli pohodlí. A jako všechny dobré bajky má šťastný konec.

Tento incident inspiruje Jeffa ke studiu, jak bez prodlení a bez přerušení instalovat záplaty linuxového jádra. Tento problém učinil tématem své diplomové práce z roku 2006. Řešení přichází v podobě softwaru s názvem Ksplice. S kolegou píše článek, který to popisuje, s názvem ‚Ksplice:Automatic Rebootless Kernel Updates.‘

Jeff a tři jeho kolegové ze studentů založí společnost a v květnu 2009 vyhrají cenu MIT $100K Entrepreneurship Competition. V roce 2010 spustili komerční službu. O další rok později, v karmickém uzavření, o kterém sní každý vývojář softwaru, Oracle koupí Ksplice Inc.

Karma je daleko od myslí uživatelů a zákazníků tohoto úžasně užitečného nového nástroje. Pro ně je to začátek dlouhé a vyčerpávající řady nočních můr. Oracle zcela asimiluje Ksplice, takže tento nástroj je zdarma pouze pro zákazníky jejich vlastních verzí Linuxu financovaných podporou.

Tento seismický šok podněcuje společnosti SUSE a Red Hat k vývoji vlastních řešení, aniž by ostatním sdělil jejich záměry nebo architekturu řešení. Pracují izolovaně od roku 2011 do roku 2014 a během několika týdnů uvolňují své vlastní odlišné přístupy. A v květnu 2014 CloudLinux, producent linuxové varianty dobře známé ve sféře webhostingu, uvolňuje komerční záplatovací službu linuxového jádra pod názvem KernelCare.

Ve stejnou dobu se do hlavní řady jádra propracovává živé záplatovací ABI, které spatřilo světlo světa ve verzi 4.0 pod názvem Livepatch. V říjnu 2016 jej Canonical, tvůrci Ubuntu, použili jako základ pro komerční služby pod bezostyšně přivlastněným názvem „Canonical Livepatch Service“. Společnost Canonical ji vydá nejprve pro 16.04 LTS, poté 14.04 LTS, přičemž obě vyžadují nastavení na příkazovém řádku. V 18.04 LTS se stal viditelnějším, snáze se používá a lépe integroval do prostředí Ubuntu a nyní je k dispozici pro 20,04 LTS.

Jak na to:Automatické aktualizace zabezpečení jádra na Ubuntu 20.04 LTS

Nyní je čas to vidět v akci. Existují dvě živá opravná řešení pro Ubuntu, která jsou popsána v následujících dvou částech.

Instalace služby Canonical Livepatch Service (CLS)

CLS je zdarma pro nekomerční fyzické osoby, a to až pro tři stroje. Vyžaduje registraci, ale můžete použít účet Ubuntu One, pokud jej máte. Pokud jej chcete nainstalovat na více než tři počítače, budete si muset zakoupit smlouvu o podpoře podnikového stylu.

Než začnete

  • Ujistěte se, že je váš systém aktuální a zálohovaný.
  • Zaregistrujte si účet Livepatch nebo Ubuntu One.
  • Pro server 20.04 LTS získejte klíč a poznamenejte si ho. (V edici Desktop to není potřeba.)

Instalace Livepatch na Ubuntu 20.04 LTS Desktop

Ubuntu 20.04 LTS Desktop má nastavení GUI pro aktivaci CLS. Můžete to udělat buď během instalace po instalaci, nebo později, když otevřete Software &Updates a přejdete na kartu Livepatch.

Na nové instalaci Ubuntu

Po prvním restartu nové instalace dávejte pozor na druhou obrazovku dialogového okna „Co je nového v Ubuntu“. To vám umožní nastavit Livepatch.

  1. Klikněte na „Nastavit Livepatch…“
  2. Na obrazovce ‚Ubuntu Single Sign-On Account‘ se přihlaste pomocí svého účtu Livepatch nebo Ubuntu One.
  3. Pokud používáte textové instalační GUI, v části „Featured Server Snaps“ vyberte canonical-livepatch.
Na stávající instalaci Ubuntu
  1. Otevřete ‚Software &Updates‘ a přejděte na kartu ‚Livepatch‘.
  2. Přihlaste se.
  3. Po přihlášení klikněte na Pokračovat, když se zobrazí vyskakovací okno s potvrzením, že jste přihlášeni.
  4. To je vše. Livepatch je nastaven na vaší ploše Ubuntu 20.04.


Chyby v Ubuntu 20.04 s Livepatch

Při povolení Livepatch na Ubuntu 20.04 Focal Fossa se můžete setkat s následující chybou:

Failed to enable Livepatch: cannot enable machine: this machine ID is already enabled with a different key or is non-unique. Either "sudo canonical-livepatch disable" on the other machine, or regenerate a unique /etc/machine-id on this machine with "sudo rm /etc/machine-id /var/lib/dbus/machine-id && sudo systemd-machine-id-setup" server response: Conflicting machine-id

Chcete-li chybu opravit, zadejte do terminálu následující příkazy:

cp /etc/machine-id /etc/machine-id.original 
cp /var/lib/dbus/machine-id /var/lib/dbus/machine-id.original
nano /etc/machine-id (to remove the existing value)
systemd-machine-id-setup
> Initializing machine ID from D-Bus machine ID.
cat /etc/machine-id

Instalace Livepatch na Ubuntu 20.04 LTS Server

Toto je přístup z příkazového řádku pro standardní verze serveru bez nainstalovaného systému oken. Funguje také na verzích 16.04 LTS, 14.04 LTS a 18.04 LTS.

Otevřete terminál a zadejte tyto dva příkazy:

sudo snap install canonical-livepatch
sudo canonical-livepatch enable <your key>
Tipy
  • Druhý příkaz vrátí strojový token. Neslouží žádnému účelu a není třeba to zaznamenávat.
  • Mějte přehled o strojích, které registrujete. Pokud ztratíte přehled nebo se zbavíte stroje nebo virtuálního počítače před zrušením registrace, fakticky zahazujete jednu ze svých tří bezplatných licencí. (Tady je nápověda.)
  • Chcete-li zrušit registraci serveru, použijte tento příkaz:
sudo canonical-livepatch disable <your key>
  • Chcete-li zkontrolovat stav služby, použijte tento příkaz:
sudo canonical-livepatch status --verbose

Instalace KernelCare

KernelCare používá nastavení z příkazového řádku; neexistuje GUI. Podporuje širší škálu operačních systémů, včetně CentOS, RHEL, Oracle Linux, Debian, Ubuntu a dalších. Podporuje také starší řadu jádra 2.6.32.

Na rozdíl od CLS je plně automatizovaný a každé čtyři hodiny kontroluje vydání oprav a instaluje je bez dohledu, pokud jsou k dispozici. Pokud potřebujete přepsat tuto schopnost nebo spojit servery se záplatami s pevným datem, existuje nástroj příkazového řádku (kcarectl), který vám toto a další věci umožní.

KernelCare je zdarma pro neziskové organizace, nebo je k dispozici bezplatná 30denní zkušební verze pro nás ostatní. (Pokud jste uživatelem Ksplice, možná budete chtít vyzkoušet dvoukrokový skript migrace Ksplice-to-KernelCare.)

Než začnete

  • Ujistěte se, že je váš systém aktuální a zálohovaný.
  • Zde získáte bezplatný zkušební klíč.

Instalace KernelCare na Ubuntu 20.04 LTS Desktop and Server

Otevřete terminál a zadejte tyto dva příkazy:

sudo wget -qq -O - https://repo.cloudlinux.com/kernelcare/kernelcare_install.sh | bash
sudo /usr/bin/kcarectl --register KEY

Tyto příkazy fungují také ve verzích 16.04 LTS, 14.04 LTS a 18.04 LTS.

Tipy

  • Chcete-li zrušit registraci serveru, použijte tento příkaz:
sudo kcarectl --unregister
  • Chcete-li zkontrolovat stav služby, použijte tento příkaz:
sudo kcarectl --info

Závěr

Živé záplatování na Linuxu bylo příliš užitečné na to, aby zůstalo dlouho zdarma.

S vydáním Ubuntu 20.04 LTS je snazší využívat výhody živého bezpečnostního záplatování linuxových jader a je zdarma až pro tři hostitele. Poté budou účtovány roční poplatky za server.

Pokud používáte mnoho variant Linuxu, ale nechcete se učit různé produkty nebo předplatit různé smlouvy o podpoře, podívejte se na KernelCare. Při ročním předplatném je to asi pětkrát levnější a nabízejí flexibilní měsíční předplatné.


Ubuntu
  1. Jak nainstalovat Linux Kernel 5.10 LTS v Ubuntu / Linux Mint

  2. Vydáno Linuxové jádro 5.13! Jak nainstalovat v Ubuntu 21.04

  3. Jak nainstalovat Linux Kernel 4.3 na Ubuntu &LinuxMint

  1. Jak aktualizovat jádro Linuxu v Ubuntu

  2. Nainstalujte Chromium na Ubuntu 18.04 LTS a Linux Mint

  3. Historie linuxového jádra Live Patching

  1. Jak nainstalovat Linux Kernel 4.10.1 v Ubuntu 16.04

  2. Jak nainstalovat Linuxové jádro 5.15 na Ubuntu 20.04

  3. Jak nainstalovat nejnovější Linux Kernel 5.15 na Ubuntu 20.04