我已经在 Ubuntu 9.10 上安装了 Apache。
我已经安装了一个 Web 框架 (Symfony),它要求服务器能够:
在名为“cache”的文件夹下创建目录结构。如果缓存目录不存在,软件(可能在 apache 用户下)将尝试创建缓存文件夹和所需的子目录结构。
外部用户不应能够访问此文件夹 - 只有框架库本身才需要它
能够在名为 log 的子目录中创建文件
外部用户不应能够访问此文件夹 - 只有框架库本身才需要它
我的 /etc/apache2/sites-enabled/000-default 文件内容是:
<VirtualHost *:80>
ServerName testproject.localhost
DocumentRoot "/home/morpheous/work/websites/testproject/web"
DirectoryIndex index.php
<Directory "/home/morpheous/work/websites/testproject/web">
AllowOverride All
Allow from All
</Directory>
Alias /sf /lib/vendor/symfony/symfony-1.3.2/data/web/sf
<Directory "/lib/vendor/symfony/symfony-1.3.2/data/web/sf">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>
目前,当我尝试通过浏览器访问此页面时,我得到的是空白页。当我检查错误日志(/var/log/apache2/error.log)时,我看到以下错误:
[Fri Feb 19 14:05:01 2010] [error] [client 127.0.0.1] PHP Fatal error: Uncaught exception 'sfCacheException' with message 'Failed to make cache directory "/home/morpheous/work/websites/testproject/cache/frontend/dev/config" while generating cache for configuration file "config/config_handlers.yml".' ....
我对 Ubuntu(一般是 Linux)还比较陌生。我查看了文件夹属性(使用 sys admin GUI 工具),但是当我尝试将文件夹的组所有权更改为“www-data”(apache2 守护程序用户所属的组)时,我发现该组不在可以拥有“cache”文件夹所有权的组列表中。
更一般地说,我的 testproject 目录下可能有文件夹,我希望 apache2 守护进程可以访问这些文件夹,但不能被外部用户直接访问 - (例如包含数据库密码或特定下载等的文件),我该如何以这种方式明确管理对文件夹的访问?
在我看来,这是 linux 用户/组和 apache 配置的(相当混乱的)组合。如果有人能解释一下,我将不胜感激
向 apache 守护进程授予特定文件夹的 r|rw|rwx 权限,同时禁止外部用户访问该文件夹的常见问题
如何解决当前问题的具体问题是允许 apache 守护程序创建缓存文件夹(如果需要)和任何所需的子目录/文件,类似地,在 testproject/log 文件夹中创建日志文件。
[编辑]
卡尔:我在这里输入了我的评论,因为格式更好……
当我尝试在浏览器中访问该页面时,现在出现了 493 禁止页面。我检查了 apache 日志文件并看到此错误:
[2010 年 2 月 19 日星期五 17:23:33] [crit] [客户端 127.0.0.1] (13)权限被拒绝:/home/morpheous/work/websites/testproject/.htaccess pcfg_openfile:无法检查 htaccess 文件,请确保其可读
这是 web 文件夹的属性 drwxr-xr-x 16 morpheous morpheous 4096 2010-02-19 00:51 web
我怀疑 apache 守护进程用户无权访问 web 文件夹,这就是导致问题的原因。在这种情况下,这意味着我必须手动将组所有权(用于读取|写入访问)更改为 www-data,以便 apache 守护进程可以访问所有文件夹(这在直觉上是有道理的,但我只是想确认一下)
答案1
如果您无法更改文件夹上的组,请确保您是 root。除非您是所有者,否则您无法更改文件夹或文件的组和在组中,或者您是超级用户。
放弃管理 GUI 并打开 shell。(终端、xterm 等)
chgrp www-data /home/morpheous/work/websites/testproject
chmod 2770 /home/morpheous/work/websites/testproject
# Set mode rwxrws--- the '2' sets the 's' sticky bit,
# which causes all files and folders created in "project"
# to inherit the same group.
(这可能不是配置此特定应用程序的最佳方式,但我认为这是一个合理的猜测。我还建议将其移出您的主目录......这只会使尝试保持您的个人主目录安全变得复杂,同时让网络服务器有权写入其中的一部分。)
至于阻止 Apache 提供这些目录中的文件,这已经完成了……您的文档根目录定义为 project/web。这只允许访问该位置及以下的文件……日志和缓存文件夹已被排除。