在我的服务器上,我设置了多个用于不同目的的用户帐户,以将我的个人网站与我的半专业网站分开。
其中一些网站是 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
我猜这里的小组有影响力。
为此,我更喜欢使用 ACL。例如:
授予
www-data
用户对上传目录及其下所有内容的完全访问权限。www-data可以执行父目录吗?尝试 su - 到 www-data 用户,cd 到目录并触摸一个文件。如果您无法 cd 到目录,请尝试从 / 逐步更改目录。如果您的文件系统是使用该选项挂载的,ACL 也将起作用。
我讨厌回答自己的问题,因为感觉我浪费了大家的时间。
问题确实与我的用户和组设置为
luke wheel
. 将其更改为luke luke
with achown -R luke:luke uploads
和 achmod -R g+w /home/luke/www.luke.com/uploads
之后,一切似乎都有效。