我正在尝试运行一个脚本,通过 PHP 在网络服务器上执行“apt-get install”,但似乎无法让它工作。如果我要使用以下命令在终端本地运行脚本:
须藤/var/www/html/dl.sh
有用。但使用这段代码后...
强制l.php:
<?php
if ($_GET['run']){
$output = shell_exec("/var/www/html/dl.sh");
echo "<pre>$output\n</pre>";
}
?>
<a href=?run=true>Click Here</a>
dl.sh:
#!/bin/bash
sudo apt-get install slowhttptest
在另一台计算机上单击“CLICK HERE”(如果 dl.sh 中的命令更改为 ifconfig,则它可以工作)后,应该运行脚本的服务器上没有任何反应。
如果我没记错的话,我已经安装了PHP和Apache2。我不知道是否还需要其他任何东西才能完成这项工作。
请求的命令:
ls -lZ /var/www/html/dl.sh
输出是:
rwxr-xr-x 1 根 根 ? 188 一月 2 21:58 /var/www/html/dl.sh
编辑#2:
我通过在 sudoers 中添加 WWW-DATA 并编辑我的 PHP 解决了这个问题。
强制l.php:
<?php
if ($_GET['run']){
$output = shell_exec("sudo /var/www/html/dl.sh");
echo "<pre>$output\n</pre>";
}
?>
<a href=?run=true>Click Here</a>
答案1
PHP 没有以用户身份运行(幸运的是!)root
,因此它没有运行权限apt install
。该suid
位在 shell 脚本上被忽略,因此在 shell 脚本上设置该位也不是解决方案。
如果你真的真的apt-get
想要给 PHP以用户身份运行的权限root
(请想一想真的对此很难),您可以添加一个条目以sudoers
允许它这样做,但您的命令必须是sudo apt-get [...]
.
通过授权通过基于 Web 的前端运行脚本sudo
是不明智的,因为如果有人以某种方式找到了编辑该文件的方法,现在他们可以通过让 PHP 做任何他们想做的超级用户在您的系统上做的事情对他们来说。