Wenn ein System von mehreren Benutzern verwendet wird, ist es vielleicht notwendig, den Gebrauch des Systems zu beschränken. FreeBSD bietet dem Systemadministrator mehrere Möglichkeiten die System-Ressourcen, die ein einzelner Benutzer verwenden kann, einzuschränken. Diese Limitierungen sind in zwei Kategorien eingeteilt: Festplattenkontingente und andere Ressourcenbeschränkungen.
Festplatten-Kontingente schränken den Plattenplatz, der einem Benutzer zur Verfügung steht, ein. Sie bieten zudem, ohne aufwändige Berechnung, einen schnellen Überblick über den verbrauchten Plattenplatz. Kontingente werden in Abschnitt 19.15, „Dateisystem-Quotas“ diskutiert.
Die Login-Klassen werden in /etc/login.conf
definiert. Auf die präzisen Semantiken gehen wir hier nicht
weiter ein, sie können jedoch in login.conf(5)
nachgelesen werden. Es ist ausreichend zu sagen, dass jeder
Benutzer einer Login-Klasse zugewiesen wird (standardmäßig
default
) und dass jede Login-Klasse mit einem Satz
von Login-Fähigkeiten verbunden ist. Eine Login-Fähigkeit
ist ein
Paar, in dem Name
=Wert
Name
die Fähigkeit bezeichnet und Wert
ein willkürlicher Text ist, der je nach Name
entsprechend verarbeitet wird. Login-Klassen und
-Fähigkeiten zu definieren, ist fast schon selbsterklärend
und wird auch in login.conf(5) beschrieben.
Das System verwendet die Datei
/etc/login.conf
normalerweise nicht direkt,
sondern nur über die Datenbank
/etc/login.conf.db
, da diese eine
schnellere Abfrage erlaubt. Der nachstehende Befehl erzeugt die
Datenbank /etc/login.conf.db
aus der Datei
/etc/login.conf
:
#
cap_mkdb /etc/login.conf
Ressourcenbeschränkungen unterscheiden sich von normalen Login-Fähigkeiten zweifach. Erstens gibt es für jede Beschränkung ein aktuelles und ein maximales Limit. Das aktuelle Limit kann vom Benutzer oder einer Anwendung beliebig bis zum maximalen Limit verändert werden. Letzteres kann der Benutzer nur heruntersetzen. Zweitens gelten die meisten Ressourcenbeschränkungen für jeden vom Benutzer gestarteten Prozess, nicht für den Benutzer selbst. Beachten Sie jedoch, dass diese Unterschiede durch das spezifische Einlesen der Limits und nicht durch das System der Login-Fähigkeiten entstehen (das heißt, Ressourcenbeschränkungen sind keine Login-Fähigkeiten).
Hier befinden sich die am häufigsten benutzten Ressourcenbeschränkungen (der Rest kann zusammen mit den anderen Login-Fähigkeiten in login.conf(5) gefunden werden):
coredumpsize
Das Limit der Größe einer core-Datei, die
von einem Programm generiert wird, unterliegt aus
offensichtlichen Gründen anderen Limits der
Festplattenbenutzung (zum Beispiel filesize
oder Festplattenkontingenten). Es wird aber trotzdem
oft als weniger harte Methode zur Kontrolle des
Festplattenplatz-Verbrauchs verwendet: Da Benutzer die
core-Dateien nicht selbst erstellen, und sie oft nicht
löschen, kann sie diese Option davor retten, dass
ihnen kein Festplattenspeicher mehr zur Verfügung
steht, sollte ein großes Programm, wie
emacs, abstürzen.
cputime
Die maximale Rechenzeit, die ein Prozess eines Benutzers verbrauchen darf. Überschreitet der Prozess diesen Wert, wird er vom Kernel beendet.
Die Rechenzeit wird limitiert, nicht die prozentuale Prozessorenbenutzung, wie es in einigen Feldern in top(1) und ps(1) dargestellt wird. Letzteres war zu der Zeit, als dies hier geschrieben wurde nicht möglich und würde eher nutzlos sein: Ein Compiler – ein wahrscheinlich legitimer Vorgang – kann leicht fast 100% des Prozessors in Anspruch nehmen.
filesize
Hiermit lässt sich die maximale Größe einer Datei bestimmen, die der Benutzer besitzen darf. Im Gegensatz zu Festplattenkontingenten ist diese Beschränkung nur für jede einzelne Datei gültig und nicht für den Platz, den alle Dateien eines Benutzers verwenden.
maxproc
Das ist die maximale Anzahl von Prozessen, die ein
Benutzer starten darf, und beinhaltet sowohl Vordergrund-
als auch Hintergrundprozesse. Natürlich darf dieser
Wert nicht höher sein als das System-Limit, das in
kern.maxproc
angegeben ist. Vergessen
Sie auch nicht, dass ein zu kleiner Wert den Benutzer in
seiner Produktivität einschränken könnte;
es ist oft nützlich, mehrfach eingeloggt zu sein, oder
Pipelines
[8]
zu verwenden. Ein paar Aufgaben, wie die Kompilierung eines
großen Programms, starten mehrere Prozesse (zum Beispiel
make(1), cc(1) und andere).
memorylocked
Dieses Limit gibt an, wie viel virtueller Speicher von einem Prozess maximal im Arbeitsspeicher festgesetzt werden kann. (siehe auch mlock(2)). Ein paar systemkritische Programme, wie amd(8), verhindern damit einen Systemzusammenbruch, der auftreten könnte, wenn sie aus dem Speicher genommen werden.
memoryuse
Bezeichnet den maximalen Speicher, den ein Prozess benutzen darf und beinhaltet sowohl Arbeitsspeicher-, als auch Swap- Benutzung. Es ist kein allübergreifendes Limit für den Speicherverbrauch, aber ein guter Anfang.
openfiles
Mit diesem Limit lässt sich die maximale Anzahl
der von einem Prozess des Benutzers geöffneten Dateien
festlegen. In FreeBSD werden Dateien auch verwendet, um Sockets
und IPC-Kanäle
[9]
darzustellen. Setzen Sie es deshalb nicht zu niedrig. Das
System-Limit ist im kern.maxfiles
sysctl(8) definiert.
sbsize
Dieses Limit beschränkt den Netzwerk-Speicher, und damit die mbufs, die ein Benutzer verbrauchen darf. Es stammt aus einer Antwort auf einen DoS-Angriff, bei dem viele Netzwerk-Sockets geöffnet wurden, kann aber generell dazu benutzt werden Netzwerk-Verbindungen zu beschränken.
stacksize
Das ist die maximale Größe, auf die der Stack eines Prozesses heranwachsen darf. Das allein ist natürlich nicht genug, um den Speicher zu beschränken, den ein Programm verwenden darf. Es sollte deshalb in Verbindung mit anderen Limits gesetzt werden.
Beim Setzen von Ressourcenbeschränkungen sind noch andere Dinge zu beachten. Nachfolgend ein paar generelle Tipps, Empfehlungen und verschiedene Kommentare.
Von /etc/rc
beim Hochfahren des Systems
gestartete Prozesse werden der daemon
Login-Klasse zugewiesen.
Obwohl das mitgelieferte /etc/login.conf
eine Quelle von vernünftigen Limits darstellt, können nur
Sie, der Administrator, wissen, was für Ihr System angebracht
ist. Ein Limit zu hoch anzusetzen könnte Ihr System für
Missbrauch öffnen, und ein zu niedriges Limit der
Produktivität einen Riegel vorschieben.
Benutzer des X-Window Systems (X11) sollten wahrscheinlich mehr Ressourcen zugeteilt bekommen als andere Benutzer. X11 beansprucht selbst schon eine Menge Ressourcen, verleitet die Benutzer aber auch, mehrere Programme gleichzeitig laufen zu lassen.
Bedenken Sie, dass viele Limits für einzelne Prozesse
gelten und nicht für den Benutzer selbst. Setzt man
zum Beispiel openfiles
auf 50, kann jeder
Prozess des Benutzers bis zu 50 Dateien öffnen. Dadurch
ist die maximale Anzahl von Dateien, die von einem Benutzer
geöffnet werden können, openfiles
mal maxproc
. Das gilt auch für den
Speicherverbrauch.
Weitere Informationen über Ressourcenbeschränkungen, Login-Klassen und -Fähigkeiten enthalten die Hilfeseiten cap_mkdb(1), getrlimit(2) und login.conf(5).
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.