Konfigurieren und Nutzen der Systemlogdateien um administrativen und sicherheitsbezogene Aufgaben zu bewältigen

Wichtung: 3

Beschreibung: Die Kandidaten sollen in der Lage sein, Systemlogdateien zu konfigurieren und zu verwalten.

Wichtigste Wissensgebiete:
Art und Menge der aufgezeichneten Information festlegen.
Logdateien auf besondere Aktivitäten manuell durchsuchen.
Logdateien überwachen.
Automatische Rotation und Archivierung von Logdateien.
Nachvollziehen von Problemen, die in den Logdateien aufgezeichnet wurden.

Liste wichtiger Dateien, Verzeichnisse und Anwendungen:
/etc/syslog.conf
/var/log/*
logrotate
tail -f

logrotate - Log-Dateien rotieren

Auf einem Linux-System werden viele Systemaktivitäten in Logdateien gespeichert. Das Verzeichnis der Logdateien lautet /var/log und je länger das System läuft desto größer werden die Logdateien. Aus diesem Grund sollten Log-Dateien regelmäßig verwaltet werden, d.h. alte Logdateien gelöscht bzw. gesichert werden.

Hier bietet sich logrotate an, welches die Logdateien rotiert, also die aktuelle Logdatei zu archivieren. Im Prinzip nennt logrotate die Logdatei um und erstellt eine leere neue Datei. Optional können die archivierten Logdateien komprimiert werden.

Die Konfiguration von logrotate erfolgt in der Datei /etc/logrotate.conf. Die Syntax ist relativ einfach, da wir die gewünschte Log-Datei einfach eintragen und in den darauffolgenden geschweiften Klammern festlegen, wie die Log-Dateien behandelt werden sollen:

/var/www/localhost/htdocs/log_pc-erfahrung.de-access_log {
weekly # Wöchentlich rotieren lassen
compress # Gesicherte Log-Dateien komprimieren
rotate 5 # Max. 5 mal rotieren (5 Backups erstellen)
postrotate # Nach dem Rotieren werden Skripte ausgeführt
/bin/killall -HUP apache2 # Neustart von Apache-Prozessen
endscript # Ende von postrotate
}

Testweise können wir nun mit dem Befehl logrotate -f /etc/logrotate.conf die Rotation starten. Wir sehen nun, dass die Log-Datei gesichert und geleert wurde:

websrv-gentoo-PD945 ~ # ls -lsh /var/www/localhost/htdocs/
total 304M
...
3.2M -rw-r--r-- 1 root root 3.2M Jan 12 22:58 log_pc-erfahrung.de-access_log
4.0K -rw-r--r-- 1 root root 839 Jan 12 20:30 log_pc-erfahrung.de-access_log.1.gz
28K -rw-r--r-- 1 root root 27K Jan 12 20:30 log_pc-erfahrung.de-access_log.2.gz
141M -rw-r--r-- 1 root root 141M Jan 12 20:13 log_pc-erfahrung.de-access_log.3.gz

Der erste Schritt wurde erfolgreich erledigt, denn die 1,9 GB große Log-Datei des Apache wurde gesichert, komprimiert und anschließend geleert. Die oben beschriebene Konfiguration führt nun jede Woche einmal die Rotation durch. Maximal fünf Backup-Dateien der Log-Dateien werden gesichert. Die sechste wird automatisch gelöscht.

 

Logrotate bietet natürlich einige Optionen mehr an:

Optionen

-d Schaltet den Debug-Modus ein.
-f, --force Rotation zu erzwingen, auch wenn sie eigentlich nicht notwendig wäre.
-s, --state Statusdatei Andere Status-Datei verwenden. In der Status Datei wird notiert, wann die letzte Rotation erfolgte.
--usage Hilfe anzeigen
-v, --verbose logrotate ist gesprächig

Einstellungen in der Konfig-Datei logrotate.conf

compress  Alte Versionen der Logdateien komprimieren.
compresscmd  Angabe, welche Programm zum Komprimieren genutzt wird
uncompresscmd Angabe, welche Programm zum Dekomprimieren genutzt wird
compressext  Namenserweiterung der komprimierten Logdateien.
compressoptions Kommandozeilenoptionen für das verwendete Kompressionsprogramm.
copytruncate Schneidet das Logfile auf die Länge 0 ab, nachdem eine Kopie gezogen wurde, anstatt das alte Logfile zu verschieben und ein neues zu erstellen.
daily Logdateien werden täglich rotiert.
delaycompress  Verschiebt die Kompression des letzten Logfiles auf den nächsten Rotationszyklus.
extension Erweiterung  Logdateien erhalten Namenserweiterung.
ifempty Auch leere Logdateien werden rotiert.
include Datei_oder_Verzeichnis Einbinden weiterer logrotate-Konfigurationen.
mail Adresse Senden der letzten Logfile an die angegebene Mail-Adresse.
mailfirst Wenn das mail-Kommando benutzt wird, wird die rotierte Datei statt der zu löschenden Datei gemailt.
maillast Wenn das mail-Kommando benutzt wird, wird die zu löschende Datei gemailt. (Das ist die Voreinstellung)
missingok Fehlende Logdateien ignorieren
monthly  Logdateien monatlich rotieren.
nocompress Logdateien nicht komprimieren.
nocopytruncate  Die Orginal-Datei wird nicht abgeschnitten, nachdem eine Kopie erstellt wurde.
nocreate Neue Logdateien werden nicht angelegt.
nodelaycompress Die Kompression der letzten Datei wird nicht auf den nächsten Rotationszyklus verschoben.
nomail Gegenteil von Mail.
nomissingok Gegenteil von missingok
noolddir Logdateien werden in dem Verzeichnis rotiert, in dem auch das Orginal liegt.
nosharedscripts Die prerotate und postrotate Scripts werden für jede Logdatei ausgeführt, die rotiert wird.
notifempty Leere Logdateien werden nicht rotiert.
olddir Verzeichnis  Logs werden in das angegebene Verzeichnis verschoben, um sie zu rotieren.
postrotate/endscript Hierzwischen können Bash-Befehle notiert werden. Diese werden nach dem Rotieren durchgeführt.
prerotate/endscript Hierzwischen können Bash-Befehle notiert werden. Diese werden vor dem Rotieren durchgeführt.

rotate Anzahl Logdateien werden Anzahl mal rotiert, bevor sie gelöscht oder gemailt werden.
sharedscripts Wenn sharedscripts angegeben wurde, dann werden die Scripts nur einmal ausgeführt.
size Größe[M|k]  Logdateien werden rotiert, wenn sie größer als die angegebene Größe gewachsen sind.

tail -f: Logdateien anschauen

Mit dem Befehl "tail" ist es möglich Änderungen in Dateien ausgeben zu lassen. Dies ist vor allem dann von Vorteil wenn zum Beispiel LOG-Dateien mitverfolgt werden sollen. So können zum Beispiel gezielt Systemmeldungen in /var/log/messages oder Protokolldaten des Apache-Webservers mitverfolgt werden, um nur einige Einsatzgebiete zu nennen. Der Syntax des Befehls ist recht einfach. Um eine permanente Ausgabe der gewählten Datei zu ermöglichen ist der Syntax wie folgt : "tail -f dateiname". Nun gibt es noch die Möglichkeit die letzten N Zeilen oder auch N Bytes ausgeben zu lassen.

permanente Ausgabe : tail -f dateiname
Zeilenweise Ausgabe : tail -n anzahlzeilen dateiname
Byteweise Ausgabe : tail -c anzahlbytes dateiname

syslogd Dämon - Systemlogger

Syslogd ist einer der weitverbreitesten Linux-Systemlogger. Syslog schreibt alle wichtigen Systemmeldungen in die entsprechenden Logdateien. Über bestimmte Systemaufrufe können Programme Meldungen abgeben, die von einem Systemlogger wie syslogd entgegengenommen und verarbeitet werden. syslogd wird in der Datei /etc/syslog.conf konfiguriert.

In der Konfigurationsdatei /etc/syslog.conf wird festgeschrieben, welche Meldungen wie geloggt werden sollen. Die Syntax lautet:

Herkunft.Priorität Aktion

Beispiel: Auszug aus der /etc/syslog.vonf

# print most on tty10 and on the xconsole pipe
mail.* -/var/log/mail
mail.info -/var/log/mail.info
mail.warning -/var/log/mail.warn
mail.err /var/log/mail.err

Herkunft

kern = Kernelmeldungen
auth = Meldungen des System-Sicherheitsdienst, bsp. login
authpriv = Meldungen der internen Sicherheitsdienste
mail = Meldungen des Mail-Systems
news = Meldungen des News-Systems
uucp = Meldungen des UUCP-Systems
lpr = Meldungen des Druckerdaemons
cron = Meldungen des Cron-Daemons
syslog = Meldungen des syslog-Daemons
daemon = Meldungen aller Daemon-Prozesse
user = Meldungen vonAnwenderprogrammen

Priorität

emerg = Ehemals panic, letzte Meldung vorm Absturz
alert = Alarmierende Nachricht
crit = Kritische Situation
err = Fehlermeldungen aller Art
warn = Warnungen
notice = Dokumentation besonders bemerkenswerter Situationen im Rahmen des normalen Betriebs
info = Protokollierung
debug = Interne Programmzustände

Aktionen

In dem meisten Fällen werden die Ausgaben in einer Datei gespeichert. Dazu muss man lediglich den absoluten Pfadnamen angeben:

// Alle Meldungen in der Datei messages speichern
*.* /var/log/messages

Mehrere Fehler-/Meldungstypen können kombiniert werden. authpriv.none bedeutet, dass wichtige Informationen wie Passwörter in Klartext nicht ausgegeben werden.

// Kernel-Warnungen, ALLE Errors auf Root-Shell ausgeben
kern.warn;*.err;authpriv.none root

Manchmal ist es aber auch erforderlich, dass der Anwender oder Systemverwalter unmittelbar in der Shell benachrichtigt wird. Dazu wird die Meldung auf den Bildschirm ausgegeben:

// Warnungen auf Shell der User 1, 2, 3 ausgeben
user.warn user1,user2,user3

Normalerweise werden die Log-Dateien nach jeder Schreibaktion synchronisiert. Dieses kostet Ressourcen, die man einsparen kann (mit dem Risiko, dass nach einem Absturz des Systems Daten verloren gehen). Dieses kann man mit einem - unterbinden

//Unterbinden der Synchronisation
*.* -/var/log/messages

Meldungen können auch auf einem anderen Rechner im Netzwerk gespeichert werden. Damit der angesprochene Syslog-Daemon auf dem anderen Rechner auch die Meldungen annimmt, muß er mit der Kommandozeilenoption -r (remote) gestartet worden sein.

// ALLE Meldung dem Rechner tux-server schicken
*.* @tux-server