Los permisos del socket Fail2ban se restablecen al reiniciar

Los permisos del socket Fail2ban se restablecen al reiniciar

Tengo algunos grupos/permisos específicos configurados para mi fail2ban.sockarchivo para que Zabbix pueda monitorear Fail2ban como se describe aquíhttps://github.com/hermanekt/zabbix-fail2ban-discovery-

Agregué las siguientes líneas a la configuración del servicio systemd para asegurarme de que los permisos sean correctos después de reiniciar el servicio:

[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

Funciona perfectamente cuando intento reiniciar el servicio manualmente usando systemctl restart fail2ban. Pero por alguna razón, no funciona después del reinicio. Intenté agregar algunas líneas de depuración ExecStartPostcon dummy echoy están ahí, por lo que ExecStartPostse están ejecutando acciones. Pero parece que algo más reescribe el permiso al arrancar. ¿Alguna idea sobre cómo solucionar problemas?

Respuesta1

Esto posiblemente parezca un problema de "sincronización": tal vez la primera de sus ExecStartPostentradas agotadas o varias ExecStartPostentradas no se evalúen en serie y se ejecuten en paralelo (debido a Typela unidad especificada o alguna otra configuración), o algo similar...

Puedes intentar reescribirlo en una sola línea o en algún script y usar un solo ExecStartPostparámetro, o...

¿Por qué no configurar la ACL predeterminada para /run/fail2banel directorio (por ejemplo, en ExecStartPre), de modo que el socket se cree inicialmente con los permisos correctos? Verhttps://unix.stackexchange.com/a/1315/452987

Entonces prueba algo como esto:

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

Otra variante sería simplemente establecer otra ruta al socket fail2ban en algún directorio persistente (por ejemplo, /opt/fail2banen lugar de /run/fail2ban), ya sea con -sun parámetro en la unidad systemd o con un parámetro socketdentro de /etc/fail2ban/fail2ban.local. Y establezca los permisos de forma persistente.

Respuesta2

Dado que está utilizando una unidad de servicio systemd, valdría la pena crear unaunidad de enchufe systemdtambién. Al crear la unidad de socket, systemd administrará el archivo de socket. La propiedad y los permisos se pueden configurar con SocketMode, SocketUsery SocketGroup. Luego en tu unidad de servicio, en la sección [Unit]agrega Requires=yourservice.socket.

información relacionada