我有一台 ubuntu 服务器 11.10,其中装有 apache 2.2.20、php 5.3.6 和 Joomla cms。我使用了一个额外的硬盘作为我的网络服务器存储,并将其安装到 /data/www/(我希望这不是我的问题所在!)。
我已将我的 Web 根目录中的所有文件和文件夹的权限设置为 755,并且它们的用户组设置为 [默认 ubuntu 用户(在我的情况下是 radio)]:www-data。
过去几天,我遇到了严重的问题,joomla 无法显示新上传的图片和其他文件,而且我无法安装任何扩展。经过几个小时的搜索,我发现上传的文件没有适当的权限(它们是 -rw-------),并且 Joomla 应用程序在上传后无法读取、复制或移动它们。
我想知道如何设置默认权限以便我上传的所有文件都能使用它?
附言:我已经测试过 umask,但它没有起作用。我认为这与我的问题无关。
答案1
你提到你尝试过 umask,但没有成功,但你的问题听起来确切地就像 umask 一样。也许你可以重新看一下?
您可能遇到过两个陷阱,它们可能导致您认为 umask 不是问题:
- 您需要更改上传文件的用户的 umask,大多数情况下在您自己的服务器(而不是共享主机)上,这将是 Web 服务器用户;
www-data
在 Ubuntu 上。 - 您必须在登录脚本或 apache 启动脚本中更改用户的 umask,只需在 SSH 会话中运行它不会影响任何内容,因为它仅在该会话中有效。
请注意,拥有 www-data 所拥有文件的组/世界读取权限是不好的 - 任何其他 Web 应用程序(基本上是服务器上的任何内容)将能够读取带有数据库密码的配置文件等内容。更好的解决方案是mod_suexec但是您必须在 CGI 模式和 Apache MPM 工作器中配置 PHP,这会更加复杂一些。
答案2
不了解 Joomla 或您可能在 VM 上处理的限制,但是类似这样的事情怎么样:
sudo chown -R www-data:www-data /data/www
sudo chmod -R g+rws /data/www
这会使用 chown 以递归方式将 user:group 设置为 www-data:www-data,而 chown 语句的 g+s 部分将确保任何获准用户写入的文件都保留所有者的组 (GUID)。r 和 w 是通常的读写权限。
这是我在 Ubuntu/Apache 上使用的方法,但我相信也可以对用户 (SUID) 执行相同操作。如果我的语法有误,也许其他人可以帮忙,但我相信类似这样的方法:
sudo chown -R www-data:www-data /data/www
sudo chmod -R ug+rws /data/www
将仅为用户和组设置读/写,并强制文件具有 www-data:www-data 用户:组。
但是,请仔细阅读 SUID 和 GUID,因为这样做会授予其他用户 www-data 的权限。另一个警告是,如果您的驱动器在安装时设置了 nosuid 标志,则上述操作均不起作用。
答案3
您是否尝试过 ACL(访问控制列表)?它们允许在特定目录中创建具有特定文件权限的文件。我认为它不如 umask 之类的东西那么全局,我认为 umask 是在全局级别设置的(如果我错了,请在下面的评论部分纠正我)。以下是指向一个答案的链接,该答案显示了如何在目录中设置访问控制列表https://stackoverflow.com/a/6550059/893659。