Eu tenho alguns grupos/permissões específicos definidos para meu fail2ban.sock
arquivo para tornar o Zabbix capaz de monitorar o Fail2ban conforme descrito aquihttps://github.com/hermanekt/zabbix-fail2ban-discovery-
Adicionei as seguintes linhas à configuração do serviço systemd para garantir que as permissões estarão corretas após a reinicialização do serviço:
[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 perfeitamente quando tento reiniciar o serviço manualmente usando o systemctl restart fail2ban
. Mas, por algum motivo, não funciona após a reinicialização. Tentei adicionar algumas linhas de depuração ExecStartPost
ao dummy echo
e elas estão lá, então ExecStartPost
as ações estão sendo executadas. Mas parece que outra coisa reescreve a permissão na inicialização. Alguma idéia sobre como solucionar problemas?
Responder1
Isso parece possivelmente um problema de "tempo" - talvez a primeira de suas entradas ExecStartPost
tenha expirado ou várias ExecStartPost
entradas não sejam avaliadas serialmente e executadas em paralelo (devido à Type
unidade especificada ou alguma outra configuração) ou algo semelhante ...
Você pode tentar reescrevê-lo em uma única linha ou em algum script e usar um único ExecStartPost
parâmetro, ou...
Por que simplesmente não definir o acl padrão para /run/fail2ban
o diretório (por exemplo, em ExecStartPre
), para que o soquete seja criado inicialmente com as permissões corretas? Verhttps://unix.stackexchange.com/a/1315/452987
Então tente algo assim:
ExecStartPre=-/bin/mkdir -p /run/fail2ban && /bin/setfacl -d -m g:fail2ban:rw /run/fail2ban
Outra variante seria simplesmente definir outro caminho para o soquete fail2ban para algum diretório persistente (por exemplo, /opt/fail2ban
em vez de /run/fail2ban
) com -s
parâmetro na unidade systemd ou com parâmetro socket
dentro de /etc/fail2ban/fail2ban.local
. E defina as permissões de forma persistente.
Responder2
Como você está usando uma unidade de serviço systemd, valeria a pena criar umunidade de soquete systemdtambém. Ao criar a unidade de soquete, o systemd gerenciará o arquivo de soquete. Propriedade e permissões podem ser definidas com SocketMode
, SocketUser
e SocketGroup
. Depois, na sua unidade de serviço, na seção [Unit]
add Requires=yourservice.socket
.