在Symfony2的权限问题(Permissions issues on Symfony2)

2019-06-26 07:17发布

这个问题已经被问了几次,但没有解决方案的修复它在我的处境。

我在Mac OSX狮子运行Apache。 该http://localhost/Symfony/web/config.php URL触发2个主要问题:

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.

继指南 “设置权限”下:

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

那也不行。 任何想法如何解决这一问题?

Answer 1:

一些初步的解释:

  • 为了提高网站的性能,Symfony2的需要缓存大量的数据,并通过编写编译后的文件到您做到这一点app/cache目录。
  • 为了提出强有力的调试和监控设施,Symfony2中需要跟踪你的网站上的行为,并通过编写跟踪文件到您做到这一点app/logs目录。

关于Apache的一些话:

  • Apache的一个特定下运行user和特定group (通常是www-data两者,但你必须检查你的安装,找到使用的。例如,如果你在搜索/etc/apache2/envvars在Linux中,你会有两个变量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文件夹无法写入Apache的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 

    您正在修改的访问控制列表(ACL) app/cacheapp/logs ,以授予某些权限的文件夹whoami (基本上你)和_www 。 这种方法不工作,可以有两种来源:

    1. 您修改ACL,但你的内核和文件系统配置要考虑到的ACL?

    2. 你是给一些权限whoami_www ,但你检查你的Apache实例,这些用户中的一个下运行?

  • 第三你的同事通过执行解决的问题:

     sudo chmod -R 777 app/cache 

    这种方法适用的,因为两个原因:

    1. 你给你的系统(在所有权限(读取和写入),以每用户777 ),所以你一定至少你的Apache用户和组也有必要的权限来写app/cache
    2. 你这样做递归( -R ),因此所有在创建的嵌套的文件夹app/cache目录也由新的权限有关。

简单的解决方案:

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

     rm -rf app/cache/* rm -rf app/logs/* 
  2. 给所有权限(读取和写入)到您的app/cacheapp/logs文件夹:

     chmod 777 app/cache chmod 777 app/logs 

备注:

  • 还有其他的解决方案(具有更大的难度),如发放的允许特定的Apache用户和组,并使用访问控制列表进行微调。


Answer 2:

该指导下的“设置权限”说,如果你的系统不支持使用chmod +一个你必须这样做:

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

第一个解决方案为我工作。 我希望它可以帮助别人与同类型的问题。



Answer 3:

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



文章来源: Permissions issues on Symfony2