【发布时间】:2017-11-05 14:33:36
【问题描述】:
我在 php 中运行以下代码
$ipAddress=$_SERVER['REMOTE_ADDR'];
$mac = `arp -an |grep $ipAddress | awk '{print $4}'`;
$c = "sudo iptables -t mangle -I internet 1 -m mac --mac-source $mac -j RETURN";
shell_exec($c);
之后,输出
#iptables -L -v -t mangle
pkts bytes target prot opt in out source destination
215 18676 all -- * * 0.0.0.0/0 0.0.0.0/0 MAC D0:17:C2:48:1E:4F
26 1717 RETURN udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
0 0 RETURN tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
340 26189 MARK all -- * * 0.0.0.0/0 0.0.0.0/0 MARK set 0x63
注意目标中没有 RETURN
如果我从 bash shell 运行与 sudo 相同的命令,则输出为
$ sudo iptables -t mangle -I internet -m mac --mac-source D0:17:C2:48:1E:4F -j RETURN
pkts bytes target prot opt in out source destination
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 MAC D0:17:C2:48:1E:4F
0 0 RETURN udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
0 0 RETURN tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
0 0 MARK all -- * * 0.0.0.0/0 0.0.0.0/0 MARK set 0x63
观察目标中有一个RETURN
我已经用 visudo 修改了 sudoers 以使 php 能够以 root 身份运行上述命令
我还尝试了 system()、exec 和在 php 中使用反引号运算符。但是,一切都一样。
我不明白为什么会发生这种情况以及对此的补救措施。
【问题讨论】:
-
你是什么意思,
enable php to run the said command,你给了哪个用户访问权限?请注意,如果您从浏览器执行此操作,则需要授予访问权限的是 Web 服务器用户。 -
是的。我为该命令授予 www-data 对 sudo 的访问权限,正如我所提到的,它运行但不添加 RETURN 目标。这出乎我的意料。
标签: php iptables captivenetwork