{"id":192,"date":"2012-01-24T10:45:51","date_gmt":"2012-01-24T09:45:51","guid":{"rendered":"https:\/\/torstenzimmermann.de\/wp\/?p=192"},"modified":"2012-01-24T10:45:51","modified_gmt":"2012-01-24T09:45:51","slug":"eintrage-in-der-bash-history-loschen","status":"publish","type":"post","link":"https:\/\/torstenzimmermann.de\/wordpress\/eintrage-in-der-bash-history-loschen\/","title":{"rendered":"Linux: Eintr\u00e4ge in der Bash-History l\u00f6schen"},"content":{"rendered":"<p>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\u00e4ter nicht in der History von &#8222;root&#8220; sehen&#8230; Es entsteht also der Wunsch, ein paar Befehle, die in der Bash-History abgelegt wurden, nachtr\u00e4glich wieder zu l\u00f6schen.<\/p>\n<p>Eigentlich enth\u00e4lt das Kommando &#8222;history&#8220; daf\u00fcr die Option &#8222;-d&#8220;. M\u00f6chte man z.B. den History-Eintrag 111 l\u00f6schen, reicht das Kommando &#8222;history -d 111&#8220;:<\/p>\n<p><code>$ history<br \/>\n[...]<br \/>\n110\u00a0 24.01.2012 10:24:07 ls<br \/>\n111\u00a0 24.01.2012 10:24:12 mysecretpassword<br \/>\n112\u00a0 24.01.2012 10:24:14 ls<br \/>\n$ history -d 111<br \/>\n$ history<br \/>\n110\u00a0 24.01.2012 10:24:07 ls<br \/>\n110\u00a0 24.01.2012 10:24:14 ls<br \/>\n112\u00a0 24.01.2012 10:24:15 history<br \/>\n113\u00a0 24.01.2012 10:24:56 history -d 111<br \/>\n114\u00a0 24.01.2012 10:24:57 history<\/code><\/p>\n<p>Leider gibt es zwei Probleme mit dieser Vorgehensweise. Erstens ist die Manipulation der Bash-History sichtbar. Das Kommando &#8222;history -d 111&#8243; wird n\u00e4mlich ebenfalls protokolliert. Zweitens kann man sich nicht darauf verlassen, dass die Zeile 111 wirklich gel\u00f6scht wurde. Sie wird z.B. nicht gel\u00f6scht, wenn man zwischendrin nochmal die Shell beendet hat. Auch bestimmte Shell-Optionen wie PROMPT_COMMAND=&#8220;history -a&#8220; verhindern, dass die betroffene Zeile gel\u00f6scht wird.<\/p>\n<p>Also funktionst\u00fcchtig hat sich dagegen folgende Vorgehensweise gezeigt:<\/p>\n<ul>\n<li>Achten Sie darauf, dass m\u00f6glichst nur eine Shell f\u00fcr den Benutzer ge\u00f6ffnet ist<\/li>\n<li>Setzen Sie die Bash-History-Datei tempor\u00e4r auf \/dev\/null<\/li>\n<li>\u00d6ffnen Sie die Bash-History-Datei ~\/.bash_history in Ihrem Lieblingseditor<\/li>\n<li>L\u00f6schen Sie dort alle Zeilen, die Sie gel\u00f6scht haben m\u00f6chten<\/li>\n<li>Beenden Sie die Shell<\/li>\n<\/ul>\n<p>Praktisch kann dass dann so aussehen:<\/p>\n<p><code>$ history<br \/>\n110\u00a0 24.01.2012 10:34:16 ls<br \/>\n111\u00a0 24.01.2012 10:34:17 mysecretpassword<br \/>\n112\u00a0 24.01.2012 10:34:18 ls<br \/>\n$ vi ~\/.bash_history<br \/>\n[... l\u00f6schen der betreffenden Zeilen inklusive der Timestamp-Nummern ...]<br \/>\n$ exit<\/code><\/p>\n<p>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\u00e4\u00dfig alle mit sudo ausgef\u00fchrten Befehlszeilen mit Syslog protokolliert. Au\u00dferdem kann es Vereinbarungen geben, die dem Admin bzw. auch normalen Nutzern verbieten, Protokolle zu manipulieren.<\/p>\n<p><span style=\"font-size: 13px;\">[qrcode src=&#8220;phpqrcode&#8220; <\/span><span style=\"font-size: 13px;\">alt=<a title=\"Function Reference\/get permalink\" href=\"http:\/\/codex.wordpress.org\/Function_Reference\/get_permalink\">get_permalink()<\/a> size=&#8220;2&#8243; err=&#8220;H&#8220; info=&#8220;no&#8220;]<\/span><\/p>\n<div class=\"thanks_button_div\" \n                  style=\"float: left; margin-right: 10px;\"><div id=\"thanksButtonDiv_192_1\" style=\"background-image:url(https:\/\/torstenzimmermann.de\/wordpress\/wp-content\/plugins\/thanks-you-counter-button\/images\/thanks_large_blue.png); background-repeat:no-repeat; float: left; display: inline;\"\n                onmouseover=\"javascript:thankYouChangeButtonImage('thanksButtonDiv_192_1', true);\" \n                onmouseout=\"javascript:thankYouChangeButtonImage('thanksButtonDiv_192_1', false);\"\n                onclick=\"javascript:thankYouChangeButtonImage('thanksButtonDiv_192_1', false);\" >\n                <input type=\"button\" onclick=\"thankYouButtonClick(192, 'You left &ldquo;Thanks&rdquo; already for this post')\" value=\"Thank You 16\"\n                  class=\"thanks_button thanks_large thanks_blue\"\n                  style=\"  font-family: Verdana, Arial, Sans-Serif; font-size: 14px; font-weight: normal;; color:#ffffff;\"\n                  id=\"thanksButton_192_1\" title=\"Click to leave &ldquo;Thanks&rdquo; for this post\"\/>\n             <\/div><div id=\"ajax_loader_192_1\" style=\"display:inline;visibility: hidden;\"><img decoding=\"async\" alt=\"ajax loader\" src=\"https:\/\/torstenzimmermann.de\/wordpress\/wp-content\/plugins\/thanks-you-counter-button\/images\/ajax-loader.gif\" \/><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>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\u00e4ter nicht in der History von &#8222;root&#8220; sehen&#8230; Es entsteht also der Wunsch, [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,6,8,9],"tags":[],"class_list":["post-192","post","type-post","status-publish","format-standard","hentry","category-linux","category-linux-allgemein","category-suse","category-ubuntu"],"_links":{"self":[{"href":"https:\/\/torstenzimmermann.de\/wordpress\/wp-json\/wp\/v2\/posts\/192","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/torstenzimmermann.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/torstenzimmermann.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/torstenzimmermann.de\/wordpress\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/torstenzimmermann.de\/wordpress\/wp-json\/wp\/v2\/comments?post=192"}],"version-history":[{"count":0,"href":"https:\/\/torstenzimmermann.de\/wordpress\/wp-json\/wp\/v2\/posts\/192\/revisions"}],"wp:attachment":[{"href":"https:\/\/torstenzimmermann.de\/wordpress\/wp-json\/wp\/v2\/media?parent=192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/torstenzimmermann.de\/wordpress\/wp-json\/wp\/v2\/categories?post=192"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/torstenzimmermann.de\/wordpress\/wp-json\/wp\/v2\/tags?post=192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}