Zóny alebo virtualizácia v Solaris

14. 2. 2008
Doba čtení: 7 minut

Sdílet

Solaris zóny poskytujú prostriedky na vytváranie jedného alebo viacerých virtuálnych prostredí nejednej inštancii operačného systému, pričom izolujú aplikácie od detailov súvisiacich z hostiteľským operačným systémom. Aplikácie teda nemôžu vidieť, monitorovať ani nijak ovplyvňovať beh iných zón.

Zóny poskytujú nasledovné vlastnosti:

  • Bezpečnosť
  • Izolácia
  • Virtualizácia
  • Granularita
  • Transparentnosť

Bezpečnosť

Sieťové služby uzavreté v zóne obmedzujú dopady na celý systém, ku ktorým by došlo v prípade napadnutia systému zneužitím zraniteľností v daných službách. Útočník, ktorý zneužije zraniteľnosť v danej službe, môže teda spôsobiť len obmedzené škody. Akcie, ktoré je možné vykonávať v rámci zóny, sú obmedzené na podskupinu tých, ktoré je možné vykonávať v normálnom systéme. Napríklad nie je dovolené nahrávať vlastné moduly jadra, pristupovať k pamäti jadra, prípadne vytvárať vlastné zariadenia vo vnútri zóny.

Izolácia

Aplikácie požadujúce exkluzívny prístup ku spoločným zdrojom, ako napríklad špecifickým užívateľským menám alebo sieťovým portom, môžu s použitím zón bežať na spoločnom hardvéri. Každá zóna má svoj vlastný menný priestor úplne separovaný od ostatných zón. Užívatelia zóny nedokážu monitorovať iné zóny, napríklad nedokážu sledovať sieťovú prevádzku inej zóny aj keď prechádza cez to isté fyzické sieťové rozhranie ako sieťová prevádzka danej zóny. Rovnako nedokážu sledovať procesy v rámci inej zóny.

Virtualizácia

Zóny vytvárajúce virtuálne prostredie pre aplikácie vyrovnávajú rozdiely medzi hardvérovými konfiguráciami serverov a teda aplikácia, ktorá v takejto zóne beží, nevníma pri výmene hardvéru žiadny špeciálny (nie výkonový a kapacitný) rozdiel. Tento fakt uľahčuje distribúciu aplikácií na rôzne fyzické servery, rovnako aj premiestňovanie aplikácií medzi nimi.

Granularita

Keďže zóny sú implementované na úrovni softvéru, ich granularita nie je nijak limitovaná obmedzeniami na úrovni hardvéru. Umožňujú teda aj tzv. sub-CPU granularitu. Nevyžadujú vyhradené výpočtové zdroje, I/O zariadenia ako napríklad sieťové adaptéry alebo pevné disky, ale ani operačnú pamäť. Následkom spomenutých faktov teda je, že aj základný jednoprocesorový počítač môže byť hostiteľským strojom pre množstvo zón.

Transparentnosť

Prostredie prezentované aplikáciám v rámci zóny je skoro totožné s štandardným prostredím OS Solaris. Na bez aplikácií v rámci zóny nie sú potrebné žiadne špeciálne API. Aplikácie nemusia byť na beh v zóne žiadnym spôsobom portované. Existujú ale niektoré bezpečnostné obmedzenia, ktoré ale ovplyvnia hlavne aplikácie, ktoré vykonávajú privilegované operácie alebo pristupujú priamo k fyzickým zariadeniam.

Základné informácie o zónach

Globálna zóna zahrňuje celý systém a je porovnateľná s bežnou inštanciou OS Solaris. Má prístup k fyzickým zariadeniam a môže vidieť a kontrolovať všetky procesy. Administrátor globálnej zóny môže kontrolovať systém ako celok. Globálna zóna existuje vždy, aj keď nie sú nastavené žiadne iné zóny. Vo vnútri globálnej zóny sa nachádzajú lokálne zóny. Tieto sú izolované od fyzického hardvéru vrstvou virtuálnej platformy (virtual platform layer). Táto vrstva poskytuje zóne virtuálne sieťové rozhranie, jeden alebo viac súborových systémov a virtuálnu konzolu.

Aj keď virtuálne sieťové rozhrania môžu byť namapované na skutočné sieťové rozhrania, aplikáciám v rôznych zónach je zabránené, aby videli sieťovú prevádzku iných zón. Každá zóna má svoje vlastné procesné prostredie a prevádzkuje jej vlastnú sadu základných služieb vrátane inetd, syslogd, rpcbind, a iných. Aplikácie bežiace v zóne nie sú schopné vidieť aplikácie bežiace v iných zónach kvôli ich vlastným privátnym procesným prostrediam (private process environment). Zóny sú naviazané na im nastavený adresárový podstrom a nemôžu pristupovať na iné miesta v súborovom systéme. Všetky zóny bežia pod tou istou inštanciou operačného systému a teda aj pod jeho rovnakou verziou.

Vrstva virtuálnej platformy nie je emulačnou vrstvou, ktorá prekladá požiadavky zo zóny do inej formy, prípadne ich spúšťa v mene zóny. Úlohou vrstvy virtuálnej platformy je vytvoriť inštancie virtuálnych zdrojov a pripojiť ich k zóne. Napríklad v prípade virtuálneho sieťového rozhrania vrstva virtuálnej platformy vytvorí logické rozhranie namapované na fyzickom rozhraní špecifikovanom v konfigurácii zóny. IP adresa logického sieťového rozhrania je teda dostupná zo zóny.

Jeden z atribútov logického rozhrania je zóna, v ktorej je nastavené. Jadro používa tento atribút na virtualizáciu sieťového rozhrania tým, že preposiela pakety do príslušnej zóny v závislosti od nastavených atribútov. Zóna teda vidí len pakety, ktoré sú určené pre jej vlastné logické rozhranie. Broadcastové a multicastové pakety sú preposielané do všetkých zón.

Virtualizácia súborového systému v rámci zóny je dosiahnutá pomocou obmedzeného prístupu mimo stanoveného koreňového (root) adresára podobne ako v prípade chroot. Procesy v rámci zóny sú obmedzené na súbory a súborové systémy, ku ktorým môže byť pristupované v rámci obmedzeného (nastaveného) koreňového adresára. Oproti chroot zónu nie je možné opustiť. Vrstva virtuálnej platformy je zodpovedná za vytvorenie stanoveného koreňového adresára a jeho pripojenie (mount) na miesto definované v konfiguráci­i zóny.

Izolácia procesov je realizovaná pridaním odkazu na zónu do parametrov procesu. Jadro bolo rozšírené tak, aby používalo identifikátor zóny na zabránenie viditeľnosti procesu iným procesom mimo danej zóny. Procesom v danej zóne sú viditeľné len procesy s rovnakým identifikátorom zóny. Toto rozlišovanie je vykonávané na úrovni jadra a teda nie je súčasťou nástrojov ako ps alebo  kill.

Tak, ako identifikátor zóny je súčasťou parametrov, identifikátory užívateľov (UID) sú tiež virtualizované v rámci zón. Každá zóna má jej vlastný zoznam užívateľských identifikátorov. Následkom spomenutého užívatelia s totožným UID v rôznych zónach sú de facto odlišní užívatelia. Kvôli virtualizácii užívateľských kont existuje pre každú zónu unikátne úložisko hesiel.

Uvedenie systému najmenších privilégií (Least Privilege) do OS Solaris prináša jemnejšiu sadu privilégií ako náhradu konceptu neobmedzeného užívateľa root. Kým v štandardnom koncepte prístupu k privilegovaným operáciám sa vykonávala len kontrola toho, či sa užívateľské ID rovná nule, v prípade OS Solaris jadro kontroluje špecifické privilégiá potrebné na vykonávanie konkrétnych privilegovaných operácií. Príkladom môže operácia mount, na vykonanie ktorej sú potrebné pre užívateľa root špecifické privilégiá. Obmedzením privilégií užívateľa root v rámci lokálnej zóny na bezpečnú úroveň, užívateľ root v lokálnej zóne môže mať stále dostatočné práva na riadenie zóny aj keď nemá možnosť zasahovať do systému ako celku napríklad reštartovaním fyzického servera. Ale obmedzenie privilégií samé o sebe nepostačuje na zabezpečenie dostatočnej izolácie. Privilégiá len obmedzujú operácie, ktoré môžu byť vykonané, ale nekontrolujú objekty, nad ktorými môžu byť dané operácie vykonávané. Práve tento jav je dosiahnutý izoláciou na úrovni zón.

Je teda možné delegovať práva na administráciu lokálnej zóny užívateľom tým, že sa im pridelí prístup na užívateľa root v rámci danej lokálnej zóny. Keďže užívateľ s UID 0 danej zóny je odlišný od užívateľa s rovnakým UID v inej zóne, tento nemôže ovplyvniť žiadnu inú zónu. Užívateľ root v rámci globálnej zóny by ale mal zostať pozorne chránený, pretože mu stále zostáva možnosť kontroly nad celým systémom a prístupu do všetkých prítomných zón.

Rozdiel medzi Solaris kontajnermi a zónami

Solaris kontajnery nie sú ekvivalentné Solaris zónam. Technológia zón môže byť použitá na vytváranie kontajnerov s istými charakteristikami ako napríklad izolácia poskytovaná virtualizačným prostredím OS Solaris. Je ale možné vytvoriť aj iný typ kontajneru, a to použitím technológie riadenia/zdieľania zdrojov (Resource Pools) ak tú potrebné práve také charakteristiky, aké táto technológia poskytuje. Takže pokiaľ zóna je istým druhom kontajnera, kontajner nemusí byť druh zóny.

Správa zdrojov

V rámci zón sú k dispozícii štandardné funkcie na správu zdrojov ako ovládače zdrojov, projekty a iné. Keďže projekt je navyše virtualizovaný v rámci zóny, každá zóna má svoju vlastnú databázu projektov. Toto umožňuje administrátorovi lokálnej zóny konfigurovať projekty a ovládače zdrojov v rámci danej zóny.

Fair Share Scheduler a Zóny

Na zabránenie stavu, kedy lokálna zóna zahltí celý systém administrátor globálnej zóny, môže definovať spôsob rozdeľovania zdrojov medzi zóny. Ovládač zdroja zone.cpu-shares obmedzuje množstvo výpočtových zdrojov ktoré môžu byť pridelené zóne rovnakým spôsobom, ako to Fair Share Scheduler realizuje na úrovni projektov. Zóna s vyššou hodnotou zone.cpu-shares môže využívať väčšie množstvo výpočtových zdrojov ako zóna s nižšou hodnotou tohto parametra. Parameter (ovládač zdroja) zone.cpu-shares je nastavovaný pomocou príkazu zonecfg. Toto ale vyžaduje, aby bol Fair Share Scheduler nastavený ako hlavný plánovač v systéme alebo aby bol danej zóne pridelený istý rozsah procesorov a bol pre ňu nastavený FSS ako hlavný plánovač.

V kombinácii s plánovačom Fair Share Scheduler na úrovni zóny nastáva prípad kedy je výpočtová kapacita prideľovaná na dvoch úrovniach. Na prvej úrovni je nastavenie zone.cpu-shares na úrovni globálnej zóny, kde je určené množstvo výpočtových zdrojov pridelených zóne ako celku. Na druhej úrovni (na úrovni lokálnej zóny) je množstvo výpočtových zdrojov rozdelené medzi aktívne projekty v závislosti od nastavenia project.cpu-shares definovaného administrátorom lokálnej zóny.

bitcoin_skoleni

Ovládače zdrojov

Vo vnútri lokálnej zóny sú k dispozícii všetky štandardné ovládače zdrojov a môžu byť použité administrátorom lokálnej zóny na riadenie prideľovania zdrojov v danej zóne. Administrátor globálnej zóny môže ale obmedziť množstvo tzv. lightweight procesov (LWP), ktoré môžu byť vytvorené zónou. Toto množstvo je možné nastaviť parametrom (ovládačom zdrojov)  zone.max-lwps.

Zdroj

Matúš Kováčik, Štúdia pokročilých vlastností operačného systému Solaris – Diplomová práca, Bratislava: FIIT STU, 2007