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.
process
ulimit
resource-limiting
d_inevitable
fuente
fuente
ulimit -u
user@thebe:~$ ulimit -u
1024
ulimit -u
me sale 31325. Cuando corroulimit -u 512
va a 512. Cuando corro esa bomba tenedor, el resto de mi sistema está bien.Respuestas:
Resulta que
/etc/security/limits.conf
sí 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
Reemplace
user
con cualquier nombre de usuario que desee limitar.O mejor:
Reemplace
group
con cualquier grupo de usuarios que desee limitar.fuente