Разрешения сокета 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. Но по какой-то причине он не работает после перезагрузки. Я попробовал добавить несколько строк отладки в ExecStartPostwith dummy echo, и они там есть, так что ExecStartPostдействия выполняются. Но похоже, что что-то еще перезаписывает разрешение при загрузке. Есть идеи, как устранить неполадку?

решение1

Возможно, это похоже на проблему «времени» — возможно, первая из ваших ExecStartPostистекших по времени или нескольких ExecStartPostзаписей не оценивается последовательно и выполняется параллельно (из-за указанного Typeустройства или какой-то другой настройки), или что-то подобное...

Вы можете попробовать переписать его в одну строку или в какой-нибудь скрипт и использовать один ExecStartPostпараметр, или...

Почему бы просто не установить acl по умолчанию для /run/fail2banкаталога (например, в 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) либо с -sпараметром в модуле systemd, либо с параметром socketвнутри /etc/fail2ban/fail2ban.local. И установить разрешения постоянно.

решение2

Поскольку вы используете сервисный модуль systemd, стоит создатьсокет systemdа также. Создав модуль сокета, systemd будет управлять файлом сокета. Владение и разрешения можно задать с помощью SocketMode, SocketUser, и SocketGroup. Затем в вашем модуле службы в разделе [Unit]add Requires=yourservice.socket.

Связанный контент