【问题标题】:Bash Script Command Not ExecutingBash 脚本命令未执行
【发布时间】:2017-01-02 02:02:37
【问题描述】:

我需要有关以下 Bash v4.1.2 脚本的帮助。

#!/bin/bash

IP=$1
IPTABLES=/sbin/iptables
$IPTABLES -I INPUT -s $IP -j DROP
echo $IPTABLES -I INPUT -s $IP -j DROP |wall

变量IPIPTABLES 填充到echo 中,但上面的行没有执行。回声输出...

/sbin/iptables -I INPUT -s 1.2.3.4 -j DROP

...语法正确,手动执行即可。

我不了解 Bash,所以我正在努力调试这个基本脚本。我看到一些情况下,我有我的命令是裸露的,有些是用$() 包裹的(带和不带引号)。我也尝试过使用反引号并引用命令的各个部分。通过wall 传递的echo 仅用于调试。

我在Bash script commands not working in cron 找到了一个基本相同的帖子。我的脚本不是从 cron 运行的。

=== 编辑 ===
为@Barmar 添加

[root@server tmp]# bash -x /bin/netfilter-drop.sh 
+ IP=1.2.3.4
+ IPTABLES=/sbin/iptables
+ /sbin/iptables -I INPUT -s 1.2.3.4 -j DROP
+ wall
+ echo /sbin/iptables -I INPUT -s 1.2.3.4 -j DROP
[root@server tmp]# 
Broadcast message from root@server (Thu Dec 29 12:46:44 2016):

/sbin/iptables -I INPUT -s 1.2.3.4 -j DROP
^C
[root@server tmp]#

【问题讨论】:

  • 它应该可以正常工作。是什么让你认为它没有被执行?
  • 该规则未添加到 netfilter。 iptables 不显示规则。
  • 您是否以 root 身份运行它?
  • wall 让我觉得您不是从终端运行它,因此看不到脚本产生的所有有用的错误消息。将exec &> /tmp/mylog 添加到脚本的开头,按照您的方式运行它,然后查看文件。如果您从 Web 服务器调用它,@gniourf_gniourf 猜到了您的问题
  • @thatotherguy 和@gniourf_gniourf:是的! iptables v1.4.7: can't initialize iptables table filter: Permission denied (you must be root) Perhaps iptables or your kernel needs to be upgraded.。所以问题是我的sudo。 @thatotherguy 的 exec 建议揭示了该输出。

标签: linux bash shell debugging iptables


【解决方案1】:

我最初只授予 sudo 访问权限来运行已发布的 Bash 脚本。问题不在于脚本,而在于权限。我需要提供额外的 sudo 访问权限才能在我的 sudoers 中运行 iptables。固定。

【讨论】:

    猜你喜欢
    • 2013-10-18
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 2016-07-25
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    相关资源
    最近更新 更多