{"id":7019,"date":"2024-03-29T19:44:08","date_gmt":"2024-03-29T18:44:08","guid":{"rendered":"https:\/\/swissmakers.ch\/?p=7019"},"modified":"2024-06-24T13:40:45","modified_gmt":"2024-06-24T11:40:45","slug":"bash-history","status":"publish","type":"post","link":"https:\/\/swissmakers.ch\/en\/bash-history\/","title":{"rendered":"Basic bash history configuration in Rocky Linux 9"},"content":{"rendered":"\n<p>In einer modernen IT-Landschaft, wo Effizienz und Sicherheit entscheidend sind, spielt nicht zuletzt die korrekte Konfiguration der Bash History eines jeden Linux Servers eine wichtige Rolle.<\/p>\n\n\n\n<p>Dies ist vor allem deshalb relevant, um jederzeit bestimmen zu k\u00f6nnen, welcher Benutzer welche Befehle ausf\u00fchrt und in welcher Reihenfolge er dies getan hat. Dies gilt auch wenn der User gleichzeitig \u00fcber mehrere SSH-Sitzungen auf die gleichen Systeme zugreift oder sogenannte Service-User eingesetzt werden. Rocky Linux 9, als robustes und sicheres Betriebssystem, bietet wie auch die bezahlte Variante Red Hat Enterprise Linux 9, eine solide Basis f\u00fcr Ihre Applikationsservers. In der Standardkonfiguration der beiden Systeme ist die Bash History jedoch limitiert und speichert nur die letzten 1000 Befehle. Auch werden standardm\u00e4ssig die bereits ausgef\u00fchrten Befehle erst beim Beenden der User-Session in die User-History geschrieben und nicht direkt nach jedem absetzen eines neuen Befehls. Dies bietet kein live-logging und ist zudem problematisch bei der gleichzeitigen Verwendung von mehreren Sessions, da so nur die Befehle der ersten SSH-Session protokolliert werden k\u00f6nnen. <\/p>\n\n\n\n<p>In diesem kleinen Blog-Beitrag erl\u00e4utern wir, wie diese Problematik einfach \u00fcberwunden werden kann und somit eine umfassende Nachverfolgbarkeit sicherstellt wird, die f\u00fcr effektive Sicherheits\u00fcberwachung und Compliance unerl\u00e4sslich ist.<\/p>\n\n\n\n<p>Um eine einfache und m\u00f6glichst schlanke Konfiguration der Bash History zu erm\u00f6glichen, schauen wir uns einmal das Verzeichnis <code>\/etc\/profile.d\/<\/code> genauer an.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Warum \/etc\/profile.d\/ ?<\/h3>\n\n\n\n<p>Dieses spezielle Verzeichnis erlaubt uns, benutzerdefinierte Skripte bei jedem Start einer neuen Bash- oder Login-Shell f\u00fcr alle Benutzer auszuf\u00fchren und wie in unserem Fall Umgebungsvariablen zu definieren. Die Nutzung von <code>\/etc\/profile.d\/<\/code> im Gegensatz zu einer <code>.bashrc<\/code> bietet einen systemweiten Ansatz, der sicherstellt, dass unsere Konfigurationen konsistent auf das gesamte System angewendet werden, ohne dass individuelle Benutzerprofile manuell angepasst werden m\u00fcssen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Die Konfiguration<\/h3>\n\n\n\n<p>Diese Konfiguration ist schnell und einfach durchgef\u00fchrt. Die gr\u00f6sste Herausforderung besteht beim Definieren der korrekten Umgebungsvariablen, welche wir hier bereits f\u00fcr euch vorgenommen haben. Im Verzeichnis <code>\/etc\/profile.d\/<\/code>, wird zum Beispiel mit dem Editor vim, eine neue Datei wie folgt angelegt<br><code># vim \/etc\/profile.d\/bash_history.sh<\/code> Der Name der Datei kann dabei frei gew\u00e4hlt werden, das einzig wichtige ist, dass sie mit <code>.sh<\/code> endet und ausf\u00fchrbar ist. Wir gehen in den insert-modus &#8218;<kbd>i<\/kbd>&#8218; f\u00fcgen folgenden Inhalt hinzu. Wir speichern anschliessend mit &#8218;<kbd>ESC<\/kbd>&#8218; &#8211; <code>:wq<\/code> &#8211; <kbd>ENTER<\/kbd>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">export HISTSIZE=-1\nexport HISTFILESIZE=-1\nexport HISTTIMEFORMAT=\"[%F %T] \"\nexport HISTCONTROL=ignoredups\nexport PROMPT_COMMAND=\"history -a; $PROMPT_COMMAND\"<\/code><\/pre>\n\n\n\n<p>Damit das file wie vorgesehen, beim n\u00e4chsten shell-logon korrekt ausgef\u00fchrt wird, muss dies noch ausf\u00fchrbar gemacht werden. Dies erreichen wir mit dem command: <br><code># chmod +x \/etc\/profile.d\/bash_history.sh<\/code><\/p>\n\n\n\n<p>Unsere Anpassungen bewirken folgendes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Unlimitierte History (<code>HISTSIZE<\/code> und <code>HISTFILESIZE<\/code> auf <code>-1<\/code>):<\/strong> Im Gegensatz zur Standardbegrenzung von 1000 Commands, erm\u00f6glicht <code>-1<\/code> die Speicherung einer unbegrenzten Anzahl von Commands in der History. Alte Eintr\u00e4ge &lt;1000 werden somit nicht mehr automatisch gel\u00f6scht und bleiben erhalten.<\/li>\n\n\n\n<li><strong>Zeitstempel (<code>HISTTIMEFORMAT<\/code>):<\/strong> Jeder Befehl in der History erh\u00e4lt zus\u00e4tzlich zur Nummerierung auch einen Zeitstempel. Dies ist besonders wichtig, um zu verstehen, welcher Mitarbeiter welche Befehle in welcher Reihenfolge ausgef\u00fchrt hat, selbst bei mehreren gleichzeitigen Sessions.<\/li>\n\n\n\n<li><strong>Duplikate vermeiden (<code>HISTCONTROL=ignoredups<\/code>):<\/strong> Diese Einstellung verhindert, dass wiederholte Befehle unmittelbar hintereinander in die History aufgenommen werden, was die \u00dcbersichtlichkeit massiv erh\u00f6ht.<\/li>\n\n\n\n<li><strong>Sofortiges History Append (<code>PROMPT_COMMAND<\/code>):<\/strong> Durch das setzen von <code>history -a<\/code> (append) und der Variable <code>$PROMPT_COMMAND<\/code>, welche den effektiven Befehl des Benutzers beinhaltet, wird bei jedem neuen Befehl (Prompt Command) auch gleich das History Append ausgef\u00fchrt. So wird sichergestellt, dass selbst bei einer Unterbrechung einer der SSH-Sitzung(en) keine Daten verloren gehen. Dies ist ebenfalls f\u00fcr die Integration in Sicherheits\u00fcberwachungssysteme von entscheidender Bedeutung.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Bedeutung f\u00fcr SIEM-Systeme<\/h3>\n\n\n\n<p>Die sofortige Protokollierung der von Benutzern oder Administratoren abgesetzten Befehle spielt auch eine zentrale Rolle bei einer Echtzeit-Sicherheits\u00fcberwachung, insbesondere beim Einsatz eines SIEM-Systems oder Log-Managements mit Elasticsearch. Erst durch das sofortige Weiterleiten aller getippten Befehle an das SIEM wird eine Echtzeit-\u00dcberwachung und -Analyse erm\u00f6glicht, was f\u00fcr die Erkennung von Sicherheitsvorf\u00e4llen auf UNIX-Systemen unerl\u00e4sslich ist. Die hier vorgestellte Konfiguration erleichtert forensische Aufgaben enorm, indem sie jederzeit sicherstellt, dass jedes Kommando, von jedem User sofort und mit einem genauen Zeitstempel versehen, f\u00fcr ein forewarding mit Filebeat (Agent von Elastic) und eine sp\u00e4tere Analyse zur Verf\u00fcgung steht.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fazit<\/h3>\n\n\n\n<p>Durch das Umsetzen dieser einfachen Bash History-Konfiguration k\u00f6nnen IT-Fachkr\u00e4fte mit wenig Aufwand ein h\u00f6heres Mass an Sicherheit und Compliance gew\u00e4hrleisten. In Kombination mit einer leistungsstarken SIEM-L\u00f6sung wie Elasticsearch bietet diese Konfiguration eine robuste Grundlage f\u00fcr die \u00dcberwachung und Analyse von Befehlsausf\u00fchrungen in Echtzeit, was in der heutigen schnelllebigen IT-Infrastruktur unerl\u00e4sslich ist.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In a modern IT landscape, where efficiency and security are crucial, the correct use of the right ... <\/p>\n<p class=\"read-more-container\"><a title=\"Basic bash history configuration in Rocky Linux 9\" class=\"read-more button\" href=\"https:\/\/swissmakers.ch\/en\/bash-history\/#more-7019\" aria-label=\"Read more about Basic Bash History Configuration in Rocky Linux 9\">Read more<\/a><\/p>","protected":false},"author":2,"featured_media":7031,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_eb_attr":"","_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","footnotes":""},"categories":[55,26],"tags":[62,41,49],"class_list":["post-7019","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","category-enginering","tag-logging","tag-rocky-linux","tag-security","generate-columns","tablet-grid-50","mobile-grid-100","grid-parent","grid-50","resize-featured-image"],"taxonomy_info":{"category":[{"value":55,"label":"Linux"},{"value":26,"label":"Engineering"}],"post_tag":[{"value":62,"label":"logging"},{"value":41,"label":"rocky linux"},{"value":49,"label":"security"}]},"featured_image_src_large":["https:\/\/swissmakers.ch\/wp-content\/uploads\/2024\/03\/DALL\u00b7E-2024-03-28-23.45.15-Design-a-wide-format-blog-post-header-image-that-illustrates-the-concept-of-logging-inputs-from-multiple-sessions-in-a-Linux-shell-environment.-The-im-1024x585.webp",1024,585,true],"author_info":{"display_name":"Michael Reber","author_link":"https:\/\/swissmakers.ch\/en\/author\/michael\/"},"comment_info":0,"category_info":[{"term_id":55,"name":"Linux","slug":"linux","term_group":0,"term_taxonomy_id":55,"taxonomy":"category","description":"","parent":0,"count":10,"filter":"raw","cat_ID":55,"category_count":10,"category_description":"","cat_name":"Linux","category_nicename":"linux","category_parent":0},{"term_id":26,"name":"Engineering","slug":"enginering","term_group":0,"term_taxonomy_id":26,"taxonomy":"category","description":"","parent":0,"count":5,"filter":"raw","cat_ID":26,"category_count":5,"category_description":"","cat_name":"Engineering","category_nicename":"enginering","category_parent":0}],"tag_info":[{"term_id":62,"name":"logging","slug":"logging","term_group":0,"term_taxonomy_id":62,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":41,"name":"rocky linux","slug":"rocky-linux","term_group":0,"term_taxonomy_id":41,"taxonomy":"post_tag","description":"","parent":0,"count":5,"filter":"raw"},{"term_id":49,"name":"security","slug":"security","term_group":0,"term_taxonomy_id":49,"taxonomy":"post_tag","description":"","parent":0,"count":4,"filter":"raw"}],"_links":{"self":[{"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/posts\/7019","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/comments?post=7019"}],"version-history":[{"count":22,"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/posts\/7019\/revisions"}],"predecessor-version":[{"id":7568,"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/posts\/7019\/revisions\/7568"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/media\/7031"}],"wp:attachment":[{"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/media?parent=7019"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/categories?post=7019"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/swissmakers.ch\/en\/wp-json\/wp\/v2\/tags?post=7019"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}