Linux: Einträge in der Bash-History löschen

Hin und wieder passiert es: Ein in der Textkonsole eingegebenes Passwort wurde versehentlich in die Befehlszeile getippt. Oder auf der Suche nach dem passenden Befehl musste man ein verschiedene Sachen ausprobieren. Der Kunde, auf dessen Rechner man gerade arbeitet, sollte dieses Herumprobieren später nicht in der History von „root“ sehen… Es entsteht also der Wunsch, ein paar Befehle, die in der Bash-History abgelegt wurden, nachträglich wieder zu löschen.

Eigentlich enthält das Kommando „history“ dafür die Option „-d“. Möchte man z.B. den History-Eintrag 111 löschen, reicht das Kommando „history -d 111“:

$ history
[...]
110  24.01.2012 10:24:07 ls
111  24.01.2012 10:24:12 mysecretpassword
112  24.01.2012 10:24:14 ls
$ history -d 111
$ history
110  24.01.2012 10:24:07 ls
110  24.01.2012 10:24:14 ls
112  24.01.2012 10:24:15 history
113  24.01.2012 10:24:56 history -d 111
114  24.01.2012 10:24:57 history

Leider gibt es zwei Probleme mit dieser Vorgehensweise. Erstens ist die Manipulation der Bash-History sichtbar. Das Kommando „history -d 111″ wird nämlich ebenfalls protokolliert. Zweitens kann man sich nicht darauf verlassen, dass die Zeile 111 wirklich gelöscht wurde. Sie wird z.B. nicht gelöscht, wenn man zwischendrin nochmal die Shell beendet hat. Auch bestimmte Shell-Optionen wie PROMPT_COMMAND=“history -a“ verhindern, dass die betroffene Zeile gelöscht wird.

Also funktionstüchtig hat sich dagegen folgende Vorgehensweise gezeigt:

  • Achten Sie darauf, dass möglichst nur eine Shell für den Benutzer geöffnet ist
  • Setzen Sie die Bash-History-Datei temporär auf /dev/null
  • Öffnen Sie die Bash-History-Datei ~/.bash_history in Ihrem Lieblingseditor
  • Löschen Sie dort alle Zeilen, die Sie gelöscht haben möchten
  • Beenden Sie die Shell

Praktisch kann dass dann so aussehen:

$ history
110  24.01.2012 10:34:16 ls
111  24.01.2012 10:34:17 mysecretpassword
112  24.01.2012 10:34:18 ls
$ vi ~/.bash_history
[... löschen der betreffenden Zeilen inklusive der Timestamp-Nummern ...]
$ exit

Bedenken Sie noch folgendes: Die Bash ist nicht das einzige Programm, welches Protokolle anlegt. Der Editor vi (VIM-Variante) legt z.B. ebenfalls eine Protokolldatei (~/.viminfo) an. Weiterhin werden standardmäßig alle mit sudo ausgeführten Befehlszeilen mit Syslog protokolliert. Außerdem kann es Vereinbarungen geben, die dem Admin bzw. auch normalen Nutzern verbieten, Protokolle zu manipulieren.

[qrcode src=“phpqrcode“ alt=get_permalink() size=“2″ err=“H“ info=“no“]