Fail2ban 套接字权限在重启时重置

Fail2ban 套接字权限在重启时重置

我为我的文件设置了一些特定的组/权限,fail2ban.sock以使 Zabbix 能够按照此处所述监控 Fail2banhttps://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。但出于某种原因,它在重启后不起作用。我尝试使用ExecStartPostdummy添加一些调试行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

另一种方法是简单地将 fail2ban 套接字的另一条路径设置为某个持久目录(例如,/opt/fail2ban而不是/run/fail2ban),使用systemd 单元中的参数或内的-s参数。并持久设置权限。socket/etc/fail2ban/fail2ban.local

答案2

由于你使用的是 systemd 服务单元,因此值得创建一个systemd 套接字单元以及。通过创建套接字单元,systemd 将管理套接字文件。所有权和权限可以使用SocketModeSocketUser和来设置SocketGroup。然后在您的服务单元中的部分[Unit]添加Requires=yourservice.socket

相关内容