La protección de la bomba de horquilla no funciona: cantidad de procesos no limitada

8

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.confy por qué no aplica el límite que ulimit -ndice 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.

d_inevitable
fuente
-n es el número de descriptores de archivo, no procesos. Quieresulimit -u
psusi
@psusi, gracias, pero eso da el mismo resultado: suser@thebe:~$ ulimit -u 1024
d_inevitable
Cuando corro ulimit -ume sale 31325. Cuando corro ulimit -u 512va a 512. Cuando corro esa bomba tenedor, el resto de mi sistema está bien.
psusi

Respuestas:

8

Resulta que /etc/security/limits.confsí funciona, pero necesita reiniciar antes de que se interprete. Un cierre de sesión no es suficiente.

Recomiendo a cualquiera que limite el archivo de configuración como

user hard nproc 512

Reemplace usercon cualquier nombre de usuario que desee limitar.

O mejor:

@group hard nproc 512

Reemplace groupcon cualquier grupo de usuarios que desee limitar.

d_inevitable
fuente
Dependiendo del software que utilice, incluso un sistema de usuario único puede necesitar más procesos que 512. Si encuentra que las cosas no funcionan misteriosamente después de implementar esto, es posible que necesite ajustar la cantidad real de procesos que permite.
Zeiss Ikon