Linux-Arbeitskreis Hamburg

Limits

In Terminalumgebungen kann es passieren, dass einzelne Benutzer bzw. einzelne Prozesse den Server so auslasten, dass ein vernünftiges Arbeiten nicht mehr möglich ist. Besonders schlimm ist dieses Problem im schulischen Umfeld, wo oft das gleiche Programm gleichzeitig auf allen Arbeitsplätzen gestartet wird.
Wenn dann der Programmstart etwas dauert, dann erfolgt oft ein weiterer Startversuch, oder in der Zwischenzeit wird ein anderes Programm gestartet. Schnell geht dann gar nicht mehr.

Man muss daher die Möglichkeit haben die Ressourcen der einzelnen Benutzer zu begrenzen.

Wenig beachtet ist die Möglichkeit dies mit Pam (Pluggable Authentication Modules) zu erledigen. Das Pam-System ist auf den meisten aktuellen Systemen als Standard-Authentisierungssystem aktiv. Damit befindet sich auch das Modul /lib/security/pam_limits.so auf dem Rechner, das für die Ressourcen-Begrenzung zuständig ist.
Konfiguriert wird dieses Modul über die Datei /etc/sercurity/limits.conf, die mit SuSE-Systemen folgendermaßen ausgeliefert wird:

# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>
#
#Where:
#<domain> can be:
#        - an user name
#        - a group name, with @group syntax
#        - the wildcard *, for default entry
#
#<type> can have the two values:
#        - "soft" for enforcing the soft limits
#        - "hard" for enforcing hard limits
#
#<item> can be one of the following:
#        - core - limits the core file size (KB)
#        - data - max data size (KB)
#        - fsize - maximum filesize (KB)
#        - memlock - max locked-in-memory address space (KB)
#        - nofile - max number of open files
#        - rss - max resident set size (KB)
#        - stack - max stack size (KB)
#        - cpu - max CPU time (MIN)
#        - nproc - max number of processes
#        - as - address space limit
#        - maxlogins - max number of logins for this user
#        - priority - the priority to run user process with
#        - locks - max number of file locks the user can hold
#
#<domain>      <type>  <item>         <value>
#

#*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4
# End of file

Der größte Teil der Datei ist Kommentar. Die Zeilen am Ende sind alle auskommentiert, so dass normalerweise keine Beschränkungen aktiv sind. Für Terminalserver-Umgebungen sehr interessante Einstellmöglichkeiten sind nproc und priority.

Über nproc kann man die Anzahl der Prozesse beschränken, die ein einzelner Benutzer starten darf. Diese Zahl darf nicht zu hoch sein, sonst kann die Gesamtzahl aller Prozesse so hoch werden, dass für keinen Prozess mehr genügend Zeit bleibt. Zu niedrig darf diese Zahl aber auch nicht sein, Java z.B. und darauf basierende Anwendungen wie NetBeans brauchen oft viele Prozesse gleichzeitig. Die Zahl 128 dürfte hier ein akzeptabler Kompromiss sein.

Mit priority kann der sog. Nice-Level für die Benutzerprozesse festgelegt werden. Je höher dieser Level ist, desto eher läßt der Prozess anderen Prozessen den Vortritt. Ein Nice-Level von 20 ergibt den freundlichsten Prozess, fast immer bekommen andere Prozesse Vorrang. Ein Level von -20 bewirkt sehr unfreundliche Prozesse, die oft den Vorrang beanspruchen. Die negativen Level sollte man daher Systemprozessen und root belassen. Es macht Sinn allen Benutzerprozessen einen positiven Nice-Level zu geben.

Einstellungen können sehr gut auf bestimmte Benutzer bzw. Benuztergruppen abgestimmt werden. Der * als Jokerzeichen kennzeichnet alle Benutzer. Eine Bezeichnung mit @ am Anfang kennzeichnet eine Benutzergruppe, ansonsten ist ein einzelner Benutzer gemeint.
Fügt man die folgenden Zeilen ein:

@schueler           -     nproc      128
debacher            -     nproc      1024
@schueler           -     priority   17
debacher            -     priority   0
# End of file

so haben alle Prozesse von Benutzern der Gruppe Schüler den Nice-Level 17 und ein einzelner Schüler darf maximal 128 Prozesse gleichzeitig starten. Für den einzelnen Benutzer debacher sind die Begrenzungen deutlich aufgeweicht. Der Strich kennzeichnet, dass sowohl die Soft-, als auch die Hard-Limits entsprechend eingestellt werden. Soft-Limits könnte der Benutzer verändern, bis zu Grenze die durch die Hard-Limits vorgegeben wird.

Heikel ist die mögliche Beschränkung der Prozessor-Zeit (cpu). Programme wie Netscape tendieren dazu gelegentlich entgleisen und die volle Prozessorzeit über einen längeren Zeitraum abzufordern. Wenn eine Zeitbegrenzung aktiv ist, dann werden alle Prozesse des Benutzers gelöscht, wenn die Zeit verbraucht ist. Damit wäre der Netscape-Prozess entfernt, aber auch alle anderen (friedlichen) Prozesse. Der Benutzer wird dann sogar abgemeldet.

In Terminalserver-Umgebungen mit xdm sind die Beschränkungen leider nicht standardmäßig aktiviert, was sich aber leicht nachholen läßt. Die Pam-Konfiguration erfolgt in dem Verzeichnis /etc/pam.d.
Hier finden sich mehrere Dateien, u.a. login und sshd die die Anmeldung für die jeweiligen Zugänge regeln. In login und sshd findet sich an Ende die Zeile

session  required   pam_limits.so

über die das Modul für die Limits akttiviert wird. In der Datei xdm, die in Terminalumgebungen wichtig ist, fehlt diese Zeile. Wenn man sie ergänzt, dann sind auch bei xdm-Anmeldungen die Limits aktiv.

/etc/pam.d/xdm

#%PAM-1.0
auth     required       pam_unix.so	nullok #set_secrpc
account  required       pam_unix.so
password required       pam_unix.so	#strict=false
session  required       pam_unix.so	debug # trace or none
session  required       pam_devperm.so
session  required       pam_limits.so


Kritik, Anregungen und Ergänzungen willkommen. Zusammengestellt von Uwe Debacher und Bernd Burre, letzte Änderung am 27.01.2006
Impressum