User Tools

Site Tools


registrar_historial_de_bash_como_logs

Registrar los comandos de la terminal Bash en ficheros log

Debido a que esta forma de registrar los comandos de la terminal Bash (no válido para otras shells) no ofrece ninguna garantía en cuanto a seguridad, sería fácil ejecutar comandos sin que estos se registrasen, por ejemplo con vim, cambiando de shell o ejecutando el comando “history -c” al entrar en la sesión. Por lo tanto se recomienda su uso en entornos personales o de confianza sin finalidad de monitoración. Otra alternativa para monitorizar la actividad de la shell es registrar_comandos_con_snoopy_logger, aunque tampoco ofrece ninguna garantía en cuanto a seguridad. Si se quiere tener un método para monitorizar todo lo que pasa en las terminales, es posible usar PAM.

Editar el fichero /etc/bash.bashrc

Opción 1 (Solo registra los comandos que se han ejecutado correctamente).

readonly PROMPT_COMMAND='ERR_VAL=$?; if [ $ERR_VAL -eq 0 ]; then history -a >(tee -a ~/.bash_history | logger -p local1.debug -t "$USER $SSH_CLIENT"); fi'

Opción 2 (Registra todo).

readonly PROMPT_COMMAND='history -a >(tee -a ~/.bash_history | logger -p local1.debug -t "$USER $SSH_CLIENT")'

NOTA: la variable PROMPT_COMMAND: De estar fijada, su contenido se ejecuta antes de mostrar el prompt ($PS1).

Editar syslog.conf / rsyslog.conf

# history
local1.* /var/log/history_bash

Opciones del comando logger

  • -i Indica a logger que registre su PID (ID de proceso).
  • -s Envia el mensaje a la herramienta de registro y envía la salida al error estándar (útil en scripts)
  • -d Indica a loger que use datagramas en lugar de una conexión stream al socket del registrador del sistema.
  • -f Direcciona el contenido de un archivo al registrador del sistema.
  • -p prioridad: Le permite especificar la prioridad del mensaje a enviar al registrador del sistema.
  • -t etiqueta: Le permite indicar una etiqueta para el mensaje a enviar al registrador del sistemas
  • -u socket: Por defecto logger envía el mensaje al registrador del sistema, si usted quiere alterar este comportamiento y registrar directamente en un socket puede indicarlo con esta opción.

Ejemplo del contenido del fichero de logs

Se realiza una conexión ssh al servidor pollux.dominio desde el host 10.2.191.182 y se ejecutan los siguientes comandos.

root# history
root# dmesg
root# cat /var/log/history_bash
root# su - busi
 
busi$ id
busi$ echo soy otro usuario
busi$ exit
 
root# echo ahora soy root de nuevo
root# cat /var/log/history_bash

Contenido de /var/log/history_bash en relación a los comandos anteriores.

Mar 26 10:21:08 pollux root 10.2.191.182 53568 22: history
Mar 26 10:21:18 pollux root 10.2.191.182 53568 22: dmesg
Mar 26 10:21:26 pollux root 10.2.191.182 53568 22: cat /var/log/history_bash
Mar 26 10:21:47 pollux busi : id
Mar 26 10:21:54 pollux busi : echo soy otro usuario
** Mar 26 10:21:57 pollux root 10.2.191.182 53568 22: su - busi
Mar 26 10:22:03 pollux root 10.2.191.182 53568 22: echo ahora soy root de nuevo
Mar 26 10:22:17 pollux root 10.2.191.182 53568 22: cat /var/log/history_bash

Debido a que el contenido de la variable PROMPT_COMMAND se ejecuta antes de mostrar el prompt, si se produce un cambio de usuario madiante el comando “su”, el registro de ese comando no se obtiene hasta que root (en nuestro ejemplo) no recupere el prompt (marcado en el ejemplo con **).

Algunas formas de saltarse el registro de comandos

Ejecutar comandos dentro de 'more', 'less', 'man' con !comando

more fichero
...
!dmesg

Usando el editor vi/vim para ejecutar comandos.

vi fichero
~
~
...
:!dmesg

Cambiando de interprete de comandos.

[root@dominio ~]# sh
sh-4.1# 

Vaciar la pila del historial.

history -c

Otras alternativas para registrar actividad de la terminal (Shell)

registrar_historial_de_bash_como_logs.txt · Last modified: 2020/12/25 22:57 by 127.0.0.1