【问题标题】:Apache is not respecting my default permissions when writing filesApache 在写入文件时不尊重我的默认权限
【发布时间】:2014-05-03 14:58:11
【问题描述】:

我正在使用 Laravel,每当将日志或缓存写入存储文件夹时,它都会授予 755 权限,并将所有者创建为 daemon。我已经多次运行sudo chown -R username:username app/storagesudo chmod -R 775 app/storage。我什至在daemon 组中添加了username,在username 组中添加了daemon

但是,它仍然以daemon 的形式写入文件,并且具有755 权限,这意味着username 无法写入。

我做错了什么?

【问题讨论】:

  • 可能涉及umask?
  • 这不是在另一个 Laravel 项目中发生的,所以我不太确定。我完全傻眼了。我将如何检查 umask 是否实际上导致了这种情况?
  • 更改 httpd.conf 用户/组设置?
  • @AzizSaleh 我到底应该寻找什么?
  • Afaik,每当 Apache 写东西时,它都会将它们写在 httpd.conf 中指定的用户和组下。简单检查 User xGroup x 指令。

标签: php laravel permissions file-permissions chmod


【解决方案1】:

这个问题也困扰了我一段时间,但我太忙了,无法找到解决方案。你的问题让我有动力去解决它。我found the answer on Stack Overflow

简而言之,解决方法是改变Apache进程的umask。上面的链接提到了两个可能进行更改的地方:您将 umask 002 添加到

  1. /etc/init.d/apache2
  2. /etc/apache2/envvars (Debian/Ubuntu) 或 /etc/sysconfig/httpd (CentOS/Red Hat),或

编辑

我最近从 Ubuntu 12.04 32 位升级到 14.04 64 位,令我非常恼火的是,我无法让它工作。它适用于一些 PHP 脚本,但不适用于其他脚本 - 具体来说,我编写的一个简短的测试脚本运行良好,但 Laravel 缓存代码却没有。一位同事向我提出了另一个解决方案:bindfs

通过使用适当的用户映射将我的项目目录 (/var/www/project) 挂载到我的主目录 (~/project) 中,我的所有问题都得到了解决。这是我的fstab 条目:

/var/www/project  /home/username/project  fuse.bindfs  map=www-data/username:@www-data/@usergroup

现在我在 ~/project 工作 - 一切看起来都归 username:usergroup 所有,所有文件系统更改都像我拥有这些文件一样工作。但如果我ls -la /var/www/project/,一切都归www-data:www-data所有。

也许这是一个过于复杂的解决方案,但如果您无法让umask 解决方案发挥作用,这是另一种方法。

【讨论】:

    【解决方案2】:

    在这种情况下,Apache 没有做错任何事情。 Apache 根据其配置文件中的UserGroup 设置读取和写入文件。有问题的配置文件类似于/etc/httpd/conf/httpd.conf,但位置甚至名称因您使用的系统而异。

    同样值得注意的是,如果您将 PHP 作为 FastCGI 之类的东西运行,那么它将使用 FastCGI 设置使用的用户,因为那是修改和创建文件的位,而不是 Apache。

    【讨论】:

    • 这一切都在我的本地开发机器上,我没有运行 FastCGI。正如我在上面的cmets中所说,用户和组似乎不是问题,而是文件权限。它们被创建为 755,但我将整个存储目录更改为 775。我的用户是 daemon 组的一部分,因此最好使用 775。
    猜你喜欢
    • 2015-10-15
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2019-10-25
    • 2010-09-18
    • 2013-12-31
    相关资源
    最近更新 更多