<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.xinux.net/index.php?action=history&amp;feed=atom&amp;title=Systemd_Baustein_Journal</id>
	<title>Systemd Baustein Journal - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://www.xinux.net/index.php?action=history&amp;feed=atom&amp;title=Systemd_Baustein_Journal"/>
	<link rel="alternate" type="text/html" href="https://www.xinux.net/index.php?title=Systemd_Baustein_Journal&amp;action=history"/>
	<updated>2026-10-21T13:45:53Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://www.xinux.net/index.php?title=Systemd_Baustein_Journal&amp;diff=73774&amp;oldid=prev</id>
		<title>Thomas.will: Neue Seite: Baustein Journal und Logging</title>
		<link rel="alternate" type="text/html" href="https://www.xinux.net/index.php?title=Systemd_Baustein_Journal&amp;diff=73774&amp;oldid=prev"/>
		<updated>2026-10-17T15:47:28Z</updated>

		<summary type="html">&lt;p&gt;Neue Seite: Baustein Journal und Logging&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Kategorie:systemd]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Baustein !! ab Stufe !! Lernpfad&lt;br /&gt;
|-&lt;br /&gt;
| '''Journal und Logging''' || [[Systemd Stufe 1 Basic|Stufe 1]] bis [[Systemd Stufe 3 Security|Stufe 3]] || [[Systemd Lernpfad|Übersicht]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Einfach erklärt=&lt;br /&gt;
*'''journald''' sammelt alle Meldungen an einer Stelle: vom Kernel, aus der initramfs, von jedem Dienst und von syslog.&lt;br /&gt;
*Gespeichert wird nicht als Textdatei, sondern in einem '''Binärformat''' mit vielen Zusatzfeldern: Dienst, PID, Benutzer, Programm, Bootvorgang.&lt;br /&gt;
*Gelesen wird mit '''journalctl'''. Mit den Zusatzfeldern kann man sehr genau filtern.&lt;br /&gt;
*Für Sicherheit gilt: Ein Log auf dem eigenen Rechner kann ein Angreifer löschen. Deshalb gehören wichtige Logs '''zusätzlich''' auf einen zentralen Server oder ins SIEM.&lt;br /&gt;
&lt;br /&gt;
=Stufe 1: Lesen=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Befehl !! Wirkung&lt;br /&gt;
|-&lt;br /&gt;
| journalctl -e || ans Ende springen, die neuesten Meldungen&lt;br /&gt;
|-&lt;br /&gt;
| journalctl -f || live mitlesen&lt;br /&gt;
|-&lt;br /&gt;
| journalctl -u ssh || nur ein Dienst&lt;br /&gt;
|-&lt;br /&gt;
| journalctl -b || seit dem letzten Start&lt;br /&gt;
|-&lt;br /&gt;
| journalctl -b -1 || der vorletzte Start&lt;br /&gt;
|-&lt;br /&gt;
| journalctl --list-boots || alle gespeicherten Starts&lt;br /&gt;
|-&lt;br /&gt;
| journalctl -k || nur Kernelmeldungen&lt;br /&gt;
|-&lt;br /&gt;
| journalctl -p err || nur Fehler und schlimmer&lt;br /&gt;
|-&lt;br /&gt;
| journalctl --since &amp;quot;1 hour ago&amp;quot; || nur die letzte Stunde&lt;br /&gt;
|-&lt;br /&gt;
| journalctl --since &amp;quot;2026-10-17 08:00&amp;quot; --until &amp;quot;2026-10-17 09:00&amp;quot; || ein Zeitraum&lt;br /&gt;
|-&lt;br /&gt;
| journalctl -g &amp;quot;Failed password&amp;quot; || Volltextsuche (grep)&lt;br /&gt;
|}&lt;br /&gt;
*Die Stufen für -p: emerg, alert, crit, '''err''', '''warning''', notice, info, debug.&lt;br /&gt;
*Ohne sudo sieht man nur die eigenen Meldungen. Für alles: sudo oder Gruppe '''adm'''.&lt;br /&gt;
&lt;br /&gt;
=Stufe 2: Gezielt filtern=&lt;br /&gt;
*Jede Meldung hat Felder, die mit _ beginnen. Diese setzt journald selbst, ein Programm kann sie nicht fälschen.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Filter !! Wirkung&lt;br /&gt;
|-&lt;br /&gt;
| journalctl _SYSTEMD_UNIT=ssh.service || alles von einer Unit&lt;br /&gt;
|-&lt;br /&gt;
| journalctl _UID=1000 || alles von einem Benutzer&lt;br /&gt;
|-&lt;br /&gt;
| journalctl _EXE=/usr/bin/sudo || alles von einem Programm&lt;br /&gt;
|-&lt;br /&gt;
| journalctl _PID=1 || nur systemd selbst&lt;br /&gt;
|-&lt;br /&gt;
| journalctl _COMM=sshd + _COMM=sudo || mit + verknüpft: das eine '''oder''' das andere&lt;br /&gt;
|-&lt;br /&gt;
| journalctl -F _SYSTEMD_UNIT || welche Werte es für ein Feld gibt&lt;br /&gt;
|-&lt;br /&gt;
| journalctl -o verbose -n 1 || alle Felder der letzten Meldung&lt;br /&gt;
|-&lt;br /&gt;
| journalctl -o json-pretty -n 1 || dasselbe als JSON, gut für Skripte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Speicher und Größe==&lt;br /&gt;
*Debian 13 und Rocky speichern das Journal dauerhaft unter '''/var/log/journal/'''. Fehlt das Verzeichnis, liegt es nur im RAM unter /run/log/journal/ und ist nach dem Neustart weg.&lt;br /&gt;
*journalctl --disk-usage&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Archived and active journals take up 166.7M in the file system.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Grenzen setzen mit einem Drop-in: '''/etc/systemd/journald.conf.d/size.conf'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Journal]&lt;br /&gt;
SystemMaxUse=1G&lt;br /&gt;
MaxRetentionSec=3month&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*systemctl restart systemd-journald&lt;br /&gt;
*Aufräumen, betrifft immer das '''ganze''' Journal, nicht einzelne Dienste:&lt;br /&gt;
*journalctl --vacuum-size=500M&lt;br /&gt;
*journalctl --vacuum-time=30d&lt;br /&gt;
&lt;br /&gt;
=Stufe 3: Logs für die Sicherheit=&lt;br /&gt;
==Was man im Journal findet==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Frage !! Befehl&lt;br /&gt;
|-&lt;br /&gt;
| Fehlgeschlagene SSH-Anmeldungen || journalctl -u ssh -g &amp;quot;Failed password&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Wer hat sudo benutzt? || journalctl _COMM=sudo&lt;br /&gt;
|-&lt;br /&gt;
| Wurden Units geändert oder neu geladen? || journalctl _PID=1 -g &amp;quot;Reload&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Welche Dienste wurden gestartet? || journalctl _PID=1 -g &amp;quot;Started&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Wurde neu gestartet? || journalctl --list-boots&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Logs gegen Manipulation sichern (FSS)==&lt;br /&gt;
*Forward Secure Sealing versiegelt das Journal in Abständen. Ändert jemand nachträglich Einträge, fällt das bei der Prüfung auf.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
journalctl --setup-keys&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Der '''Prüfschlüssel''' wird nur einmal angezeigt. Er gehört '''nicht''' auf den Rechner, sondern sicher weg.&lt;br /&gt;
*Prüfen: journalctl --verify --verify-key=SCHLÜSSEL&lt;br /&gt;
*Löschen kann ein Angreifer mit root trotzdem. Dagegen hilft nur das Wegschicken.&lt;br /&gt;
&lt;br /&gt;
==Logs wegschicken==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Weg !! Wofür&lt;br /&gt;
|-&lt;br /&gt;
| systemd-journal-upload → systemd-journal-remote || Journal zu Journal, mit allen Feldern&lt;br /&gt;
|-&lt;br /&gt;
| ForwardToSyslog=yes + rsyslog || klassisch per Syslog zu einem Syslog-Server oder SIEM&lt;br /&gt;
|-&lt;br /&gt;
| Agent des SIEM (z.B. Filebeat, Vector, Wazuh) || liest das Journal direkt und schickt es weiter&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Journal zu Journal===&lt;br /&gt;
*Auf beiden Rechnern: apt install systemd-journal-remote&lt;br /&gt;
;Empfänger&lt;br /&gt;
*systemctl enable --now systemd-journal-remote.socket&lt;br /&gt;
*Er lauscht auf Port '''19532'''. Die Logs landen unter /var/log/journal/remote/.&lt;br /&gt;
*Für den Test ohne Zertifikate per HTTP: systemctl edit systemd-journal-remote.service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=&lt;br /&gt;
ExecStart=/usr/lib/systemd/systemd-journal-remote --listen-http=-3 --output=/var/log/journal/remote/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Im Betrieb immer HTTPS mit Zertifikaten.&lt;br /&gt;
;Sender&lt;br /&gt;
*/etc/systemd/journal-upload.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Upload]&lt;br /&gt;
URL=http://logserver.lab.lan:19532&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*systemctl enable --now systemd-journal-upload&lt;br /&gt;
;Auf dem Empfänger lesen&lt;br /&gt;
*journalctl -D /var/log/journal/remote/ -f&lt;br /&gt;
&lt;br /&gt;
===Per Syslog===&lt;br /&gt;
*/etc/systemd/journald.conf.d/syslog.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Journal]&lt;br /&gt;
ForwardToSyslog=yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*In rsyslog dann z.B.: *.* @@siem.lab.lan:514&lt;br /&gt;
&lt;br /&gt;
=Stolperfallen=&lt;br /&gt;
*'''Nur RAM:''' Fehlt /var/log/journal, sind die Logs nach dem Neustart weg. mkdir /var/log/journal und systemctl restart systemd-journald.&lt;br /&gt;
*'''Kein sudo:''' journalctl zeigt ohne Hinweis nur einen Teil.&lt;br /&gt;
*'''Vacuum löscht alles Alte''', nicht nur einen Dienst. Einzelne Dienste kann man nicht gezielt löschen.&lt;br /&gt;
*'''Zeit:''' --since und --until nutzen die lokale Zeit. Bei Rechnern in verschiedenen Zeitzonen --utc benutzen.&lt;br /&gt;
*'''journal-remote per HTTP''' schickt die Logs im Klartext durchs Netz. Nur im Lab.&lt;br /&gt;
&lt;br /&gt;
=Aufgaben=&lt;br /&gt;
==Grundaufgaben==&lt;br /&gt;
#Lassen Sie sich alle Fehler seit dem letzten Start anzeigen.&lt;br /&gt;
#Lesen Sie die Logs von ssh live mit und melden Sie sich einmal falsch an.&lt;br /&gt;
#Wie viele Starts sind gespeichert, und wie viel Platz braucht das Journal?&lt;br /&gt;
#Suchen Sie alle Meldungen von sudo des heutigen Tages.&lt;br /&gt;
#Lassen Sie sich die letzte Meldung mit allen Feldern anzeigen. Welche Felder kennen Sie schon?&lt;br /&gt;
==Für Schnelle==&lt;br /&gt;
#Begrenzen Sie das Journal auf 200 MB und prüfen Sie es mit --disk-usage.&lt;br /&gt;
#Richten Sie FSS ein und prüfen Sie das Journal mit --verify.&lt;br /&gt;
#Schicken Sie das Journal einer VM per systemd-journal-upload an eine zweite VM und lesen Sie es dort.&lt;br /&gt;
&lt;br /&gt;
=Weiter=&lt;br /&gt;
*[[Systemd Lernpfad|Übersicht: Lernpfad systemd]]&lt;br /&gt;
*Alte Seiten: [[Systemd journald]] · [[Systemd-journalctl-beschreibung]] · [[Journald Remote Logging]]&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>