FTP功能导致FTP中的所有者(99 99)?

时间:2010-04-09 12:27:07

标签: php joomla ftp file-ownership

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

我认为这是php的move_uploaded_file函数。

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

2 个答案:

答案 0 :(得分:3)

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

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

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

更好地解释:

linux / unix文件权限由用户(u),组(g)和其他(o)的权限组成。 这里我只介绍3种类型的文件权限,分别是read(r),write(w)和execute(x)。所以,你最终得到这样的东西:

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

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

要解决权限问题,您的FTP用户和“nobody”必须位于公共组中,假设管理员将您的用户置于“nobody”状态。 一旦他们在同一个组中,您的PHP脚本必须为“nobody”组成员提供“rw”(读/写)权限。为此:

chmod("path_to_your_file", 0770);

0770相当于“u + rwx,g + rwx,o-rwx”,我在这里解释:

  • u + rwx = for user(所有者,即“nobody”),提供读/写/执行权限
  • u + rwx = for group(也是“nobody”),提供读/写/执行权限
  • o-rxw =其他人,删除读/写/执行权限

之后,您的FTP用户(现在是“nobody”组的一部分)将具有对上载文件的读写权限,因此也可以删除这些文件。它看起来像这样:

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

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

答案 1 :(得分: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,因为服务器上的其他用户可能会写入您的文件,但在某些配置中,这是唯一的方法。