在没有 root 权限的情况下使用 iptables

在没有 root 权限的情况下使用 iptables

以用户身份运行以下脚本时ec2-user,我收到错误消息iptables v1.4.18: can't initialize iptables table filter: Permission denied (you must be root)

脚本:

#!/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 调用

答案1

在脚本上设置 setuid 位,以便它始终以 root 身份运行。

chown root myscript
chmod u+s myscript

答案2

根据您在此处发表的另一条评论,您遇到的问题是 bash 找不到您尝试运行的脚本。

当您运行的脚本或命令不在$PATH环境设置中定义的路径中时,您需要为其提供绝对路径或相对路径。例如:

  • 如果脚本在,/usr/local/bin您需要运行/usr/local/bin/scriptname.sh
  • 如果脚本位于您的主目录中,您需要运行/home/username/scriptname.sh~/scriptname.sh
  • 或者,您可以切换到该目录并./像这样调用它: ./scriptname.sh

您还可以通过修改、或$PATH来使用脚本路径更新环境设置,具体取决于您所使用的环境文件。.bash_profile.bashrc.profile

答案3

只需在命令前添加 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

答案4

如果你的脚本是:

/drop.sh

看起来像这样:

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

/etc/sudoers然后在文件中添加如下行:

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

注意:如果 Apache 以用户身份运行,则www-data您需要在此处使用该用户名。这允许 Apache 用户运行您的 drop.sh

最后包装一下mod_evasive

#!/bin/sh
exec sudo /drop.sh "$@"

相关内容