Acabo de darme cuenta de que mi sistema no está limitando la cantidad de procesos por usuario correctamente, por lo tanto, no impide que un usuario haga una bomba de horquilla y bloquee todo el sistema:
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.
¿Es esto un error o por qué ignora el límite limits.conf
y por qué no aplica el límite que ulimit -n
dice ser?
PD: Realmente no creo que se alcance el límite de memoria antes del límite del proceso. Esta máquina tiene 8 GB de RAM y estaba usando solo el 4% cuando solté la bomba tenedor.
EDITAR:
Logré reproducir esto en un CD en vivo. Así que supongo que esto debe ser un error. Básicamente termina matando todos los procesos, incluidos los elementos críticos del sistema como X11, SSHD, etc.
Cualquier usuario puede bloquear el sistema.
user@thebe:~$ ulimit -u
1024
ulimit -u
me sale 31325. Cuando corro ulimit -u 512
va a 512. Cuando corro esa bomba tenedor, el resto de mi sistema está bien.
ulimit -u