【问题标题】:Allow PHP/Apache to shell_execute commands on Ubuntu允许 PHP/Apache 在 Ubuntu 上执行 shell_execute 命令
【发布时间】:2015-04-22 18:39:50
【问题描述】:

我正在尝试使用shell_exec 通过 PHP 执行命令。 PHP 文件由 Apache 托管在我的 Ubuntu 服务器上。

当我运行这个时:

echo shell_exec("ps ax | grep nginx");

然后我可以查看数据。但是当我运行另一个命令时,例如:

echo shell_exec("cat /usr/local/nginx/config/nginx.config");

然后它根本没有显示任何东西。但是当我复制该命令并将其粘贴到我的终端时,它执行得很好。

我的 Apache 服务器以用户 www-data 运行。所以我编辑了sudoers 并添加了这一行:

www-data ALL=(ALL:ALL) ALL

我知道这是一个安全风险,但我想确保(目前)www-data 能够执行所有命令。但是,由于某种原因,我仍然无法使用我的 PHP 脚本执行所有命令。

有人知道该怎么做吗?

【问题讨论】:

标签: php apache shell-exec


【解决方案1】:

echo shell_exec("sudo cat /usr/local/nginx/config/nginx.config");

试试看。

【讨论】:

    【解决方案2】:

    你读过http://php.net/manual/en/function.shell-exec.php

    cmets 部分有很多讨论。热门评论是:

    如果您尝试在 shell_exec 中运行诸如“gunzip -t”之类的命令并得到空结果,则可能需要在命令末尾添加 2>&1,例如:

    并不总是有效: echo shell_exec("gunzip -c -t $path_to_backup_file");

    应该工作: echo shell_exec("gunzip -c -t $path_to_backup_file 2>&1");

    在上面的示例中,gunzip 输出开头的换行符似乎阻止了 shell_exec 打印其他任何内容。希望这可以为其他人节省一两个小时。

    【讨论】:

    • 这似乎做了一些事情,但现在它输出:cat: /usr/local/nginx/config/nginx.config: Permission denied。尽管由于 sudoers 中的 www-data ALL=(ALL:ALL) ALL 行,我应该具有 root 访问权限?
    猜你喜欢
    • 1970-01-01
    • 2015-09-30
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 2012-10-16
    • 2011-06-21
    • 2014-01-11
    相关资源
    最近更新 更多