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.
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).
# history local1.* /var/log/history_bash
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 **).
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