【问题标题】:What are the right ownership & permissions to the CakePHP app/tmp folder for production?用于生产的 CakePHP app/tmp 文件夹的正确所有权和权限是什么?
【发布时间】:2013-09-19 15:33:35
【问题描述】:

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

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

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

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

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

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

我听说如果一切设置正确,660 对于生产来说应该绰绰有余。

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

【问题讨论】:

    标签: cakephp permissions production-environment


    【解决方案1】:

    注意:我想我已经找到了答案,由于没有人写出好的答案,我会写出来。如果您对该主题有更多的了解并看到错误或安全问题,请告诉我,我会改正的。


    1) CakePHP 所有权

    CakePHP 文件应该归您所有,即机器的用户(无论您使用什么登录)。 没有 root 作为所有者!

    OSX:johnsmith 的一部分 /Users/johnsmith

    Linux:johnsmith/home/johnsmith 部分


    2) 应用程序/tmp 所有权。

    根据 CakePHP documentation:

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

    选项 1:

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

    OSX: Apache 最近预装在 OSX 上,Apache 的默认用户是_www。但是,如果您不确定是否可以在 apache 运行时键入终端 ps aux | grep httpd 来找到它。最后一行是您刚刚键入的命令,因此请查看它的上方。

    现在您知道您的 apache 用户,您必须将其分配给 app/tmp/。您可以使用以下命令执行此操作:sudo chown -R _www app/tmp/

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

    选项 2:

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

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

    Linux:* 默认情况下,apache 组是www-data,所以使用相同的命令来更改所有权:sudo chown -R :www-data app/tmp/

    注意:Debian/Ubuntu 使用 www-data,而 CentOS 使用 apache


    3) 权限

    为了使站点运行,apache 需要 readwrite 而没有 execute。为了让您访问它(假设您在拥有app/tmp 的组中),如果您将使用终端/查找器手动编辑内容,您还需要readwrite。所有其他用户都不应拥有任何权利。所以:

    OSX&Linux: sudo chmod -R 660 app/tmp/-R 部分是对所有内部文件夹递归执行。第一个 6 用于用户所有者(OSX:_www 或 Linux:www-data),第二个 6 用于组所有者(OSX:staff 或 Linux:johnsmith),@ 987654360@ 适用于所有其他用户/访客。

    注意:根据 CakePHP 的 this pull request 看来,CakePHP 2.4 将能够在 app/tmp/ 中创建子文件夹,这意味着它需要 7 而不是 6,因为用户现在变成了 760


    4) 上传文件夹

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

    【讨论】:

    • 至少在 debian/ubuntu 中,Web 服务是 www-data 而不是 apache。此外,您似乎混淆了文件和文件夹的权限。要在 folder 中写入 directoryfile,您只需为该 folder 写入 w 而不是执行 @ 987654372@。执行意味着能够列出(ls)目录中的文件。
    • 对,apache 是针对 centOS 的,我会更新的。在执行方面,mkdir() 不需要x吗?
    • 嗯,是的,要清理一下,因为我打字太快而且结果错误,你确实需要x 才能在目录中获取inode,所以任何与读取有关的事情/create/rename/delete 文件 - 包括 mkdir,文件夹(和父文件夹)需要 x。尽管如此,cake 不会创建目录除非它们由于某种原因丢失(即项目 /tmp 文件夹没有正确创建骨架中的所有子文件夹)。所以app/tmp需要是770,文件660,递归。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-08-20
      • 1970-01-01
      • 2010-09-05
      • 2021-01-09
      • 2017-05-01
      • 2020-12-12
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      相关资源
      最近更新 更多