Podemos personalizar el historial de bash con diversas variables HIST*. Todas ellas están explicadas en la página man de bash, por lo que basta con hacer un man bash
para echarlas un vistazo:
Las variables que suelo personalizar en mi caso son:
- HISTSIZE para controlar el número de comandos que guardo en el historial.
- PROMPT_COMMAND para añadir en el historial todos los comandos que se se ejecuten desde distintas terminales.
- HISTTIMEFORMAT para añadir una marca de tiempo que ayude a trazar en qué momento se ejecutó algún comando.
No obstante y aunque el historial de bash puede sernos de ayuda para trazar actividad de usuarios, si lo que queremos es controlar de forma precisa qué hace un usuario en un sistema es interesante utilizar un sistema de auditoría como audit.
La variable PROMPT_COMMAND es especialmente útil para añadir en el historial todos los comandos que se introduzcan con un usuario de forma simultánea desde distintas terminales. Seguramente si te has logado con un usuario en varias sesiones SSH hayas podido observar cómo se pierden algunos comandos en el historial. Para evitar definimos esta variable de la siguiente manera:
PROMPT_COMMAND="history -a"
Para tener una configuración más homogénea, estas variables no las suelo definir a nivel de usuario, sino a nivel global del sistema en /etc/bash.bashrc
y además como variables readonly para que no puedan ser modificadas:
readonly HISTSIZE=10000 readonly PROMPT_COMMAND="history -a" readonly HISTTIMEFORMAT="%d/%m/%y %T " export HISTSIZE PROMPT_COMMAND HISTTIMEFORMAT
Una vez hecho esto tenemos un historial de bash como este:
El formato para la marca de tiempo es obvio en el ejemplo. Si surge alguna duda tenemos todas las combinaciones posibles consultando man strftime
Finalmente, si queremos evitar que un usuario pueda borrar su fichero bash_history ya sea de forma accidental o intencionada, podemos utilizar aplicar el atributo de «sólo añadir» (append) con chattr como vimos hace tiempo:
chattr +a ~$USER/.bash_history
Como comentaba al principio, cada uno personalizará estas variables según gusto o necesidad 😉