En este post explicaremos cómo poner límites al uso de recursos del sistema en Linux. Esta tarea es de suma importancia, ya que si uno no es cuidadoso y permite que cualquier usuario inicie un número ilimitado de procesos o cree archivos sin límite de tamaño (por ejemplo), eventualmente podemos llegar a encontrarnos con un sistema inutilizable o que se reinicie sin previo aviso.
Para evitar que eso suceda, el administrador de sistemas debe saber restringir el uso de recursos del sistema de acuerdo a las necesidades reales de los usuarios sin permitir el abuso.
Uso de recursos del sistema en Linux
Para lograr el objetivo mencionado anteriormente disponemos de dos opciones:
1) Editar el archivo /etc/security/limits.conf. Por ejemplo, para limitar el número de procesos que los usuarios pueden iniciar a 10, deberíamos agregar la línea siguiente al final del archivo:
* hard nproc 10
- En este archivo, el primer campo indica el alcance de la medida (llamado dominio), pudiéndose tartar de un usuario o grupo en particular, o de todos ellos (lo cual se indica mediante un asterisco *, como en este caso).
- Si se desea especificar un usuario en particular, el primer campo debe consistir en el nombre del usuario. Por ejemplo, para poner el mismo límite que arriba pero solamente para el usuario alumno, deberíamos escribir lo siguiente:
alumno hard nproc 10
- Si en cambio queremos poner el límite para un grupo dado, debemos preceder el nombre del mismo con el signo @. Por ejemplo, la línea siguiente coloca el mismo límite hard de 10 procesos pero teniendo en cuenta a todos los miembros del grupo alumno:
@alumno hard nproc 10
- El segundo campo indica el tipo de límite (en este caso hard), mientras que el tercero y el cuarto representan los procesos y la cantidad máxima permitida (10).
- Otros tipos de límites (tercer campo) que se pueden poner incluyen el tamaño máximo de archivos, y la cantidad máxima de sesiones abiertas para un usuario determinado, entre otros (la lista completa puede verse en los comentarios de limits.conf).
Para aplicar los cambios solamente hace falta cerrar las sesiones de usuario y volver a ingresar (quizás sea conveniente agendar un reinicio del servidor para tal fin).
2) Agregar archivos con extensión .conf dentro del directorio /etc/security/limits.d, los cuales son procesados en orden alfabético. Las directivas presentes en estos archivos anulan (es decir, tienen mayor precedencia) que las mismas en limits.conf.
Después de esta explicación, agreguemos las siguientes líneas al archivo limits.conf:
[pastacode lang=»bash» manual=»echo%20%22alumno%20hard%20%20%20%20%20nproc%20%20%2010%22%20%3E%3E%20%2Fetc%2Fsecurity%2Flimits.conf%0Aecho%20%22alumno%20hard%20%20%20%20%20fsize%20%20%20%2010000%22%20%3E%3E%20%2Fetc%2Fsecurity%2Flimits.conf%20%23%20M%C3%A1ximo%2010%20MB%0Aecho%20%22alumno%20hard%20%20%20%20%20maxlogins%20%20%20%20%20%20%201%22%20%3E%3E%2Fetc%2Fsecurity%2Flimits.conf» message=»» highlight=»» provider=»manual»/]
Probemos ahora la capacidad de restringir el uso de recursos del sistema en Linux:
- la cantidad de procesos que el usuario alumno puede iniciar. Lancemos una forkbomb (sin entrar en detalles, podemos decir que esta es una técnica de DoS que crea procesos de manera recursiva para saturar la lista de procesos que puede ser mantenida por el sistema operativo):
[pastacode lang=»bash» manual=»%3A()%7B%20%3A%7C%3A%26%20%7D%3B%3A» message=»» highlight=»» provider=»manual»/]
El haber puesto el límite en el número de procesos impide que se creen indescriminadamente, como podemos ver en la Fig. 1:
- El tamaño máximo del archivo que puede crear. Realicemos la creación de un archivo de prueba de 15 MB:
[pastacode lang=»bash» manual=»dd%20if%3D%2Fdev%2Fzero%20of%3Dprueba.iso%20bs%3D1M%20count%3D15″ message=»» highlight=»» provider=»manual»/]
- La cantidad máxima de sesiones abiertas que puede tener. Si el usuario tiene una sesión abierta e intenta iniciar otra, se procederá a desconectar este segundo intento de manera automática.
En este post hemos explicado cómo colocar límites al uso de recursos del sistema en Linux. Espero que les haya sido útil. ¡Hasta la próxima!