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

При запуске следующего скрипта от имени пользователя ec2-user я получаю сообщение об ошибке iptables v1.4.18: can 't инициализировать фильтр таблицы iptables: в доступе отказано (вы должны быть root)

Скрипт:

  #!/bin/sh # Оскорбительный IP-адрес, обнаруженный mod_evasive # Добавьте следующее правило брандмауэра (заблокируйте IP-адрес) $ IPTABLES -I INPUT -s $ IP -j DROP  

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

NB: этот скрипт обычно вызывается mod_evasive


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

  chown root myscriptchmod u + s myscript  


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

  chown root myscriptchmod u + s myscript  

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

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

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

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


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

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

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

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


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

  #!/bin/sh # Оскорбительный IP  как обнаружено mod_evasive # Добавьте следующее правило брандмауэра (блокировать IP) sudo $ IPTABLES -I INPUT -s $ IP -j DROP  


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

  #!/bin/sh # Оскорбительный IP-адрес, обнаруженный mod_evasive # Добавьте следующее правило брандмауэра (заблокируйте IP-адрес) sudo $ IPTABLES -  I INPUT -s $ IP -j DROP  

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

 /drop.sh  

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

  #!/ bin/shexec/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/shexec sudo/drop.sh "$ @"  


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

 /drop.sh  

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

  #!/bin/shexec /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/shexec sudo/drop.sh "$ @"  

Оцените статью
techsly.ru
Добавить комментарий