Klonovanie tučniaka alebo virtualizácia v Linuxe: úvod

4. 10. 2005
Doba čtení: 4 minuty

Sdílet

Chceli by ste spustiť DNS, FTP, mail alebo iné služby tak, aby boli maximálne izolované od ostatných? Zamýšlali ste sa nad tým, či je možné spustiť kernel pod kernelom a načo by to mohlo byť dobré? Hodilo by sa vám spustiť a testovať novú verziu kernelu na tom istom počítači bez reštartu? Nestačí vám jeden tučniak? Tak si ho naklonujte!
Klonovany tucnak

Tento príspevok neobsahuje konkrétne návody ako na to, jeho cieľom je ukázať prehľad rôznych open-source projektov, ktoré súvisia s virtualizáciou v Linuxe. V texte sú odkazy na konkrétne projekty a zdroje, z ktorých som čerpal. Ich zhrnutie nájdete na konci príspevku. Článok sa tiež okrajovo zaoberá polo-komerčnými projektami, spustením iných OS pod Linuxom a záver obsahuje popis hardvérovej podpory spustenia viacerých OS na jednom PC, ktorú majú priniesť budúce generácie procesorov radu x86.

Čo je to virtualizácia? [1]

Obyčajne je na jednom počítači jeden operačný systém, pod ktorým môžu byť spustené rôzne servre (v zmysle WEB, FTP, mail,…) – v Linuxe nazývané daemony.

Virtualizácia nám ponúka tieto dve základné riešenia:

  • Virtuálny server (VS): Pod jedným operačným systémom je spustených viac od seba izolovaných serverov.
  • Virtuálny stroj (virtual machine – VM) [2]: na jednom počítači je spustených viac operačných systémov naraz. Program, ktorý tieto systémy koordinuje a spravuje, sa nazýva virtuálny monitor (virtual monitor).

Hlavnou výhodou je, že virtuálne systémy (VS alebo VM) sú navzájom izolované, takže napadnutie alebo zrútenie jedného neovplyvní druhý a zároveň sa znižuje riziko napadnutia celého systému. Tiež sa znižujú náklady na hardvér, pretože pre rovnaký počet poskytovaných služieb je potrebných menej počítačov.

Projekty založené na VM môžu buď vytvárať virtuálny hardware (napríklad projekty UML a XEN), alebo emulovať skutočný hardware (QEMU, Bochs).

Na druhej strane virtualizácia prináša vyššie nároky na hardvér, každý virtuálny systém potrebuje isté množstvo fyzickej RAM a miesta na disku a tiež sa zvyšujú požiadavky na spoľahlivosť celého systému. Tým samozrejme narastá aj jeho cena.

Aké uplatnenie má virtualizácia v praxi?

  • beh dvoch rovnakých serverov naraz, jeden beží naostro a druhý môžeme aktualizovať, ladiť alebo testovať
  • vytvorenie honeypots [3] alebo honeynets [4] (medové motúzy ;) ) – systémy, ktoré sú zámerne otvorené pre útočníkov s cieľom zisťovať ich postupy
  • väčšina implementácií virtualizácie podporuje virtuálne sieťové karty, tieto umožňujú vytvoriť a testovať virtuálnu sieť
  • virtuálne stroje umožňujú ľahké testovanie spadnutia a obnovy systému
  • využitie v školstve a vzdelávaní – každý študent môže mať práva roota vo svojom virtuálnom stroji
  • použitie pri web-hostingu – každý zákazník môže mať úplný prístup k vlastnému virtuálnemu systému
  • testovanie softvéru na hardvéri, ktorý fyzicky nemáte (napr. 64bit CPU)

Prehľad projektov virtualizácie pre Linux

Projekty virtualizácie v Linuxe väčšinou vyžadujú patchovanie a následne kompilovanie kernelu. Na stránkach alebo v dokumentácii konkrétneho projektu nájdete presný návod.

Nižšie spomenuté projekty používajú rôznu terminológiu, ktorú sa budem snažiť stručne objasniť v popise projektov.

Dosť bolo teórie, pozrime sa sa na konkrétne projekty, ktoré som zaradil od jednoduchších k zložitejším, pričom som sa snažil vystihnúť ich slabé aj silné miesta (zhrnuté ako výhody a nevýhody):

VServer – Virtual Server [5], [6]

Patrí medzi najjednoduchšie implementácie virtualizácie a vzdialene sa podobá na BSD JAIL [7]. Tento projekt využíva a rožširuje bezpečnostný systém Linuxu – Linux capabilities. VServer umožňuje spustiť izolované daemony v user-space prostredí. Tieto daemony sú pomenované ako Virtual Private Servers (VPS). Jednotlivé VPS sú oddelené pomocou rozšírenej funkcie chroot a tiež sú oddelené na úrovni procesov (IPC, PIDs). Každý VPS má vlastný sieťový interfejs, ktorý je implementovaný v štýle sieťového aliasu.

VServer umožňuje nastaviť limity na pamäť, CPU, procesy a tiež na súborový systém a nezabúda ani na zariadenia v /dev a na informácie a nastavenia v /proc. Aj keď všetky VPS musia používať ten istý kernel, v rámci jednotlivých VPS je možné spustiť rôzne linuxové distribúcie.

Tento projekt sa zdá byť dosť životaschopným a vytvorilo sa okolo neho množstvo dokumentácie – napríklad [8].

Výhody:

  • Rýchlosť – všetky VPS používajú ten istý kernel, preto programy v nich bežiace majú takmer rovnakú rýchlosť ako bez použitia VServera
  • Bezpečnosť – vylepšenia klasickej funckcie chroot, z ktorej sa inak dá uniknúť [9]
  • – veľa ďalších bezpečnostných vylepšení
  • Miesto na disku – šetrí miestom, lebo umožňuje zdieľať rovnaké súbory medzi VPS, no každý VPS ich v prípade potreby môže zmazať a aktualizovať bez toho, aby ovplyvnil ostatné VPS
  • Prenositeľnosť – VServer podporuje rôzne architektúry [10]

Nevýhody:

  • Naviazanosť na jeden kernel – neumožňuje spustenie viacerých verzií kernelu naraz
  • Neúplná virtualizácia – nie všetky volania a funkcie sú virtualizované. Napríklad pri namapovaní nevhodných súborov v /dev  alebo /proc môžete otvoriť bezpečnostnú dieru
  • Úzke spojenie s kernelom – predstavuje bezpečnostné riziko
  • Čiastočne virtualizovaná sieť – v jednodlivých VPS nie je možné zmeniť routovanie alebo nastaviť iptables
  • Zatiaľ nepodporuje IPv6

V ďalšej časti príspevku sa pozrieme na projekty UML, XEN a Bochs.

bitcoin_skoleni

Použité zdroje:

[1] en.wikipedia.or­g/wiki/Virtua­lization – Wiki o virtualizácii
[2] en.wikipedia.or­g/wiki/Virtual_machi­ne – definícia Virtuálneho stroja na Wiki
[3] en.wikipedia.or­g/wiki/Honeypot – Wiki o Honeypots
[4] www.honeynet.or­g/papers/virtu­al – Stránka o Honeynets
[5] linux-vserver.org – domáca stránka projektu VServer
[6] www.solucorp.qc­.ca/miscprj/s_con­text.hc – ďalšia stránka o projekte VServer
[7] docs.freebsd.or­g/44doc/paper­s/jail/jail.html – manuál k BSD Jail
[8] linux-vserver.org/Linux-VServer-Paper – manuál projektu VServer
[9] www.bpfh.net/si­mes/computing/chro­ot-break.html – z chrootu sa dá uniknúť
[10] linux-vserver.org/Linux-VServer-Paper-10 – architektúry podporované VServerom

Autor článku