Usando iptables sem privilégios de root [closed]

2

Ao executar o seguinte script como usuário ec2-user , recebo a mensagem de erro iptables v1.4.18: can't initialize iptables table filter: Permission denied (you must be root)

Script:

#!/bin/sh
# Offending IP as detected by mod_evasive
# Add the following firewall rule (block IP)
$IPTABLES -I INPUT -s $IP -j DROP

Como posso executar iptables como usuário não-root para bloquear um endereço IP?

NB: Este script geralmente é chamado por mod_evasive

    
por AlexR 12.10.2014 / 17:46

4 respostas

3

Defina o bit setuid no script, para que ele sempre seja executado como root.

chown root myscript
chmod u+s myscript
    
por 12.10.2014 / 17:58
1

Com base em outro comentário que você fez aqui, o problema que você está enfrentando é que o bash não pode encontrar o script que você está tentando executar.

Quando você estiver executando um script ou comando que não esteja em um dos caminhos definidos na configuração $PATH do ambiente, será necessário fornecer o caminho absoluto ou relativo para ele. Por exemplo:

  • Se o script estiver em /usr/local/bin , você precisa executar /usr/local/bin/scriptname.sh .
  • Se o script estiver em seu diretório pessoal, você precisa executar /home/username/scriptname.sh ou ~/scriptname.sh .
  • Como alternativa, você pode mudar para esse diretório e chamá-lo com ./ da seguinte forma: ./scriptname.sh

Você também pode atualizar sua configuração de $PATH do ambiente com o caminho para o script, modificando .bash_profile , .bashrc ou .profile , dependendo de qual arquivo env você está usando.

    
por 12.10.2014 / 18:36
0

Basta adicionar o sudo antes do comando:

#!/bin/sh
# Offending IP as detected by mod_evasive
# Add the following firewall rule (block IP)
sudo $IPTABLES -I INPUT -s $IP -j DROP
    
por 12.10.2014 / 17:56
-1

Se o seu script for:

/drop.sh

e se parece com isso:

#!/bin/sh
exec /sbin/iptables -I INPUT -s "$1" -j DROP

Em seguida, adicione uma linha ao seu arquivo /etc/sudoers semelhante a:

www-data ALL=(root) NOPASSWD: /drop.sh

NB se o Apache estiver sendo executado como usuário além de www-data , será necessário usar esse nome de usuário aqui. Isso permite que o usuário do Apache execute o seu drop.sh

Então, finalmente, um wrapper para mod_evasive :

#!/bin/sh
exec sudo /drop.sh "$@"
    
por 12.10.2014 / 18:50