【问题标题】:PHP open_basedir with FastCGIPHP open_basedir 与 FastCGI
【发布时间】:2012-02-21 07:41:35
【问题描述】:

如果我正在运行 fastCGI,我会在我的服务器上使用 open_basedir 将文件从一个域移动到另一个域时遇到问题吗?

我想从以下位置移动上传的文件:

/var/www/vhosts/example-1.com/httpdocs/

到:

/var/www/vhosts/example-2.com/httpdocs/

考虑到用户特定于所使用的域,FastCGI 会允许这样做吗?因此对于 example-1.com,用户将是 example-1。如果我定义了 open_basedir 指令,该用户能否将文件移动到 example-2 目录?

【问题讨论】:

  • 每个域(example-1.com、example-2.com 等)是否由不同的用户拥有,您是否使用 suEXEC 之类的工具让 fastcgi 以拥有用户身份运行脚本?
  • 我不知道 suExec 是否如此不确定。是的,每个域目录都有不同的用户

标签: php linux file-upload fastcgi open-basedir


【解决方案1】:

听起来好像没有使用 suEXEC,所以 FastCGI 很可能会以与 Web 服务器相同的用户身份运行(apache、nobody、daemon、lighttpd 等)。

在这种情况下,FastCGI 用户将无权在各个用户目录中创建和写入文件。如果您将其中一个虚拟主机中的“上传”文件夹的权限设置为 777,则它可以将文件保存在那里。需要注意的是,这些文件将归 webserver 用户(apache 等)所有,现在 vhost 用户将不拥有这些文件,也无法修改它们。无论 open_basedir 是什么情况都是如此。如果这是您的专用服务器并且您所有的虚拟主机都是您的,您可以将某些文件/文件夹上的所有权更改为网络服务器的所有权,但最好使用 suEXEC,因为在这种情况下,FastCGI 将使用虚拟主机用户写入文件作为所有者。

您在将文件复制到另一个虚拟主机时仍然会遇到权限问题,因为它们将由不同的用户拥有,但您可以让您的脚本将它们分配给目标用户,或者将所有用户添加到一个公共组,以便他们可以拥有组读/写权限。

suExec 是一个更安全的选项,但正确设置可能会很复杂。您使用的是 Apache、lighttpd 还是其他?

【讨论】:

  • 我使用的是 apache,而不是 lighttpd。每个域用户对于该域都是唯一的,这些用户是否与每个域的虚拟主机用户相同?在我的记忆中,我认为他们是。这是我的专用虚拟服务器,所以我可以根据需要更改权限,但由于上传目录可能会更改,我不想继续这样做。
猜你喜欢
  • 1970-01-01
  • 2021-01-20
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多