SEGURANCA Ajustando o historico de comandos do bash

De Gentoo Linux Wiki

Este artigo faz parte da seção de Segurança.

Tabela de conteúdo

[editar] Introdução

Neste documento serão expostos algumas formas de se aumentar o nível da segurança relacionada ao arquivo do histórico do bash. Os exemplos irão desde desabilitar completamente o histórico até limitar o tamanho do histórico, ou definir quais comandos serão salvos.

Salvar o histórico do bash em uma partição tmpfs ou ramfs também é uma alternativa segura para este problema (desconsiderando a leitura do histórico diretamente da memória). Desta maneira o histórico não será salvo em disco, o que impossibilita a permanência de dados sigilosos no hd.

[editar] Sobre o arquivo .bash_history

O arquivo .bash_history é usado pelo Bourne Again SHell (bash) para salvar o histórico de comandos executados por um usuário específico. Este arquivo normalmente reside no diretório home de cada usuário. Caso o histórico esteja sendo guardado, os comandos executados anteriormente podem ser acessados:

 1 - através da seta para cima;
 2 - através dos comandos !, !num, !! ou !string;
 3 - usando o comando 'history'.

É possível alterar o modo pelo qual o histórico é armazenado através de variáveis de ambiente.

Consulte os manuais do bash e do history para obter mais informações.

[editar] Por que desabilitar esta funcionalidade?

Em prol da segurança, você nunca deveria usar o .bash_history, nem limitar o que será salvo nele pois informações sigilosas como senhas ou chaves podem estar sendo salvas descriptografadas no disco. Um arquivo salvo no hd poderá, teoricamente, ser recuperado sempre, mesmo após ter sido excluído, sobrescrito por um número arbitrário de vezes. Mesmo se você danificar fisicamente os discos, conseguirá recuperar os dados após. A única maneira de se destruir completamente os dados é destruir completamente os discos, derretendo-os. A razão para isso é tão complexa que é melhor não nos enveredarmos por estes caminhos (tenho um artigo fantástico sobre este assunto, mas não sei onde ele está! =|). Então, se a segurança é uma questão importantíssima para você ou se você deseja impedir o acesso aos seus dados caso alguém roube (fisicamente) seu disco rígido, então práticas como as descritas neste artigo e (muita) criptografia são as soluções.

Também deve ser dito que, na maioria das vezes, ainda é seguro (e útil) manter o histórico avaliável em memória ram. Claro, desabilitar o .bash_history implica que, ao deslogar ou fechar a sessão no terminal, o histórico da sessão será perdido.

[editar] Passo a passo

Para testar as demonstrações a seguir, você deverá estar logado como root. Lembre-se que estes são apenas alguns exemplos: sinta-se à vontade para misturá-los e combiná-los.

[editar] Desabilitando o histórico do Bash para todos os usuários (não recomendável)

Este exemplo desabilita o histórico do bash para todos os usuários. Após isso, não será possível acessar os comandos executados anteriormente pela seta para cima ou por algum comandos mencionados acima.

Adicione as seguintes linhas ao arquivo /etc/profile:

Arquivo: /etc/profile
export HISTFILESIZE=1
export HISTSIZE=4
unset HISTFILE=5

Finalmente, para aumentar ainda mais a proteção, crie no diretório home de cada usuário um link simbólico chamado .bash_history apontando para /dev/null, inclusive no home do usuário root:

Arquivo: /etc/profile
# ln -s /dev/null ~/.bash_history

Pronto. Histórico desabilitado. Mas, caso você precise de segurança de altíssimo nível, será necessário reavaliar seus planos de segurança e, quem sabe, substituir alguns discos que já receberam dados sigilosos! =)

[editar] Desabilitando o histórico do Bash para todos os usuários (recomendável)

Este exemplo desabilita o histórico do bash para todos os usuários mantendo o acesso aos comandos executados anteriormente pela seta para cima ou por algum comandos mencionados acima. O limite de comandos armazenados por sessão será de 100 linhas.

Adicione as linhas a seguir ao seu /etc/profile:

Arquivo: /etc/profile
export HISTFILESIZE=4
unset HISTFILE=5

# Altere para um número razoável de linhas, a seu gosto. Eu costumo permitir apenas 100.
export HISTSIZE=100

[editar] Desabilitando o histórico para alguns usuários

Este exemplo desabilita o histórico do bash para alguns usuários, mantendo o acesso aos comandos executados anteriormente pela seta para cima ou por algum comandos mencionados acima. O limite de comandos armazenados por sessão será de 100 linhas. Neste exemplo as linhas duplicadas (em sequência) não serão registradas.

Adicione as seguintes linhas ao .bash_profile dos usuários que terão o comportamento do .bash_profile alterado:

Arquivo: .bash_profile
export HISTFILESIZE=4
unset HISTFILE=5

# Altere para um número razoável de linhas, a seu gosto. Eu costumo permitir apenas 100.
export HISTSIZE=100

# Ignorando linhas duplicadas em sequência:
export HISTCONTROL=ignoredups

[editar] Limitando as informações salvas no histórico para alguns usuários

Este exemplo desabilita o histórico do bash para alguns usuários, mantendo o acesso aos comandos executados anteriormente pela seta para cima ou por algum comandos mencionados acima. O limite de comandos armazenados por sessão será de 100 linhas. Neste exemplo as linhas duplicadas (em sequência) ou as linhas que tiverem um espaço como primeiro caractere não serão registradas. É recomendável a leitura sobre a variável de ambiente HISTIGNORE no manual do bash. Esta variável possibilita ao histórico ignorar certos padrões como o comando bash.


Adicione as seguintes linhas ao .bash_profile dos usuários que terão o comportamento do .bash_profile alterado:

Arquivo: .bash_profile

# Máximo número de linhas a ser registrado no histórico
export HISTFILESIZE=100

# Voce pode alterar isto para qualquer arquivo que desejar, inclusive o /dev/null. ;)
#export HISTFILE=~/.bash_history

# Altere esta linha escolhendo um número razoável de linhas
export HISTSIZE=1

# Ignorar linhas duplicadas em sequência e linhas que tiverem um espaço em branco como primeiro caractere. (ignoreboth = ignoredups e ignorespace combinados)
export HISTCONTROL=ignoreboth

[editar] Terminando

Para ativar as configurações, será necessário abrir um novo terminal, relogar no sistema ou executar o comando source no arquivo correto. Lembre-se que, caso você tenha desabilitado o .bash_history, você deverá excluí-lo do diretório home de cada usuário.

[editar] Sobre

Traduzido por Gabriel Queiroz Silva

Versão original (inglês)[1].

Ferramentas pessoais