Fail2ban 套接字權限在重新啟動時重設

Fail2ban 套接字權限在重新啟動時重設

我為我的文件設定了一些特定的群組/權限,fail2ban.sock以使 Zabbix 能夠監控 Fail2ban,如此處所述https://github.com/hermanekt/zabbix-fail2ban-discovery-

我將以下幾行新增至 systemd 服務配置中,以確保服務重新啟動後權限正確:

[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

當我嘗試使用 手動重新啟動服務時,它運作得很好systemctl restart fail2ban。但由於某種原因,重啟後就不起作用了。我嘗試ExecStartPost使用虛擬添加一些調試行echo,它們就在那裡,因此ExecStartPost正在執行操作。但看起來像其他東西在啟動時重寫了權限。關於如何排除故障有什麼想法嗎?

答案1

這看起來可能像一個“計時”問題 - 也許第一個超時ExecStartPost或多個ExecStartPost條目沒有連續評估並並行運行(由於指定Type的單位或其他一些設置),或者類似的問題......

您可以嘗試在單行或某些腳本中重寫它並使用單個ExecStartPost參數,或者...

為什麼不為/run/fail2ban目錄設定預設 acl(例如在 中ExecStartPre),以便最初使用正確的權限建立套接字?看https://unix.stackexchange.com/a/1315/452987

所以嘗試這樣的事情:

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

另一種變體是簡單地使用systemd 單元中的參數或/opt/fail2ban使用.並持久設定權限。/run/fail2ban-ssocket/etc/fail2ban/fail2ban.local

答案2

由於您使用的是 systemd 服務單元,因此值得建立一個系統套接字單元以及。透過建立套接字單元,systemd 將管理套接字檔案。可以使用SocketModeSocketUser、 和設定所有權和權限SocketGroup。然後在您的服務單位的部分中[Unit]添加Requires=yourservice.socket.

相關內容