Manchmal geht ein Prozess schief und die Anmeldungen /var/log
wachsen so stark an, dass sie letztendlich die gesamte Partition ausfüllen.
Es passierte mir einmal auf einem Server aufgrund einer falschen Postfix-Konfiguration und einmal auf einem Desktop aufgrund eines USB-Druckers (ich weiß nicht genau, was schief gelaufen ist, ich weiß nur, dass die Protokolle mit gefüllt waren (hp) did not claim interface 1 before use
).
Ich weiß, dass die Hauptursache nicht der Logger ist, sondern die Anwendung. Ich kann jedoch nicht anders, als zu denken, dass diese Schwachstelle eine Schande ist. Insbesondere auf einem Desktop, auf dem ein Drucker, der die gesamte Systempartition ausfüllt, verhindert, dass der Benutzer die GUI beim nächsten Durchlauf lädt (kein Speicherplatz /tmp
), was für Nicht-Techniker ein totaler Blocker ist.
logrotate
ist keine Antwort, weil es täglich oder sogar wöchentlich wirkt.rsyslog
hat diese Konfigurationsoption für maximale Größe und Aktion bei maximaler Größe , scheint jedoch nicht trivial zu sein und kann laut Dokument selbst in einer zukünftigen Version nicht mehr funktionieren.Das Einfügen
/var/log
einer dedizierten Partition würde dies jedoch verhindern.
Meines Wissens ist die separate Partition für /var/log
die einzige Lösung dafür. Ich habe dies manchmal empfohlen gesehen, aber es ist zum Beispiel nicht die Standardeinstellung im Debian-Installationsprogramm. Sollte es sein?
Gibt es eine andere einfache Möglichkeit, dies zu vermeiden? Eine Möglichkeit, dem /var/log
Verzeichnis eine maximale Größe zu geben , oder zumindest rsyslog
?
Ist dieses Problem nicht häufig genug, um einen Schutzmechanismus zu rechtfertigen, der standardmäßig aktiviert wird? (Ich denke insbesondere an die Installation zu Hause / auf dem Desktop, für die Benutzer nicht in der Lage sein sollten, sich selbst darum zu kümmern.)
Bearbeiten: SystemLogRateLimit
Dank der Antwort von Julie Pelletier habe ich in rsyslog den Mechanismus zur Ratenbegrenzung entdeckt, der genau diesem Bedarf entspricht und standardmäßig aktiviert werden sollte.
Es gibt eine Begrenzung der Eingaberate (seit 5.7.1), um Sie vor den Problemen eines wild laufenden Protokollierungsprozesses zu schützen. Wenn mehr als SysSock.RateLimit.Interval * SysSock.RateLimit.Burst-Protokollnachrichten vom selben Prozess ausgegeben werden, werden diese Nachrichten mit SysSock.RateLimit.Severity oder niedriger gelöscht.
SystemLogRateLimit funktioniert jedoch nicht, wenn sich die PID ändert. Auf der Dokumentseite wird erläutert, wie Sie die Funktion zur Ratenbegrenzung testen
Die Ratenbegrenzung funktioniert nur, wenn dieselbe PID angegeben ist
Ich denke, das ist der Grund, warum es hier nicht gilt.
Auf meinem Desktop:
Jul 25 21:34:36 bouzin kernel: [46038.140491] usb 1-5: usbfs: process 12126 (hp) did not claim interface 1 before use
Jul 25 21:34:36 bouzin kernel: [46038.140546] usb 1-5: usbfs: process 12127 (hp) did not claim interface 1 before use
Jul 25 21:34:36 bouzin kernel: [46038.140606] usb 1-5: usbfs: process 12128 (hp) did not claim interface 1 before use
Jul 25 21:34:36 bouzin kernel: [46038.140675] usb 1-5: usbfs: process 12129 (hp) did not claim interface 1 before use
Jul 25 21:34:36 bouzin kernel: [46038.140740] usb 1-5: usbfs: process 12130 (hp) did not claim interface 1 before use
Jul 25 21:34:36 bouzin kernel: [46038.140809] usb 1-5: usbfs: process 12131 (hp) did not claim interface 1 before use
Jul 25 21:34:36 bouzin kernel: [46038.140868] usb 1-5: usbfs: process 12132 (hp) did not claim interface 1 before use
Jul 25 21:34:36 bouzin kernel: [46038.140928] usb 1-5: usbfs: process 12133 (hp) did not claim interface 1 before use
Jul 25 21:34:36 bouzin kernel: [46038.140988] usb 1-5: usbfs: process 12134 (hp) did not claim interface 1 before use
Jul 25 21:34:36 bouzin kernel: [46038.141046] usb 1-5: usbfs: process 12135 (hp) did not claim interface 1 before use
Auf meinem Server:
Jul 5 13:37:45 server postfix/smtpd[426]: NOQUEUE: reject_warning: RCPT from unknown[177.11.51.178]: 451 4.3.0 <some_adress@yahoo.com.br>: Temporary lookup failure; from=<address@gmail.com> to=<some_adress@yahoo.com.br> proto=ESMTP helo=<mail.SERVER.TEST>
Jul 5 13:37:45 server postfix/smtpd[437]: NOQUEUE: reject_warning: RCPT from unknown[177.11.51.178]: 451 4.3.0 <some_adress@yahoo.com.br>: Temporary lookup failure; from=<address@gmail.com> to=<some_adress@yahoo.com.br> proto=ESMTP helo=<mail.SERVER.TEST>
Jul 5 13:37:45 server postfix/smtpd[426]: NOQUEUE: reject_warning: RCPT from unknown[177.11.51.178]: 451 4.3.0 <some_adress@yahoo.com.br>: Temporary lookup failure; from=<address@gmail.com> to=<some_adress@yahoo.com.br> proto=ESMTP helo=<mail.SERVER.TEST>
Jul 5 13:37:45 server postfix/smtpd[437]: NOQUEUE: reject_warning: RCPT from unknown[177.11.51.178]: 451 4.3.0 <some_adress@yahoo.com.br>: Temporary lookup failure; from=<address@gmail.com> to=<some_adress@yahoo.com.br> proto=ESMTP helo=<mail.SERVER.TEST>
Daher ist die Ratenbegrenzungsfunktion von IIUC rsyslog hier nicht relevant, da jede Protokollzeile von einem anderen Prozess geschrieben wird.
Bearbeiten 2: Verzeichnisgröße einschränken
Am Ende habe ich die Größe der /var/log
Verwendung eines virtuellen Dateisystems begrenzt (wie hier vorgeschlagen ).
Ich könnte beim nächsten Installieren eines Linux eine separate Partition einrichten.
Ich halte diese Frage vorerst offen, da ich dies eher als Problemumgehung als als Antwort betrachte.
100 * 200 * 12 * 60 * 24 = 345600000
=> ungefähr 330 MB pro Tag, was akzeptabel klingt. Überraschenderweise sehe ich in meinem kern.log mehr als 5000 Nachrichten, die mit derselben Sekunde mit einem Zeitstempel versehen sind./etc/rsyslog.conf
enthält die$ModLoad imuxsock
Zeile und nichts überSystemLogRateLimit
.