Bij het hebben van gebruikers komt wellicht ook de gedachte aan het beperken van de mogelijkheden op een systeem. FreeBSD biedt een aantal mogelijkheden waarmee een beheerder de hoeveelheid systeembronnen die een gebruiker kan aanwenden kan beperken. Die beperkingen zijn onderverdeeld in twee onderdelen: schijfquota en andere beperkingen voor bronnen.
Schijfquota beperken het schijfgebruik voor gebruikers en ze bieden een mogelijkheid om dat gebruik snel te controleren zonder het iedere keer te hoeven berekenen. Quota worden besproken in
Bestandssysteemquota
.
De overige beperking van bronnen omvat het beperken van het gebruik van CPU, geheugen en andere bronnen die gebruikers tot hun beschikking hebben. Die worden ingesteld in aanmeldklassen en worden hieronder beschreven.
Aanmeldklassen worden ingesteld in
/etc/login.conf
. De precieze semantiek wordt niet behandeld in dit handboek, maar die staat beschreven in
login.conf(5)
. Hier is het voldoende aan te geven dat iedere gebruiker wordt toegewezen aan een aanmeldklasse (standaard
default
) en dat iedere aanmeldklasse verbonden is met een groep aanmeldmogelijkheden (login capability). Een aanmeldmogelijkheid is een
naam=waarde
paar, waar
naam
een bekende eigenschap is en
waarde
een arbitraire string is die wordt verwerkt afhankelijk van de naam. Het instellen van aanmeldklassen en -mogelijkheden is een redelijk eenvoudig proces en wordt ook beschreven in
login.conf(5)
.
|
|
Een systeem leest de instellingen uit normaal gesproken
/etc/login.conf
niet direct, maar leest het databasebestand
/etc/login.conf.db
welke snellere opzoekmogelijkheden biedt.
/etc/login.conf.db
kan met het volgende commando gemaakt worden uit
/etc/login.conf
:
# cap_mkdb /etc/login.conf
|
Beperkingen van bronnen verschillen van standaard aanmeldmogelijkheden op twee manieren. Ten eerste is er voor iedere beperking een zachte en een harde limiet. Een zachte (huidige) limiet kan door een gebruiker of applicatie aangepast worden, maar mag niet hoger zijn dan de harde limiet. De laatste kan door een gebruiker verlaagd worden, maar nooit verhoogd. Deze verschillen worden veroorzaakt door de specifieke behandeling van de beperkingen, niet door de implementatie van het aanmeldmogelijkheden raamwerk, dat wil zeggen dat ze niet
echt
bijzondere aanmeldmogelijkheden zijn.
Hieronder worden de meest gebruikte beperkingen op bronnen beschreven. De overige mogelijkheden, samen met alle andere aanmeldmogelijkheden, staat beschreven in
login.conf(5)
.
-
coredumpsize
-
De limiet op de grootte van een corebestand dat wordt gemaakt door een programma is, om verschillende redenen, ondergeschikt aan andere beperkingen op het gebied van schijfgebruik (bijvoorbeeld
filesize
of schijfquota). Desalniettemin wordt deze instelling vaak gebruikt als een minder zware methode voor het beheersen van het gebruik van schijfruimte. Omdat gebruikers niet hun eigen corebestanden maken en ze vaak niet verwijderen, kan deze instelling helpen te voorkomen dat een schijf vol loopt in het geval een groot programma (bijvoorbeeld emacs) zou crashen.
-
cputime
-
Dit is de maximale hoeveelheid processortijd die een proces van een gebruiker mag gebruiken. Processen die meer bronnen gebruiken worden afgeschoten door de kernel.
|
|
Dit is een beperking op de CPU
tijd
die wordt gebruikt, niet op een percentage van de CPU, zoals wordt getoond in sommige velden door
top(1)
en
ps(1)
. Een limiet op de laatste is op het moment van schrijven niet mogelijk en zou ook redelijk waardeloos zijn: een compiler - waarschijnlijk een legitieme taak - kan makkelijk gedurende enige tijd bij 100% van een CPU gebruiken.
|
-
filesize
-
Dit is de maximale grootte voor een bestand waar een gebruiker eigenaar van kan zijn. Anders dan bij
schijfquota
is deze limiet van toepassing op individuele bestanden en niet op alle bestanden samen waarvan een gebruiker eigenaar is.
-
maxproc
-
Dit is het maximale aantal processen dat een gebruiker mag draaien. Hieronder vallen zowel processen die op de voorgrond draaien als op de achtergrond. Om duidelijke reden kan deze waarde niet groter zijn dan de ingestelde systeemlimiet voor
kern.maxproc
met
sysctl(8)
. Het te laag zetten van deze instelling kan de productiviteit van een gebruiker schaden: vaak is het zinvol om meerdere keren aangemeld te zijn of om pipelines uit te voeren. Sommige taken, zoals het compileren van een groot programma, brengen ook meerdere processen voort (bijvoorbeeld
make(1)
,
cc(1)
en andere tussentijdse preprocessors).
-
memorylocked
-
Dit is de maximale hoeveelheid geheugen die een proces mag claimen om te locken in het hoofdgeheugen (zie bijvoorbeeld
mlock(2)
). Sommige systeemkritische programma’s, zoals
amd(8)
, locken in het hoofdgeheugen, zodat in het geval dat ze uitgewisseld moeten worden, ze niet bijdragen aan dit uitwisselen indien er problemen zijn.
-
memoryuse
-
Dit is de maximale hoeveelheid geheugen die een proces op enig moment mag gebruiken. Hieronder vallen zowel hoofdgeheugen als het gebruik van het wisselbestand. Deze limiet vangt niet al het geheugengebruik af, maar het is een prima begin.
-
openfiles
-
Dit is het maximale aantal bestanden dat een proces open mag hebben. In FreeBSD representeren bestanden ook sockets en IPC kanalen. Deze limiet mag dus niet te laag gezet worden. De limiet voor het systeem staat ingesteld in
kern.maxfiles
van
sysctl(8)
.
-
sbsize
-
Dit is de limiet op de hoeveelheid netwerkgeheugen, en dus mbufs, die een gebruiker ter beschikking staan. Deze waarde komt voort uit het antwoord op een DoS aanval waarmee veel sockets werden gemaakt, maar het kan in het algemeen gebruikt worden om de hoeveelheid netwerkcommunicatie te limiteren.
-
stacksize
-
Dit is de maximale grootte voor een stack van een proces. Deze instelling alleen is niet genoeg om de hoeveelheid geheugen die een programma mag gebruiken te beperken. Daarom moet deze limiet samen met andere limieten gebruikt worden.
Er zijn nog een aantal dingen belangrijk bij het instellen bronbeperkingen. Hierna worden een aantal algemene tips, suggesties en commentaren gegeven.
-
Processen die bij het opstarten van een systeem gestart worden vanuit
/etc/rc
worden toegewezen aan de aanmeldklasse
daemon
.
-
Hoewel de
/etc/login.conf
die bij een systeem zit een goede bron is voor redelijke waardes voor de meeste limieten, kan alleen de beheerder van een machine de echt juiste waarden kennen. Het te hoog instellen van een limiet kan een systeem kwetsbaar maken voor misbruik, terwijl het te laag instellen van limieten de productiviteit te veel kan hinderen.
-
Gebruikers van het X Window systeem (X11) horen waarschijnlijk meer bronnen toegewezen te krijgen dan andere gebruikers. X11 gebruikt zelf al meer bronnen, maar het moedigt gebruikers ook aan om meerdere programma’s tegelijkertijd te draaien.
-
Het is belangrijk niet te vergeten dat veel limieten betrekking hebben op individuele processen en niet op een hele gebruiker. Het instellen van bijvoorbeeld
openfiles
op 50, betekent dat ieder proces dat een gebruiker draait 50 open bestanden mag hebben. Het totale aantal bestanden dat een gebruiker dus open kan hebben is het product van de waarde van
openfiles
en de waarde van
maxproc
. Dit geldt ook voor het gebruik van geheugen.