什么是正确的所有权&生产的CakePHP app / tmp文件夹的权限?

时间:2013-09-19 15:33:36

标签: cakephp permissions production-environment

我想知道以下问题的答案和解释:

  1. 哪个用户/组应该拥有蛋糕文件?

  2. 如果不同,哪个用户/组应拥有app/tmp文件夹? (和子文件夹)

  3. 使用正确的用户/组,文件夹和文件的生产的正确权限是什么? (如果设置正确,也应该用于开发)

  4. 在哪里完成上传文件的存储以及需要为该文件夹设置的所有权/权限。它应该相对于app/

  5. 我知道777修复了错误,但我想正确设置它。

    我听说如果一切正确设置,660应该足以生产。

    谁需要read访问权限,谁需要write访问权限,是否有人需要execute

2 个答案:

答案 0 :(得分:20)

注意:我想我找到了答案,因为没有人写好答案,我会写出来。如果你对这个主题更了解并看到错误或安全问题,请告诉我,我将纠正他们。


1)CakePHP所有权

CakePHP文件应由您(机器的用户)(无论您何时登录)拥有。 没有root作为所有者!

OSX: johnsmith的{​​{1}}部分

Linux: /Users/johnsmith

johnsmith部分

2)app / tmp所有权。

根据CakePHP documentation

  

...确保你的目录app / tmp及其所有子目录   蛋糕安装可由Web服务器用户写入。

选项1:

用户所有者需要是apache的用户。组所有者可以是您所属的组,因此您还可以通过finder / CLI访问此文件夹。 没有/home/johnsmith作为所有者!

OSX:最近在OSX上预装了Apache,而apache的默认用户是root。但是,如果您不确定在apache运行时键入终端_www可以找到它。最后一行是您刚输入的命令,因此请在上面查看。

现在您已了解您的apache用户,您必须将其分配给ps aux | grep httpd。您可以使用以下命令执行此操作:app/tmp/

Linux: Linux上的默认用户通常是sudo chown -R _www app/tmp/,群组为www-data。如果您不确定,请使用www-data查找用户,并ps aux | grep httpd将所有权分配给该文件夹的apache。

选项2:

您可以将自己保留为用户所有者,但将组所有者设置为apache所属的组。默认情况下,apache拥有自己的组,但您可以创建一个新组并为其添加apache。

OSX:默认情况下,OSX上的apache组与用户相同:sudo chown -R _www app/tmp/。然后,您必须运行以下命令来获取所有权:_www。现在,如果您使用sudo chown -R :_www app/tmp/检查权限,则应该会看到您的用户名(ls -l)和新的群组所有者 - johnsmith

Linux:* 默认情况下,apache组为_www,因此请使用相同的命令更改所有权:www-data

注意:Debian / Ubuntu使用sudo chown -R :www-data app/tmp/,而CentOS使用www-data


3)权限

要运行该网站,apache需要apacheread而不需要write。您可以访问它(假设您在拥有execute的群组中),如果您要使用终端/查找程序手动编辑内容,则还需要app/tmpread。所有其他用户都没有任何权利。所以:

OSX& Linux: writesudo chmod -R 660 app/tmp/部分是为所有内部文件夹递归执行的。第一个-R适用于用户所有者(OSX:6或Linux:_www),第二个www-data适用于群组所有者(OSX:6或Linux:staff),johnsmith适用于所有其他用户/来宾。

注意:根据this pull request对于CakePHP,看起来CakePHP 2.4将能够在0中创建子文件夹,这意味着它需要app/tmp/代替7用户现在变为6


4)上传文件夹

如果您要上传文件,则需要为760文件夹或上传的任何位置设置类似的设置。所有权将相同,但权限需要具有重命名和文件夹创建的执行权限。所以以前的img/uploads现在应该是660。另外,理想情况下,上传超出760目录,需要绝对路径。

答案 1 :(得分:1)

对于app/tmp和子文件夹you only need rw for the web server process中的所有文件,如果需要使用CLI,则为控制台用户。

如果某人使用具有超级权限或位于错误组的用户运行控制台命令,则会使事情变得混乱,因为创建的内容无法从另一个读取或写入,然后会出现警告或失败消息。有些人(包括我在我太懒的时候)用777修复了这个问题:)