【问题标题】:Nobody owner (99 99) in FTP caused by php functions?php函数引起的FTP中没人(99 99)?
【发布时间】:2011-02-06 03:10:06
【问题描述】:

我有一个在服务器上创建文件和目录的脚本 (Joomla)。问题是它在所有者 99 99 (nobody) 下创建它们,并且在没有服务器管理员帮助的情况下我无法通过 FTP 删除或修改它们。

我认为这是move_uploaded_file php 的功能。

WHM 或服务器管理员是否有解决此问题的方法?我可以修改 ftp 中的默认所有者吗?

【问题讨论】:

  • 这个问题有最终解决方案吗?

标签: php joomla ftp file-ownership


【解决方案1】:

运行 PHP 的用户 - nobody - 由系统管理员设置。对此你无能为力。

如果您知道 FTP 用户的 ID,您可以尝试 chown() 更改文件的所有者。但通常情况下,您不会被允许在 PHP 中执行此操作。

根据服务器上的群组情况,有可能在文件上传后使用chmod更改文件的访问权限,FTP账号可以访问该文件:

先试试这个:

chmod($uploaded_file, 0660); // owner+group read+write

如果这不起作用,试试这个:

chmod($uploaded_file, 0666); // global read+write

其中一项应使该文件可供 FTP 帐户使用。

强烈建议不要使用0666,因为服务器上的其他用户可以写入您的文件,但在某些配置中,这是唯一的方法。

【讨论】:

  • @hacen 那么没有系统管理员的帮助可能无法修复。
【解决方案2】:

发生的情况是 HTTP 服务器由一个名为“nobody”的用户运行,而您的 FTP 用户是另一个用户。上传时,HTTP 服务器会在其用户名下创建文件,而您的 FTP 用户无权写入(或删除)这些文件。

解决此问题的最简单方法(但不是很安全)是将两个用户添加到同一个组中,并更改文件权限以允许同一组的用户读取/写入这些文件。

您的管理员应该处理它,但您必须调用 chmod() 来更改上传文件的权限。

更好地解释它:

linux/unix文件权限由用户(u)、组(g)和其他(o)权限组成。 我将在这里只介绍 3 种类型的文件权限,它们是读取 (r)、写入 (w) 和执行 (x)。所以,你最终会得到这样的东西:

-rw-rw---x   1 jweyrich  staff  12288 Oct 24 00:22 avatar.png
  • 第一个 rw- 是拥有文件 (jweyrich) 的 USER 的权限(读/写)。
  • 第二个 rw- 是拥有该文件的 GROUP(员工)的权限(读/写)。
  • 末尾的 --x 是 OTHERS 用户的权限(执行)..

您的 PHP 脚本以“nobody”用户身份运行(假设是“nobody”组),因此您从 PHP 创建的每个文件都将归“nobody”用户(和他的组)所有。用户可以是一个或多个组的一部分。

要解决权限问题,您的 FTP 用户和“nobody”必须在 common 组中,假设管理员将您的用户放在“nobody”中。 一旦他们在同一个组中,您的 PHP 脚本必须向“nobody”组成员授予“rw”(读/写)权限。这样做:

chmod("path_to_your_file", 0770);

0770 等价于 "u+rwx,g+rwx,o-rwx" ,我在这里解释一下:

  • u+rwx = 为用户(所有者,即“nobody”),授予读/写/执行权限
  • u+rwx = 对于组(也就是“nobody”),授予读/写/执行权限
  • o-rxw = 对于其他人,删除读/写/执行权限

之后,您的 FTP 用户(现在属于“nobody”组)将对上传的文件拥有读//写权限,因此也可以删除这些文件。它看起来像这样:

-rwxrwx---   1 nobody  nobody  12288 Oct 24 00:22 avatar.png

这不是对 unix 文件权限的理想介绍,但我希望这会有所帮助。

【讨论】:

  • 你能详细解释一下我要做什么
  • 添加了文件权限的说明。
  • 您提到了解决这个问题的最简单方法,但最正确(/安全)的方法是什么?
  • @JP:IMO,最正确和最安全的方法是为每个网站创建一个唯一的用户帐户,然后为每个网站配置一个虚拟主机,使其运行解释器(在本例中为 php ) 在相应的用户 (Apache documentation) 下。 FTP 应该利用相同的用户,因此不需要更改上传文件的权限。此外,考虑 chroot 两个守护进程 (example with Apache)。
猜你喜欢
  • 1970-01-01
  • 2020-01-11
  • 2021-07-09
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
  • 2022-07-23
  • 1970-01-01
  • 2013-06-09
相关资源
最近更新 更多