Php 并非所有命令都与exec/shell\u exec一起使用
我有一个apache2服务器在Raspberry Pi 4上 所有php网页都位于Php 并非所有命令都与exec/shell\u exec一起使用,php,Php,我有一个apache2服务器在Raspberry Pi 4上 所有php网页都位于/var/www/html中 在一个php文件中,我有以下工作shell\u exec: if(isset($_POST['restart_device'])) { shell_exec("sudo /var/www/html/restart_device.sh"); header("Location: /"); die(); } $make_exe
/var/www/html
中
在一个php文件中,我有以下工作shell\u exec
:
if(isset($_POST['restart_device'])) {
shell_exec("sudo /var/www/html/restart_device.sh");
header("Location: /");
die();
}
$make_exe = "sudo chmod +x $uploadFileDir"."$fileName";
shell_exec($make_exe);
在另一个php文件中,这个不起作用shell\u exec
:
if(isset($_POST['restart_device'])) {
shell_exec("sudo /var/www/html/restart_device.sh");
header("Location: /");
die();
}
$make_exe = "sudo chmod +x $uploadFileDir"."$fileName";
shell_exec($make_exe);
回显$make_exe
返回sudo chmod+x/var/www/html/uploads/MP_Display
我在/etc/sudoers.tmp
中添加了www-data-ALL=NOPASSWD:/var/www/html/
,使用sudo-visudo
为什么一个工作而另一个不工作
我试过使用:
exec($make_exe, $full, $status);
if($status != 0) {
echo "<br>Something went wrong<br>";
} else {
echo "<br>$response<br>";
}
这将返回数组(0){}
,但它不起作用
然后我尝试了一个shell脚本:
mv /var/www/html/uploads/MP_Display /var/www/html/4panel/
我从php运行的:
shell_exec("sudo /var/www/html/rmv_fl.sh")
我知道从php运行shell脚本可以工作shell_exec(“sudo/var/www/html/restart_device.sh”)代码>
为什么mv
根本不起作用?除了从安全角度看非常可怕之外,你发布的代码没有什么问题
要调试运行这些命令时出现的问题,请模拟web服务器用户(www-data
)。这样,您就可以像运行PHP脚本一样运行所有这些命令,并查看它们可能导致的错误
为此,在Raspberry Pi中打开一个终端,然后运行sudo su www-data-s/bin/bash
。后续命令将作为www-data
运行(请在那里尝试sudo/var/www/html/restart\u-device.sh
等)
注意,sudoers中的目录只允许执行该目录中的文件。来自man sudoers(我的重点):
目录是完全限定的路径名
以“/”结尾。当您在Cmnd_列表中指定目录时,用户将能够运行该目录中的任何文件(但不能)
在其中的任何子目录中)
要编辑sudoers文件,应使用visudo
命令。编辑后,使用visudo-c
对其进行验证。如果你在那里输入错误,那可能是灾难性的。@Daan我确实用sudovisudo
编辑过它。另外,运行sudovisudo-c
返回所有OK。定义“不工作”。这个命令的输出/返回值是多少?“sudo chmod”--您做了一些非常错误的事情。为什么您需要sudo
来完成此任务?无论如何,基本想法是,当您使用sudo
执行非管理任务时,您走错了路。这条路径会导致越来越多地使用sudo
,直到您开始思考为什么不使用root
帐户。这正是sudo
命令试图避免的。它的目的是允许普通用户执行一些管理任务。重新启动服务就是这样一项任务,但chmod却不是。为什么非常可怕?我如何才能做到不那么可怕呢?显然,您正在以root用户身份运行一个上传的脚本。该脚本上的任何内容都将被执行,包括对系统的任何修改、密码等。“安全”方式实际上取决于您试图作为一个整体归档的内容。但我不是以root用户身份运行phpps aux | grep httpd
返回pi作为服务器的所有者。此外,/var/www/html
中的所有php文件都归pi:pi所有。模拟www数据并执行mv/var/www/html/uploads/Metrici\u MP\u Display/var/www/html/4panel/
工作。为什么不能从exec
?尝试确定PHP脚本运行的用户www data
是基于用户的猜测,如果使用不同的用户,则没有任何效果。