GNU/Linux >> Znalost Linux >  >> Linux

Immutable Linux se Silverblue:Moje oblíbená superschopnost

Jsem nedávný, ale oddaný konvertor na Silverblue, který používám na svém hlavním domácím notebooku a který si dám do pracovního notebooku, až budu mít termín upgrade hardwaru během několika měsíců. Napsal jsem článek o Silverblue na Enable Sysadmin a přes víkend jsem na něj přesunul i notebook, který má jedno z mých dětí. Pokud jde o použitelnost, vzhled a dojem, Silverblue je v podstatě verzí Fedory. Je tu však jeden klíčový rozdíl, a to ten, že operační systém je připojen pouze pro čtení, což znamená, že je neměnný.

Co znamená „nezměnitelný“? To znamená, že to nelze změnit. Přesněji řečeno, v kontextu softwaru to obecně znamená, že něco nelze během běhu změnit.

Důležitá odbočka:Konstantní neměnnost

Když jsem psal tu poslední větu, uvědomil jsem si, že to může být trochu zavádějící. Mnoho programovacích jazyků má koncept „konstant“. Konstanta je proměnná (nebo množina nebo datová struktura), která není variabilní. Konstantě můžete přiřadit hodnotu a obecně očekávat, že se nezmění. Ale – a to závisí na jazyce, který používáte – se může stát, že konstanta není neměnný.

Zdá se, že toto tvrzení jde proti zdravému rozumu; i když, abych byl spravedlivý, fráze „programovací jazyk“ a „zdravý rozum“ se podle mých zkušeností ve stejné větě zřídka používají pozitivně. Ale to je právě způsob, jakým jsou některé jazyky navrženy. Sečteno a podtrženo:pokud máte proměnnou, kterou zamýšlíte být neměnnou, zkontrolujte syntaxi programovacího jazyka, který používáte, a v případě potřeby podnikněte konkrétní kroky potřebné k zachování této neměnnosti.

Neměnnost operačního systému

V případě Silverblue je to operační systém, který je neměnný. Aplikace instalujete do kontejnerů (více o tom později) pomocí Flatpak, spíše než do kořenového souborového systému. To znamená nejen to, že instalace aplikací je izolována od základního souborového systému, ale také to, že schopnost škodlivých aplikací ohrozit váš systém je výrazně snížena. Není to nemožné – obecně se snažíme vyhýbat slovu „nemožné“, když popisujeme útoky nebo zranitelnosti v zabezpečení – ale riziko je výrazně nižší.

Jak tedy aktualizujete svůj systém? Co uděláte, je vytvořit nový spouštěcí obraz, který obsahuje všechny potřebné aktualizované balíčky, a až budete připraveni, spustíte jej. Silverblue k tomu poskytuje jednoduché nástroje:je to pravděpodobně méně náročné než standardní způsob upgradu vašeho systému. Tento přístup také usnadňuje údržbu různých verzí operačního systému nebo instalací s různými sadami balíčků. Pokud potřebujete otestovat aplikaci v konkrétním prostředí, spustíte se do obrazu, který toto prostředí odráží, a provedete testování. Jiné prostředí? Další obrázek.

Více nás však zajímají bezpečnostní vlastnosti, které nám tato situace nabízí. Nejen, že je obtížné kompromitovat základní operační systém jako standardní uživatel (jako u mnoha bezpečnostních problémů, jakmile máte sudo nebo root přístup, situace se výrazně zhorší), ale vždy pracujete ve známém prostředí. Znalost je velmi žádoucí vlastností pro zabezpečení, protože můžete testovat, monitorovat a provádět forenzní analýzu ze známé konfigurace. Z hlediska bezpečnosti (nemluvě o dalších výhodách, které přináší), je neměnnost rozhodně výhodou operačního systému.

Neměnnost kontejneru

Toto není místo, kde bychom podrobně popisovali kontejnery (také známé jako „kontejnery Linux“ nebo, v dnešní době méně často nebo přesněji, „kontejnery Docker“), ale v zásadě jde o kolekce softwaru, které vytvoříte jako obrázky a poté spustíte zátěže na hostitelském serveru (někdy známé jako "pod"). Jednou ze skvělých věcí na kontejnerech je to, že se obecně rychle šíří (poskytují a spouštějí) z obrázku, a další je, že formát tohoto obrázku – formát balení – je dobře definovaný, takže je snadné vytvořit samotné obrázky.

Z našeho pohledu je však na kontejnerech skvělé, že je můžete používat neměnně. Ve skutečnosti je to způsob, jakým se obecně používají:používání proměnlivých kontejnerů je obecně považováno za anti-vzor. Standardní (a „správný“) způsob použití kontejnerů je sbalit každou komponentu aplikace a požadované závislosti do dobře definovaného (a doufejme, že malého) kontejneru a ten pak nasadit podle potřeby. Způsob, jakým jsou kontejnery navrženy, neznamená, že to nemůžete změnit jakýkoli software v běžícím kontejneru, ale způsob, jakým běží, vás od toho odrazuje; což je dobře, což byste rozhodně neměli.

Pamatujte, že neměnný software poskytuje lepší znalost a zlepšuje vaši odolnost vůči kompromisům za běhu. Místo toho, vzhledem k tomu, jak lehké kontejnery jsou, byste měli svou aplikaci navrhnout tak, abyste v případě potřeby mohli instanci kontejneru jednoduše zabít a nahradit ji instancí z aktualizovaného obrazu.

Tato úvaha nás přivádí ke dvěma důvodům, proč byste nikdy neměli spouštět kontejnery s oprávněním root. Zaprvé, legitimní uživatelé jsou v pokušení využít toto oprávnění k aktualizaci softwaru v běžícím kontejneru, což snižuje znalost a možná představuje neočekávané chování. Za druhé, existuje mnohem více příležitostí ke kompromisu, pokud může zákeřný činitel – lidský nebo automatizovaný – změnit základní software v kontejneru.

Dvojitá neměnnost s Silverblue

Výše jsem zmínil, že Silverblue spouští aplikace v kontejnerech. Tato skutečnost znamená, že při spouštění aplikací na systému Silverblue máte jako výchozí zajištěny dvě úrovně zabezpečení:neměnnost operačního systému a neměnnost kontejneru.

Jako ochranka schvaluji hloubkovou obranu a toto je klasický příklad této vlastnosti. Líbí se mi také, že mohu ovládat, co spouštím – a jaké verze – s mnohem větší lehkostí, než kdybych byl na standardním operačním systému.

Tento článek byl původně zveřejněn na blogu Alice, Eve and Bob – bezpečnostním blogu.


Linux
  1. Monitorujte svůj systém Linux ve svém terminálu pomocí procps-ng

  2. Pochopení systémových volání na Linuxu pomocí strace

  3. Mají distribuce Linuxu stále význam s kontejnery?

  1. Zlepšete výkon systému Linux pomocí noatime

  2. Zákulisí s linuxovými kontejnery

  3. Linux Shutdown Command (s příklady)

  1. Plánování systémových úloh pomocí Cronu na Linuxu

  2. Vyvažování bezpečnosti Linuxu a použitelnosti

  3. Jak na to:Programování v C s adresáři na Linuxu