====== Systemprotokolle (Logdateien) in Linux (Syslog)======
[[linux:Linux]] und andere Unix-basierte Systeme glänzen durch ausführliche und anpassbare Systemprotokolle. Zur Fehlerdiagnose sind diese Logs meist die erste Anlaufstelle. Diese Seite basiert auf dem Standard syslog (daemons: syslogd, klogd), es existiert ein verbesserter Nachfolger unter dem Namen [[software:syslog-ng]].
Bei modernen Distributionen wird das logging von [[software:systemd]] übernommen und diese Seite ist daher nicht anwendbar.
===== Links =====
* [[software:syslog-ng]]
* [[software:rsyslog]]
[[http://linuxhelp.blogspot.com/2005/09/system-logging-explained-in-linux.html|System Logging explained in Linux]]
===== vorhandene Systemprotokolle im /var/log =====
Im Verzeichnis /var/log befinden sich die wichtigen Systemprotokolle.
^ Dateiname in /var/log ^ Bedeutung / Quelle ^
| aptitude | |
| auth.log | |
|boot | |
|bootstrap.log | |
|btmp | |
|daemon.log | |
|debug | |
|dmesg | |
|dpkg.log | |
|faillog | |
|fsck | |
|kern.log | Meldungen des Kernels |
|lastlog | |
|lpr.log | |
|mail.err | |
|mail.info | |
|mail.log | |
|mail.warn | |
|messages | |
|news | |
|syslog | Meldungen der Prioritäten warning und error|
|user.log | |
|uucp.log | |
|vsftpd.log | |
|wtmp | |
Bei Systemen die nicht gerade erst neuinstalliert wurden, finden sich auch Dateien wie ''syslog.0'' und ''syslog.1.gz'' . Ältere Protokolle werden nach einger gewissen Zeit "rotiert", also zuerst umbenannt (''syslog.0'') und später gepackt (archiviert.
Einige Programme ([[apache:Apache]], ...) legen auch Unterverzeichnisse an.
===== Grundlagen =====
==== Prioritäten ====
Die Prioritäten sind nach nach ansteigender Wichtigkeit geordnet.
^ Priorität ^ Bedeutung ^
|debug |Debugging Informationen zu laufenden Prozessen |
|info |Normale Informationsmeldungen von Programmen |
|notice |Standardmeldungen, aber wichtiger als nur Informationscharakter |
|warn |Standardwarungen (das System oder die Ressource konnte z. B. die Aufgabe nicht ausführen) |
|err |Meldungen bestehen aus Fehlerzuständen |
|crit |Fatale Fehler |
|alert |bezeichnet einen ernstzunehmenden Fehler, die sofortige Aufmerksamkeit verlangen |
|emerg |Notfall, kurz vor einer Kernel-panic (z.B. bei Treiberabsturz) und/oder System nicht länger verfügbar |
:!: Die Aliase "error", "panic", und "warning" sind veraltet.
==== Facility ====
Eine "Facility" ist eine Einrichtung die einem eigenen Subsystem (Untersystem) entspricht. Es gibt 13 vordefinierte Subsysteme: ''auth, authpriv, cron, daemon, ftp, kern, lpr, mail, mark, news, syslog, user'' und ''uucp''. Zusätzlich kann man noch ''local0'' bis ''local7'' für eigene Programme definieren (wie unten im Beispiel).
^ Facility ^ Bedeutung ^
|auth| eine Sicherheitsfunktion, die Benutzerauthentifizierung in verschiedenen Diensten wie ftp, login usw verfolg. (Im Wesentlichen verfolgt die auth-Funktion jede Benutzeraktion, die in denen Benutzernamen und ein Passwort verlangt wird, um sich einzuloggen oder die Ressourcen des Zielrechners zu benutzen.) |
|authpriv | eine Sicherheitsfunktion, die Sicherheits-/Autorisierungmeldungen verfolgt |
|daemon |verfolgt Systemdämon Meldungen |
|user | verschiedene user-level Meldungen |
|kern | verfolgt Kernel Meldungen |
|ftp | verfolgt Meldungen vom ftp-System |
|cron | verfolgt Meldungen vom cron-System. |
|lpr | verfolgt Meldungen des Druckersystems |
|mark | Sollte man nicht benutzen, zu internen zwecken (Meldung wenn nichts passiert ist) |
|mail | verfolgt Meldungen des Mail-Systems |
|news | verfolgt Meldungen des News Systems |
|security |dasselbe wie auth |
|syslog | für von Syslog generierte Nachrichten |
|uucp | verfolgt Meldungen des UUCP Systems |
==== eigenes Log-file ====
Standardmäßig wird ins syslog (''/var/log/syslog'') protokolliert, man kann aber eigene Log-Dateien für z.B. für den DHCP-Server anlegen lassen. Dazu muss man grundsätzlich
- den Daemon (Dienst) auf eine Facility konfigurieren (das muss er natürlich unterstützen!)
- syslogd konfigurieren
- und beide Daemons neustarten.
Am Beispiel des DHCP-Servers "[[netzwerke:dhcp#konfiguration_von_dhcp3-server_unter_linux|DHCP3]]" konfigurieren wir nun unter [[linux:Linux]] unser eigenes Logfile.
Zuerst muss die Zeile log-facility local7; in der Konfigurationsdatei (''/etc/dhcp3/dhcpd.conf'') eingetragen werden.
Für diese „facility“ mit dem Schlüsselwort local7 muss man in der Datei ''/etc/syslog.conf'' einen Eintrag anlegen.
local7.* /var/log/dhcpd.log
Der Stern sorgt dafür, dass Nachrichten mit allen Prioritäten im Log-file gesichert werden. Danach sollte man die Log-Datei mit touch /var/log/dhcpd.log
anlegen lassen.
Letztendlich muss man den syslog- und DHCP3-Daemon zur Übernahme der Änderungen in der angegebenen Reihefolge neustarten:
- sudo /etc/init.d/sysklogd restart
- sudo /etc/init.d/dhcp3-server restart
Die erste Ausgaben in der Log-Datei bezeugen die erfolgreiche Funktion.
Siehe ''man syslog.conf'' für weitere Informationen. Die Konfiguration von [[software:syslog-ng#Konfiguration]] sieht natürlich anders aus.
===== LogHost =====
Als LogHost wird ein spezieller Server bezeichnet, der für andere Rechner die Logdateien führt. Dies kann bei Festplattenlosen Thin-clients oder generell zur Erhöhung der Sicherheit sinnvoll sein.
Eine einzige Zeile in ''/etc/syslog.conf'' reicht:
*.* @remote_host
Wenn man ganz clever sein will, kann man den remote_host als Dummy aufsetzen und den Verkehr auf dem Weg abhören.
Aus Sicherheitsgründen sollte dann aber [[software:syslog-ng]] benutzt werden. Dieser kommuniziert über TCP und kann mit Zertifikaten umgehen. Der originale syslog-daemon schickt die Log-einträge per UDP und der Log-host kann auch nicht die Herkunft verifizieren.
==== Links ====
* [[http://linuxhelp.blogspot.com/2005/09/enabling-centralized-logging-in-linux.html|Enabling centralized logging in Linux]]
* [[http://www.oreilly.de/catalog/netsechacksger/chapter/hack59.html|Loghost]]
===== logger =====
Mit dem Programm logger kann man syslog oder [[software:syslog-ng]] Nachrichten übergeben.
logger TEXT
Zusätzlich kann man mit
* **Kategorie und Priorität** (z.B. user und notice)
logger -p user.notice TEXT
* und den **"Tag"** (für einen Dienst) angeben:
logger -p user.notice -t TAG TEXT