我已经在 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 守护程序用户所属的组)时,我发现组在可以拥有“缓存”文件夹的组列表中不可用。
更一般地说,我的 testproject 目录下可能有文件夹,我希望 apache2 守护进程可以访问,但外部用户不能直接访问这些文件夹 - (例如包含数据库密码的文件或特定下载等),如何以这种方式明确管理对文件夹的访问?
在我看来,它是 linux 用户/组以及 apache 配置的(相当混乱的)组合。如果有人能解释一下,我将不胜感激
向特定文件夹的 apache 守护进程授予 r|rw|rwx 权限的一般问题,同时禁止外部用户访问该文件夹
如何解决当前允许 apache 守护进程创建缓存文件夹(如果需要)和任何所需的子目录/文件的问题的具体问题,同样,在 testproject/log 文件夹中创建日志文件。
[编辑]
卡尔:我在这里输入了我对你的评论,因为有更好的格式......
当我尝试在浏览器中访问该页面时,我现在得到一个 493 禁止页面。我检查了 apache 日志文件并看到了这个错误:
[Fri Feb 19 17:23:33 2010] [crit] [client 127.0.0.1] (13)Permission denied: /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 守护进程可以访问的所有文件夹(这在直觉上是有意义的,但我'希望得到确认)