首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在nginx上使用PHP的Exec (在chroot下)什么也不返回。

在nginx上使用PHP的Exec (在chroot下)什么也不返回。
EN

Stack Overflow用户
提问于 2013-06-09 03:30:51
回答 3查看 5.7K关注 0票数 4

我用php在chroot /srv/http中创建了一个nginx服务器。这两个服务都使用http用户,并且工作正常。当我试图运行exec命令(如

代码语言:javascript
运行
复制
echo shell_exec('/usr/bin/ls');

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

代码语言:javascript
运行
复制
error_log(shell_exec('/usr/bin/ls');

但还是什么都没有。

我试过或知道的事情:

  1. 安全模式关闭
  2. 启用exec
  3. 用户是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,执行,系统,和传递-没有工作。
  9. 尝试将2>&1追加到命令的末尾,但没有
  10. 我已经复制了所有必要的可执行文件和库
  11. 所有库、二进制文件和/srv/http/www (其中有网页)下的所有内容都具有可执行和读取权限。
  12. doc_root是www

据我所知,除了php的shell命令之外,所有东西都在chroot中工作。有谁知道我哪里出了问题,怎么解决?

EN

回答 3

Stack Overflow用户

发布于 2013-07-14 07:29:16

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

例如,请参见以下问题:How do I change the shell for php's exec()

票数 1
EN

Stack Overflow用户

发布于 2013-06-09 09:41:36

如果您将chroot转到某个目录,则此目录将成为所有PHP脚本的根目录。这意味着,如果您从PHP内部执行/usr/bin/ls,它将尝试执行/srv/http/usr/bin/ls

您可以将可执行文件复制到该目录,但要注意安全性问题。如果将关键的系统可执行文件复制到有色度的目录中,则基本上绕过了chroot的积极影响。

票数 0
EN

Stack Overflow用户

发布于 2013-07-14 07:45:01

我没有输出

代码语言:javascript
运行
复制
echo shell_exec('/usr/bin/ls');

都不是。大概是因为ls不是一个文件,而是一个内置命令。跑步:

代码语言:javascript
运行
复制
echo shell_exec('ls');

产出:

css演示favicon.ico图像js path.php robots.txt routing.php测试

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17006136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档