Использование iptables без прав root [закрыто]

При запуске следующего сценария от имени пользователя ec2-user , я получаю сообщение об ошибке iptables v1.4.18: не удается инициализировать фильтр таблицы iptables: разрешение запрещено (вы должны быть 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

Как я могу запустить iptables как пользователь без полномочий root, чтобы заблокировать IP-адрес?

Примечание: этот сценарий обычно вызывается mod_evasive

3
задан 12 October 2014 в 18:46
4 ответа

Установите бит setuid в скрипте, чтобы он всегда запускался от имени пользователя root.

chown root myscript
chmod u+s myscript
3
ответ дан 3 December 2019 в 06:06

На основании другого вашего комментария, проблема, с которой вы столкнулись, заключается в том, что bash не может найти скрипт, который вы пытаетесь запустить.

Когда вы запускаете скрипт или команду, которая не в одном из путей, определенных в параметрах среды $ PATH , вам необходимо указать для него абсолютный или относительный путь. Например:

  • Если сценарий находится в / usr / local / bin , вам необходимо запустить /usr/local/bin/scriptname.sh .
  • Если сценарий находится в вашем домашнем каталоге, вам нужно запустить либо /home/username/scriptname.sh , либо ~ / scriptname.sh .
  • В качестве альтернативы вы можете перейти в этот каталог и вызвать его с ./ , например: ./ scriptname.sh

Также вы можете обновить настройку среды $ PATH , указав путь к сценарию, изменив . bash_profile , .bashrc или .profile , в зависимости от того, какой файл env вы используете.

1
ответ дан 3 December 2019 в 06:06

Просто добавьте sudo перед командой:

#!/bin/sh
# Offending IP as detected by mod_evasive
# Add the following firewall rule (block IP)
sudo $IPTABLES -I INPUT -s $IP -j DROP
0
ответ дан 3 December 2019 в 06:06

Если ваш сценарий:

/drop.sh

и выглядит так:

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

Затем добавьте строку в ваш файл / etc / sudoers , которая выглядит примерно так:

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

NB, если Apache работает как пользователь помимо www-data , вам нужно будет использовать здесь это имя пользователя. Это позволяет пользователю Apache запускать ваш drop.sh

Затем, наконец, оболочку для mod_evasive :

#!/bin/sh
exec sudo /drop.sh "$@"
0
ответ дан 3 December 2019 в 06:06

Теги

Похожие вопросы