===== 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 [[registrar_actividad_de_la_consola_keylogger|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_comandos_con_snoopy_logger|Snoopy]]\\
[[registrar_historial_de_bash_como_logs|PROMPT_COMMAND]] (Bash)\\
[[registrar_actividad_de_la_consola_keylogger|PAM]]
----
[[http://sourceforge.net/projects/rootsh/|rootsh]]\\
[[http://sourceforge.net/projects/snoop/|Snoop]]\\
[[http://sniffy.sourceforge.net/|sniffy]]\\
[[http://ttyrpld.sourceforge.net/|ttyrpld]]\\
[[http://freecode.com/projects/ttysnoop|ttysnoop]]