在我的服务器上,我设置了多个用于不同目的的用户帐户,以将我的个人网站与半专业网站分开。
其中一些网站是 Wordpress 网站,我正在尝试启用图像上传。主目录中的文件显然归该特定用户所有,但是,我已将 Apache (www-data) 添加到该用户的组中,因此理论上如果我提供一个目录及其内容,chmod -R g+w
那么该目录应该可由 Apache(和 PHP 进程)写入,对吗?
您可能明白,这不是当前正在发生的事情,我不确定如何实现这一点。我不想将所有文件分配给 www-data,然后将用户添加到 www-data 组。我认为文件首先应该属于用户,而 www-data 只有有限的权限。
修复和/或排除此故障的最佳方法是什么?
编辑:
感谢到目前为止的回复,我想指出的是,在我的开发机器(Ubuntu)上,我有完全相同的设置。Eclipse 项目存储在我的主目录的子目录中,只需在chmod -R g+w
所需目录上执行,我就可以让 Apache 下的 PHP 进程写入这些目录。我没有为此使用任何 ACL。
然而,由于某种原因,在我的服务器上这不起作用,这有点令人费解。
更新 2:
我的开发机器和服务器之间可能的区别在于,我的开发机器上的文件是这样的:
-rw-r--r-- 1 luke luke 34 2012-11-14 04:30 .some.file
在我的服务器上它看起来像这样:
-rw-r--r-- 1 luke wheel 34 2012-11-14 04:30 .some.file
我猜想这里的群体是有影响力的。
答案1
我更喜欢使用 ACL 来实现这一点。例如:
setfacl -R -m user:www-data:rwx,d:user:www-data:rwx \
/home/luke/www.luke.com/wp-content/uploads
授予www-data
用户对上传目录及其下的所有内容的完全访问权限。
答案2
www-data 可以执行父目录吗?尝试 su - 到 www-data 用户,cd 到目录并触摸文件。如果您无法 cd 到目录,请尝试从 / 逐步更改目录。如果您的文件系统使用该选项挂载,ACL 也将起作用。
答案3
我不喜欢回答自己的问题,因为感觉浪费了大家的时间。
问题确实与我的用户和组设置为有关luke wheel
。将其更改为和之后,luke luke
一切chown -R luke:luke uploads
似乎chmod -R g+w /home/luke/www.luke.com/uploads
都有效。