Skip to main content

Evitar perdida en historial de comandos

Al trabajar con distintas consolas de distintos servidores, o incluso en muchos terminales de un mismo server, puede ser frustrante perder un historial de bash.
Una solución a este problema está con el atributo PROMPT_COMMAND. El mismo tiene que ser escrito en el archivo .bashrc del usuario

export PROMPT_COMMAND=’history -a’

Lo que permite es que después de la ejecución de cada comando, se haga un flush al archivo .bash_history.

Timestamp en .bash_history

Con la ayuda de la variable HISTTIMEFORMAT en Bash, puede mostrar la fecha y hora en que se ejecutó cada comando. Puede ser útil cuando necesitamos: recordar qué comandos se ejecutaron en un período de tiempo específico, deshacer varias operaciones, etc.

export HISTTIMEFORMAT=”%F %T “

Después de esto, todo lo que queda es ejecutar el archivo ~ / .bashrc para que la sesión de terminal actual use la nueva configuración o puede abrir una nueva terminal y automáticamente tomará la nueva configuración de HISTTIMEFORMAT

root@server:~# source ~/.bashrc

Imposibilitar borrado del archivo

Para evitar este tipo de ataque contra la limpieza del archivo .bash_history, puede utilizar el comando chattr.
Es posible configurar el archivo .bash_history para evitar que modifiquen/eliminen contenido del mismo con chattr:

root@server:~# chattr +a /home/user/.bash_history

También se recomienda que la “immunable flag” se coloque en el archivo ~/.profile en la home del usuario.

root@server:~# chattr +i /home/user/.profile

La marca “append only” en el archivo .bash_history también evita que el usuario vincule el archivo .bash_history a /dev/null de la siguiente manera:

user@server:~$ ln -sf /dev/null ~/.bash_history
ln: cannot remove `.bash_history’: Operation not permitted
user@server:~$ echo > .bash_history
bash: .bash_history: Operation not permitted

Desafortunadamente, aún podrían eliminar el archivo con el comando rm, por lo que este tipo de protección de su archivo .bash_history para que no se sobrescriba no le garantiza completamente que los comandos de usuario se registrarán.

Variables HIST*

Para evitar que el usuario haga “trucos” y escape del registro .bash_history cambiando los valores de shell predeterminados para las variables HISTFILE y HISTFILESIZE, exportándolas a una ubicación de archivo diferente o un tamaño de archivo nulo, se tienen que definir las variables bash para que se carguen en /etc/profile

HISTFILE=~/.bash_history
HISTSIZE=10000
HISTFILESIZE=999999
HISTIGNORE=””
HISTCONTROL=””
readonly HISTFILE
readonly HISTSIZE
readonly HISTFILESIZE
readonly HISTIGNORE
readonly HISTCONTROL
export HISTFILE HISTSIZE HISTFILESIZE HISTIGNORE HISTCONTROL

Cambio de Shell

También está la posibilidad de sortear las restricciones de prevención del historial usando otro shell de los disponibles en el sistema:

user@server:~$ /bin/csh
user@server:~>

Deshabilitar acceso a todos los demás shells del sistema. Por lo general son csh, tcsh y quizás ksh.

root@server:~# chmod 750 csh
root@server:~# chmod 750 tcsh
root@server:~# chmod 750 ksh

Aunque los pasos anteriores evitarán que algunos de los usuarios limpien voluntariamente sus archivos de historial .bash_history, no garantizarán al 100% que un buen cracker no podrá encontrar una manera de eludir las medidas de seguridad impuestas para el archivo .bash_history

El contenido de este artículo esta bajo licencia Creative Commons.

Leave a Reply