Bash history com data e hora: saber quem rodou o quê (e quando)

Como configurar o histórico do bash para registrar data e hora de cada comando, evitar perder histórico entre sessões, e por que o history sozinho não é auditoria.

Boa noite pessoal, tudo bem?

Em muitas empresas, escolas ou mesmo em casa, a gente precisa compartilhar quase tudo: computador, notebook, tablet. (Espaço no ônibus, trem e metrô nem estou considerando, ok? rs)

Brincadeiras à parte, uma rotina muito comum em TI é a administração de servidores e aplicações compartilhadas por várias pessoas. Quando tudo funciona, ótimo, todo mundo feliz. Agora, imagina quando acontece algum problema: um load alto, um disco que encheu do nada, um parâmetro que deixou a aplicação estranha...

De quem é a culpa? Quando começou? Que comando executaram? E aí começa a passagem de bastão:

  • "Ahhhh, foi você!"
  • "Não, só pode ter sido o cara da aplicação, que ativa os debugs e acaba com tudo."
  • "Nada disso, deve ter sido aquela empresa de tuning que pediu a senha de root."

E isso se prolonga com todo mundo colocando a mão no servidor, até acontecer tudo de novo.

💡 O certo, em servidor, é cada pessoa ou rotina ter o seu próprio usuário, com as permissões apropriadas, e nada de senha de root compartilhada. Mas, mesmo com isso, saber quando um comando foi executado ajuda muito a filtrar o estrago e encurtar o tempo de problema.

Data e hora no history

O bash tem uma variável só para isso. Edite o .bashrc do usuário:

$ vim ~/.bashrc

E adicione a linha:

export HISTTIMEFORMAT="%F %T  "

Abra um novo terminal (ou rode source ~/.bashrc) e o comando history passa a mostrar:

$ history | tail -3
  1021  2026-11-12 21:40:03  df -h
  1022  2026-11-12 21:40:15  du -sh /var/log/*
  1023  2026-11-12 21:41:02  grep error /var/log/messages

O %F é a data no formato ano-mês-dia e o %T é a hora. Na época eu usava %h/%d - %H:%M:%S, que mostra algo como Sep/08 - 12:26:13, mas sem o ano, o que atrapalha quando o histórico é longo.

Deixando o histórico mais útil

Mais algumas linhas que valem a pena no mesmo .bashrc:

# não grava comandos repetidos em sequência nem os que começam com espaço
export HISTCONTROL=ignoreboth

# quantidade de comandos na memória e no arquivo ~/.bash_history
export HISTSIZE=10000
export HISTFILESIZE=20000

# acrescenta ao arquivo em vez de sobrescrever (várias sessões abertas)
shopt -s histappend

# grava cada comando assim que ele termina, e não só no logout
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"

O histappend e o history -a resolvem um problema clássico: com duas ou três sessões SSH abertas no mesmo servidor, a última que fecha sobrescreve o histórico das outras. Com essas linhas, nada se perde.

💡 Dica: para aplicar para todos os usuários do servidor, coloque as linhas em um arquivo dentro de /etc/profile.d/, por exemplo /etc/profile.d/history.sh.

History não é auditoria

⚠️ O .bash_history pertence ao próprio usuário: ele pode apagar (history -c), editar o arquivo ou simplesmente usar outro shell. Serve muito bem para o dia a dia e para ajudar numa investigação, mas não vale como evidência.

Quando a pergunta "quem rodou o quê" precisa de uma resposta confiável, os caminhos são outros:

  • Logs do sudo: todo comando executado via sudo fica registrado em /var/log/secure (Red Hat e derivados) ou /var/log/auth.log (Debian e Ubuntu), e também no journalctl. Mais um motivo para não compartilhar a senha de root;
  • auditd: registra execuções e acessos no nível do kernel, e o usuário comum não consegue apagar. Dá para consultar com ausearch e aureport;
  • Centralização de logs: mandar esses registros para um servidor de logs, para que nem o root local consiga apagar o rastro.

Considerações Finais

É uma configuração de cinco linhas que evita muita discussão. Com data e hora no histórico, a conversa deixa de ser "foi você" e passa a ser "às 21:41 alguém rodou isso aqui". E, quando o ambiente pedir auditoria de verdade, o caminho é sudo com usuário nominal e auditd.

Abraços e até a próxima!

:wq!

Post publicado originalmente em fevereiro de 2014 e atualizado em novembro de 2026.

Comentários