diff --git a/hu_HU.ISO8859-2/books/handbook/jails/chapter.sgml b/hu_HU.ISO8859-2/books/handbook/jails/chapter.sgml index 6bd62c06b9..f44f053508 100644 --- a/hu_HU.ISO8859-2/books/handbook/jails/chapter.sgml +++ b/hu_HU.ISO8859-2/books/handbook/jails/chapter.sgml @@ -1,1310 +1,1310 @@ Matteo Riondato Írta: A jail alrendszer jail Áttekintés Ez a fejezet a &os;-ben található jail alrendszert, valamint annak használatát mutatja be közelebbrõl. Az jail, melyet gyakran csak úgy emlegetnek, mint a chroot környezetek továbbfejlesztését, a rendszergazdák számára ajánlott, nagyon sokoldalú eszköz, de a haladó felhasználók is hasznosnak találhatják. A fejezet elolvasása során megismerjük: mi is az a jail, milyen célra használható a &os;-ben; hogyan hozzunk létre, indítsunk el és állítsunk le jaileket; a létrehozott jailek karbantartásainak alapjait, a jailek belülrõl és kívülrõl egyaránt. A jail alrendszerrõl még több hasznos információt a következõ helyekrõl tudhatunk meg: A &man.jail.8; man oldal. Ez tartalmazza a jail segédprogram teljes referenciáját — ez az a karbantartásra használható eszköz, amellyel el tudjuk indítani, le tudjuk állítani és vezérelni tudjuk a jaileket a &os;-ben. A levelezési listák és azok archívumai. A &a.questions; archívuma és a &a.mailman.lists;en található többi levelezési lista rengeteg olvasnivalót tartogat a jailekkel kapcsolatban. Mindig érdemes keresni ezekben az archívumokban, vagy beküldeni a kérdésünket a &a.questions.name; levelezési listára. A jail alrendszerhez kapcsolódó fogalmak A fejezet további részében a következõ fogalmakat fogjuk használni, hogy a &os; jailekhez tartozó egyes részeit és azok belsõ mûködését, valamint kapcsolatukat a rendszer többi részével még inkább érthetõvé tegyük: &man.chroot.2; (parancs) A &os; azon rendszerhívása, amely egy program és annak leszármazottjai futtatása során megváltoztatja a gyökérkönyvtárat. (change root) &man.chroot.2; (környezet) A chroot módban futó programok környezete. Olyan erõforrásokat foglal magában, mint mondjuk az állományrendszer látható része, az elérhetõ felhasználói és csoport azonosítók, hálózati csatolók és egyéb folyamatok közti kommunikációs mechanizmusok stb. &man.jail.8; (parancs) Az a rendszerkarbantartó segédprogram, amely lehetõvé teszi program elindítását elzárt környezetben. befogadó (rendszer, program, felhasználó stb.) Az elzárt környezetet irányító rendszer. A befogadó rendszer hozzá tud férni az összes elérhetõ hardveres erõforráshoz, képes az elzárt környezeten kívül és belül futó programokat vezérelni. Az egyik legfontosabb különbség a befogadó és az elzárt rendszer között, hogy azok a korlátozások, amelyek az elzárt környezetben rendszeradminisztrátori jogokkal futó programokra vonatkoznak, nem feltétlenül érvényesek a befogadó rendszerben futóakra. befogadott (rendszer, program, felhasználó stb.) Olyan program, felhasználó vagy más egyéb egyed, amely csak egy jailen keresztül, korlátozottan tud hozzáférni az erõforrásokhoz. Bevezetés Mivel a rendszeradminisztráció egy nehéz és zavarba ejtõ feladat, rengeteg komoly eszköz jött létre a rendszergazdák életének megkönnyítésére. Ezek az eszközök többnyire a rendszerek telepítését, beállítását és karbantartását igyekeznek valamilyen módon jobbá tenni. A rendszergazdák egyik feladata úgy gondoskodni a biztonságról, hogy közben a rendszer képes legyen ellátni eredeti feladatát. A &os; rendszerek biztonságosságának növelését hivatott egyik ilyen eszköz a jails. Elõször a &os; 4.X verziójában bukkant fel, de jelentõs fejlõdésen ment keresztül a &os; 5.X verziókban, aminek köszönhetõen sokkal erõteljesebb és rugalmasabb alrendszerré vált. A fejlesztése természetesen most is folytatódik tovább, állandóan fejlõdik a használhatósága, teljesítménye, megbízhatósága és biztonságossága. Mi is az a jail? A BSD-szerû operációs rendszerekben már a 4.2BSD óta megtalálható volt a &man.chroot.2;. A &man.chroot.8; segédprogrammal meg tudjuk megváltoztatni adott programok számára a gyökérkönyvtárat, és ezzel egy biztonságos környezetet teremteni, távol a rendszer többi részétõl. A chroot-tal kialakított környezetben elinduló programok nem tudnak hozzáférni a rajta kívül található állományokhoz és erõforrásokhoz. Ennek okán, ha egy ilyen környezetben futó szolgáltatást - megtámadnak, az önmagában még teszi - lehetõvé a támadó + megtámadnak, az önmagában még nem + teszi lehetõvé a támadó számára, hogy elérhesse az egész rendszert. A &man.chroot.8; remekül használható olyan egyszerûbb feladatok megoldására, amelyek nem igényelnek túlságosan sok rugalmasságot vagy bonyolult és fejlett támogatást. A chroot ötletének felmerülése óta azonban számos kiskaput találtak már az általa létrehozott környezetekben, és habár ezek mindegyikét javították a &os; újabb változataiban, teljesen egyértelmûvé vált, hogy a &man.chroot.2; nem biztosít járható utat a szolgáltatások biztonságossá tételéhez. Erre a feladatra egy új alrendszert kellett kiépíteni. Ez az egyik oka annak, amiért az jaileket kifejlesztették. A jailek által képviselt elzárás ötlete több szempontból is a hagyományos &man.chroot.2; környezet elvén alapszik. Egy hagyományos &man.chroot.2; környezetben futó programok korlátozása csupán abban merül ki, hogy az állományrendszer melyik részét láthatják. A rendszer többi erõforrása (mint mondjuk a felhasználók, futó programok vagy a hálózati alrendszer) azonban továbbra is megosztva marad a chroot környezetben és a befogadó rendszerben futó programok között. A jailek által alkalmazott megoldás kibõvíti ezt a modellt, és nem csak az állományrendszerre vonatkozó hozzáférést virtualizálja, hanem több más dolog mellett kiterjeszti ezt a felhasználókra és a &os; hálózati alrendszerére is. Az elzárt környezetek beállításaihoz elérhetõ finomhangolási lehetõségekrõl bõvebben a ban esik szó. A jaileket az alább négy elem írja le: A könyvtárszerkezet egy részfája — attól a résztõl indulva, ahonnan a jail kezdõdik. A jailen belül futó programok nem léphetnek ki ebbõl a részfából. Az eredeti &man.chroot.2; kialakításában merengõ biztonsági hibák lehetõségei nem veszélyeztetik a többi &os; jailt. A rendszer neve — a név, amelyet a jailen belül használunk. Mivel a jaileket elsõsorban hálózati szolgáltatások kordában tartására használjuk, a jailekhez tartozó beszédes rendszernevek sokat tudnak segíteni a rendszergazdák munkájában. Egy IP-cím — a jailhez tartozik és nem változtatható meg a mûködése során. Egy jail IP-címe általában egy már létezõ hálózati csatoló másik címe, de ez nem szükségszerûen igaz minden esetben. Egy parancs — annak a programnak az elérési útja, amelyet elzártan kívánunk futtatni. Az elzárt környezet gyökerétõl mérve relatívan adjuk meg, és az adott környezet típusától függõen eltérõ lehet. Ezektõl eltekintve a jailek rendelkezhetnek saját felhasználókkal és lehetnek saját root felhasználóik is. Természetesen a root hatásköre csak az elzárt környezetre korlátozódik, és a befogadó rendszer szemszögébõl az elzárt root nem mindenható. Ráadásul az elzárt root felhasználó nem hajthat végre semmilyen kritikus mûveletet a saját &man.jail.8; környezetén kívül. A root további képességeirõl és korlátozásairól lentiekben bõvebben is említést teszünk a ban. A jailek létrehozása és vezérlése Egyes rendszergazdák a jaileket a következõ két típusba sorolják: teljes jail, mely egy valódi &os; rendszerre emlékeztet, és a szolgáltatás jail, mely egyetlen, feltehetõen kiemelt jogokkal futó alkalmazás vagy szolgáltatás számára van elõkészítve. Ez a besorolás csupán fogalmi szintû, a jail felépítésének módját nem befolyásolja. A &man.jail.8; man oldal részletesen ismerteti a jailek létrehozását: &prompt.root; setenv D /itt/lesz/a/jail &prompt.root; mkdir -p $D &prompt.root; cd /usr/src &prompt.root; make world DESTDIR=$D &prompt.root; cd etc/ Ez a lépés nem szükséges a &os; 6.0-ás vagy annál újabb verziójában. &prompt.root; make distribution DESTDIR=$D &prompt.root; mount -t devfs devfs $D/dev Érdemes elõször a jail helyét megválasztani. Itt fog fizikailag helyet foglalni a befogadó rendszer állományrendszerén belül a jail. Jó választás lehet erre a /usr/jail/jailnév, ahol a jailnév a jailt azonosító rendszernév. A /usr/ állományrendszeren általában elegendõ hely jut a jail állományrendszerének, ami egy teljes jail esetén lényegében a &os; alaprendszer alapértelmezett telepítésében megtalálható összes állomány másolatát tartalmazza. Ez a parancs fogja felmásolni a jail fizikai helyének választott könyvtár-részfába a mûködéshez szükséges programokat, függvénykönyvtárakat, man oldalakat és így tovább. Minden a &os; megszokott stílusában történik — elõször mindent lefordít, majd az eredményt feltelepíti a célként megadott könyvtárba. A make paramétereként megadott distribution cél gondoskodik az összes szükséges konfigurációs állomány felmásolásáról. Magyarán szólva, átmásolja az összes telepíhetõ állományt a /usr/src/etc/ könyvtárból a jail /etc alkönyvtárába, vagyis a $D/etc/ könyvtárba. A jaileken belül a &man.devfs.8; csatlakoztatása nem kötelezõ. Másrészt azonban majdnem mindegyik alkalmazás, a feladatától függõen, legalább egy eszközhöz hozzá akar férni. Nagyon fontos, hogy a kezünkbe vegyük a eszközök hozzáférésének irányítását a jaileken belül, mivel a helytelen beállítások révén a támadók csúnya dolgokat tudnak majd mûvelni. A &man.devfs.8; mûködését a &man.devfs.8; és &man.devfs.conf.5; man oldalakon is ismertetett szabályrendszerek irányítják. Ahogy a jailt telepítettük, a &man.jail.8; segédprogrammal tudjuk elindítani. A &man.jail.8; négy kötelezõ paramétert vár, melyekre a ban ki is térünk. Más paramétereket is megadhatunk, például azt, hogy az elzárt program egy adott felhasználó jogaival fusson. A paraméter használata a jail típusától függ: egy virtuális rendszer esetében a /etc/rc jó választásnak bizonyulhat, mivel ennek segítségével egy valódi &os; rendszerindítási folyamatát játszhatjuk le. Amennyiben elzárt szolgáltatásról van szól, az adott szolgáltatástól vagy alkalmazástól függ. A jaileket gyakran már a rendszerindítás során elindítják, amit a &os; rc mechanizmusa nagyban meg is könnyít. A rendszer indítása során aktiválandó jailek listáját vegyük hozzá a &man.rc.conf.5; állományhoz: jail_enable="YES" # Ide NO-t írjunk, ha ki akarjuk kapcsolni jail_list="www" # Szóközzel elválasztva soroljuk fel a jaileket A jail_list-ben szereplõ összes jailt meg kell adnunk az ezeket leíró &man.rc.conf.5;-beli beállításokat: jail_www_rootdir="/usr/jail/www" # a jail gyökérkönyvtára jail_www_hostname="www.example.org" # a jail neve jail_www_ip="192.168.0.10" # a jail IP-címe jail_www_devfs_enable="YES" # legyen-e devfs a jailen belül jail_www_devfs_ruleset="www_ruleset" # az alkalmazott devfs szabályrendszer Az &man.rc.conf.5; állományban szereplõ jailek esetén a /etc/rc szkript fut le, tehát feltételezi, hogy az így megadott jail egy teljes virtuális rendszer. A szolgáltatások jailbe foglalásához meg kell változtatnunk a jail alapértelmezett parancsát is. Ezt a jail_jailnév_exec_start opció megfelelõ beállításával tudjuk megtenni. Az összes itt elérhetõ opciót a &man.rc.conf.5; man oldalon találhatjuk meg. Ha léteznek a megfelelõ bejegyzések az rc.conf állományban, akkor az /etc/rc.d/jail szkript is használható arra, hogy a jaileket kézzel indítsuk el vagy állítsuk le: &prompt.root; /etc/rc.d/jail start www &prompt.root; /etc/rc.d/jail stop www A &man.jail.8; leállítására jelen pillanatban még nem érhetõ el szabályos módszer. Ez azért van, mert a szabályos rendszerleállítást elvégzõ parancsok nem használhatóak a jailen belül. Emiatt a jaileket a legtisztábban úgy tudjuk leállítani, ha kiadjuk az alábbi parancsot magában a jailben vagy pedig a &man.jexec.8; segédprogrammal a jailen kívülrõl: &prompt.root; sh /etc/rc.shutdown Errõl a témáról többet a &man.jail.8; man oldalon olvashatunk. Finomhangolás és karbantartás Számos opció állítható be a jaileknél, és sokféle módon vegyíthetjük a befogadó &os; rendszerünket a jailekkel, ami által magasabb szintû alkalmazásokat hozhatunk létre. Ebben a részben bemutatunk: Néhány olyan beállítást, amellyel finomhangolhatjuk a telepített jailek által megvalósított biztonsági megszorítások viselkedését. A jailek kezelésére alkalmas néhány olyan magasabb szintû alkalmazást, amelyek elérhetõek a &os; Portgyûjteményén keresztül, és általános jail alapú megoldások kialakításához használhatóak. A &os;-ben található finomhangoló eszközök A jailek beállításainak finomhangolását túlnyomórészt &man.sysctl.8; 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 &os; rendszermag opciói között megtalálható security.jail.*. Itt közüljük a jailekre vonatkozó fontosabb sysctl változók listáját, az alapértelmezett értékeikkel együtt. A nevek minden bizonnyal sokat elárulnak, de ha többet szeretnénk tudni róluk, lapozzuk fel a &man.jail.8; és &man.sysctl.8; man oldalakat. security.jail.set_hostname_allowed: 1 security.jail.socket_unixiproute_only: 1 security.jail.sysvipc_allowed: 0 security.jail.enforce_statfs: 2 security.jail.allow_raw_sockets: 0 security.jail.chflags_allowed: 0 security.jail.jailed: 0 Ezekkel a változókkal a befogadó rendszer rendszergazdája tud hozzátenni vagy elvenni a root felhasználó alapértelmezett határaihoz. Vegyük azonban észre, hogy egyes korlátozások azonban semmiképpen sem szüntethetõek meg. A root nem csatlakoztathat és választhat le állományrendszereket a &man.jail.8; környezetben. Az elzárt root nem tölthet be és törölhet &man.devfs.8; szabályrendszereket, tûzfal szabályokat sem, ill. nem végezhet semmilyen olyan bármilyen más karbantartási feladatot, amely a rendszermag adataiban módosítást vonna maga után, például nem állíthatja a rendszermag securelevel (biztonsági szintjének) értékét. A &os; alaprendszere tartalmazza azokat a segédeszközöket, amelyekkel a rendszerben aktív jailek információt tudjuk megjeleníteni, vagy csatlakozni tudunk hozzájuk. A &man.jls.8; és &man.jexec.8; parancsok részei az alap &os; rendszernek, segítségükkel elvégezhetõek az alábbi egyszerû feladatokat: Ki tudjuk íratni az aktív jailek és hozzájuk tartozó azonosítókat (JID-eket), IP-címeket, neveket és útvonalakat. A befogadó rendszerbõl hozzá tudunk csatlakozni egy futó jailhez, és parancsokat tudunk futtatni a jailen belül vagy karbantartási feladatokat tudunk elvégezni magán a jailen belül. Ez különösen hasznosnak bizonyulhat, amikor a root felhasználó szabályosan le akarja állítani a jailt. A &man.jexec.8; segédprogrammal el tudunk indítani egy parancsértelmezõt a jailen belül, amibõl aztán irányíthatjuk. Példa: &prompt.root; jexec 1 tcsh Magasszintû karbantartó eszközök a &os; Portgyûjteményében A sok külsõ karbantartó eszköz közül az egyik legteljesebb és leghasznosabb a sysutils/jailutils. Sok kisebb alkalmazást tartalmaz, melyek kibõvítik a &man.jail.8; irányíthatóságát. Bõvebb információkért kérjük, látogassa meg a hozzátartozó honlapot. A jailek alkalmazása Daniel Gerzo Írta: Szolgáltatások jailbe foglalása Ez a rész eredetileg &a.simon; oldalon található írásán, valamint Ken Tom (locals@gmail.com) átdolgozott cikkén alapul. Itt megismerhetjük, hogyan állítsunk be a &os; rendszerünkben egy biztonsági réteget a &man.jail.8; felhasználásával. Továbbá feltételezzük, hogy ez a rendszer legalább RELENG_6_0 verziójú és a fejezetben korábban tárgyaltakat az olvasó teljes mértékben megértette. A kialakítás A jailek egyik legnagyobb gondja a frissítés folyamatának lebonyolítása. Azért jelent ez egyre inkább gondot, mert minden egyes jailt újra fel kell építenünk a frissítése során. Ez többnyire nem okoz gondot egyetlen jail használata során, mivel maga a frissítési folyamat meglehetõsen egyszerû, azonban igen idõigényessé és fárasztóvá tud válni több jail esetében. Ez a példa a &os; képességeinek haladó szintû ismeretét követeli meg. Amennyiben az itt bemutatott lépesek túlságosan is bonyolultnak tûnnének, érdemes olyan egyszerûbb rendszerek után nézni, mint mondjuk a sysutils/ezjail, amely egy egyszerûbb módszert kínál fel a &os;-ben használt jailek karbantartására, és nem is annyira bonyolult, mint ez a példa. A bemutatandó példa célja, hogy feloldja az ilyen jellegû problémákat, és ezért igyekszik a jailek között mindent megosztani, ami csak lehetséges. Mindezt biztonságosan éri el — írásvédett &man.mount.nullfs.8; állományrendszer használatával, aminek köszönhetõen a frissítés maga egyszerûbbé, az egyes szolgáltatások különzárása pedig vonzóbbá válik. Ráadásul egyúttal egy nagyon egyszerû módszert mutat az új jailek hozzáadására és a régi törlésére ugyanúgy, mint a frissítésükre. Például ilyen szolgáltatásokat kívánunk szabályozni: egy HTTP szervert, egy DNS szervert, egy SMTP szervert és így tovább. Az itt szereplõ beállítás céljai: Készítsünk egy egyszerûen és könnyen átlátható jailkezelési rendszert. Ebbõl tehát következik, hogy ne kelljen lefuttatni a teljes rendszer telepítését minden egyes jailre. Könnyítsük meg az új jailek hozzáadását és a régiek eltávolítását. Könnyítsük meg a már létezõ jailek frissítését és cseréjét. Tegyük lehetõvé saját &os; ágak futtatását. Legyünk különösen körültekintõek a biztonság tekintetében, és igyekezzünk minél jobban csökkenteni veszély kockázatát. Takarékoskodjunk a tárhellyel és az állományrendszerrel, amennyire csak lehet. Ahogy azt már korábban is említettük, ez a kialakítás nagyban építkezik egyetlen fõ sablonra, amely írásvédetten kerül csatlakoztatásra (nullfsen keresztül) az egyes jailekben, valamint jailenként egy-egy írható-olvasható eszközre. Ez az eszköz lehet egy külön fizikai lemez, egy partíció vagy egy vnode alapú &man.md.4; eszköz. Ebben a példában írható-olvasható nullfs csatlakozásokat használunk. Az állományrendszer kiosztása a most következõ listában szerepel: Minden jailt a /home/j könyvtárban csatlakoztatunk. A /home/j/mroot lesz az összes jail sablonja és mindegyikük számára írásvédett. Minden jailnek létrehozunk egy üres alkönyvtárat a /home/j könyvtárban. Minden jailnek lesz egy /s alkönyvtára, amelyet a rendszer írható-olvasható részére irányítunk. Minden jailnek lesz egy saját írható-olvasható része, amely a /home/j/skel könyvtáron alapszik. Mindegyik elzárt terület (a jailek írható-olvasható része) a /home/js könyvtárban jön létre. Ez a kiosztás feltételezi, hogy a jaileket a /home partíción hozzuk létre. Ez természetesen bármi másra megváltoztatható, de akkor figyelnünk kell erre minden egyes parancs kiadása elõtt. A sablon létrehozása Ez a rész leírja a fõ sablon létrehozásához szükséges lépéseket. Ez a jailek számára írásvédett lesz. Érdemes mindig frissíteni a &os; rendszerünket a legújabb -RELEASE ágra. Ehhez olvassuk el az ide tartozó fejezetet a kézikönyvbõl. Abban az esetben, ha a frissítés nem lenne megoldható, egy make buildworld parancsot mindenképpen le kell tudnunk futtatni. Ezenfelül a sysutils/cpdup csomagra is szükségünk van. Használni fogjuk a &man.portsnap.8; segédprogramot is a &os; Portgyûjtemény letöltéséhez. Akik nem ismernék, a kézikönyv errõl szóló fejezetében olvashatnak róla. Elõször is, készítsük el az írásvédett állományrendszer könyvtárszerkezetét, amely majd tartalmazni fogja a jailek által használt &os;-s programokat. Ezután lépjünk be a &os; forrásfájának könyvtárába és telepítsük fel az írásvédett állományrendszert a sablonba: &prompt.root; mkdir /home/j /home/j/mroot &prompt.root; cd /usr/src &prompt.root; make installworld DESTDIR=/home/j/mroot Ezt követõen készítsük elõ a jailek számára a &os; Portgyûjteményt és &os; forrásfát, melyek kellenek a mergemaster használatához: &prompt.root; cd /home/j/mroot &prompt.root; mkdir usr/ports &prompt.root; portsnap -p /home/j/mroot/usr/ports fetch extract &prompt.root; cpdup /usr/src /home/j/mroot/usr/src Hozzuk létre a rendszer írásvédett részének vázát: &prompt.root; mkdir /home/j/skel /home/j/skel/home /home/j/skel/usr-X11R6 /home/j/skel/distfiles &prompt.root; mv etc /home/j/skel &prompt.root; mv usr/local /home/j/skel/usr-local &prompt.root; mv tmp /home/j/skel &prompt.root; mv var /home/j/skel &prompt.root; mv root /home/j/skel Használjuk a mergemastert a hiányzó konfigurációs állományok telepítésére. Szabaduljunk meg a mergemaster által készített felesleges könyvtáraktól: &prompt.root; mergemaster -t /home/j/skel/var/tmp/temproot -D /home/j/skel -i &prompt.root; cd /home/j/skel &prompt.root; rm -R bin boot lib libexec mnt proc rescue sbin sys usr dev Most pedig szimbolikusan linkeljük az írható-olvasható állományrendszert az írásvédett állományrendszerre. Ellenõrizzük, hogy a szimbolikus linkek a megfelelõ s/ könyvtárakban jöttek létre. Valós vagy rossz helyen létrehozott könyvtárak használata esetén a telepítés nem fog sikerülni. &prompt.root; cd /home/j/mroot &prompt.root; mkdir s &prompt.root; ln -s s/etc etc &prompt.root; ln -s s/home home &prompt.root; ln -s s/root root &prompt.root; ln -s ../s/usr-local usr/local &prompt.root; ln -s ../s/usr-X11R6 usr/X11R6 &prompt.root; ln -s ../../s/distfiles usr/ports/distfiles &prompt.root; ln -s s/tmp tmp &prompt.root; ln -s s/var var Utolsó lépésként hozzunk létre egy /home/j/skel/etc/make.conf állományt az alábbi tartalommal: WRKDIRPREFIX?= /s/portbuild A WRKDIRPREFIX beállításával lehetõvé válik a &os; portok jaileken belüli fordítása. Ne felejtsük el, hogy a portokat tartalmazó könyvtár az írásvédett rendszer része! Az átállított WRKDIRPREFIX azonban megengedi, hogy a fordítások az egyes jailek írható-olvasható részeiben történjenek. A jailek létrehozása Most, miután teljesen elkészült a &os; jailek sablonja, be is tudjuk állítani és hozzá is tudjuk venni ezeket az /etc/rc.conf állományhoz. Ebben a példában 3 jail létrehozását láthatjuk: NS, MAIL és WWW. Írjuk bele a következõ sorokat az /etc/fstab állományba, aminek köszönhetõen az egyes jailek számára elérhetõvé válik az írásvédett sablon és a hozzájuk tartozó írható-olvasható területek: /home/j/mroot /home/j/ns nullfs ro 0 0 /home/j/mroot /home/j/mail nullfs ro 0 0 /home/j/mroot /home/j/www nullfs ro 0 0 /home/js/ns /home/j/ns/s nullfs rw 0 0 /home/js/mail /home/j/mail/s nullfs rw 0 0 /home/js/www /home/j/www/s nullfs rw 0 0 Az elsõ helyen nullával jelölt partíciókat a &man.fsck.8; nem fogja ellenõrizni a rendszer indulása során, a második helyen nullával jelölt partíciókat pedig nem fogja menteni a &man.dump.8;. Mi egyáltalán nem akarjuk, hogy az fsck ellenõrizze vagy a dump lementse a jailjeinkhez tartozó írásvédett nullfs-partícióinkat. Ezért szerepel végig 0 0 a fentebb szereplõ fstab-bejegyzések utolsó két oszlopában. Állítsuk be a jaileket az /etc/rc.conf-ban: jail_enable="YES" jail_set_hostname_allow="NO" jail_list="ns mail www" jail_ns_hostname="ns.example.org" jail_ns_ip="192.168.3.17" jail_ns_rootdir="/usr/home/j/ns" jail_ns_devfs_enable="YES" jail_mail_hostname="mail.example.org" jail_mail_ip="192.168.3.18" jail_mail_rootdir="/usr/home/j/mail" jail_mail_devfs_enable="YES" jail_www_hostname="www.example.org" jail_www_ip="62.123.43.14" jail_www_rootdir="/usr/home/j/www" jail_www_devfs_enable="YES" Azért állítottuk a jail_név_rootdir változó értékét a /usr/home könyvtárra a /home könyvtár helyett, mert a &os; alaptelepítésében a /home könyvtár fizikailag a /usr/home könyvtárral egyezik meg. A jail_név_rootdir változó értékeként megadott könyvtár nem tartalmazhat szimbolikus linket, máskülönben a jailek nem lesznek hajlandóak létrejönni. Ennek megállapításában a &man.realpath.1; segédprogram lehet segítségünkre. A korlátozás részleteirõl a &os;-SA-07:01.jail biztonsági figyelmeztetésben olvashatunk. Hozzuk létre az egyes jailek írásvédett állományrendszereihez szükséges csatlakozási pontokat: &prompt.root; mkdir /home/j/ns /home/j/mail /home/j/www Telepítsük az írható-olvasható sablont az egyes jailekbe. Figyeljük meg a sysutils/cpdup használatát, amellyel az egyes könyvtárak pontos másolatait hozhatjuk létre: &prompt.root; mkdir /home/js &prompt.root; cpdup /home/j/skel /home/js/ns &prompt.root; cpdup /home/j/skel /home/js/mail &prompt.root; cpdup /home/j/skel /home/js/www Ebben a fázisban a jailek már elkészültek és készen állnak a futásra. Elõször csatlakoztassuk az egyes jailekhez szükséges állományrendszereket, majd indítsuk el ezeket a /etc/rc.d/jail szkripttel: &prompt.root; mount -a &prompt.root; /etc/rc.d/jail start A jailek most már futnak. Az elindulásuk ellenõrzéséhez használjuk a &man.jls.8; parancsot. Valami ilyesmit láthatunk a kiadása után: &prompt.root; jls JID IP Address Hostname Path 3 192.168.3.17 ns.example.org /home/j/ns 2 192.168.3.18 mail.example.org /home/j/mail 1 62.123.43.14 www.example.org /home/j/www Itt már be tudunk jelentkezni az egyes jailekbe, új felhasználókat tudunk készíteni vagy démonokat tudunk beállítani. A JID oszlop mutatja az egyes jailek azonosítási számát. A 3-as JID számú jailben az alábbi parancs használatával karbantartási feladatokat elvégezni: &prompt.root; jexec 3 tcsh Frissítés Idõrõl idõre adódhat, hogy frissítenünk kell a rendszert a &os; egy újabb változatára, vagy egy biztonsági hiba javítása miatt, vagy pedig a már meglevõ jailek számára hasznos újítások bevezetése miatt. Ez a kialakítás megkönnyíti a korábban létrehozott jailjeink frissítését. Továbbá igyekszik minimalizálni a kiesésüket is, mivel a jaileket csak a legutolsó pillanatban fogjuk leállítani. Sõt, még az is lehetõvé válik, hogy visszaállítsuk a korábbi verziót, ha véletlenül valami rosszul sülne el menetközben. Elsõ lépéseként frissítsük magát a befogadó rendszert a megszokott módon. Ezután hozzunk létre egy új írásvédett sablont a /home/j/mroot2 könyvtárban. &prompt.root; mkdir /home/j/mroot2 &prompt.root; cd /usr/src &prompt.root; make installworld DESTDIR=/home/j/mroot2 &prompt.root; cd /home/j/mroot2 &prompt.root; cpdup /usr/src usr/src &prompt.root; mkdir s A installworld lefuttatása létrehoz néhány felesleges könyvtárat, melyeket takarítsunk is el: &prompt.root; chflags -R 0 var &prompt.root; rm -R etc var root usr/local tmp Hozzuk újra létre az írható-olvasható szimbolikus linkjeinket a fõ állományrendszerre: &prompt.root; ln -s s/etc etc &prompt.root; ln -s s/root root &prompt.root; ln -s s/home home &prompt.root; ln -s ../s/usr-local usr/local &prompt.root; ln -s ../s/usr-X11R6 usr/X11R6 &prompt.root; ln -s s/tmp tmp &prompt.root; ln -s s/var var Most érkezett el az idõ, hogy leállítsuk a jaileket: &prompt.root; /etc/rc.d/jail stop Válasszuk le az eredeti állományrendszereket: &prompt.root; umount /home/j/ns/s &prompt.root; umount /home/j/ns &prompt.root; umount /home/j/mail/s &prompt.root; umount /home/j/mail &prompt.root; umount /home/j/www/s &prompt.root; umount /home/j/www Az írható-olvasható állományrendszerek hozzá vannak kapcsolva az írásvédett állományrendszerhez (/s), ezért azokat elõször le kell választani. Mozgassuk el az útból a régi írásvédett állományrendszerünket és váltsuk fel az újjal. Így biztonsági mentésként és a régi írásvédett rendszer archívumaként továbbra is rendelkezésre áll, ha valami baj történne. Az itt használt elnevezés az újonnan létrehozott írásvédett állományrendszer dátumából ered. Mozgassuk át az eredeti &os; Portgyûjteményt az új állományrendszerre, hogy megtakarítsunk némi tárhelyet és állományleírót: &prompt.root; cd /home/j &prompt.root; mv mroot mroot.20060601 &prompt.root; mv mroot2 mroot &prompt.root; mv mroot.20060601/usr/ports mroot/usr Most már készen áll az új írásvédett sablon, így már csak az állományrendszerek újracsatlakoztatása és a jailek újraindítása maradt: &prompt.root; mount -a &prompt.root; /etc/rc.d/jail start A &man.jls.8; használatával ellenõrizzük, hogy a jailek rendesen elindultak. Ne felejtsük el jailenként lefuttatni a mergemastert sem. A konfigurációs állományokat és az rc.d szkripteket is frissítenünk kell majd.