我在处理网络服务器上传的文件时遇到了问题。
首先,用户“守护程序”将文件上传到临时服务器,然后由“www-data”用户将文件复制到www / myapp / files文件夹。一切正常,我可以读取和写入文件,但当我尝试删除文件时,我收到一个错误。因为我试图将文件删除为 www-data 用户(php脚本),但该文件的所有者是守护程序用户。
我的问题是如何解决这个问题?
我不是在寻找任何 chmod或chown 解决方案,我更喜欢通过Apache或其他配置文件的解决方案。
编辑: 作为请求的文件权限: -rw-r - r-- 1守护进程守护进程41638年1月19日08:59文件
父文件夹具有0777权限
答案 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
中的文件。