我為我的文件設定了一些特定的群組/權限,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
-s
socket
/etc/fail2ban/fail2ban.local
答案2
由於您使用的是 systemd 服務單元,因此值得建立一個系統套接字單元以及。透過建立套接字單元,systemd 將管理套接字檔案。可以使用SocketMode
、SocketUser
、 和設定所有權和權限SocketGroup
。然後在您的服務單位的部分中[Unit]
添加Requires=yourservice.socket
.