Acabei de atualizar do RHEL 5 para o 6.5 e configure fail2ban
novamente. Não consigo fazer com que minha ação personalizada funcione agora, supostamente por causa de um problema de permissão. Não quero saber o que estou fazendo de errado e como posso fazer com que fail2ban
execute o script com êxito.
Eu tenho uma ação fail2ban
configurada para executar um script de shell genérico. Eu prefiro as coisas assim.
actionstart = <script> <jail> start
Em que <script>
é especificado no arquivo jail.local
:
action = run-script[jail=drupal-reg-lim,script=/path/to/script.sh]
Mas recebo um código de saída 126 quando tento executar o script, que, de acordo com tldp. org , significa que existe um "Problema de permissão ou comando não é um executável".
Isso acontece independentemente do conteúdo de script.sh
- se está completamente vazio ou tem apenas um shebang ( #!/bin/sh
). Tentando executar sudo /path/to/script.sh
funciona.
Eu tentei alterar o actionstart
para que ele registrasse e coloquei o script como /etc/fail2ban/action.d/script.sh
:
actionstart = <script> <jail> start || logger -dit fail2ban-run-script <script> <jail> start failed: exitcode = $?
Na verdade, gera o seguinte em /var/log/messages
:
Apr 23 05:49:25 xx1 fail2ban-run-script[8236]: /etc/fail2ban/action.d/script.sh drupal-reg-lim start failed: exitcode = 126
Também está tentando executar sh
works. Apenas a execução de um script falha. Eu também tentei chmod 777 script.sh
:
-rwxrwxrwx. 1 root root 10 Apr 23 05:12 script.sh
Outro pensamento foi que isso pode ter a ver com o contexto de segurança do SELinux (log id
output me deu uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:system_r:fail2ban_t:s0
), mas eu não fui bem sucedido em testar isso ( sudo -t fail2ban_t -r system_r /bin/sh
falha com Permission denied
mesmo embora fail2ban
possa executar sh
; posso estar fazendo algo errado no meu sudo
).
Algo que pode ser útil saber é que fail2ban
usa os.system()
do Python para executar o comando. Mas minha tentativa de recriar dessa maneira também falhou:
>>> import os
>>> print os.system('/etc/fail2ban/action.d/script.sh || echo "No"')
0
Tudo isso me deixa sem nada. Eu ficaria feliz em receber qualquer tipo de ajuda.
(Nota: na verdade, fail2ban
não obteve o código de saída 126 por algum motivo, e simplesmente cuspiu um erro com um código 0x7e00, o que significa que o processo parou, mas o código de saída é zero. me algum tempo para descobrir, então pensei em compartilhar.)