FreeBSD jails
(→EZjail) |
|||
(egy szerkesztő 14 közbeeső változata nincs mutatva) | |||
1. sor: | 1. sor: | ||
+ | Írta: Janky Ferenc Nándor , 2010. november 28. |
||
+ | |||
+ | A tárgy házi feladatának keretebén megismerkedtem a FreeBSD -vel, és annak jails mechanizmusával. |
||
+ | A feladat során tanulmányoztam a FreeBSD hivatalos kézikönyvét, amelyből hiányzott a hálózati konfiguráció leírása, így az alábbi |
||
+ | fejezetek egy közel teljes áttekintést nyújtanak a jail-ek adminisztrálása során végrehajtandó feladatokról. |
||
===Bevezetés=== |
===Bevezetés=== |
||
− | A FreeBSD jails egy operációs rendszer szintű virtualizációt megvalósító eszköz, |
+ | A FreeBSD jails egy operációsrendszer-szintű virtualizációt megvalósító eszköz, |
amely a FreeBSD 4-es verziója óta elérhető. |
amely a FreeBSD 4-es verziója óta elérhető. |
||
− | Az OS szintű virtualizáció a mi választásunk, ha megfelel, hogy a guest gépek és a |
+ | Az OS-szintű virtualizáció a mi választásunk, ha megfelel, hogy a guest gépek és a |
host közös kernelen osztozzon, így nem kell virtuális hardvert biztosítanunk, elég |
host közös kernelen osztozzon, így nem kell virtuális hardvert biztosítanunk, elég |
||
− | ha az alkalmazások szintjén tudunk virtuális környezetet biztosítani. |
+ | ha az alkalmazások szintjén tudunk virtuális környezetet biztosítani. ( Ha egy jail miatt kernel crash történik, akkor az az egész rendszerre kihat.) |
A jails eredete, hogy a chroot alkalmazást akarták kiváltani, mert az nem volt |
A jails eredete, hogy a chroot alkalmazást akarták kiváltani, mert az nem volt |
||
13. sor: | 18. sor: | ||
felhasználók, kernel adatszerkezetek, device-ok). |
felhasználók, kernel adatszerkezetek, device-ok). |
||
− | A jail-ben futó processzek nem tudnak interakcióba lépni a jail-en kívűli |
+ | A jail-ben futó processzek nem tudnak interakcióba lépni a jail-en kívüli |
processzekkel ( Ez nem teljesen igaz, mert a shared memory elkülönítése még |
processzekkel ( Ez nem teljesen igaz, mert a shared memory elkülönítése még |
||
nem megvalósított), továbbá tilos a globális rendszerállapot megváltoztatása a |
nem megvalósított), továbbá tilos a globális rendszerállapot megváltoztatása a |
||
28. sor: | 33. sor: | ||
===Alkalmazási terület=== |
===Alkalmazási terület=== |
||
− | Fő alkalmazása : service jailek, különböző alkalmazás szerver szoftver |
+ | Fő alkalmazása : service jail-ek, különböző alkalmazás szerver szoftver |
− | konfigurációk használata, anélkül, hogy a hostoló rendszerünket kéne kitenni az |
+ | konfigurációk használata, anélkül, hogy a hostoló rendszerünket ki kéne tenni a |
telepítés viszontagságainak. Egy rosszul sikerült telepítés után a problémás jail |
telepítés viszontagságainak. Egy rosszul sikerült telepítés után a problémás jail |
||
könyvtárszerkezete könnyen eltávolítható, míg a hostoló rendszerünk |
könyvtárszerkezete könnyen eltávolítható, míg a hostoló rendszerünk |
||
konfigurációja érintetlen marad. |
konfigurációja érintetlen marad. |
||
− | Mivel az Oracle adatbázis hivatalosan nem támogatott a FreeBSD-n, a gyakorlatban még arra is használják, hogy engedélyezik a Linux binary compatibility-t a FreeBSD kernelben, és egy jailbe |
+ | Mivel az Oracle adatbázis hivatalosan nem támogatott a FreeBSD-n, a gyakorlatban még arra is használják, hogy engedélyezik a Linux binary compatibility-t a FreeBSD kernelben, és egy jail-be |
telepítenek egy linux disztribúció userland-jét, ahová aztán telepítik az Oracle adatbázist. |
telepítenek egy linux disztribúció userland-jét, ahová aztán telepítik az Oracle adatbázist. |
||
52. sor: | 57. sor: | ||
A devfs-hez való hozzáférést a devfs.conf és a devfs.rules fájlokkal manipulálhatjuk, ahol az egyes eszközökhöz |
A devfs-hez való hozzáférést a devfs.conf és a devfs.rules fájlokkal manipulálhatjuk, ahol az egyes eszközökhöz |
||
− | linkkeket hozhatunk létre, amikhez aztán különböző hozzáférési jogosultágokat |
+ | linkeket hozhatunk létre, amikhez aztán különböző hozzáférési jogosultágokat |
adhatunk meg a szabályokkal. |
adhatunk meg a szabályokkal. |
||
A jogosultságok finomhangolása a sysctl-en keresztül valósítható meg különböző |
A jogosultságok finomhangolása a sysctl-en keresztül valósítható meg különböző |
||
változókkal, amelyek például meghatározzák a maximális gyermekfolyamatok |
változókkal, amelyek például meghatározzák a maximális gyermekfolyamatok |
||
− | számát a jailen belül, a SystemV IPC mechanizmus használatát, a mountolás |
+ | számát a jail-en belül, a SystemV IPC mechanizmus használatát, a mountolás |
jogát, a hostnév megváltoztathatóságát és így tovább ( man 8 jail ). |
jogát, a hostnév megváltoztathatóságát és így tovább ( man 8 jail ). |
||
70. sor: | 75. sor: | ||
===Hálózati konfiguráció=== |
===Hálózati konfiguráció=== |
||
− | A hálózati alkalmazások konfigurációjánál ügyelni kell arra, hogy a jailben és a |
+ | A hálózati alkalmazások konfigurációjánál ügyelni kell arra, hogy a jail-ben és a |
hoston is használt hálózati alkalmazást úgy állítsuk be, hogy alapból ne a 0.0.0.0 |
hoston is használt hálózati alkalmazást úgy állítsuk be, hogy alapból ne a 0.0.0.0 |
||
(any) címen fogadja a kapcsolatokat, mert akkor a hostoló gép fogja kiszolgálni a |
(any) címen fogadja a kapcsolatokat, mert akkor a hostoló gép fogja kiszolgálni a |
||
kérést a jail helyett. |
kérést a jail helyett. |
||
− | A hálózati konfigurációnál választhatunk, hogy vagy hozzáadjuk a jailnek beállított |
+ | A hálózati konfigurációnál választhatunk, hogy vagy hozzáadjuk a jail-nek beállított |
IP címet aliasként egy fizikai interfészhez, így a jailünk IP címéről szóló ARP |
IP címet aliasként egy fizikai interfészhez, így a jailünk IP címéről szóló ARP |
||
kérésre válaszol a MAC címével, és ezután amíg érvényes a bejegyzés, a |
kérésre válaszol a MAC címével, és ezután amíg érvényes a bejegyzés, a |
||
− | jailünknek szánt csomagot a hoszt gép fogadja, és a routing tábla alapján |
+ | jail-ünknek szánt csomagot a hoszt gép fogadja, és a routing tábla alapján |
− | továbbítja a loopback interfészre, ahol az egyes jailek fogadni tudják a nekik szóló |
+ | továbbítja a loopback interfészre, ahol az egyes jail-ek fogadni tudják a nekik szóló |
− | csomagot, gyakorlatilag ez analóg, a platformvirtualizációnál megismert bridgelt |
+ | csomagot, gyakorlatilag ez analóg, a platformvirtualizációnál megismert bridge-elt |
megoldással. |
megoldással. |
||
<pre> |
<pre> |
||
− | freebsdvmware# ifconfig em0 alias 192.168.2.199 netmask 255.255.255.0 |
+ | freebsd-vmware# ifconfig em0 alias 192.168.2.199 netmask 255.255.255.0 |
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 |
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 |
||
options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM> |
options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM> |
||
95. sor: | 100. sor: | ||
</pre> |
</pre> |
||
− | A másik esetben a local loopback interfészre konfigurálunk aliast, és a jailünknek |
+ | A másik esetben a local loopback interfészre konfigurálunk aliast, és a jail-ünknek |
a privát címtartományból választunk címet, majd a natd beállításával tudunk |
a privát címtartományból választunk címet, majd a natd beállításával tudunk |
||
hozzáférni a hálózatról. ( port forwarding ) Ez utóbbi tipikusan a webkiszolgálók |
hozzáférni a hálózatról. ( port forwarding ) Ez utóbbi tipikusan a webkiszolgálók |
||
− | alkalmazása esetén áll fent, amikor a host gépen az apache-on bekonfiguráljuk a |
+ | alkalmazása esetén áll fent, amikor a host gépen az apache-on konfiguráljuk a |
Virtual Hostokat, és a kiszolgálóhoz történő továbbítás a domain név alapján |
Virtual Hostokat, és a kiszolgálóhoz történő továbbítás a domain név alapján |
||
történik. |
történik. |
||
<pre> |
<pre> |
||
− | freebsdvmware# ifconfig lo0 alias 127.0.0.100 netmask 255.0.0.0 |
+ | freebsd-vmware# ifconfig lo0 alias 127.0.0.100 netmask 255.0.0.0 |
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384 |
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384 |
||
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 |
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 |
||
110. sor: | 115. sor: | ||
</pre> |
</pre> |
||
Ha a host gépen létrehozunk különböző loopback interfészeket, classless |
Ha a host gépen létrehozunk különböző loopback interfészeket, classless |
||
− | címzéssel, akkor megoldható, hogy az egyes jailek ne lássák egymást, vagy csak |
+ | címzéssel, akkor megoldható, hogy az egyes jail-ek ne lássák egymást, vagy csak |
az egy hálózatban lévők tudjanak kommunikáni egymással ( pl. adatbázis jail + |
az egy hálózatban lévők tudjanak kommunikáni egymással ( pl. adatbázis jail + |
||
webkiszolgáló jail közös loopback hálózaton) |
webkiszolgáló jail közös loopback hálózaton) |
||
===Jailutils=== |
===Jailutils=== |
||
− | A jailek userspace-béli kezeléséhez a jailutils szoftvercsomag áll a rendelkezésünkre. |
+ | A jail-ek userspace-béli kezeléséhez a jailutils szoftvercsomag áll a rendelkezésünkre. |
Főbb elemei: |
Főbb elemei: |
||
*jstart – jail : jail elindítása, szükséges paraméterek fent |
*jstart – jail : jail elindítása, szükséges paraméterek fent |
||
*jkill : a jail leállítása |
*jkill : a jail leállítása |
||
− | *jails – jls : a futó jailek listája |
+ | *jails – jls : a futó jail-ek listája |
− | *jexec : egy futó jailben való utasítás végrehajtásához |
+ | *jexec : egy futó jail-ben való utasítás végrehajtásához |
*/etc/rc.d/jail : általános script [fast|force|one](start|stop|restart|rcvar) lehetőségekkel |
*/etc/rc.d/jail : általános script [fast|force|one](start|stop|restart|rcvar) lehetőségekkel |
||
− | A jail parancs a /bin/sh /etc/rc parancs argumentummal indítva ugyanazt eredményezni, mint a jstart. A complete jail tehát nem más, mint a FreeBSD rendszer (újra)indítása a jailben, ahol a gyermekfolyamatok mind öröklik a jail általi korlátokat. |
+ | A jail parancs a /bin/sh /etc/rc parancs argumentummal indítva ugyanazt eredményezni, mint a jstart. A complete jail tehát nem más, mint a FreeBSD szolgáltatásainak (újra)indítása a jail-ben a /etc/rc initscript-tel, ahol a gyermekfolyamatok mind öröklik a jail általi korlátokat. |
===Jail indítása=== |
===Jail indítása=== |
||
− | A jail indítása történhet a /etc/rc.d/jail start <jailnév> scripttel, vagy a jail <jail root> <jail hostnév> [<jail ip cím>] <futtatandó parancs> |
+ | A jail indítása történhet a /etc/rc.d/jail start <jailnév> scripttel, vagy a jail <jail root> <jail hostnév> [<jail ip cím>] <futtatandó parancs> (az előbbi esetben a jail konfigurációját az /etc/rc.conf -ban el kell helyeznünk, a kézikönyvnek megfelelő szintaktikával) |
A parancs, ha a teljes konfigot indítani akarjuk, akkor a /bin/sh /etc/rc lesz. |
A parancs, ha a teljes konfigot indítani akarjuk, akkor a /bin/sh /etc/rc lesz. |
||
142. sor: | 147. sor: | ||
Local package initialization:. |
Local package initialization:. |
||
</pre> |
</pre> |
||
− | A futó jaileket a jls segítségével kérdezhetjük le. |
+ | A futó jail-eket a jls segítségével kérdezhetjük le. |
<pre> |
<pre> |
||
freebsd-vmware# jls |
freebsd-vmware# jls |
||
150. sor: | 155. sor: | ||
11 192.168.2.199 webserver /usr/jails/webserver |
11 192.168.2.199 webserver /usr/jails/webserver |
||
</pre> |
</pre> |
||
− | A jails parancs szintén a futó jaileket listázza, csak tömörebb formában: |
+ | A jails parancs szintén a futó jail-eket listázza, csak tömörebb formában: |
<pre> |
<pre> |
||
freebsd-vmware# jails |
freebsd-vmware# jails |
||
157. sor: | 162. sor: | ||
webserver |
webserver |
||
</pre> |
</pre> |
||
− | A hostról a jexec segítségével tudunk programokat futtatni a jailben, amihez szükségünk van a jail id-re. Hogy parancssort kapjunk , egyszerűen csak meg kell hívni a jexec segítségével: |
+ | A hostról a jexec segítségével tudunk programokat futtatni a jail-ben, amihez szükségünk van a jail id-re. Hogy parancssort kapjunk , egyszerűen csak meg kell hívni a shellt a jexec segítségével: |
<pre> |
<pre> |
||
freebsd-vmware# jexec 14 csh |
freebsd-vmware# jexec 14 csh |
||
164. sor: | 169. sor: | ||
===Telepítés a jailben=== |
===Telepítés a jailben=== |
||
− | A installworld, és a distribution után csak egy alap userlandet kapunk, ahol csak a szükséges alkalmazások vannak telepítve. |
+ | A installworld, és a distribution után csak egy alap userland-et kapunk, ahol csak a szükséges alkalmazások vannak telepítve. |
Ha szeretnénk, akkor a sysinstall vagy a pkg_add -r segítségével a hálózatról tudunk csomagokat telepíteni, ha a hálóztati kapcsolatunk a jail-ben lehetővé teszi az internet elérést. |
Ha szeretnénk, akkor a sysinstall vagy a pkg_add -r segítségével a hálózatról tudunk csomagokat telepíteni, ha a hálóztati kapcsolatunk a jail-ben lehetővé teszi az internet elérést. |
||
− | Ha nem, akkor a FreeBSD telepítő cd-jét mountolhatjuk kívülről a jailbe, és a jail-béli root, a sysinstall segítségével telepítheti a kívánt alkalmazásokat. |
+ | Ha nem, akkor a FreeBSD telepítő lemezét mount-olhatjuk kívülről a jail-be, és a jail-béli root, a sysinstall segítségével telepítheti a kívánt alkalmazásokat. |
<pre> |
<pre> |
||
freebsd-vmware#mount -t cd9660 /dev/acd0 /usr/jails/test/dist |
freebsd-vmware#mount -t cd9660 /dev/acd0 /usr/jails/test/dist |
||
173. sor: | 178. sor: | ||
test#sysinstall |
test#sysinstall |
||
</pre> |
</pre> |
||
− | Itt a configure/packages menüpont alatt az install from existing filesystem -nél adjuk meg az előbb mountolt /dist könyvtárat, és máris válogathatunk a telepíthető csomagok közül. |
+ | Itt a configure/packages menüpont alatt az install from existing filesystem -nél adjuk meg az előbb mount-olt /dist könyvtárat, és máris válogathatunk a telepíthető csomagok közül. |
===Hibák=== |
===Hibák=== |
||
A FreeBSD jails komoly hibái: |
A FreeBSD jails komoly hibái: |
||
− | *nem lehet cpu és ram limitet állítani az egyes jailekhez |
+ | *nem lehet cpu és ram limitet állítani az egyes jail-ekhez |
− | *ha updateljük a host rendszert, akkor az összes jailünket updatelnünk kell, ami elég időigényes feladat |
+ | *ha updateljük a host rendszert, akkor az összes jail-ünket updatelnünk kell, ami elég időigényes feladat |
− | Az utóbbira megoldás: készítünk egy master templatet, és az egyes jailek könyvtárszerkezetébe linkeljük a megfelelő binárisokat tartalmazó könyvtárakat, az egyes jaileknek csak a konfigurációjuk lesz egyedi. |
+ | Az utóbbira megoldás: készítünk egy master template-et, és az egyes jail-ek könyvtárszerkezetébe linkeljük a megfelelő binárisokat tartalmazó könyvtárakat, így az egyes jail-eknek csak a konfigurációjuk és az utólag telepített programjaik lesznek egyediek. |
Így update esetén csak egyszer kell a make userland procedúrán végigmennünk. |
Így update esetén csak egyszer kell a make userland procedúrán végigmennünk. |
||
188. sor: | 193. sor: | ||
fájlban található base_dir -be (alapértelmezetten a /usr/jails) a szükésges |
fájlban található base_dir -be (alapértelmezetten a /usr/jails) a szükésges |
||
könyvtárszerkezetet, amely a basejail és a flavours könyvtárakból áll. A flavour-ök |
könyvtárszerkezetet, amely a basejail és a flavours könyvtárakból áll. A flavour-ök |
||
− | előre megírt “ízesítések” a létrehozandó jailekhez, amelyben megadhatunk |
+ | előre megírt “ízesítések” a létrehozandó jail-ekhez, amelyben megadhatunk |
felhasználókat, csoprtokat, fájlokat, telepítendő csomagokat, és post-installációs |
felhasználókat, csoprtokat, fájlokat, telepítendő csomagokat, és post-installációs |
||
utasításokat. A példányosításnál megadott flavour-ök beállításai fognak |
utasításokat. A példányosításnál megadott flavour-ök beállításai fognak |
||
alkalmazódni a létrehozott jailre. (pl. httpd flavour, mysql flavour) |
alkalmazódni a létrehozott jailre. (pl. httpd flavour, mysql flavour) |
||
− | Ha azt szeretnénk, hogy a létrehozott jailek bootolásnál induljanak, akkor a |
+ | Ha azt szeretnénk, hogy a létrehozott jail-ek bootolásnál induljanak, akkor a |
/etc/rc.conf -ba az ezjail_enabled=”YES” sort fel kell vennünk, de ekkor ügyelnünk |
/etc/rc.conf -ba az ezjail_enabled=”YES” sort fel kell vennünk, de ekkor ügyelnünk |
||
kell arra, hogy az interfészbeállításokat, is elvégezzük az rc.conf -ban a |
kell arra, hogy az interfészbeállításokat, is elvégezzük az rc.conf -ban a |
||
203. sor: | 208. sor: | ||
===Összefoglalás=== |
===Összefoglalás=== |
||
+ | A freebsd jails könnyen elsajátítható operációs rendszer szintű virtualizációt biztosít. A natív eszközökkel körülményesen adminisztrálható rendszer, az ezjail használatával, helytakarékossá, és effektívebbé válik a basejail használata által. |
||
+ | Nagy hátránya, hogy nem lehet cpu és ram korlátokat állítani, ami komoly hiányosság más OS virtualizációs rendszerekkel szemben, ahol ez biztosított (Pl. OpenVZ Linux alatt). |
||
+ | |||
+ | További olvasásra: |
||
+ | *man 8 jail |
||
+ | *man 1 ezjail-admin |
||
+ | *http://www.freebsd.org/doc/handbook/jails.html |
||
+ | *http://wiki.freebsd.org/Jails |
||
+ | *http://erdgeist.org/arts/software/ezjail/ |
||
+ | *http://www.freebsd.org/doc/en/books/arch-handbook/jail.html |
A lap jelenlegi, 2010. december 16., 12:55-kori változata
Írta: Janky Ferenc Nándor , 2010. november 28.
A tárgy házi feladatának keretebén megismerkedtem a FreeBSD -vel, és annak jails mechanizmusával. A feladat során tanulmányoztam a FreeBSD hivatalos kézikönyvét, amelyből hiányzott a hálózati konfiguráció leírása, így az alábbi fejezetek egy közel teljes áttekintést nyújtanak a jail-ek adminisztrálása során végrehajtandó feladatokról.
Tartalomjegyzék |
[szerkesztés] 1 Bevezetés
A FreeBSD jails egy operációsrendszer-szintű virtualizációt megvalósító eszköz, amely a FreeBSD 4-es verziója óta elérhető.
Az OS-szintű virtualizáció a mi választásunk, ha megfelel, hogy a guest gépek és a host közös kernelen osztozzon, így nem kell virtuális hardvert biztosítanunk, elég ha az alkalmazások szintjén tudunk virtuális környezetet biztosítani. ( Ha egy jail miatt kernel crash történik, akkor az az egész rendszerre kihat.)
A jails eredete, hogy a chroot alkalmazást akarták kiváltani, mert az nem volt kellően rugalmas, csak a fájlrendszer szintjén biztosította a szegmentálást, de ki lehetett jutni a chroot-olt alkalmazásokból. Továbbá a chroot-olt processzek számára továbbra is láthatóak maradtak a rendszer komponensei (IPC, felhasználók, kernel adatszerkezetek, device-ok).
A jail-ben futó processzek nem tudnak interakcióba lépni a jail-en kívüli processzekkel ( Ez nem teljesen igaz, mert a shared memory elkülönítése még nem megvalósított), továbbá tilos a globális rendszerállapot megváltoztatása a jail-en belülről, még az ottani rootnak is.
Egy jail-t négy elem határoz meg:
- egy könyvtárfa ( lásd chroot)
- hostnév
- IP cím (a jail élettartama során nem lehet megváltoztatni)
- parancs, amit a jailben futtatni szeretnénk
Két típusát különböztetik meg:
- complete jail (egy teljes disztribúció, akár linux alapú is lehet )
- service jail ( egy alkalmazás, vagy szolgáltatás futtatása)
[szerkesztés] 2 Alkalmazási terület
Fő alkalmazása : service jail-ek, különböző alkalmazás szerver szoftver konfigurációk használata, anélkül, hogy a hostoló rendszerünket ki kéne tenni a telepítés viszontagságainak. Egy rosszul sikerült telepítés után a problémás jail könyvtárszerkezete könnyen eltávolítható, míg a hostoló rendszerünk konfigurációja érintetlen marad.
Mivel az Oracle adatbázis hivatalosan nem támogatott a FreeBSD-n, a gyakorlatban még arra is használják, hogy engedélyezik a Linux binary compatibility-t a FreeBSD kernelben, és egy jail-be telepítenek egy linux disztribúció userland-jét, ahová aztán telepítik az Oracle adatbázist.
[szerkesztés] 3 Jail létrehozása
A létrehozás folyamata:
- setenv D /a/jail/konyvtara
- mkdir -p $D
- cd /usr/src
- make buildworld (a felhasználói állományok fordítása,csak ha még nem volt,
vagy csak update esetén kell futtatni)
- make installworld DESTDIR=$D (A célkönyvtár feltöltése a binárisokkal,man
page-ekkel stb)
- make distribution DESTDIR=$D ( a /usr/src/etc másolása a $D/etc -be)
Ha szükséges, akkor a devfs-t is felcsatolhatjuk a $D/dev alá
- mount -t devfs devfs $D/dev (ha szeretnénk, hogy reboot után is
mountolódjon, akkor fstab-ba is be kell írni)
A devfs-hez való hozzáférést a devfs.conf és a devfs.rules fájlokkal manipulálhatjuk, ahol az egyes eszközökhöz linkeket hozhatunk létre, amikhez aztán különböző hozzáférési jogosultágokat adhatunk meg a szabályokkal.
A jogosultságok finomhangolása a sysctl-en keresztül valósítható meg különböző változókkal, amelyek például meghatározzák a maximális gyermekfolyamatok számát a jail-en belül, a SystemV IPC mechanizmus használatát, a mountolás jogát, a hostnév megváltoztathatóságát és így tovább ( man 8 jail ).
A fájlrendszeren lehetőség van beállítani kvótarendszert, melyet mountoláskor kell jeleznük az opciók között ( userquota,groupquota ), majd ezután az egyes könyvtárakra van lehetőségünk méret- és inodeszámbeli megkötéseket adnunk, melyek így az egyes jail-ek könyvtárára beállítva biztosítják a méret- és mennyiségkorlátozást.
A fentiek majdnem teljesen lefedik az erőforrások kiosztásának lehetőségeit a jail-ek használata esetén. Sajnos a cpu, a ram és a hálózati sávszélesség kiosztásáról nem rendelkezhetünk.
[szerkesztés] 4 Hálózati konfiguráció
A hálózati alkalmazások konfigurációjánál ügyelni kell arra, hogy a jail-ben és a hoston is használt hálózati alkalmazást úgy állítsuk be, hogy alapból ne a 0.0.0.0 (any) címen fogadja a kapcsolatokat, mert akkor a hostoló gép fogja kiszolgálni a kérést a jail helyett.
A hálózati konfigurációnál választhatunk, hogy vagy hozzáadjuk a jail-nek beállított IP címet aliasként egy fizikai interfészhez, így a jailünk IP címéről szóló ARP kérésre válaszol a MAC címével, és ezután amíg érvényes a bejegyzés, a jail-ünknek szánt csomagot a hoszt gép fogadja, és a routing tábla alapján továbbítja a loopback interfészre, ahol az egyes jail-ek fogadni tudják a nekik szóló csomagot, gyakorlatilag ez analóg, a platformvirtualizációnál megismert bridge-elt megoldással.
freebsd-vmware# ifconfig em0 alias 192.168.2.199 netmask 255.255.255.0 em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM> ether 00:0c:29:a0:22:c9 inet 192.168.2.107 netmask 0xffffff00 broadcast 192.168.2.255 inet 10.0.0.2 netmask 0xff000000 broadcast 10.255.255.255 inet 192.168.2.199 netmask 0xffffff00 broadcast 192.168.2.255 media: Ethernet autoselect (1000baseTX <fullduplex>) status: active
A másik esetben a local loopback interfészre konfigurálunk aliast, és a jail-ünknek a privát címtartományból választunk címet, majd a natd beállításával tudunk hozzáférni a hálózatról. ( port forwarding ) Ez utóbbi tipikusan a webkiszolgálók alkalmazása esetén áll fent, amikor a host gépen az apache-on konfiguráljuk a Virtual Hostokat, és a kiszolgálóhoz történő továbbítás a domain név alapján történik.
freebsd-vmware# ifconfig lo0 alias 127.0.0.100 netmask 255.0.0.0 lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 inet6 ::1 prefixlen 128 inet 127.0.0.1 netmask 0xff000000 inet 127.0.0.100 netmask 0xff000000
Ha a host gépen létrehozunk különböző loopback interfészeket, classless címzéssel, akkor megoldható, hogy az egyes jail-ek ne lássák egymást, vagy csak az egy hálózatban lévők tudjanak kommunikáni egymással ( pl. adatbázis jail + webkiszolgáló jail közös loopback hálózaton)
[szerkesztés] 5 Jailutils
A jail-ek userspace-béli kezeléséhez a jailutils szoftvercsomag áll a rendelkezésünkre. Főbb elemei:
- jstart – jail : jail elindítása, szükséges paraméterek fent
- jkill : a jail leállítása
- jails – jls : a futó jail-ek listája
- jexec : egy futó jail-ben való utasítás végrehajtásához
- /etc/rc.d/jail : általános script [fast|force|one](start|stop|restart|rcvar) lehetőségekkel
A jail parancs a /bin/sh /etc/rc parancs argumentummal indítva ugyanazt eredményezni, mint a jstart. A complete jail tehát nem más, mint a FreeBSD szolgáltatásainak (újra)indítása a jail-ben a /etc/rc initscript-tel, ahol a gyermekfolyamatok mind öröklik a jail általi korlátokat.
[szerkesztés] 6 Jail indítása
A jail indítása történhet a /etc/rc.d/jail start <jailnév> scripttel, vagy a jail <jail root> <jail hostnév> [<jail ip cím>] <futtatandó parancs> (az előbbi esetben a jail konfigurációját az /etc/rc.conf -ban el kell helyeznünk, a kézikönyvnek megfelelő szintaktikával)
A parancs, ha a teljes konfigot indítani akarjuk, akkor a /bin/sh /etc/rc lesz.
freebsd-vmware# jail /usr/jails/test3/ test3 127.0.0.100 /bin/sh /etc/rc Loading configuration files. Creating and/or trimming log files:. Starting syslogd. ELF ldconfig path: /lib /usr/lib /usr/lib/compat a.out ldconfig path: /usr/lib/aout /usr/lib/compat/aout Clearing /tmp (X related). Starting local daemons:. Updating motd. Starting cron. Local package initialization:.
A futó jail-eket a jls segítségével kérdezhetjük le.
freebsd-vmware# jls JID IP Address Hostname Path 14 127.0.0.100 test3 /usr/jails/test3 12 127.0.0.2 test /usr/jails/test 11 192.168.2.199 webserver /usr/jails/webserver
A jails parancs szintén a futó jail-eket listázza, csak tömörebb formában:
freebsd-vmware# jails test3 test webserver
A hostról a jexec segítségével tudunk programokat futtatni a jail-ben, amihez szükségünk van a jail id-re. Hogy parancssort kapjunk , egyszerűen csak meg kell hívni a shellt a jexec segítségével:
freebsd-vmware# jexec 14 csh test3#
[szerkesztés] 7 Telepítés a jailben
A installworld, és a distribution után csak egy alap userland-et kapunk, ahol csak a szükséges alkalmazások vannak telepítve. Ha szeretnénk, akkor a sysinstall vagy a pkg_add -r segítségével a hálózatról tudunk csomagokat telepíteni, ha a hálóztati kapcsolatunk a jail-ben lehetővé teszi az internet elérést.
Ha nem, akkor a FreeBSD telepítő lemezét mount-olhatjuk kívülről a jail-be, és a jail-béli root, a sysinstall segítségével telepítheti a kívánt alkalmazásokat.
freebsd-vmware#mount -t cd9660 /dev/acd0 /usr/jails/test/dist freebsd-vmware# jexec 12 csh test#sysinstall
Itt a configure/packages menüpont alatt az install from existing filesystem -nél adjuk meg az előbb mount-olt /dist könyvtárat, és máris válogathatunk a telepíthető csomagok közül.
[szerkesztés] 8 Hibák
A FreeBSD jails komoly hibái:
- nem lehet cpu és ram limitet állítani az egyes jail-ekhez
- ha updateljük a host rendszert, akkor az összes jail-ünket updatelnünk kell, ami elég időigényes feladat
Az utóbbira megoldás: készítünk egy master template-et, és az egyes jail-ek könyvtárszerkezetébe linkeljük a megfelelő binárisokat tartalmazó könyvtárakat, így az egyes jail-eknek csak a konfigurációjuk és az utólag telepített programjaik lesznek egyediek.
Így update esetén csak egyszer kell a make userland procedúrán végigmennünk.
[szerkesztés] 9 EZjail
A fent említett technikához készült egy keretrendszer, melynek neve ezjail. Telepítés után az ezjail-admin update -p paranccsal létrehozhatujuk az ezjail.conf fájlban található base_dir -be (alapértelmezetten a /usr/jails) a szükésges könyvtárszerkezetet, amely a basejail és a flavours könyvtárakból áll. A flavour-ök előre megírt “ízesítések” a létrehozandó jail-ekhez, amelyben megadhatunk felhasználókat, csoprtokat, fájlokat, telepítendő csomagokat, és post-installációs utasításokat. A példányosításnál megadott flavour-ök beállításai fognak alkalmazódni a létrehozott jailre. (pl. httpd flavour, mysql flavour) Ha azt szeretnénk, hogy a létrehozott jail-ek bootolásnál induljanak, akkor a /etc/rc.conf -ba az ezjail_enabled=”YES” sort fel kell vennünk, de ekkor ügyelnünk kell arra, hogy az interfészbeállításokat, is elvégezzük az rc.conf -ban a hibamentes indulás érdekében.
ezjail-admin create -f flavour jailname jailip
Ez lérterhozza a jail számára könyvtárakat, linkeli a szükséges basejail bejegyzéseket, és végrehajta az egyes flavour-ökben megadott konfigurációkat.
[szerkesztés] 10 Összefoglalás
A freebsd jails könnyen elsajátítható operációs rendszer szintű virtualizációt biztosít. A natív eszközökkel körülményesen adminisztrálható rendszer, az ezjail használatával, helytakarékossá, és effektívebbé válik a basejail használata által. Nagy hátránya, hogy nem lehet cpu és ram korlátokat állítani, ami komoly hiányosság más OS virtualizációs rendszerekkel szemben, ahol ez biztosított (Pl. OpenVZ Linux alatt).
További olvasásra: