O que poderia fazer com que meu histórico do bash fosse limpo inesperadamente?


16

Hoje notei que minha história do bash está completamente limpa. Não executei history -cnem excluí o .bash_historyarquivo. Além de excluir o .bash_historyarquivo e history -c, como o histórico do bash pode ser limpo?


2
Poderia ter acontecido por exemplo >.bash_history. Talvez alguém estivesse em sua conta e tentou esconder suas trilhas. Verifique horários incomuns de login com last, pesquisar até /var/log/auth.log(dependendo do seu sistema).
#

Respostas:


17

Ao fechar várias instâncias do bash ao mesmo tempo, existe uma condição de corrida conhecida que pode fazer com que o histórico seja limpo. Isso ocorre porque não há bloqueio usado quando o arquivo de histórico do bash é gravado.

Chet Ramey (o atual mantenedor do bash) fez um bom resumo das condições para esse problema:

O código atual (bash-4.3-devel) funciona assim, assumindo que não há erros (lib / readline / histfile.c: history_do_write ()):

  • renomear (arquivo histórico, arquivo histórico ~)
  • abrir arquivo com O_CREAT | O_TRUNC
  • buffer malloc grande o suficiente para armazenar todos os dados do histórico
  • escreva todas as entradas do histórico em uma chamada de gravação (2)
  • fechar arquivo
  • desvincular (arquivo de histórico ~)

O código bash-4.2 funciona da mesma maneira, exceto que não faz backup do arquivo de histórico. Cada shell faz a mesma coisa quando sai, assumindo que o histappend não está definido, como na sua configuração.

Existem algumas maneiras pelas quais o arquivo de histórico pode acabar com tamanho zero: o malloc pode falhar ou a gravação pode falhar. No bash-4.2, é tarde demais para fazer qualquer coisa sobre o arquivo de histórico truncado nesse momento. No bash-4.3, o arquivo de histórico anterior será restaurado.

Este tópico da lista de discussão do bug-bash contém uma discussão decente dos problemas, possíveis soluções e preocupações em torno disso.

Existem também outras possibilidades:

  • Em algum momento, seu HISTSIZEou HISTFILESIZEfoi definido como 0
  • Em algum momento, sua linha de leitura history-sizefoi definida como 0
  • Alguém, intencional ou não, limpou a história do bash (via > "$HISTFILE"ou similar)

No último caso, convém verificar se alguém não acessou sua conta e está tentando ocultar seus rastros de maneira grosseira. Dê uma olhada last, /var/log/auth(ou /var/log/secureno CentOS / RHEL), e se você tem isso, qualquer processo de contabilização e / ou software de auditoria que você pode ter instalado.


1

Como excluí acidentalmente meu histórico do bash:

Eu estava lançando meu próprio script readline de terminal alternativo a partir dos primeiros princípios: https://tiswww.cwru.edu/php/chet/readline/rluserman.html

e depois testá-lo em um terminal. Que o GNU Readline possui um tamanho de histórico e instruções de preservação de histórico incorporadas, para que o tamanho do histórico possa ser padronizado e, portanto, todo o seu histórico seja deslumbrado.

Recuperação do histórico se deixada na memória:

Se você capturá-lo antes de uma reinicialização ou se um terminal foi deixado aberto antes da limpeza, você poderá encontrar seu histórico na memória. Execute history | cut -c 8- > histback_user1.txtem todos os terminais deixados abertos e para todos os usuários. Se isso produzir um arquivo com seu histórico estendido, você poderá substituí-lo ~/.bash_historypor histback_user1.txt. Verifique também o histórico de todos os usuários que efetuaram login recentemente no sistema, bem como o histórico do root. É fácil limpar acidentalmente o histórico do bash em muitas circunstâncias; portanto, se você quiser ter certeza de que não há perda de histórico, precisará de um script de backup diário.


Obrigado . Não sei o que diabos aconteceu, mas minha história foi redefinida ontem e não foi até agora que eu notei. Mas, para minha sorte, eu não tinha uma janela de terminal aberta, mas 10 (!). Está tudo bem agora.
Marc.2377
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.