Symfony2上的权限问题

时间:2012-07-13 17:56:52

标签: symfony permissions

这个问题已被多次询问,但没有一个解决方案可以解决我的问题。

我在Mac OSX Lion上运行Apache。此http://localhost/Symfony/web/config.php网址会触发两个主要问题:

Change the permissions of the "app/cache/" directory so that the web server can write into it.
Change the permissions of the "app/logs/" directory so that the web server can write into it.

在“设置权限”下的guide之后:

rm -rf app/cache/*
rm -rf app/logs/*
sudo chmod +a "_www allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs

这不能解决问题,所以我尝试了:

sudo chmod -R 777 app/cache

这也不起作用。任何想法如何解决这个问题?

4 个答案:

答案 0 :(得分:50)

一些初步解释:

  • 为了提高网站的性能,Symfony2需要缓存大量数据,并将编译文件写入app/cache目录。
  • 为了提出强大的调试和监控功能,Symfony2需要跟踪您的网站行为,并通过将跟踪文件写入app/logs目录来实现此目的。

关于Apache的一些话:

  • Apache在特定的user和特定的group下运行(通常为www-data,但您必须检查安装以查找已使用的安装。例如,如果您搜索在Linux的/etc/apache2/envvars中,您将有两个变量APACHE_RUN_USER=www-dataAPACHE_RUN_GROUP=www-data)。
  • 这意味着当您在Symfony2肩膀上构建网站并在Apache下运行时,每次写入和读取都代表Apache usergroup 进行

分析您的问题:

  • 首先,您遇到以下错误:

    Change the permissions of the "app/cache/" directory so that the web server can write into it.
    Change the permissions of the "app/logs/" directory so that the web server can write into it.
    

    因为您的app/cacheapp/logs文件夹不能为您的usergroup写入。

  • 其次,执行:

    sudo chmod +a "_www allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
    sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
    

    您正在修改app/cacheapp/logs文件夹的访问控制列表(ACL),以便向whoami授予一些权限(基本上是您)并_www。 这种方法不起作用,可以有两个起源:

    1. 您正在修改ACL,但您的内核和文件系统是否已配置为考虑ACL?

    2. 您正在向whoami_www授予一些权限,但是您是否检查过您的Apache实例是否在其中一个用户下运行?

  • 第三,您的同事通过执行以下方式解决问题:

    sudo chmod -R 777 app/cache 
    

    这种方法有效,原因有两个:

    1. 您为系统上的每个用户(777)提供所有权限(读取和写入),因此您确信至少您的Apache用户和组还具有在{{1}中写入所需的权限}。
    2. 您以递归方式(app/cache)执行此操作,因此在-R目录中创建的所有嵌套文件夹也会受到新权限的关注。

简单的解决方案:

  1. 删除app/cacheapp/cache文件夹的内容:

    app/logs
  2. rm -rf app/cache/* rm -rf app/logs/* app/cache个文件夹授予所有权限(读取和写入):

    app/logs
  3. 说明:

    • 还有其他解决方案(难度更大),例如授予特定Apache用户和组的权限,以及使用ACL进行微调。

答案 1 :(得分:9)

“设置权限”下的guide表示如果您的系统不支持chmod + a,则必须执行此操作:

HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`

sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs

如果不起作用,请尝试:

umask(0002); // This will let the permissions be 0775

// or

umask(0000); // This will let the permissions be 0777

第一个解决方案适合我。我希望它可以帮助那些有同样问题的人。

答案 2 :(得分:1)

rm -rf app/cache/*
rm -rf app/logs/*


APACHEUSER=`ps aux | grep -E '[a]pache|[h]ttpd' | grep -v root | head -1 | cut -d\  -f1`
sudo setfacl -R -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs

Source: http://symfony.com/doc/current/book/installation.html#configuration-and-setup

答案 3 :(得分:0)

但是,在我的情况下(Centos 7和Symfony 4.3),即使在设置权限后,我仍然会收到错误。事实证明 SELinux 阻止了Apache。 以下对我有用(将my-project更改为您的Symfony安装文件夹)。

sudo chcon -R -t httpd_sys_script_rw_t /var/www/my-project/var/cache/
sudo chcon -R -t httpd_sys_script_rw_t /var/www/my-project/var/log/

您也可以在当前会话中暂时禁用SELinux,以隔离问题(我不建议在产品中使用此功能)

sudo setenforce 0

Credits