Ho accidentalmente digitato la password nella riga di comando bash


189

Ho accidentalmente digitato la mia password nella riga di comando bash, confondendo la Last login: ...riga per Wrong password(ero di fretta). Cosa devo fare per coprire la mia traccia?

Quello che ho fatto è stato modificare .bash_historyed eliminare la linea offensiva (ho dovuto riconnettermi una volta per vedere la password apparire nel file in modo che potessi eliminarla, e riconnetterla di nuovo per vederla scomparire dalla cronologia disponibile sotto il tasto UPARROW).

Esiste un altro luogo in cui è possibile salvare la cronologia dei comandi? Il sistema è CentOS 6.5.


59
Basta cambiare la password :)
gronostaj il

96
Cambiare la password non è così semplice ... Dovrei chiedere all'amministratore di reinstallare la mia nuova chiave pubblica su 15 server diversi - e il tipo è come /dev/null.
MaDa,

71
Se non riesci a cambiare facilmente la tua password in qualsiasi momento, potresti avere una grave lacuna di sicurezza. Cosa farai quando qualcuno riceverà la tua password? Hai dei mezzi per revocare immediatamente l'accesso al sistema?
gronostaj,

42
È possibile modificare la passphrase di una chiave SSH senza modificare la chiave: ssh-keygen -f id_rsa -p.
jwg

6
Mi limito a menzionare che, almeno sotto gli accessi di Windows in rete, sei hosed. L'impostazione predefinita di admin (in alcuni server tower) è di registrare tutti i tentativi di accesso e, naturalmente, i nomi utente sono in chiaro. Tutto quello che una persona intraprendente deve fare è cercare stringhe non-username-ish e correlarle con il nome utente valido successivo (o il prossimo tentativo di accesso sulla stessa macchina). E non esiste un modo semplice per eliminare quel file di registro dell'amministratore. Quindi devi davvero cambiare la tua password.
Carl Witthoft,

Risposte:


184

Puoi rimuovere solo la linea offensiva dalla bashcronologia, invece di cancellare l'intera cronologia. Basta rimuovere la linea con il -dflag, quindi salvare (scrivere) la nuova cronologia con il -wflag:

$ history
351 ssh me@site.com
352 my_password
$ history -d 352
$ history -w

1
Tieni presente che questo non funziona se hai impostato "PROMPT_COMMAND = storia -a". Con questo in atto il comando con la tua password viene immediatamente scritto nel tuo .bash_history quando il prompt viene visualizzato al termine del comando. Dovrai modificare il tuo .bash_history per rimuoverlo.
benrifkah,

1
Si noti inoltre che se la riga è stata scritta nel file hostory, e successivamente sono state aperte più shell (finestre dei terminali), TUTTE quelle shell avranno la cronologia lì! Dovrai rimuoverlo da tutte quelle shell, O almeno dalla cronologia ULTIMA shell che chiudi! Meglio ottenerlo prima che la shell che lo ha usato esista. La storia quando si ha a che fare con più shell può diventare un incubo.
anthony

121

Ci sono due parti in questo:

  • bashmemorizza la cronologia in un file ~/.bash_historyche, per impostazione predefinita, viene scritto alla fine della sessione
  • quello historyche è tenuto in memoria

Per sicurezza, è necessario cancellarlo dalla sessione:

history -c

e tronca il file della cronologia secondo necessità:

> ~/.bash_history

Se la sessione in cui è stata digitata la password è ancora aperta, un altro modo per coprire la traccia è impostare la HISTFILEvariabile sul dispositivo null in modo che la cronologia non venga scritta ~/.bash_historyquando la sessione viene chiusa:

export HISTFILE=/dev/null

205
Ehi guarda, è l'amministratore!
Raystafarian,

5
Gioco di parole non inteso, scusa :) Non stavo guardando il tuo nick mentre stavo scrivendo il mio commento.
MaDa,

7
Per essere paranoico (e tuttavia per qualche motivo ancora non cambiare la tua password) non dovresti shredil file o altrimenti sovrascriverlo più volte?
Kojiro,

1
@MaDa Nessun problema. Ho anche aggiunto un altro modo nella risposta per portare il mio nick nella foto.
Devnull

5
L'impostazione HISTFILE=è sufficiente. Da bash(1): se non impostato, la cronologia dei comandi non viene salvata all'uscita da una shell.
Lekensteyn,

23

Poiché bash (almeno tutte le versioni storiche e attuali di cui sono a conoscenza) non salva automaticamente la cronologia fino alla tua uscita, una strategia generalmente applicabile quando hai digitato un comando che vuoi assicurarti che non venga mai salvato è digitare immediatamente:

kill -9 $$

Questo uccide la shell con SIGKILL, che non può essere catturata, quindi la shell non ha modo di salvare nulla all'uscita.

La maggior parte degli altri approcci prevede lo scrubbing dopo il fatto (cioè dopo che i dati hanno già colpito il disco), che ha molte più possibilità di errore (manca una copia), specialmente se il sistema potrebbe usare btrfs o simili.


2
+1, non solo più possibilità di errore, potrebbe anche essere recuperabile a seconda se / quanti comandi sono stati eseguiti dopo
Cruncher

Manca la parola "automaticamente"? Perché dotancohen ha mostrato un modo per salvare la cronologia senza uscire dalla shell.
Ben Voigt,

3
La shell può essere configurata per salvare la cronologia dopo l'esecuzione di ciascun comando, anziché all'uscita.
Nick Matteo

1
+1 Questo è esattamente ciò che volevo raccomandare! Oltre rm ~/.bash_history~a rimuovere il file di backup nel caso dell'OP quando è già stato salvato
Tomas

Tieni presente che questo non funziona se hai impostato "PROMPT_COMMAND = storia -a". Con questo in atto il comando con la tua password viene immediatamente scritto nel tuo .bash_history quando il prompt viene visualizzato al termine del comando. Dovrai modificare il tuo .bash_history per rimuoverlo.
benrifkah,

11

Dopo aver digitato accidentalmente qualcosa che non volevi archiviare nella cronologia, puoi digitare: unset HISTFILE

Bash non saprà dove archiviare la cronologia quando ci si disconnette, quindi questo disabiliterà la registrazione della cronologia per l'intera sessione.


Tieni presente che questo non funziona se hai impostato "PROMPT_COMMAND = storia -a". Con questo in atto il comando con la tua password viene immediatamente scritto nel tuo .bash_history quando il prompt viene visualizzato al termine del comando. Dovrai modificare il tuo .bash_history per rimuoverlo.
benrifkah,

11

Il mio trucco preferito è quello di premere la freccia su, tornare indietro sul comando, digitare qualcosa (potrebbe non essere necessario), premere la freccia giù, digitare "ls" e premere invio. Sembra davvero hokey, ma funziona davvero. L'ho scoperto quando mi sono infastidito dopo aver modificato il comando sbagliato nella mia storia e averlo rovinato non premendo Ctrl-C per interrompere la modifica. Immagino che bash supporti la storia revisionista. ;-)

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

Sembra:

$ passw0rd
passw0rd: command not found
$ echo hi
hi
$ history|tail -3
 2445* cd
 2446  echo hi
 2447  history|tail -3
$ 

È strano . Uno svantaggio è che sembra conoscere la cronologia modificata, quindi potrebbe esserci un modo per ripristinare la vecchia versione?
MadTux,

@MadTux - Totalmente, ma .bash_history è solo un semplice file di testo. Quindi puoi fare l'esempio sopra, uscire e riconnetterti. Quando visualizzi l'intero contenuto del file .bash_history, non c'è nulla che lo differenzi da se avessi appena eseguito "cd", quindi la traccia è pulita.
Mark Jerde,

Tieni presente che questo non funziona se hai impostato "PROMPT_COMMAND = storia -a". Con questo in atto il comando con la tua password viene immediatamente scritto nel tuo .bash_history quando il prompt viene visualizzato al termine del comando. Dovrai modificare il tuo .bash_history per rimuoverlo.
benrifkah,

10

Oltre alle altre risposte, può essere rilevante che la password si trovi anche nel buffer di scorrimento del terminale - la cronologia del testo visualizzato - ora e, più che altro, eventualmente sul disco rigido, se l'emulatore di terminale ha salvato il cronologia sul disco. Questo accade in KDE Konsole se la dimensione della cronologia è impostata su "scrollback illimitato", per non scartare mai alcun output.


6

Con $<space> command, un comando non viene aggiunto alla cronologia, a volte utile

$  history | grep mywierdgrep
$ history | grep mywierdgrep
 2005  history | grep mywierdgrep

2
Sebbene interessante, non è chiaro come ciò sia utile nello scenario descritto. Stai suggerendo che ogni password dovrebbe iniziare con uno spazio?
Ben Voigt,

1
No, quello che sta suggerendo è che con questo in atto, ogni riga che scrivi che non vuoi impegnare nella storia, dovrebbe essere scritta con uno spazio iniziale. ad esempio: "ls" diventa "ls" e quella riga non viene mai visualizzata nella cronologia o nell'elenco delle frecce verso l'alto delle sessioni.
Bryan C.,

4
Nota che questo trucco di spazio iniziale funziona solo se $ HISTCONTROL contiene ignorespace.
Bernd Jendrissek,

2
@ jris198944 Fornire una password tramite un argomento della riga di comando potrebbe potenzialmente esporla a chiunque sul sistema che esegue ps.
Jamesdlin,

2
E comunque, mentre questo trucco è utile se stai pianificando in anticipo, questo non aiuta lo scenario originale in cui qualcuno ha inserito accidentalmente una password su una riga di comando.
jamesdlin,

4

Un'altra alternativa per evitare di salvare nel file della cronologia (prima di disconnettersi) è semplicemente

chmod 400 ~/.bash_history 

e quindi disconnettersi. Impedisci che la cronologia venga scritta su file (poiché il file è di sola lettura) in modo che l'intera sessione bash venga scartata e conservata la cronologia precedente.

Effettua nuovamente l'accesso e ripristina le autorizzazioni 600(o meno, a seconda di quanto sei paranoico!).


1

Vedo più volte menzionato

Tieni presente che questo non funziona se hai impostato "PROMPT_COMMAND = history -a" [..] Dovrai modificare il tuo .bash_history per rimuoverlo.

La prima parte è sicuramente vera, ma non è necessario ricorrere alla modifica manuale di .bash_history per risolverlo. Se si combinano i due comandi su una riga funziona perfettamente:

$ history
351 ssh me@site.com
352 my_password
$ history -d 352 ; history -w

Potresti spiegare cosa fa funzionare esattamente questo metodo?
Kamil Maciorowski il

PROMPT_COMMAND viene eseguito solo prima di visualizzare il prompt dei comandi successivo. Il problema con l'immissione dei comandi -d e -w su righe separate è che PROMPT_COMMAND eseguirà la cronologia -a comando tra. Se esegui sia -d che -w su una riga di comando, viene eseguito solo in seguito
Floris Kruisselbrink,

0

Molte delle risposte qui tentano di rimuovere il comando in questione dalla cronologia della sessione curren't bash prima che venga scritto in $HISTFILE(~ / .bash_history per impostazione predefinita). Tuttavia, se hai impostato PROMPT_COMMAND=history -a il comando con la tua password, viene immediatamente scritto sul tuo $HISTFILEquando viene visualizzato il prompt al termine del comando. Dovrai modificare il tuo $HISTFILEper rimuoverlo.

Questa impostazione viene comunemente utilizzata per intercalare comandi da più sessioni bash aperte .


-3

Ti consigliamo di controllare anche i log di syslog. Gli accessi non validi verranno generalmente registrati su syslog.

/ var / log / messages o l'equivalente per il tuo sistema operativo.


1
Il problema non è che ha inserito una password errata, era già connesso e ha inserito la sua password nel prompt e premere invio. Questo non verrà visualizzato nel file dei messaggi.
MaQleod,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.