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. Ezek 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. szakasz - Az állományrendszerek kvótáiban 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 az
/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 a login.conf(5) man
oldal is jól leírja.
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 azonban, hogy 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).
coredumpsize
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.
cputime
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.
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.
filesize
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.
maxproc
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).
memorylocked
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.
memoryuse
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ő.
openfiles
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.
sbsize
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.
stacksize
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 korlátozására, így emiatt inkább a többi korláttal együtt érdemes alkalmazni.
Van néhány tényező, amelyekre é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.
Az 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):
<questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon:
<gabor@FreeBSD.org>.