脚本可以在终端上运行,但在使用 PHP 时不能运行

脚本可以在终端上运行,但在使用 PHP 时不能运行

我正在尝试运行一个脚本,通过 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 做任何他们想做的超级用户在您的系统上做的事情对他们来说。

相关内容