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
Az állományrendszerek kvótái
ban 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 processzor
idõ
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.