Fail2ban-Socket-Berechtigungen werden beim Neustart zurückgesetzt

Fail2ban-Socket-Berechtigungen werden beim Neustart zurückgesetzt

Ich habe einige spezielle Gruppen/Berechtigungen für meine fail2ban.sockDatei festgelegt, damit Zabbix Fail2ban überwachen kann, wie hier beschriebenhttps://github.com/hermanekt/zabbix-fail2ban-discovery-

Um sicherzustellen, dass die Berechtigungen nach dem Neustart des Dienstes korrekt sind, habe ich der Systemd-Dienstkonfiguration die folgenden Zeilen hinzugefügt:

[Service]
ExecStartPost=/bin/sh -c "while ! [ -S /run/fail2ban/fail2ban.sock ]; do sleep 1; done"
ExecStartPost=/bin/chgrp fail2ban /run/fail2ban/fail2ban.sock
ExecStartPost=/bin/chmod g+w /run/fail2ban/fail2ban.sock

Es funktioniert einwandfrei, wenn ich versuche, den Dienst manuell mit neu zu starten . Aber aus irgendeinem Grund funktioniert es nach dem Neustart nicht. Ich habe versucht , mit Dummy systemctl restart fail2baneinige Debugzeilen hinzuzufügen, und sie sind da, sodass Aktionen ausgeführt werden. Aber es sieht so aus, als ob etwas anderes die Berechtigungen beim Booten neu schreibt. Irgendwelche Ideen zur Fehlerbehebung?ExecStartPostechoExecStartPost

Antwort1

Dies scheint möglicherweise ein „Timing“-Problem zu sein – möglicherweise ist beim ersten Ihrer Einträge die ExecStartPostZeit abgelaufen oder mehrere ExecStartPostEinträge werden nicht seriell ausgewertet und parallel ausgeführt (aufgrund der angegebenen TypeEinheit oder einer anderen Einstellung) oder etwas Ähnliches …

Sie können versuchen, es in einer einzelnen Zeile oder in einem Skript neu zu schreiben und einzelne ExecStartPostParameter zu verwenden, oder ...

Warum wird nicht einfach die Standard-ACL für /run/fail2bandas Verzeichnis (z. B. in ExecStartPre) festgelegt, damit der Socket anfangs mit den richtigen Berechtigungen erstellt wird? Siehehttps://unix.stackexchange.com/a/1315/452987

Versuchen Sie es also mit etwas wie diesem:

ExecStartPre=-/bin/mkdir -p /run/fail2ban && /bin/setfacl -d -m g:fail2ban:rw /run/fail2ban

Eine andere Variante wäre, einfach einen anderen Pfad zum Fail2ban-Socket in ein persistentes Verzeichnis (z. B. /opt/fail2bananstelle von /run/fail2ban) festzulegen, entweder mit -sParameter in der Systemd-Unit oder mit Parameter socketinnerhalb /etc/fail2ban/fail2ban.local. Und legen Sie die Berechtigungen persistent fest.

Antwort2

Da Sie eine systemd-Serviceeinheit verwenden, lohnt es sich, eineSystemd-Socket-Einheitauch. Durch das Erstellen der Socket-Einheit verwaltet systemd die Socket-Datei. Eigentumsrechte und Berechtigungen können mit SocketMode, SocketUser, und festgelegt werden SocketGroup. Fügen Sie dann in Ihrer Service-Einheit im Abschnitt [Unit]hinzu Requires=yourservice.socket.

verwandte Informationen