我已经被这个问题困扰了一个星期,浏览了各种网站,但似乎就是无法让它发挥作用。
我安装了 Apache2 和一个 Wordpress 网站,位于用户文件夹中/home/<user>/www
。
现在网站一切正常,但是从 Web 界面安装插件(以及任何其他需要写权限的操作 - 更改设置、上传媒体等)将无法工作,因为 wordpress(更像 apache)没有对这些文件的写权限。
目录/home/<user>/www
及其下的所有内容均属于用户和组<user>
。
我已经尝试了多种解决方案,但都不起作用,其中包括:
/home<user>/www
将的所有者更改为www-data:www-data
。好吧 - 老实说,我没有尝试这个解决方案,因为我不想要它。如果您对服务器上的所有用户执行此操作,他们将获得所有文件夹的访问权限,但他们只能访问他们的主文件夹,而不能访问其他文件夹。添加
www-data
到用户组。我认为这可能有效,但显然不行。www-data
用户确实在用户组中(使用 id 命令检查),但似乎仍然不起作用。在用户的主目录上设置 ACL。也这样做了,并授予了
www-data
对主目录的 rwx 访问权限,但这仍然没有帮助。
如果你有兴趣,该/home/<user>/
目录和其下的所有文件/目录都具有 775 权限。
答案1
好吧,经过不断的努力,我终于找到了一个适合我的解决方案。
这是我所做的:
假设我创建了一个名为 的新用户dummy
,他的主文件夹位于 ,/home/dummy
还有一个专用于他的网络演示的文件夹位于/home/dummy/www
。
- 用于将目录
sudo chgrp -R www-data /home/dummy/www
的组www
及其所有内容更改为www-data
(Apache 的 Web 访问默认用户)。 - 用于
sudo chmod -R g+wrxs /home/dummy/www
授予组www-data
对指定目录及其内容的写入、读取和执行权限。重要的这里的事情是s
部分。这确保组 (www-data
) 接管使用 s 参数在目录内创建的任何文件的所有权。
dummy
根本不需要将用户添加到任何组。
如果将来有人遇到与我同样的问题,希望这能有所帮助。
编辑:经过一些额外的测试,仅凭这一点似乎还不够。除了上面提到的两个步骤之外,您还需要通过添加到define('FS_METHOD', 'direct');
wordpress 配置文件中来明确告诉 wordpress 如何处理文件。
此外,如需更严格的权限设置,请参阅 DigitalOcean 的如何在 Ubuntu 上使用 LAMP 安装 WordPress指导。