Ich habe einige spezielle Gruppen/Berechtigungen für meine fail2ban.sock
Datei 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 fail2ban
einige 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?ExecStartPost
echo
ExecStartPost
Antwort1
Dies scheint möglicherweise ein „Timing“-Problem zu sein – möglicherweise ist beim ersten Ihrer Einträge die ExecStartPost
Zeit abgelaufen oder mehrere ExecStartPost
Einträge werden nicht seriell ausgewertet und parallel ausgeführt (aufgrund der angegebenen Type
Einheit 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 ExecStartPost
Parameter zu verwenden, oder ...
Warum wird nicht einfach die Standard-ACL für /run/fail2ban
das 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/fail2ban
anstelle von /run/fail2ban
) festzulegen, entweder mit -s
Parameter in der Systemd-Unit oder mit Parameter socket
innerhalb /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
.