Linux-Arbeitskreis Hamburg |
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