fail2ban permissão negada no script

3

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.)

    
por Yuval 23.04.2014 / 14:35

1 resposta

1

Como sempre, não teve nada a ver com exceção de um erro no script que eu estava tentando executar!

Especificamente, o script que eu estava chamando estava tentando executar outro script que está localizado no mesmo diretório. Para obter o nome do diretório comum, em vez de usar BASE_DIR=$(dirname $(readlink -f "$0")) , escrevi acidentalmente BASE_DIR=$(readlink -f "$0") e nem preciso dizer que "${BASE_DIR}/another_script.sh arg1 arg2..." falhou (estava tentando executar o caminho inexistente inexistente /path/to/script.sh/another_script.sh ) com código de status 126.

    
por 12.05.2014 / 01:53