【问题标题】:shell_exec using ajax call does not work in inux使用 ajax 调用的 shell_exec 在 linux 中不起作用
【发布时间】:2021-03-03 21:49:53
【问题描述】:

我有一个使用 shell_exec 调用 shell 脚本的 php 脚本,我正在使用 ajax 调用 php 脚本,

在 mac os 中,它确实运行没有任何问题,但是当我尝试在我的 ubuntu vm 中运行它时,它不会在从 ajax 调用时执行 shell_exec 命令,但如果我从 unix 控制台运行使用

php script.php

它确实会正常运行 shell_exec。

有人遇到过这个问题吗?

php代码是这样的

<?php

 $output = shell_exec('sudo sh /var/www/html/SIRSProject/WebApp/php/teste.sh'); 

 echo $output;

?>

【问题讨论】:

  • chmod 777 teste.sh更改你的shell脚本的文件权限,然后再试一次,也许不用sudo

标签: php ajax ubuntu sh sudo


【解决方案1】:

这很可能是因为当通过 Web 服务器调用该命令时,与您直接在命令行上调用它相比,该命令将以另一个用户身份运行。

您使用的是哪个网络服务器?例如,如果您正在运行 apache,您可以看到/更改用户 PHP 在 User directive 中由 web 服务器运行;在 Ubuntu 下这个www-data.

另一个原因可能是sudo 要求提供PHP 无法提供的密码。注意:在终端上运行时sudo 可能会缓存该终端会话的授权。所以也许还可以在新的终端会话中测试手动执行 PHP 脚本。

在这两种情况下,您可能需要更新您的 /etc/sudoers 以允许非交互式执行 sudo

但请注意:这很危险!

从网络服务器调用带有sudo 的外部命令很容易成为一个巨大的安全风险,因为它允许从网络以root 权限执行命令。仅当您真的知道自己在做什么时才继续执行此操作 - 尤其是永远不要相信用户输入!

【讨论】:

    猜你喜欢
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 2017-06-10
    • 2017-11-16
    相关资源
    最近更新 更多