首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony 4 var目录的文件权限每次都会更改

Symfony 4 var目录的文件权限每次都会更改
EN

Stack Overflow用户
提问于 2019-01-27 23:39:32
回答 3查看 6.2K关注 0票数 5

我正在设置一个新的服务器并安装Ubuntu 18.04与Apache2..。我的项目存储在/var/www/project..。在apache2.conf我添加了

代码语言:javascript
复制
AllowOverride All
    Order Allow,Deny
    Allow from All

在我的虚拟主机文件中,我指向/var/www/project/public

当我转到我的服务器的Ip地址时,我看到我的项目,一切都正常,除了一件事:

php bin/console cache:clear每当我使用以下命令清除缓存时

php bin/console cache:clear我的目录的权限var被搞乱了,这会导致生产环境中的错误。

我可以用以下命令来解决这个问题:

代码语言:javascript
复制
chmod -R 777 var/

但当我再次清除缓存时,问题又回来了。我尝试了不同的用户,包括root,但总是相同的问题。我不明白是什么导致了这一点。在文档关于文件权限,它说:

在Symfony3.x,你需要做一些额外的工作来确保你的缓存目录是可写的。但这不再是真的了!在Symfony4,一切都是自动工作的。

嗯,对我来说不是,但是什么会导致这个问题呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-28 06:03:51

问题

缓存目录归执行cache:clear命令。

  • 假设您的项目文件的所有者是www-data..。
  • 使用root用户清除缓存
  • 缓存归root所有
  • www-data无法写入缓存目录

解决方案

执行缓存:清除使用拥有文件的用户。

  • 以www-data身份登录:su www-data -s /bin/bash
  • 清除缓存./bin/console cache:clear

根据您的设置,您的www-data用户可能不同

票数 9
EN

Stack Overflow用户

发布于 2019-05-16 17:38:02

对我有效的解决方案(使用Symfony 3.x和Ubuntu 18.04)是在官方网站上解释的,如下所示:

https://symfony.com/doc/3.4/setup/file_permissions.html#using-acl-on-a-system-that-supports-setfacl-linux-bsd

也许这个解决方案也适用于Symfony 4?

摘录:

3.在支持setfacl的系统上使用ACL (Linux/BSD)大多数Linux和BSD发行版不支持chmod +a,但支持另一个名为 setfacl..。您可能需要安装setfacl并启用ACL在使用磁盘分区之前,请先对其进行支持。然后,使用以下脚本确定您的web服务器用户并授予所需的权限:

HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1)

sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var

sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var

注意:第一个setfacl命令设置未来文件和文件夹的权限,而第二个命令设置现有文件和文件夹的权限。这两个命令都为system用户和Apache用户分配权限。setfacl在NFS装载点上不可用。但是,出于性能原因,强烈建议不要通过NFS存储缓存和日志。

个人提示:

sudo apt-get install setfaclmay说“找不到setfacl”。

如果是这样的话:

检查setfacl是否存在:setfacl -h

setfacl是acl 包,所以安装acl如果错过

票数 3
EN

Stack Overflow用户

发布于 2021-02-26 17:42:17

我花了相当长的时间来解决Symfony 4.4中的问题,这个问题只出现在PROD中,而没有出现在DEV中。然而,我仍然不知道PROD和DEV之间的区别是什么。至少它现在起作用了。

如果存在ACL,则中的第一个解决方案

https://symfony.com/doc/4.4/setup/file_permissions.html#permissions-required-by-symfony-applications应该行得通。我只是手动设置了

HTTPDUSER因为给定的代码返回了错误的代码。否则,在每个cache:clear也应该做到这一点:

代码语言:javascript
复制
sudo chown -R "$local_user":"$webserver_group" "$app_dir/var/"
sudo chmod -R 0777 "$app_dir/var/"

也许您必须先手动删除var/ bevore中的旧文件,方法是rm -rf var/*

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54389850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档