Eu acidentalmente digitei senha na linha de comando do bash

182

Eu acidentalmente digitei minha senha na linha de comando bash, confundindo a linha Last login: ... por Wrong password (eu estava com pressa). O que eu faço para cobrir meu rastro?

O que fiz foi editar .bash_history e excluir a linha ofensiva (tive que relogar uma vez para ver a senha exibida no arquivo para poder excluí-la e relogar novamente para vê-la desaparecer do histórico disponível na tecla UPARROW) .

Existe algum outro lugar onde o histórico de comandos possa ser salvo? O sistema é o CentOS 6.5.

    
por MaDa 02.04.2014 / 08:42

11 respostas

177

Você pode remover apenas a linha ofensiva do histórico de bash , em vez de limpar todo o histórico. Basta remover a linha com o sinal -d e salvar (gravar) o novo histórico com o sinalizador -w :

$ history
351 ssh [email protected]
352 my_password
$ history -d 352
$ history -w
    
por 02.04.2014 / 14:25
120

Existem duas partes para isso:

  • bash armazena o histórico em um arquivo ~/.bash_history , que é, por padrão, gravado no final da sessão
  • o history que é mantido na memória

Por segurança, você precisa apagá-lo da sessão:

history -c

e truncar o arquivo de histórico conforme necessário:

> ~/.bash_history

Se a sua sessão em que você digitou a senha ainda estiver aberta, outra forma de cobrir seu rastreio é definir a variável HISTFILE para o dispositivo nulo para que o histórico não seja escrito para ~/.bash_history quando a sessão sai:

export HISTFILE=/dev/null
    
por 02.04.2014 / 09:17
23

Como o bash (pelo menos todas as versões históricas e atuais que conheço) não salva automaticamente o histórico até você sair, uma estratégia geralmente aplicável quando você digita um comando que deseja garantir que nunca seja salvo é digitar imediatamente :

kill -9 $$

Isso mata o shell com SIGKILL , que não pode ser capturado, então o shell não tem como salvar nada ao sair.

A maioria das outras abordagens envolve a depuração após o fato (ou seja, depois que os dados já atingiram o disco), o que tem muito mais chance de erro (falta de uma cópia), especialmente se o sistema estiver usando btrfs ou similar. p>     

por 02.04.2014 / 18:20
11

Depois que você acidentalmente digitou algo que não queria armazenar no histórico, você pode digitar: unset HISTFILE

O Bash não saberá onde armazenar o histórico quando você estiver efetuando logoff, então, efetivamente, isso desativará o registro do histórico durante toda a sessão.

    
por 02.04.2014 / 20:51
11

Meu truque favorito para isso é acertar a seta para cima, retroceder sobre o comando, digitar algo (pode não ser necessário), clicar na seta para baixo, digitar "ls" e apertar enter. Parece realmente piegas, mas na verdade funciona. Descobri isso quando fiquei irritado depois de editar o comando errado no meu histórico e, em seguida, arruiná-lo, não pressionando ctrl-c para abortar a edição. Eu acho que o bash suporta a história revisionista. ; -)

$ passw0rd
$ <up arrow><backspace x8>cd<down arrow>echo hi
$ history|tail -3

Parece:

$ passw0rd
passw0rd: command not found
$ echo hi
hi
$ history|tail -3
 2445* cd
 2446  echo hi
 2447  history|tail -3
$ 
    
por 03.04.2014 / 22:58
10

Adicional a outras respostas, pode ser relevante que a senha também seja encontrada no buffer de rolagem do terminal - o histórico do texto exibido - agora e, mais um problema, possivelmente no disco rígido, se o emulador de terminal salvou a história no disco. Isso acontece no KDE, se o tamanho do histórico estiver configurado para "scrollback ilimitado", para nunca descartar nenhuma saída.

    
por 03.04.2014 / 21:58
5

Com $<space> command , um comando não é adicionado ao histórico, às vezes é útil

$  history | grep mywierdgrep
$ history | grep mywierdgrep
 2005  history | grep mywierdgrep
    
por 02.04.2014 / 16:07
4

No entanto, outra alternativa para evitar salvar no arquivo de histórico (antes de efetuar o logout) é simplesmente chmod 444 ~ / .bash_history e, em seguida, logout. Faça o login novamente e redefina as permissões (ou não, dependendo de como você é paranóico!).

    
por 03.04.2014 / 11:08
1

Eu vejo repetidamente mencionado

Be aware that this doesn't work if you've set "PROMPT_COMMAND=history -a" [..] You'll have to edit your .bash_history to remove it.

A primeira parte é definitivamente verdadeira, mas você não precisa recorrer à edição manual de .bash_history para corrigi-la. Se você combinar os dois comandos em uma linha, funcionará perfeitamente:

$ history
351 ssh [email protected]
352 my_password
$ history -d 352 ; history -w
    
por 07.12.2017 / 15:03
0

Muitas das respostas aqui tentam remover o comando em questão do histórico da sessão bash do curren't antes que ele seja gravado em $HISTFILE (~ / .bash_history por padrão). No entanto, se você tiver definido PROMPT_COMMAND=history -a o comando com sua senha é imediatamente gravado no seu $HISTFILE quando o prompt é exibido após o término do comando. Você terá que editar seu $HISTFILE para removê-lo.

Essa configuração é comumente usada para intercalar comandos de várias sessões abertas do bash .

    
por 31.08.2017 / 19:36
-3

Você também desejará verificar os logs do syslog. Logins inválidos geralmente serão registrados no syslog.

/ var / log / messages ou o equivalente para o seu SO.

    
por 05.04.2014 / 20:58