我想知道以下问题的答案和解释:
哪个用户/组应该拥有蛋糕文件?
如果不同,哪个用户/组应拥有app/tmp
文件夹? (和子文件夹)
使用正确的用户/组,文件夹和文件的生产的正确权限是什么? (如果设置正确,也应该用于开发)
在哪里完成上传文件的存储以及需要为该文件夹设置的所有权/权限。它应该相对于app/
?
我知道777修复了错误,但我想正确设置它。
我听说如果一切正确设置,660应该足以生产。
谁需要read
访问权限,谁需要write
访问权限,是否有人需要execute
?
答案 0 :(得分:20)
注意:我想我找到了答案,因为没有人写好答案,我会写出来。如果你对这个主题更了解并看到错误或安全问题,请告诉我,我将纠正他们。
CakePHP文件应由您(机器的用户)(无论您何时登录)拥有。 没有root
作为所有者!
OSX: johnsmith
的{{1}}部分
Linux: /Users/johnsmith
johnsmith
部分
根据CakePHP documentation:
...确保你的目录app / tmp及其所有子目录 蛋糕安装可由Web服务器用户写入。
用户所有者需要是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。
您可以将自己保留为用户所有者,但将组所有者设置为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
。
要运行该网站,apache需要apache
和read
而不需要write
。您可以访问它(假设您在拥有execute
的群组中),如果您要使用终端/查找程序手动编辑内容,则还需要app/tmp
和read
。所有其他用户都没有任何权利。所以:
OSX& Linux: write
。 sudo 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
。
如果您要上传文件,则需要为760
文件夹或上传的任何位置设置类似的设置。所有权将相同,但权限需要具有重命名和文件夹创建的执行权限。所以以前的img/uploads
现在应该是660
。另外,理想情况下,上传超出760
目录,需要绝对路径。
答案 1 :(得分:1)
对于app/tmp
和子文件夹you only need rw
for the web server process中的所有文件,如果需要使用CLI,则为控制台用户。
如果某人使用具有超级权限或位于错误组的用户运行控制台命令,则会使事情变得混乱,因为创建的内容无法从另一个读取或写入,然后会出现警告或失败消息。有些人(包括我在我太懒的时候)用777
修复了这个问题:)