繁体   English   中英

在nginx上使用PHP-FPM执行exec(在chroot下)不返回任何内容

[英]Exec with PHP-FPM on nginx (under chroot) returns nothing

我用php-fpm在/ srv / http的chroot中创建了一个nginx服务器。 两个服务都使用http用户,它工作正常。 当我尝试运行诸如的exec命令时出现问题

echo shell_exec('/usr/bin/ls');

网页或错误中根本没有输出。 我也试过了

error_log(shell_exec('/usr/bin/ls');

但仍然没有。

我尝试或知道的事情:

  1. 安全模式关闭
  2. exec启用
  3. user是http(使用phpinfo())
  4. display_errors = on
  5. error_reporting = E_ALL
  6. sudo / usr / bin / chroot --userspec = http:http / srv / http ls工作正常
  7. 可以使用file_puts_content和fopen / fread创建文件并从中读取
  8. 尝试过shell_exec,exec,system和passthrough - 没什么用
  9. 尝试将2>&1附加到命令的末尾,什么也没有
  10. 我已经复制了所有必需的可执行文件和库
  11. 所有库,二进制文件和/ srv / http / www(网页所在的位置)下的所有内容都具有可执行和读取权限
  12. doc_root是www

据我所知,除了通过php-fpm的shell命令外,一切都在chroot中工作。 任何人都知道我哪里出错了以及如何解决它?

这可能听起来很愚蠢,但你必须将/bin/sh (不是/bin/bash !)复制到chroot

例如,看到这个问题: 如何更改php的exec()的shell

如果你chroot到某个目录,那么这个目录将成为所有PHP脚本的根目录。 这意味着,如果你从PHP中执行/usr/bin/ls ,它将尝试exectue /srv/http/usr/bin/ls

您可以将可执行文件复制到该目录 - 但请注意安全隐患。 如果将关键系统可执行文件复制到chrooted目录中,则基本上可以绕过chroot的正面影响。

我没有输出

echo shell_exec('/usr/bin/ls');

无论是。 大概是因为ls不是文件而是内置命令。 运行:

echo shell_exec('ls');

输出:

css demos favicon.ico图片js path.php robots.txt routing.php test

这是该站点的根目录中的文件列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM