Apache在编写文件时不尊重我的默认权限

时间:2014-03-25 16:07:44

标签: php laravel permissions file-permissions chmod

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

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

我做错了什么?

2 个答案:

答案 0 :(得分:2)

这一次也困扰了我一段时间,但我太忙了,无法找到解决方案。你的问题让我有动力解决它。我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),或
  3. 修改

    我最近从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解决方案起作用,这是另一种方法。

答案 1 :(得分:0)

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

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