Open Source im professionellen Einsatz

Aus dem Nähkästchen geplaudert: Logrotate

Hier geht's rund!

Jedes Linux-Universalsystem produziert große Mengen an Protokolldateien. Damit die Festplatte nicht überläuft und der Admin eine Chance zum Auswerten hat, kümmert sich ein rotierender Helfer um die Archivierung oder Entsorgung alter Protokolle.

Zugegeben nur sehr trockene Naturen schaffen es, zu Logfiles ein liebevolles Verhältnis zu entwickeln. Gleichwohl liefern die Protokolle in »/var/log« Administratoren genau die Informationen, um die Ursachen mysteriöser Fehlfunktionen zu ergründen. Fast noch wichtiger sind die unbemerkten Systemdetails, etwa ob alle Dienste korrekt laufen.

Wer neue Daemons aufsetzt oder auch nur ein kleines CGI bastelt, sieht in den Logs, was nicht funktioniert hat, und kann gezielt nachbessern. Misstrauische Zeitgenossen - und das sollten alle sein - überprüfen, ob unberechtigte Zugriffsversuche auf eigene Rechner stattfinden, die sie postwendend unterbinden.

Noch kreativere Leute benutzen die Informationen aus den Logs für Aktivitäten des Rechners. So könnte ein SMTP-Server eine IP-Adresse als berechtigt für den Versand von E-Mail ansehen, wenn im Logfile von dort ein erfolgreicher Login in eine Mailbox aufgezeichnet ist. (SMTP-after-POP und SMTP-after-IMAP, eine primitive, aber sehr verbreitete und Client-freundliche Alternative zu SMTP-Auth). Oder eine Firewall könnte eine IP-Adresse nach einem offensichtlichen Angriffsversuch automatisch per Paketfilter blockieren.

Selbst wer seine Logs nicht liest, kann dennoch über sie stolpern. Die produzierten Protokolldateien füllen die Festplatte mehr und mehr - oder zumindest die »/var«-Partition, wenn der Rechner vernünftig eingerichtet ist. Beides führt eines Tages dazu, dass der Computer seine Dienste einstellt.

Früher war eine der Aufgaben des Admin daher der verantwortungsvolle Umgang mit Logs - auswerten, archivieren, löschen. Mit dem Siegeszug von Linux auf dem Desktop ist das dem administrativ unbedarften Benutzer nicht mehr zuzumuten. Entsprechend hielten bereits vor Jahren vollautomatische Tools Einzug, die (ungelesene) Logdateien nach einer Weile wegwerfen.

Rotieren geht über Studieren

Ein Linux-System löscht eine Logdatei üblicherweise nicht einfach, sondern rotiert sie. Dazu nennt es eine Datei »XXX.log« zunächst in »XXX.log.0« (oder ähnlich) um. Das ist wichtig, weil das automatische Aufräumprogramm nicht weiß, ob und welche anderen Prozesse die Logdatei gerade geöffnet haben. Denn mit dem Öffnen einer Datei hat ein Prozess nämlich ein Filehandle auf genau diese Datei erhalten und schreibt immer in sie - egal ob ein anderer Prozess sie zwischenzeitlich umbenannt oder sogar gelöscht hat.

Nach dem Umbenennen sollte der Protokoll-Putzmann daher die Logdateien neu (leer) anlegen und sodann tunlichst alle betreffenden Prozesse informieren, dass sich die Protokolldateien geändert haben. Die schreibenden Prozesse müssen daraufhin ihre jeweiligen Logdateien schließen (die Filehandles aufgeben) und neu öffnen, woraufhin sie die aktuelle (noch leere) Version der Datei erhalten und füllen dürfen (Abbildung 1).

Daneben gibt es noch eine zweite Strategie (»copytruncate«), die sich oft als vorteilhaft erweist. Bei ihr wird das alte Logfile zunächst ebenfalls für die Archivierung kopiert, dann allerdings nicht gelöscht, sondern auf die Länge null gekürzt. Auf diese Weise ändert sich das Filehandle für den loggenden Prozess nicht, er muss nicht benachrichtigt werden und braucht auch kein neues, leeres File anzulegen.

Modulare Konfiguration

Um solche Mechanismen auf einem frei zusammenstellbaren und erweiterbaren System zu etablieren, haben findige Leute das Paket Logrotate [1] ersonnen. Es benutzt - wie viele andere zentrale Pakete - eine modulare Konfiguration. Die Kernvariablen setzt eine zentrale Konfigurationsdatei. Sie vermerkt, wie oft Logrotate Dateien rotieren soll, wie lange es die alten Protokolle aufbewahrt, ob es sie komprimieren soll (ab der zweiten Generation, denn die unmittelbar wegrotierte wird ja womöglich noch benutzt) und so weiter. Die zentrale Konfigurationsdatei heißt »/etc/logrotate.conf«.

Zusätzlich darf jedes installierte Softwarepaket bei seiner Installation ein Schnipsel Logrotate-Konfigurationsdatei ergänzen. Freilich soll es dabei nicht in die zentrale Datei hineinschreiben - das könnte den Keim für höchst unerfreuliche Inkonsistenzen legen. Dafür verwaltet Logrotate ein Konfigurationsverzeichnis namens »/etc/logrotate.d«.

Dort hinein schreiben Pakete ihre Logrotate-Minikonfigurationsdatei mit dem Namen des jeweiligen Pakets. Darin steht auch, was zu tun ist, wenn eine Logdatei rotiert ist. Bei einem Proxyserver könnte sein Beitrag zur Konfiguration »/etc/logrotate.d/squid« heißen.

Listing 1: Beispiel für
eine »logrotate.conf«

01 weekly
02 rotate 4
03 create
04 compress
05 delaycompress
06 
07 /var/log/wtmp {
08   missingok
09   monthly
10   create 0664 root utmp
11   rotate 1
12 }
13 
14 include /etc/logrotate.d

Listing 2:
»/etc/logrotate.d/apache2«

01 /var/log/apache2/*.log {
02   missingok
03   rotate 52
04   notifempty
05   create 640 root adm
06   sharedscripts
07   postrotate
08     if [ -f /var/run/apache2.pid ]; then
09       /etc/init.d/apache2 restart >/dev/null
10     fi
11   endscript
12 }

Listing 3: Zwei verschiedene
Protokolle eines Paketfilters

01 /var/log/ipfilter-bulk.log {
02   size 20M
03   rotate 10
04   compress
05   compresscmd bzip2
06   compressext bz2
07   postrotate
08     /etc/init.d/sysklogd reload >/dev/null
09   endscript
10 }
11 
12 /var/log/ipfilter-high.log {
13   daily
14   rotate 730
15   olddir /var/log/ipfilter-old.d
16   nocompress
17   mail ich@meine.domain.de
18   mailfirst
19 }

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook