Monitorizar historial de comandos en Linux

En entornos de produccion o servidores donde acceden muchos equipos de trabajo (muchos usuarios) para hacer cambios o instalar aplicaciones, muchas veces el administrador de sistemas carga con la responsabilidad de que una maquina funcione bien o mal.

La buena practica seria tener un usuario root, el cual no pueden utilizar el resto de usuarios. Pero en un entorno de trabajo en el que un departamento instala un producto y otro departamento instala otro, muchas veces el usuario root es compartido y esto, claramanete, lleva a catastrofes y meteduras de pata.

Al responsable de la maquina le interesara mucho saber quien ha metido la pata.

Para ello vamos a utilizar el historial de comandos de Linux. En un entorno Unix o Solaris no he probado pero el planteamiento deberia de ser el mismo.

Seguramente existe algun paquete de bash, history o ssh para configurar tu servidor e incrementar el nivel de debug del historial de comandos, pero ahora lo voy a hacer manualmente mediante un script.

La idea es:

  • Cada sesion de shell registrara desde que maquina se ha iniciado la conexion ssh.
  • Esto nos creara un fichero a modo de log donde guardara la ip del origen de la conexion
  • Antes de salir se registraran todos los comandos introducidos en esa sesion en el fichero.

Este manual lo he hecho para el usuario root cuyo home es: /root. El script se puede configurar mucho mas para obtener el id de ussuario y dependiendo del mismo guardar el historial de comandos en un fichero.

Yo he utilizado OpenSuse que es la distribucion con la que estoy mas familiarizado.

Usare el siguiente script con permisos de ejecuccion:

#/bin/bash

fecha=`date +%d-%m-%y__%H:%M:%S`
conexion=historylog__$fecha
touch /root/$conexion

tail -1 /var/log/messages > /root/$conexion

export FICHERO_VARIABLE=/root/$conexion

alias exit=”history >> $FICHERO_VARIABLE;exit”

rm /root/.bash_history
history -c

El script hace lo siguiente:

  1. Crea un fichero con la fecha y hora actual
  2. Coge la ultima linea de los mensajes del sistema con el mensaje de la ultima conexion ssh y la ip de origen. Por suspuesto se podrian coger lineas de otros ficheros de log donde nos muestre la ip de origen de la conexion.
  3. Saca una variable con el nombre del fichero.
  4. Aplica un alias al comando exit para que antes de salir guarde el historial de comandos en el fichero (cuyo nombre le pasamos por variable).
  5. Borra el historial y nos aseguramos de borrar el fichero de historial para ese usuario.

Ahora solo tendremos que incluir una llamada al script cada vez que iniciemos sesion en la maquina:

suse:~ # locate bashrc
/etc/bash.bashrc
/etc/skel/.bashrc
/home/user/.bashrc

editamos /etc/bash.bashrc y añadimos al final:

. /root/login.sh

ojo al primer punto que es para poder usar la variable “FICHERO_VARIABLE” definida en el script.

Ahora cuando iniciemos sesion en el servidor nos creara un fichero de log, al salir dicho fichero podria contener lo siguiente:

Oct 18 04:08:41 suse sshd[3968]: Accepted keyboard-interactive/pam for root from 192.168.0.33 port 1779 ssh2
1  ls
2  ls -la
3  exit

Todo es modificable para que te funcione correctamente el script, pero la verdad es que es sencillo de usar y muy util para saber quien es el responsable de la ultima cagada en la empresa, jeje.

A mi me pare una idea muy util ya que he asistido a verdaderas catastrofes, por suerte siempre he sabido quien las ha cometido.

Etiquetas: , ,

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: