授予php权限以创建没有权限错误的文件

时间:2015-04-27 20:40:21

标签: php nginx ubuntu-14.04

在PHP中使用move_uploaded_file()函数时,我收到错误:

  

警告:move_uploaded_file(...):无法打开流:在...中拒绝权限

在我的服务器上,我拥有public_html权限,例如:

drwxr-sr-x 7 user www-data 4096 Apr 27 17:48 public_html

这是递归遍历目录的。

你有任何想法为什么这可能不起作用?或者我可以做些什么来帮助我找出为什么这不起作用。

系统

服务器实际上是一个集群,其中文件在NAS上,而php在集群上。我正在NAS的设备上执行所有权限命令,因为这是用户FTP所在的位置。

2 个答案:

答案 0 :(得分:0)

首先,SUID和SGID仅在与可执行文件一起使用时才有意义。

来自http://www.codecoffee.com/tipsforlinux/articles/028.html

  

SUID(设置用户ID)位

     

[...]如果我有一个申请人,其所有者是' root'并且它设置了SUID位,然后当我以普通用户身份运行此应用程序时,该应用程序仍将以root身份运行。由于SUID位告诉Linux已为此应用程序设置了用户ID根,并且每当此应用程序执行时,它必须执行,就像root正在执行它一样(因为root拥有此文件)

     

SGID(设置组ID)位

     

就像SUID一样,设置文件的SGID位会在文件执行时将您的组ID设置为文件组。如果您拥有真正的多用户设置,用户可以访问其他文件,那么IT非常有用。作为一个单一的家庭用户,我还没有真正发现SGID的大量用途。但基本概念与SUID相同,其SGID位设置的文件将被用作属于该组而不是仅属于该用户。

因此,如果您的网络文件都不需要作为正常流程执行,那么最好不要单独留下SGID。

最后,如果您没有更改网络服务器的安全上下文,那么(很可能是,因为您没有提及任何路径)会尝试移动文件位于www-data目录中的只能读取。要移动文件,您需要对文件 并且 移动到的目录具有写访问权限。因此www-data应该访问

  1. 文件放在首位的目录(默认情况下为/tmp,在这种情况下无需执行任何操作)
  2. 目标目录,用于移动到目标目录。

答案 1 :(得分:0)

用户www-data无法写入public_html目录。在public_html上使用chmod来授予www-data写权限:

chmod 775 public_html -R