02 septiembre 2015

Variable de control del history HISTCONTROL

Ab alio expectes alteri quod feceris. Espera de otro lo que a otro hayas hecho (quiere decir quien haga mal espere otro mal, o "Quien siembra vientos, cosecha tempestades").

Si modificamos a nivel global el sistema (editando /etc/profile) o solo nuestra cuenta (modificando el ~/.bashrc) podemos tener el control del history, basicamente el registro de los diferentes comandos que fuimos tecleando. Esta variable permite tener un cierto control sobre lo que se escribe al history. Vamos a ver sus opciones:

Las opciones que permite son:

ignorespace
Indica que no se guarde en el history los comandos que empiecen por un espacio. Por ejemplo:

vampii@gostir:[~]$ export HISTCONTROL="ignorespace"
vampii@gostir:[~]$ echo prueba1
prueba1
vampii@gostir:[~]$  echo prueba2
prueba2

El echo prueba2 como tiene un espacio delante del echo, no se va a guardar en el ~/.bash_history.

El HISTCONTROL=ingnorespace es equivalente a la inclusión de la variable HISTIGNORE con valor “[ ]*” en el bash_rc de varias distros. Me parece un riesgo tener habilitada esta opción. Si se ve comprometido el servidor es fácil omitir el agregar los comandos al historial por parte del atacante.
Quien implementa esto como root, es considerado como alguien que merece una vida de agonia y dolor, digno de solo administrar servidores Hasefroch el resto de su vida, y en soledad beber cerveza sin alcohol, sufriendo el ostracismo de los demas sysadmins, e incluso de los mismos usuarios, cual

ignoredups
No guarda los comandos repetidos. Por ejemplo, si se ejecuta dos veces un ls, sólo lo guarda una vez:

vampii@gostir:[~]$ echo a
a

vampii@gostir:[~]$ echo a
a

vampii@gostir:[~]$ echo a
a




En este caso solo se va guarda una vez el comando echo a

ignoreboth
Se trata de un alias para los dos parámetros anteriores: No escribe ni los comandos que empiezan por un espacio ni los que están duplicados.

erasedups
Elimina los comandos duplicados esten en el orden que sean dejando siempre el último ejecutado. Por ejemplo, si ejecutamos:

vampii@gostir:[~]$ echo 1
vampii@gostir:[~]$ echo a
vampii@gostir:[~]$ echo 1

En el history se va a escribir:

echo a
echo 1


Algunos ponen las cuatro opciones, he visto semejante burrada. No tiene mucho sentido ya que ignoreboth es la suma de ignorespace y ignoredups. Por lo tanto el export quedaría:

export HISTCONTROL=ignoreboth,erasedups

Que te diviertas!

1 comentario:

Anónimo dijo...

Conozco varios que se hacen llamar "SysAdmins" que estaban orgullosos (y especialmente orgullosas) que sus servers (totalmente desactualizados), tenian implementado eso de poner un espacio al comienzo para que no logueen los comandos, hasta que alguien les rompio todo, y no sabian ni de donde habia venido el problema.
Lo peor es que fue por estupidez, ni siquiera por maldad.