【发布时间】:2019-10-02 10:23:31
【问题描述】:
我在 Raspberry Pi 4 上有一个 apache2 服务器。
所有的php网页都在/var/www/html。
我在一个 php 文件中有以下 工作 shell_exec:
if(isset($_POST['restart_device'])) {
shell_exec("sudo /var/www/html/restart_device.sh");
header("Location: /");
die();
}
这个不起作用 shell_exec 在另一个 php 文件中:
$make_exe = "sudo chmod +x $uploadFileDir"."$fileName";
shell_exec($make_exe);
回显$make_exe 返回sudo chmod +x /var/www/html/uploads/MP_Display。
我使用sudo visudo 在/etc/sudoers.tmp 中添加了www-data ALL=NOPASSWD: /var/www/html/。
为什么一个工作而另一个不工作?
我尝试过使用:
exec($make_exe, $full, $status);
if($status != 0) {
echo "<br>Something went wrong<br>";
} else {
echo "<br>$response<br>";
}
它总是返回Something went wrong。
编辑:
chmod 可以在没有sudo 的情况下工作。执行二进制文件无需sudo。但是移动文件根本不起作用!
我试过用 exec 运行命令:
$move_command = "sudo mv $uploadFileDir.$fileName /var/www/html/4panel/";
exec($move_command, $full_1, $status);
var_dump($full_1);
if($status !=0 ) { } else {}
这会返回array(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 根本不工作?
【问题讨论】:
-
要编辑 sudoers 文件,您应该使用
visudo命令。编辑后使用visudo -c进行验证。如果你在那里打错字,那可能是灾难性的。 -
@Daan 我确实使用
sudo visudo对其进行了编辑。此外,运行sudo visudo -c会返回一切正常。 -
定义“不工作”。命令的输出/返回值是多少?
-
"sudo chmod" - 你做错了什么。为什么需要
sudo? -
无论如何,基本思想是当您使用
sudo执行非管理员任务时,您走错了路。一条导致越来越多地使用sudo的路径,直到您开始想知道为什么不使用root帐户来代替。这正是sudo命令试图避免的。其目的是允许普通用户执行一些 管理任务。重启服务是这样的任务,但chmod不是。
标签: php