Frage Ich habe versehentlich ein Passwort in die Bash-Befehlszeile eingegeben


Ich habe versehentlich mein Passwort in die Bash - Befehlszeile eingegeben und dabei die Last login: ... Linie für Wrong password (Ich war in Eile). Was mache ich, um meine Spur zu erfassen?

Was ich getan habe, war das Bearbeiten .bash_history und Löschen der Zeile (ich musste mich einmal neu anmelden, um das Passwort zu sehen in der Datei erscheinen, damit ich es löschen konnte, und mich erneut anmeldete, um es aus dem unter UPARROW verfügbaren Verlauf verschwinden zu lassen).

Gibt es einen anderen Ort, an dem die Befehlsgeschichte gespeichert werden könnte? Das System ist CentOS 6.5.


179
2018-04-02 06:42


Ursprung


Ändere einfach das Passwort :) - gronostaj
Das Ändern des Passworts ist nicht so einfach ... Ich müsste den Administrator bitten, meinen neuen öffentlichen Schlüssel auf 15 verschiedenen Servern neu zu installieren - und der Typ ist wie /dev/null. - MaDa
Wenn Sie Ihr Passwort nicht jederzeit problemlos ändern können, haben Sie möglicherweise eine schwerwiegende Sicherheitslücke. Was tun Sie, wenn jemand Ihr Passwort erhält? Verfügen Sie über Möglichkeiten, den Systemzugriff sofort zu widerrufen? - gronostaj
Sie können die Passphrase eines SSH-Schlüssels ändern, ohne den Schlüssel zu ändern: ssh-keygen -f id_rsa -p. - jwg
Kommen Sie einfach vorbei, um zu erwähnen, dass Sie zumindest unter Windows-Logins abgespritzt werden. Der Admin (in einigen hohen Server Tower) ist standardmäßig alle Anmeldeversuche aufzuzeichnen, und natürlich sind die Benutzernamen Klartext. Alles, was ein unternehmungslustiger Mensch tun muss, ist nach nicht-Benutzernamen-Strings zu suchen und diese mit dem nächsten gültigen Benutzernamen (oder dem nächsten Login-Versuch auf demselben Rechner) zu korrelieren. Und es gibt keine einfache Möglichkeit, diese Administratorprotokolldatei zu löschen. Also musst du dein Passwort wirklich ändern. - Carl Witthoft


Antworten:


Sie können nur die störende Linie aus entfernen bashGeschichte, anstatt die gesamte Geschichte zu klären. Einfach die Zeile mit dem entfernen -d flag, dann speichern (schreiben) Sie die neue Geschichte mit der -w Flagge:

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

174
2018-04-02 12:25



Beachten Sie, dass dies nicht funktioniert, wenn Sie "PROMPT_COMMAND = history -a" festgelegt haben. Mit diesem wird der Befehl mit Ihrem Kennwort sofort in Ihre .bash_history geschrieben, wenn die Eingabeaufforderung angezeigt wird, nachdem der Befehl beendet wurde. Sie müssen Ihre .bash_history bearbeiten, um sie zu entfernen. - benrifkah


Es besteht aus zwei Teilen:

  • bash speichert den Verlauf in einer Datei ~/.bash_history Dies wird standardmäßig am Ende der Sitzung geschrieben
  • das history das wird im Gedächtnis behalten

Um sicher zu sein, müssen Sie es aus der Sitzung löschen:

history -c

und die Verlaufsdatei nach Bedarf abschneiden:

> ~/.bash_history

Wenn Ihre Sitzung, in der Sie das Kennwort eingegeben haben, noch geöffnet ist, dann können Sie eine andere Methode verwenden Bedecke deine Spur ist das einstellen HISTFILE Variable auf das Null-Gerät, so dass der Verlauf nicht geschrieben werden würde ~/.bash_history wenn die Sitzung beendet wird:

export HISTFILE=/dev/null

120
2018-04-02 07:17



Hey schau, es ist der Admin! - Raystafarian
Wortspiel nicht beabsichtigt, sorry :) Ich habe deinen Nick nicht angesehen, als ich meinen Kommentar geschrieben habe. - MaDa
Um paranoid zu sein (und trotzdem aus irgendeinem Grund dein Passwort nicht zu ändern) solltest du es nicht tun shred die Datei oder überschreiben Sie es sonst oft? - kojiro
@MaDa Kein Problem. Ich habe sogar einen anderen Weg in der Antwort hinzugefügt, um meinen Nick ins Bild zu bringen. - devnull
Rahmen HISTFILE= ist genug. Von bash(1): Wenn nicht festgelegt, wird der Befehlsverlauf beim Beenden einer Shell nicht gespeichert. - Lekensteyn


Da Bash (zumindest alle historischen und aktuellen Versionen, die mir bekannt sind) den Verlauf nicht automatisch speichert, bis Sie ihn beenden, ist eine allgemein gültige Strategie, wenn Sie einen Befehl eingegeben haben, den Sie sicherstellen möchten, dass er nie gespeichert wird, sofort einzugeben:

kill -9 $$

Dies tötet die Schale mit SIGKILL, die nicht gefangen werden können, so dass die Shell beim Beenden keine Möglichkeit hat, etwas zu speichern.

Die meisten anderen Ansätze beinhalten ein Scrubbing nach der Tatsache (d. H. Nachdem die Daten bereits auf die Platte aufgetroffen sind), was eine viel größere Fehlerwahrscheinlichkeit hat (fehlende Kopie), insbesondere wenn das System btrfs oder ähnliches verwendet.


23
2018-04-02 16:20



+1, nicht nur mehr Chance auf Fehler, es kann sogar abhängig davon, ob / wie viele Befehle danach ausgeführt wurden - Cruncher
Fehlt das Wort "automatisch"? Weil dotancohen eine Möglichkeit gezeigt hat, die Geschichte zu speichern, ohne die Shell zu verlassen. - Ben Voigt
Die Shell kann so konfiguriert werden, dass sie den Verlauf nach der Ausführung jedes Befehls statt beim Beenden speichert. - Kundor
+1 Das ist genau das, was ich empfehlen wollte! Außerdem rm ~/.bash_history~ um die Sicherungsdatei im OP-Fall zu entfernen, wenn sie bereits gespeichert wurde - Tomas
Beachten Sie, dass dies nicht funktioniert, wenn Sie "PROMPT_COMMAND = history -a" festgelegt haben. Mit diesem wird der Befehl mit Ihrem Kennwort sofort in Ihre .bash_history geschrieben, wenn die Eingabeaufforderung angezeigt wird, nachdem der Befehl beendet wurde. Sie müssen Ihre .bash_history bearbeiten, um sie zu entfernen. - benrifkah


Nachdem Sie versehentlich etwas eingegeben haben, das nicht im Verlauf gespeichert werden soll, können Sie Folgendes eingeben: unset HISTFILE

Bash weiß nicht, wo der Verlauf gespeichert werden soll, wenn Sie sich abmelden. Dadurch wird die Verlaufsprotokollierung für die gesamte Sitzung deaktiviert.


11
2018-04-02 18:51



Beachten Sie, dass dies nicht funktioniert, wenn Sie "PROMPT_COMMAND = history -a" festgelegt haben. Mit diesem wird der Befehl mit Ihrem Kennwort sofort in Ihre .bash_history geschrieben, wenn die Eingabeaufforderung angezeigt wird, nachdem der Befehl beendet wurde. Sie müssen Ihre .bash_history bearbeiten, um sie zu entfernen. - benrifkah


Mein Lieblingstrick dafür ist, den Aufwärtspfeil zu drücken, die Rücktaste über den Befehl zu setzen, etwas einzugeben (ist möglicherweise nicht notwendig), den Abwärtspfeil zu drücken, "ls" einzugeben und Enter zu drücken. Fühlt sich wirklich hokey, aber es funktioniert tatsächlich. Ich habe das herausgefunden, als ich genervt wurde, nachdem ich den falschen Befehl in meinem Verlauf bearbeitet hatte und ihn dann ruiniert hatte, indem ich nicht ctrl-c gedrückt habe, um den Schnitt abzubrechen. Ich denke, bash unterstützt revisionistische Geschichte. ;-)

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

Sieht aus wie:

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

10
2018-04-03 20:58



Das ist seltsam. Ein Nachteil ist, dass es scheint, dass Sie die Geschichte bearbeitet haben, also könnte es eine Möglichkeit geben, die alte Version wiederherzustellen? - MadTux
@MadTux - Totally, aber die .Bash_History ist nur eine einfache Textdatei. So können Sie das obige Beispiel ausführen, beenden und erneut verbinden. Wenn Sie den gesamten Inhalt der .bash_history-Datei anzeigen, unterscheidet sich nichts davon, wenn Sie nur "cd" ausgeführt hätten, also ist der Pfad sauber. - Mark Jerde
Beachten Sie, dass dies nicht funktioniert, wenn Sie "PROMPT_COMMAND = history -a" festgelegt haben. Mit diesem wird der Befehl mit Ihrem Kennwort sofort in Ihre .bash_history geschrieben, wenn die Eingabeaufforderung angezeigt wird, nachdem der Befehl beendet wurde. Sie müssen Ihre .bash_history bearbeiten, um sie zu entfernen. - benrifkah


Zusätzlich zu den anderen Antworten kann es relevant sein, dass das Passwort nun auch im Terminal Scroll Buffer - dem Verlauf des angezeigten Textes - jetzt vorkommt, und eher ein Problem, möglicherweise auf der Festplatte, wenn der Terminalemulator den Geschichte auf die Festplatte. Dies geschieht in KDE konsole es ist die Historiengröße auf "unbegrenzte scrollback" eingestellt, um keine Ausgabe zu verwerfen.


10
2018-04-03 19:58





Mit $<space> command, ein Befehl wird dem Verlauf nicht hinzugefügt, manchmal nützlich

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

5
2018-04-02 14:07



Obwohl interessant, ist nicht klar, wie dies in dem beschriebenen Szenario nützlich ist. Schlägst du vor, dass jedes Passwort mit einem Leerzeichen beginnen soll? - Ben Voigt
Nein, was er vorschlägt, ist, dass damit, dass jede Zeile, die Sie nicht in die Historie schreiben wollen, mit einem führenden Leerzeichen abgetippt werden soll. zB: "ls" wird zu "ls" und diese Zeile wird niemals in der Verlaufsliste oder in den Aufwärts-Pfeil-Listen Ihrer Sitzungen angezeigt. - Bryan C.
Beachten Sie, dass dieser Leading-Space-Trick nur funktioniert, wenn $ HISTCONTROL Ignorespace enthält. - Bernd Jendrissek
@ jris198944 Wenn Sie ein Kennwort über ein Befehlszeilenargument eingeben, kann es möglicherweise für jeden auf dem System, der ausgeführt wird, verfügbar gemacht werden ps. - jamesdlin
Und trotzdem, während dieser Trick nützlich ist, wenn Sie vorausplanen, hilft das dem ursprünglichen Szenario nicht, wo jemand zufällig ein Passwort in einer Befehlszeile eingegeben. - jamesdlin


Eine weitere Alternative, um das Speichern in der Verlaufsdatei zu vermeiden (bevor Sie sich abmelden), ist einfach chmod 444 ~ / .bash_history und dann abmelden. Melden Sie sich erneut an und setzen Sie die Berechtigungen zurück (oder nicht, je nachdem, wie paranoid Sie sind!).


4
2018-04-03 09:08





Ich sehe das immer wieder erwähnt

Beachten Sie, dass dies nicht funktioniert, wenn Sie "PROMPT_COMMAND = history -a" [..] eingestellt haben. Sie müssen Ihre .bash_history bearbeiten, um sie zu entfernen.

Der erste Teil ist definitiv richtig, aber Sie müssen nicht manuell auf .bash_history zurückgreifen, um es zu beheben. Wenn Sie die beiden Befehle in einer Zeile kombinieren, funktioniert das ganz gut:

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

1
2017-12-07 14:03



Können Sie erklären, was genau diese Methode funktioniert? - Kamil Maciorowski
Das PROMPT_COMMAND wird nur ausgeführt, bevor die nächste Eingabeaufforderung angezeigt wird. Das Problem bei der Eingabe der Befehle -d und -w in separaten Zeilen besteht darin, dass PROMPT_COMMAND den Befehl history -a dazwischen ausführt. Wenn Sie sowohl -d als auch -w auf einer Kommandozeile ausführen, wird es nur danach ausgeführt - Floris Kruisselbrink


Viele der Antworten hier versuchen, den fraglichen Befehl aus der Geschichte der aktuellen bash-Sitzung zu entfernen, bevor er geschrieben wird $HISTFILE (~ /. Bash_History standardmäßig). Wenn Sie jedoch festgelegt haben PROMPT_COMMAND=history -a Der Befehl mit Ihrem Passwort wird sofort in Ihre geschrieben $HISTFILE wenn die Eingabeaufforderung angezeigt wird, nachdem der Befehl beendet wurde. Sie müssen Ihre bearbeiten $HISTFILE es zu entfernen.

Diese Einstellung wird normalerweise verwendet Interleave-Befehle aus mehreren offenen Bash-Sessions.


0
2017-08-31 17:36





Sie sollten auch die Syslog-Protokolle überprüfen. Ungültige Anmeldungen werden im Allgemeinen in Syslog protokolliert.

/ var / log / messages oder das Äquivalent für Ihr Betriebssystem.


-3
2018-04-05 18:58



Das Problem ist nicht, dass er ein falsches Passwort eingegeben hat, er war bereits eingeloggt und gab sein Passwort in die Eingabeaufforderung ein und drückte Enter. Dies wird nicht in der Nachrichtendatei angezeigt. - MaQleod