Gabelbombenschutz funktioniert nicht: Anzahl der Prozesse nicht begrenzt

8

Ich habe gerade festgestellt, dass mein System die Anzahl der Prozesse pro Benutzer nicht richtig begrenzt, sodass ein Benutzer nicht daran gehindert wird, eine Gabelbombe auszuführen und das gesamte System zum Absturz zu bringen:

user@thebe:~$ cat /etc/security/limits.conf | grep user
user        hard    nproc   512
user@thebe:~$ ulimit -u
1024
user@thebe:~$ :(){ :|:& };:
[1] 2559
user@thebe:~$ ht-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
-bash: fork: Cannot allocate memory
...
Connection to thebe closed by remote host.

Ist dies ein Fehler oder warum wird das Limit ignoriert limits.confund warum wird das Limit, das es ulimit -nbehauptet, nicht angewendet ?

PS: Ich glaube wirklich nicht, dass das Speicherlimit vor dem Prozesslimit erreicht wird. Diese Maschine hat 8 GB RAM und verbrauchte nur 4% davon, als ich die Gabelbombe fallen ließ.

BEARBEITEN:

Ich habe es geschafft, dies auf einer Live-CD zu reproduzieren. Ich denke, das muss ein Fehler sein. Grundsätzlich werden alle Prozesse beendet, einschließlich systemkritischer Dinge wie X11, SSHD usw.

Jeder Benutzer kann das System zum Absturz bringen.

d_inevitable
quelle
-n ist die Anzahl der Dateideskriptoren, nicht der Prozesse. Sie wollenulimit -u
Psusi
@psusi, danke, aber das gibt das gleiche Ergebnis: suser@thebe:~$ ulimit -u 1024
d_inevitable
Wenn ich ulimit -urenne, bekomme ich 31325. Wenn ich renne ulimit -u 512, geht es los 512. Wenn ich diese Gabelbombe laufen lasse , ist der Rest meines Systems in Ordnung.
Psusi

Antworten:

8

Es stellt sich heraus, dass /etc/security/limits.confdies funktioniert, aber neu gestartet werden muss, bevor es interpretiert wird. Eine Abmeldung reicht nicht aus.

Ich empfehle jedem, die Konfigurationsdatei wie zu begrenzen

user hard nproc 512

Ersetzen Sie ihn userdurch einen beliebigen Benutzernamen, den Sie einschränken möchten.

Oder besser:

@group hard nproc 512

Ersetzen Sie groupdurch eine Benutzergruppe, die Sie einschränken möchten.

d_inevitable
quelle
Abhängig von der von Ihnen verwendeten Software benötigt möglicherweise sogar ein Einzelbenutzersystem mehr Prozesse als 512. Wenn Sie feststellen, dass die Dinge nach der Implementierung auf mysteriöse Weise nicht funktionieren, müssen Sie möglicherweise die tatsächliche Anzahl der zulässigen Prozesse anpassen.
Zeiss Ikon