【问题标题】:Executing Linux commands from webpage从网页执行 Linux 命令
【发布时间】:2018-12-09 06:08:50
【问题描述】:

我在 apache2 服务器上建立了一个非常基本的网站(在 Ubuntu 18.04 上运行)。该网站只有一页。我使用一些 JavaScript 向其中添加动态内容,并且该网站包含 HTML 表单,该表单将数据发送到 MySql 服务器——我使用 PHP 连接到数据库。

根据用户输入,我需要执行某个 Linux 终端命令(例如:ls -l)。例如,如果用户输入名字和姓氏并单击提交按钮,ls -l 命令将自动执行,而无需用户在终端中执行任何操作。这可能吗? 这是我的 HTML 表单:

<form method="post">
    <label>Fisrt Name: <input type="text" name="firstname" required></label>
    <label>Last Name: <input type="text" name="lastname" required></label>
    <input type="submit" name="submit" value="Submit">
</form>

编辑: 好的,除了连接到 MySql 数据库的代码之外,我现在还有这个 PHP 代码:

<?php
    $output = shell_exec('sudo addgroup test2');
    echo "<pre>$output</pre>;

    $result = exec('echo $?');
    echo "$result";
?>

但是,它没有添加这个组,echo $? 返回 0。但是,当我用 shell_exec('ls -l'); 替换 shell_exec('sudo addgroup test2'); 时——它工作正常。我做错了什么?

【问题讨论】:

  • 所以,ls -l 将在服务器上运行 - 所以你需要在服务器端代码中展示你打算如何做到这一点
  • 所以我还不知道如何在服务器端代码中做到这一点。我需要一些指导
  • 谢谢。所以这段代码将在网站托管的服务器上运行,对吗?
  • 哪个代码?你还没有显示任何代码

标签: javascript php html linux web-development-server


【解决方案1】:

这需要由运行在 Apache 后面的后端服务器代码来处理。您可以将命令作为查询字符串或从 UI 作为 POST json 传递,并编写服务器端脚本(在 php 中)以捕获参数并以 shell-exec http://php.net/manual/en/function.shell-exec.php 的形式执行函数。

【讨论】:

  • 请检查编辑部分
  • 试试这个 sn-p。 &lt;?php $output = shell_exec('touch /tmp/created_from_php'); echo("&lt;pre&gt;$output&lt;/pre&gt;"); ?&gt;执行后验证检查/tmp/created_from_php路径。
  • sudo addgroup test2 的原因是正在运行的用户 php 可能没有 sudo/root 权限。就像如果您使用www-data 用户运行php,那么它可能没有sudo 访问权限。
  • sudo touch /etc/created_from_php等简单的sudo命令替换上面的shell_exec函数,如果它不起作用,那么它是php用户权限问题。
  • 我已经尝试过shell_exec('touch /tmp/created_from_php');,但它对我没有用。你是对的,看起来我正在使用www-data 用户运行 php。当我做exec('whoami'); 时——它返回www-data
最近更新 更多