Ha már vannak felhasználóink, gyakran szóba kerülhet esetükben a rendszer használatának korlátozása. A FreeBSD rengeteg módon engedi korlátozni a rendszergazdának az egyénenként használható erőforrások mennyiségét a rendszerben. Ezeket a korlátok két részre oszthatóak: a lemezkvótákra és egyéb erőforráskorlátokra.
A lemezkvóták a felhasználók lemezhasználatát korlátozzák, és lehetővé teszik, hogy állandó újraszámolás nélkül, gyorsan ellenőrizni tudjuk ennek mértékét. A kvótákat a 18.15 Szakaszban részletezzük.
A többi erőforrás korlátozása magában foglalja a processzoridő, memória és minden olyan erőforrás behatárolását, amihez a felhasználó csak hozzá tud férni. Ezeket bejelentkezési osztályokon keresztül határozzuk meg, ezekről esik itt most szó.
A bejelentkezési osztályokat a /etc/login.conf állományban adhatjuk meg. Ennek pontos ismertetése nem tárgya ennek a szakasznak, de ezt megtalálhatjuk a login.conf(5) man oldalon. Elegendő csak annyit mondanunk, hogy minden felhasználóhoz tartozik egy bejelentkezési osztály (alapértelmezés szerint a default nevű), és minden egyes bejelentkezési osztályhoz tulajdonságok egy halmaza társul. Ezek a bejelentkezési tulajdonságok név=érték párosokból állnak, ahol név egy jól ismert azonosító, illetve az érték egy tetszőleges sztring, melyet a nevétől függő módon dolgozunk fel. A bejelentkezési osztályok és tulajdonságok beállítása eléggé magától értetődő, és login.conf(5) man oldal is jól leírja.
Megjegyzés: A rendszer általában nem magát az /etc/login.conf állományban található beállításokat olvassa be, hanem az /etc/login.conf.db állományt, amiben gyorsabban lehet keresni. Az /etc/login.conf állományból az /etc/login.conf.db állományt az alábbi paranccsal tudjuk legyártani:
# cap_mkdb /etc/login.conf
Az erőforrások korlátozása két irányban is eltér a sima hétköznapi bejelentkezési tulajdonságoktól. Először is minden korláthoz létezik egy gyenge (aktuális) és egy erős korlát. A gyenge korlátok a felhasználók vagy az alkalmazások részéről még finomíthatóak, de az erős korláton túl már nem. Ez utóbbit mindig tudja csökkenteni a felhasználó, de sose tudja növelni. Másodsorban a legtöbb erőforráskorlát az adott felhasználó által futtatott programokra egyenként vonatkozik, nem pedig az összesre együttesen. Megjegyezzük, hogy azonban ezeket az eltéréseket a korlátok különleges kezelése indokolja, nem pedig a bejelentkezési tulajdonságok rendszerének megvalósítása (tehát a korlátok valójában nem ezen tulajdonságok speciális esetei.)
Így aztán, minden további magyarázkodás nélkül, felsoroljunk alant a leggyakrabban alkalmazott erőforráskorlátokat (a többi, más egyéb bejelentkezési tulajdonságokkal együtt, megtalálható a login.conf(5) man oldalon).
A program által létrehozott memóriakivonat maximális méretét határolja be ez a korlát, értelemszerűen a többi lemezterületre vonatkozó korlátnak (például a filesize vagy a lemezkvóták) alárendelt módon. Mindazonáltal ezt gyakran használjuk egyfajta enyhébb lemezfoglalási korlátként. Mivel nem maguk a felhasználók hozzák létre ezeket az állományokat és sokszor nem is törlik le ezeket, ez a beállítás azonban megmentheti ezeket a nagyobb programok (mint például az emacs) összeomlása során keletkező memóriakivonatok felesleges helyfoglalásától.
Az a maximális processzoridő, amit a felhasználó által futtatott programok egyenként fogyaszthatnak. A vétkező programok futását a rendszermag leállítja.
Megjegyzés: Ez a korlát a processzoridőre vonatkozik, nem pedig a processzor kihasználtságának százalékára, ahogy a top(1) és a ps(1) szokta megjeleníteni. Ez utóbbi alapján korlátozni ugyanis, még ezen leírás készítésének pillanataiban nem lehetséges, és meglehetősen hasztalan is lenne: egy fordítóprogram -- ami minden bizonnyal egy szabályosan futó program -- könnyen fel tudja emészteni majdnem az egész processzort egy időre.
A felhasználó által birtokolható állományok maximális mérete. Eltérően a lemezkvótáktól, ez a korlát az egyes állományokra vonatkozik, nem pedig a felhasználó összes állományára együttesen.
A felhasználó által egyidőben,
az előtérben és a háttérben
futtatható programok maximális száma.
Érthető okokból ez az érték
nem lehet nagyobb, mint a rendszerben a sysctl(8)
által definiált
kern.maxproc
(a rendszermag által
maximálisan futtatható programok
számának) értéke.
Érdemes még továbbá megjegyezni,
hogy ez a beállítás gátolhatja a
felhasználó munkáját: gyakran
hasznos lehet egyszerre több példányban
is bejelentkezni a rendszerbe vagy csövekkel
összekapcsolt programokat futtatni. Bizonyos
feladatok, mint például egy nagyobb program
lefordítása, több program
futására is szétterjedhetnek
(például a make(1), cc(1) és
egyéb köztes feldolgozókra).
Ezzel korlátozhatjuk az egyes futó programok által zárolható memóriaterület méretét a központi memóriában (lásd mlock(2)). Egyes rendszerkritikus programok, mint például az amd(8), zárolják magukat a központi memóriában, és ezért soha nem lapozódnak ki onnan. Ennek köszönhetően nem érinti ezeket a rendszer lapozásból eredő esetleges lelassulása.
Ez az a maximális memóriamennyiség, amelyet egy futó program egyszerre használhat. Ebbe együttesen beleértendő a központi memóriában és a lapozóállományban elfoglalt hely. Ez ugyan nem minden szempontból korlátozza egy program memóriahasználatát, de indulásnak megfelelő.
A felhasználó egyes futtatott programjai
által egy időben megnyitható
állományok maximális száma.
FreeBSD-ben az állományok közé a
foglalatok és az IPC-csatornák is
beszámítanak. Ezért vigyázzunk,
nehogy véletlenül túlságosan
alacsonyra állítsuk ezt az
értéket. Ezt rendszerszinten a
kern.maxfiles
sysctl(8)
érték határozza meg.
A korlátozás a felhasználó által egyszerre maximálisan elérhető hálózati memória és így a rendszermag puffereire vonatkozik. Eredetileg a régebbi, sok csatlakozást felemésztő DoS (Denial of Service) támadások ellen nyújtana védelmet, de általánosságban alkalmazható a hálózati kommunikáció korlátozására is.
Ez a felhasználó által működtetett egyes programok vermeinek maximális mérete. Önmagában nem elegendő a programok által használt memóriamennyiség lekorlátozására, így emiatt inkább a többi korláttal együtt érdemes alkalmazni.
Van néhány tényező, amire érdemes odafigyelni az erőforrások korlátainak beállítása során. Most következik pár tipp, javaslat és egyéb megjegyzés a témához.
A rendszerindítás során az /etc/rc által indított programok a daemon bejelentkezési osztályba tartoznak.
Habár a rendszerrel érkező /etc/login.conf állományban remekül be van állítva a legtöbb korlát, de nekünk, mint rendszergazdáknak, kell ismernünk a saját rendszerünk korlátait. Ezen korlátok túlzott tágításával a rendszerünk könnyen leterhelhetővé válik, míg a túlzott szűkítésével akadályozhatjuk a hatékony használatát.
A X Window System (X11) felhasználóinak a többi felhasználónál valószínűleg jóval több erőforráshoz kell tudniuk hozzáférni. Az X11 már önmagában sok erőforrást eszik, de egyben bátorítja is a felhasználókat több program párhuzamos futtatására.
Ne felejtsük el, hogy sok korlát az egyes
különállóan futó programokra
vonatkozik, nem pedig a felhasználó összes
futtatott programjára. Például ha
beállítjuk 50-re az openfiles
értékét, a felhasználó
által elindított programok mindegyike legfeljebb
50 állományt tud majd megnyitni. Emiatt a
felhasználó által egyszerre
ténylegesen megnyitható állományok
száma az openfiles és a
maxproc aktuális
értékeinek szorzatából
adódik. Ugyanez igaz a
memóriahasználatra is.
Az erőforrások korlátozásáról, a bejelentkezési osztályokról és tulajdonságaikról a hozzájuk tartozó man oldalakon olvashatunk: cap_mkdb(1), getrlimit(2) és login.conf(5).
Ha kérdése van a FreeBSD-vel kapcsolatban, a következő
címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése,
kérjük erre a címre írjon: <gabor@FreeBSD.org>.