Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

martes, 8 de diciembre de 2015

Expulsando a los inactivos en Linux

Las sesiones inactivas abiertas pueden resultar tan peligrosas o más que algunas vulnerabilidades o descuidos a la hora de gestionar la seguridad de un entorno... De nada sirve preparar unas medidas de seguridad muy estrictas mediante atributos, permisos o, si somos extremadamente restrictivos, mediante ACL, si luego al irnos a tomar un café o a comer nos dejamos la sesión del equipo abierta. Dicha sesión puede resultar fatal, especialmente en caso de ser la sesión de un usuario con privilegios o root, con lo que es recomendable tratar, en medida de lo posible, evitar dicha situación. Lo ideal en estos casos suele ser simplemente cerrar la sesión de terminal o bloquear el equipo, pero esto requiere del factor humano, factor que, sinceramente, es muy poco fiable. Es por eso que es muy recomendable aplicar medidas que puedan expulsar a los usuarios inactivos, pues suponemos que cuando alguien se encuentra inactivo es debido a que se encuentra fuera de su sitio. Por eso hoy vengo con dos medidas que podemos aplicar en nuestros equipos con mucha facilidad; una para cualquier sesión en general y otra para sesiones ssh.

dormir


Sesiones generales

Esta medida puede ser aplicada para la sesión activa (es decir, la sesión que está ejecutando el usuario en ese momento) o para todas las sesiones de dicho usuario; con lo que esta solución puede ser muy útil también para momentos puntuales en las que queramos cerrar la sesión en caso de inactividad. Para ello haremos uso de las variables de entorno. Para aquellos que no conozcan este concepto, simplemente se trata de información a la que se accede a través del nombre de la variable; un buen ejemplo de una de estas variables sería la variable pwd, que aunque muchos la confunden con un comando, no es así. Esta variable contiene la ruta actual en la que se encuentra una, que puede ser la carpeta home o cualquier otra... Son numerosas las variables de este tipo, variables que podemos consultar en cualquier momento desde la consola escribiendo env.

En este caso no usaremos ninguna de las variables listadas por defecto, sino que asignaremos una que almacenará el número de segundos de inactividad que soportará nuestra sesión. Esta variable se denomina TMOUT y le asignaremos el tiempo de actividad de la siguiente forma desde la consola:

export TMOUT=número_segundos

Teniendo en cuenta que un tiempo de inactividad "razonable", serían 10 minutos, podríamos asignar dicho tiempo a la variable, lo cual equivale a 300 segundos.

export TMOUT=300

Esto está muy bien, pero si lo hacemos de esta forma únicamente sería válido para la sesión actual... Cosa que puede ser realmente conveniente en determinados momentos, pero que en caso de que a uno se le olvidase escribirlo en el momento dado dejaría el equipo a merced de cualquier "curioso" que pase cerca. Es por eso que en caso de querer aplicar el cambio de forma permanente, habría que incluirlo en el fichero .bashrc de cada usuario; fichero que se encuentra dentro de la carpeta /home de cada usuario y en el directorio /root para el usuario root.

Como podeis ver se trata de una solución sencilla que se puede implantar con rapidez.

Sesiones ssh

Mucha gente no quiere tener las limitaciones anteriormente comentadas, y solo quieren que se interrumpan las sesiones ssh tras un determinado tiempo, pues en caso contrario podríamos encontrarnos con sesiones eternas que pueden suponer un grave problema a nivel de seguridad. Aunque la anterior opción también sería válida para las sesiones ssh, si únicamente quisiesemos establecer un tiempo límite para esas conexiones, tendríamos que modificar el archivo de configuración de ssh, es decir sshd_config, alojado /etc/ssh.

Dentro de dicho fichero podremos buscar cuanto queramos, que no encontraremos "pistas" para poner dicha limitación, pues serían líneas extra que habría que añadir a dicho fichero; en concreto dos.

  • ClientAliveInterval: Este pequeño parámetro sirve para que tras una determinada cantidad de segundos mande un mensaje de verificación al cliente que está conectado con el fin de saber si la conexión sigue activa o no. Únicamente se envía el mensaje en caso de estar inactivo; es decir que si por ejemplo se tuviese un intervalo de 300 segundos; únicamente se enviaría el mensaje si se hubiese estado inactivo durante dicho periodo de tiempo.
  • ClientAliveCountMax: Este parámetro es directamente dependiente del anterior. Tras el envío del mensaje de, se espera que el cliente verifique que se encuentra ahí (por ejemplo retomando la actividad). Este parámetro establece un contador de mensajes, si por ejemplo se pusiese dicho valor a tres, si se hubiesen mandado 4 "mensajes" de verificación seguidos la conexión ssh se cerraría. Si por ejemplo se pusiese dicho valor a 0, con el primer mensaje se cerraría la sesión.
A sabiendas de lo que hacen estos dos parámetros añadiríamos estas dos líneas al fichero de configuración.


  1. ClientAliveInterval 300
  2. ClientAliveCountMax 0


Obviamente tras aplicar este cambio, habría que reiniciar el servicio ssh para hacerlo efectivo.

/etc/init.d/ssh restart



Ambos métodos son muy útiles, cada uno con su propósito particular, pero indudablemente realizan su tarea a la perfección; solo quedaría escoger aquel que se adaptase mejor a nuestras necesidades.

Espero que os haya resultado útil.

Saludos.

No hay comentarios :

Publicar un comentario