Tengo algunos grupos/permisos específicos configurados para mi fail2ban.sock
archivo 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 ExecStartPost
con dummy echo
y están ahí, por lo que ExecStartPost
se 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 ExecStartPost
entradas agotadas o varias ExecStartPost
entradas no se evalúen en serie y se ejecuten en paralelo (debido a Type
la 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 ExecStartPost
parámetro, o...
¿Por qué no configurar la ACL predeterminada para /run/fail2ban
el 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/fail2ban
en lugar de /run/fail2ban
), ya sea con -s
un parámetro en la unidad systemd o con un parámetro socket
dentro 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
, SocketUser
y SocketGroup
. Luego en tu unidad de servicio, en la sección [Unit]
agrega Requires=yourservice.socket
.