上传文件Apache Web服务器的所有者

时间:2014-02-18 12:03:56

标签: php apache ubuntu web-deployment

我在处理网络服务器上传的文件时遇到了问题。

首先,用户“守护程序”将文件上传到临时服务器,然后由“www-data”用户将文件复制到www / myapp / files文件夹。一切正常,我可以读取和写入文件,但当我尝试删除文件时,我收到一个错误。因为我试图将文件删除为 www-data 用户(php脚本),但该文件的所有者是守护程序用户。

我的问题是如何解决这个问题?

我不是在寻找任何 chmod或chown 解决方案,我更喜欢通过Apache或其他配置文件的解决方案。

编辑: 作为请求的文件权限: -rw-r - r-- 1守护进程守护进程41638年1月19日08:59文件

父文件夹具有0777权限

2 个答案:

答案 0 :(得分:1)

您可以将这两个用户添加到一个组中,如下所示:

usermod -a -G groupName userName

然后为该组设置r \ w \ n权限

答案 1 :(得分:1)

避免假设

  

一切正常,我可以读写文件

这表示文件权限本身和所有权允许当前使用。如果你说apache作为www-data运行,它直接与此相矛盾:

  

请求文件权限:-rw-r - r-- 1守护进程守护进程41638 1月19日08:59文件

这意味着该文件无法写入www-data。

  

因为我试图将文件删除为www-data user(php脚本),但该文件的所有者是守护进程用户。

以上陈述不正确 - 文件的所有权不会影响谁可以删除它。

  

我不是在寻找任何chmod或chown解决方案,我更喜欢通过Apache或其他配置文件的解决方案。

在你做出选择之前不排除解决方案=)?

删除文件使用目录权限,而不是文件权限

这很容易验证:

-> pwd
/tmp/so
-> whoami
www-data
-> ls -la
total 8
dr-xr-xr-x 2 www-data www-data 4096 Feb 18 14:34 .
drwxrwxrwt 8 root     root     4096 Feb 18 14:36 ..
-rw-rw-r-- 1 www-data www-data    0 Feb 18 14:34 a-file
-> rm a-file 
rm: cannot remove `a-file': Permission denied

请注意,文件夹/ tmp / so没有写权限 - 这是唯一重要的权限。这是另一个existing answer as a supportive reference

因此,唯一的解决方案是确保尝试删除a-file的用户具有对包含文件夹的写入权限,这意味着例如:

# assuming daemon is the owner
chmod 7x7 www/myapp/files 
        ^ www-data is not the owner or in the group daemon - so world perms apply

或者

chown www-data:www-data www/myapp/files
chmod 7x7 www/myapp/files 
        ^ daemon needs write permission to the folder too

或者

chown www-data:sharedgroup www/myapp/files
chmod 77x www/myapp/files 
       ^ daemon now reads the group perm, www-data is the owner

(上传过程作为守护程序:sharedgroup运行)

以上是需要运行的一次性命令;之后,无需修改任何文件或文件夹的权限,以允许www-data和守护程序操作www/myapp/files中的文件。