Información blog

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

viernes, 26 de febrero de 2016

Cómo registrar todos los comandos introducidos en Linux

El control de lo que ocurre en nuestro equipo es uno de los puntos que más nos preocupa a la mayoría de los que poseemos un ordenador; especialmente cuando dicho ordenador es usado por más personas aparte de nosotros... Por mucho que confiemos en que no van a hacer nada malo en nuestra ausencia, siempre tenemos esa duda en nuestro interior... ¿Y si esa persona rompe algo? ¿Y si introduce un "comando fatal"? ¿Cómo podemos demostrar qué alguien ha roto algo en un momento determinado? Los logs incluidos por defecto en Linux son extremadamente útiles, pero por sí solos no son lo suficientemente detallados como para decirnos con exactitud lo que se ha hecho... Es por ello que hoy vengo con una pequeña solución que podemos usar para solventar este pequeño problema; dicha solución se llama snoopy.

Snoppy_portada

Existen otras alternativas que pueden sernos útiles también y que no requieren instalar nada, tales como el uso del comando history o la consulta del fichero oculto .bash_history, dentro de la carpeta personal de cada usuario, pero no registran absolutamente todo y además la información puede quedarse dispersa... Por ejemplo podemos tener actividad de root en un lado mientras que en otro lado la actividad de un usuario normal... además ninguno de los dos registra fechas, con lo que aún registrando absolutamente todo no podemos saber a qué hora se hizo cada cosa, siendo muy complicado tener pruebas concluyentes. Es por eso que con el uso de snoopy tendremos más fiabilidad ya que registra la fecha ya la hora en que se ejecutó el comando y el usuario que lanzó el susodicho...

La instalación y uso de esta utilidad es extremadamente sencillo; snoopy no se encuentra instalado por defecto en el sistema operativo, pero se instala con extremada facilidad mediante el uso de los repositorios:

apt-get install snoopy

Dicho paquete incluye la instalación de una librería llamada ld.so.preload, la cual se encarga de registrar las actividades realizadas en nuestro equipo; la cuestión está en que al ser una librería "importante" requerirá nuestra confirmación mostrándonos un dialog.

validacion_lib

Obviamente tendremos que seleccionar el sí para poder monitorizar adecuadamente toda la actividad; unos segundos después de la instalación, el sistema estaría monitorizando TODA la actividad realizada por cualquier usuario, almacenando dicha actividad en el fichero de log /var/log/auth.log; es decir que no crea una fichero de log nuevo sino que aprovecha uno existente. El objetivo de dicho fichero de por sí es registrar toda actividad relacionada con acciones de login, intentos de conectar por ssh, etc... Es decir, que tiene una gran cantidad de líneas aparte de las que añade snoopy de por sí, es por ello que para hacer una consulta eficiente en dicho fichero, habría que recurrir al siguiente comando;

tail -n 100 -f /var/log/auth.log |grep snoopy

Esto de por sí ya sería suficiente para poder ver en tiempo real todo comando introducido, informándonos además de detalles importantes tales como el usuario, la fecha y la hora... Un ejemplo del resultado mostrado sería la captura de a continuación:


Para saber quien ha sido el que ha ejecutado el comando habría que ver el uid (user id) del que ha ejecutado la orden; por ejemplo el uid de root sería el 0.

El único "problema" de esta solución basada en snoopy, es que auth.log irá creciendo a un ritmo vertiginoso; llegando a poder ocupar prácticamente la totalidad del sistema con sus consecuencias (disco saturado, servicios parados que no pueden arrancar, etc...), con lo que es necesario recurrir a algún método que evite dicha catástrofe. El método más sencillo y práctico sería el uso de logrotate para que auth.log rotase diariamente y guardase únicamente la actividad de los 7 últimos días: auth.log correspondería a los logs de hoy, auth.log,1 a los de ayer y así sucesivamente hasta 7... Con esto guardaríamos la información de la última semana al mismo tiempo que evitaríamos el saturamiento del sistema operativo.

Eso se consigue editando el fichero /etc/logrotate.d/rsyslog; el cual generalmente ya tiene reglas que trata este fichero; pero no siempre. Es por ello que es mejor pecar de prevenido que curar y revisar este archivo. En caso de aparecer la línea /var/log/auth.log, debería de ser capaz de ser capaz de hacer la rotación automática; aún así yo recomiendo borrarla y añadir el siguiente contenido final del fichero:

  1. /var/log/auth.log
  2. {
  3. rotate 7
  4.         daily
  5.         notifempty
  6.         delaycompress
  7.         compress
  8.         postrotate
  9.                 invoke-rc.d rsyslog rotate > /dev/null
  10.         endscript
  11. }

Gracias a esta pequeña medida no solo tendríamos registrada toda la actividad de la última semana sino que tendríamos la certeza de que evitaremos cualquier problema de espacio en el disco duro a medio/largo plazo.

Espero que os haya resultado útil.

Saludos.

No hay comentarios :

Publicar un comentario