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.conf
und warum wird das Limit, das es ulimit -n
behauptet, 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.
quelle
ulimit -u
user@thebe:~$ ulimit -u
1024
ulimit -u
renne, bekomme ich 31325. Wenn ich renneulimit -u 512
, geht es los 512. Wenn ich diese Gabelbombe laufen lasse , ist der Rest meines Systems in Ordnung.Antworten:
Es stellt sich heraus, dass
/etc/security/limits.conf
dies funktioniert, aber neu gestartet werden muss, bevor es interpretiert wird. Eine Abmeldung reicht nicht aus.Ich empfehle jedem, die Konfigurationsdatei wie zu begrenzen
Ersetzen Sie ihn
user
durch einen beliebigen Benutzernamen, den Sie einschränken möchten.Oder besser:
Ersetzen Sie
group
durch eine Benutzergruppe, die Sie einschränken möchten.quelle