我正在使用Laravel,每当日志或缓存写入存储文件夹时,它都会授予755权限,并将所有者创建为daemon
。我已多次运行sudo chown -R username:username app/storage
和sudo chmod -R 775 app/storage
。我甚至已将username
添加到群组daemon
,将daemon
添加到群组username
。
但是,它仍然将文件写为daemon
,并且具有755权限,这意味着username
无法写入。
我做错了什么?
答案 0 :(得分:2)
这一次也困扰了我一段时间,但我太忙了,无法找到解决方案。你的问题让我有动力解决它。我found the answer on Stack Overflow。
简而言之,解决方案是更改Apache进程的umask
。上面的链接提到了两个可能的地方进行更改:您将umask 002
添加到
/etc/init.d/apache2
/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
解决方案起作用,这是另一种方法。
答案 1 :(得分:0)
在这种情况下,Apache没有做错任何事情。 Apache根据其配置文件中的User
和Group
设置读取和写入文件。有问题的配置文件类似/etc/httpd/conf/httpd.conf
,但位置和名称根据您使用的系统而有所不同。
值得注意的是,如果您将PHP作为FastCGI之类的东西运行,那么它将使用FastCGI设置使用的用户,因为它是修改和创建文件的位,而不是Apache。