【问题标题】:How to get PHP to call a shell script?如何让 PHP 调用 shell 脚本?
【发布时间】:2019-03-10 00:37:45
【问题描述】:

我有一个 generate.php 页面

<?php
exec("./script $ip");
?>

我已验证变量 $ip 是否正确地从 URL 中提取。当它重定向到此页面时,它不会运行脚本。我还尝试验证该脚本是否适用于 apache 用户并且确实有效。

su -s /bin/sh apache -c "./script 1.1.1.1"

从我的 index.html 页面设置 IP 的代码是这样的

<form action="generate.php">
  <input type="text" name="ip" />
  <input type="submit" />
</form>

当我在框中输入 IP 并点击提交时,它确实将我带到http://example.com/generate.php?ip=1.1.1.1

我调用 shell 脚本的方式有问题吗?任何输入将不胜感激。

感谢大家的投入,原来只是selinux。禁用 selinux 解决了这个问题。由于这不是网络连接系统,因此禁用 selinux 不是问题。

【问题讨论】:

  • 给它 /full/path/to/the/script 然后再试一次。
  • Run Bash Command from PHP的可能重复
  • 脚本是否可执行? (您只测试了 /bin/sh 是否可以以 apache 用户身份处理脚本 - 这不是一回事)。网络服务器是否与您的测试在同一个根文件系统中运行? SELinux 或 Apparmour 是否在主机上运行?

标签: php bash shell


【解决方案1】:

你可以试试这个:

<?php
if (isset($_GET['ip'])) {
    exec('./script ' + $_GET['ip']);
} else {
    exec("./script $ip");
}

这里你将使用来自 URL 的ip(如:http://example.com/generate.php?ip=1.1.1.1),以防提供,否则你将使用以前的实现。

【讨论】:

    【解决方案2】:

    su -s /bin/sh apache -c "./script 1.1.1.1"

    您正在以 root 权限执行脚本。 尝试与您的用户一起执行脚本并查看结果。您可能需要为文件添加权限。

    出于安全原因,默认情况下 exec 功能被禁用。您可以尝试编辑配置文件。

    php 错误日志文件也将有助于阅读。

    除此之外,整个想法真的很糟糕。使用 GET 或 POST 的参数执行 shell 脚本可能会导致坏事...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 2023-03-23
      • 2017-01-22
      • 2011-02-09
      • 2018-01-29
      • 2020-11-12
      • 2022-11-12
      相关资源
      最近更新 更多