Tutorial: prevenir bombas fork

Este foro es para todo lo relacionado con la documentación, artículos de ayuda, Wikis, tips & hints y las traducciones de Arch (tanto en progreso como las finalizadas).
Responder
Avatar de Usuario
Yonohesido
Archer Confiable
Archer Confiable
Mensajes: 446
Registrado: 14 May 2010, 09:17
Contactar:

Tutorial: prevenir bombas fork

Mensaje por Yonohesido » 16 Jun 2012, 15:06

He encontrado un par de páginas muy interesantes, donde explican cómo podemos prevenir el uso de bombas fork en nuestro sistema operativo.

http://www.cyberciti.biz/tips/linux-lim ... ocess.html
http://ubunteate.es/bombas-fork/

Básicamente consiste en controlar el número de procesos permitidos en el sistema, de modo que no llegue a colapsar nuestra máquina. Podemos configurar o establecer dicha limitación para usuarios y/o grupos específicos, o de modo general.
Es importante no poner unos límites por debajo de los procesos que necesita nuestro SO para funcionar, de lo contrario vamos a tener problemas. Escritorios como Gnome o KDE necesitan lanzar un número relativamente alto de procesos.

Para conocer el número de procesos que permite ejecutar el SO:

Código: Seleccionar todo

ulimit -u
Para obtener el número de procesos que está corriendo actualmente nuestro sistema:

Código: Seleccionar todo

ps aux | wc -l
Una vez que tenemos claros los datos y sabiendo que el límite debe ser bastante holgado, para no pillarse los dedos, nos ponemos manos a la obra.
Lo que debemos hacer es editar (como root) el archivo /etc/security/limits.conf y establecer (escribiéndolo al final del archivo) el número máximo de procesos que permitiremos. La orden tiene la siguiente forma:

<dominio> <tipo> <valor> <límite>

Donde:

dominio puede ser:
- un nombre de usuario
- un grupo, con la sintaxis @grupo
- asterisco (*), para hacer la orden general a todos los usuarios y grupos

tipo puede ser:
- soft para una limitación suave. Limita los procesos hasta el número indicado, pero permite que el usuario pueda aumentar ese número en caso necesario. Ver ejemplo más abajo.
- hard para una limitación dura. No permite que el usuario cambie dicha limitación.

valor, para nuestro propósito será:
- nproc para indicar que el cambio se realizará sobre el número de procesos. (Echadle un ojo a la primera página que enlacé al inicio, para ver otros posibles valores)

límite, para indicar el número máximo de procesos permitidos.

Así pues, editamos /etc/security/limits.conf y añadimos al final del todo la orden deseada.
Algunos ejemplos:

Código: Seleccionar todo

* hard nproc 500
Limita a 500 el número de procesos corriendo en el SO, para cualquier usuario o grupo.

Código: Seleccionar todo

pepito hard nproc 500
Limita a 500 los procesos para el usuario pepito.

Código: Seleccionar todo

@users hard nproc 500
Limita a 500 los procesos para todos los usuarios del grupo users.

Código: Seleccionar todo

@users soft nproc 500
@users hard nproc 1000
Limita a 500 los procesos para los usuarios del grupo users, pero permite que estos puedan aumentar dicho límite hasta un máximo de 1000 procesos. Esto lo harían con el siguiente comando:

Código: Seleccionar todo

ulimit -Su 1000
Esto es válido para todos los procesos (incluidos sus hijos) que hagan uso de los módulos del PAM.
Para que los cambios surtan efecto, debemos reiniciar nuestra sesión de usuario. Podemos comprobar si el número de procesos máximos ha cambiado:

Código: Seleccionar todo

ulimit -u
Luego podemos ejecutar una bomba fork, para probar que el método funciona:
No ejecutar si no se ha limitado el número de procesos.

Código: Seleccionar todo

:(){ :|:& };:
ATENCIÓN:
Limitar el número máximo de procesos de nuestro SO puede ser peligroso si no se sabe lo que se hace. Establecer un límite menor al número de procesos que necesita nuestro sistema para correr, o demasiado bajo, no permitiendo ejecutar los procesos que solicitamos (al abrir aplicaciones por ejemplo) , puede derivar en errores y problemas que impidan el correcto funcionamiento de nuestro sistema operativo.
No sigáis este manual a menos que sepáis lo que estáis haciendo. No me hago responsable de los problemas derivados de un mal uso de la información facilitada.

Avatar de Usuario
Yonohesido
Archer Confiable
Archer Confiable
Mensajes: 446
Registrado: 14 May 2010, 09:17
Contactar:

Re: Tutorial: prevenir bombas fork

Mensaje por Yonohesido » 23 Jun 2012, 08:07

Un añadido. Resulta que al apagar el sistema y volver a encenderlo los cambios no se mantenían, por lo que la limitación de procesos volvía a ser la que trae Arch por defecto.
Esto sucede porque yo no uso un gestor gráfico para iniciar sesión (Start X al Boot), por lo que tengo que hacer un paso más.

Bien, debemos comprobar si nuestro arranque requiere el uso de pam_limits.so, así que ejecutamos la siguiente orden en la consola:

Código: Seleccionar todo

grep pam_limits.so /etc/pam.d/*
Nos dará un resultado parecido a esto:

Código: Seleccionar todo

/etc/pam.d/login:session		required	pam_limits.so
/etc/pam.d/polkit-1:session         required        pam_limits.so
/etc/pam.d/system-auth:session   required  pam_limits.so
/etc/pam.d/system-services:session   required    pam_limits.so
Ahora editamos el archivo /etc/pam.d/su y le añadimos la siguiente línea:

Código: Seleccionar todo

session           required        pam_limits.so
Una vez guardados los cambios, volvemos a ejecutar la orden anterior:

Código: Seleccionar todo

grep pam_limits.so /etc/pam.d/*
Y obtendremos esto:

Código: Seleccionar todo

/etc/pam.d/login:session		required	pam_limits.so
/etc/pam.d/polkit-1:session         required        pam_limits.so
/etc/pam.d/su:session		required	pam_limits.so
/etc/pam.d/system-auth:session   required  pam_limits.so
/etc/pam.d/system-services:session   required    pam_limits.so
Y con eso ya tendremos solucionado el problema.

De interés:
Realtime process management

Avatar de Usuario
awelomustaine
Archer Extremo
Archer Extremo
Mensajes: 336
Registrado: 15 Jun 2011, 22:12
Ubicación: Toluca, Méixo

Re: Tutorial: prevenir bombas fork

Mensaje por awelomustaine » 14 Jul 2012, 01:46

Vaya, me agradó, mañana lo pondré en práctica :D, gracias
chéquense mi blog, trabajando en él un poco, sacando tutos de lo básico http://tuxmetaleroxd.blogspot.com
Carving a giant...
Carving the eye of a god...
Create me...

Avatar de Usuario
Patatuelas
Archer
Archer
Mensajes: 42
Registrado: 22 May 2012, 09:46

Re: Tutorial: prevenir bombas fork

Mensaje por Patatuelas » 14 Jul 2012, 06:31

Vaya pues, muchas gracias! Me servira mucho ya que igual empiezo a conectar el pc por ssh i quiza compre otro como servidor. Muchisimas gracias!

Responder