Az eddigi FreeBSD-s írások után következzen ugyanebben a témában egy kicsit izgalmasabb írás, szóljon pedig ez a virtualizációról. Napjainkban már több operációs rendszer támogatja a virtualizációt natívan, különböző formában, különböző megoldásokkal, a terminológia is különböző lehet. Gondolhatunk itt arra, amit Solaris alatt zónának neveznek, AIX platformon LPAR, Linux-oknál chroot. Nagyon kíváncsi voltam arra, hogy BSD (ebben az esetben FreeBSD) fronton mik a lehetőségek, ha ilyen igényeim vannak. Nos, örömömre szolgált, hogy itt sem találkoztam elmaradással. A FreeBSD-nek megvan a megoldása a virtualizációra, amit itt jail-nek nevezünk, és a legegyszerűbb módon az ez-jail nevű porttal menedzselhetjük.
FreeBSD virtualizáció (jail) az ezjail használatával
Mi az a jail?
A BSD-szerű operációs rendszerekben már a 4.2BSD óta megtalálható volt a chroot. Ez lehetővé tette adott programok számára a gyökérkönyvtár megváltoztatását (saját könyvtárstruktúrájuk volt). Az adott program nem fért hozzá a chroot-olt könyvtáron kívüli részhez, ez biztonságossá tette ezt. Az idők folyamán azonban biztonsági réseket fedeztek fel, egyre több kiskaput találtak ezek kijátszására, és nem utolsósorban a hangolásra sem nagyon volt lehetőség. Ennek kiküszöbölésére született a jail alrendszer, mely az előbb felsoroltakon kívül már kibővítette a lehetőségeket, pl. a hálózati alrendszer és felhasználók jailben történő kezelésére, ezenkívül a finomhangolhatósága is jóval kiterjedtebb lett. Ez azonban azt is magával vonta, hogy a jailek telepítése, beállítása, konfigurációja meglehetősen nehézkessé vált. Ezt sikerült megkönnyíteni az ez-jail nevű porttal (igazából ez egy script-szerű tool), mely ezt nagyon egyszerűvé teszi.
Nézzük meg a FreeBSD ez-jail-lel installált jailjeinek előnyeit:
– tárhely-megtakarítás azáltal, hogy egyetlen alaprendszer bináris szettet használ az összes jail
– updatelhető az összes jail egy base-directoryn belül
– mivel a base system (binárisok) read-only módban vannak csatolva, ez a betörő dolgát nehezíti (ellehetetleníti), pl. rootkitek esetén
– az ezjail sh scriptként van írva, így nem szükséges bármilyen extra shell telepítése a host-rendszeren
– attach-detach, backup-restore megoldott
és hátrányait:
– közös binárisok (külön nem upgradelhető jailek)
– jelenleg körülményes, ill. helyenként nem megoldott a jailek erőforrás menedzsmentje
– az előbbi miatt amennyiben több jailt akarunk futtatni, a CPU kiosztás csak affinity alapján lehetséges
– egy base-jailre mindenképp szükség van, ez plusz helyet foglal (azonban ez a továbbiakban templateként használható, tehát van pozitívuma is)
Az első lépések:
Tesztrendszerünk egy FreeBSD, annak is 9.0-ás verziója, friss portfával, egy darab em0-ra hallgató hálózati csatolóval. A jailek base-directoryja nagyon szimplán a /jails lesz, ez azonban akár lehet külön filerendszeren is természetesen. Első lépésként telepítenünk kell az ez-jail-t.
# cd /usr/ports/sysutils/ezjail
# make install
Alapesetben maga telepítés kész is. Tegyük be az /etc/rc.conf-ba is, hogy elinduljon rendszerinduláskor ( ezjail_enable=”YES” ). Szükségünk van még az ezjail konfigurációs fájljának editálására, ez igazából csak egyszer, most az elején szükségeltetik.
# ezjail-admin install
Érdekes dolgokat figyelhetünk most meg:
Ehhez létre kell hozni a host system-en az IP címet vagy címeket aliasként, amin majd az újonnan létrehozott jailünk figyelni fog. Fontos megjegyezni, hogy ez azt is jelenti, hogy az olyan szolgáltatásokat, amik minden IP-n figyelnek (syslogd például), a host systemen át kell konfigurálni, hogy csak a host IP-n figyeljenek (értelemszerűen a jailen ezt NEM kell megtenni, hiszen ott csak egy IP-n – amit osztottunk- fog figyelni).
# ipconfig em0 192.168.55.17 alias
# ezjail-admin create -r testjail testjail 192.168.55.17
Megnézhetjük az ezjail paranccsal:
# ezjail-admin list
Próbáljuk most ide beloginolni:
# ezjail-admin console testjail
A jail vagy jailek leállítása és indítása a következőképpen történik:
# ezjail-admin stop testjail
# ezjail-admin start testjail
Finomhangolás:
A jailek beállításainak finomhangolását túlnyomórészt sysctl változókkal végezhetjük el. A sysctl-en belül egy speciális részfában találhatunk erre alkalmas beállításokat: ez a a FreeBSD rendszermag opciói között megtalálható security.jail.*
. Az alábbi képen ezek láthatóak kigyűjtve:
Összegzés:
Annak ellenére, hogy bármelyik BSD rendszer támogatja a leírtakban szereplő lehetőségeket, legkönnyebben nekem FreeBSD alatt sikerült működésre bírnom – itt viszont rövid idő alatt (Open- és NetBSD esetében nem fordult le probléma nélkül, de ez lehetett az én figyelmetlenségem miatt is). Engem ez a virtualizációs megvalósítás leginkább a Solaris zónáira emlékeztetett, ahogy említettem. Vannak még korlátok, és megoldásra váró problémák a BSD virtualizációban, azonban a jelenlegi eredmények alapján is ígéretesnek és használhatónak tűnik a BSD jail.
Szuper lett!
Mas resourcet akkor nem lehet szabalyozni? Futo jail-et is lehet upgradelni a rendszerrel?
En szivesen megneznek egy konkret peldan keresztul, pl APACHE hogy raked jailbe.
Minden esetre cool igy tovabb! :)