【问题标题】:Newly created files ignore Linux ACL permissions新创建的文件忽略 Linux ACL 权限
【发布时间】:2021-08-02 08:57:51
【问题描述】:

我对 Linux ACL 有疑问。这是我的工作流程:

设置空目录的 ACL 权限:

sudo setfacl -Rdm g:www-data:rw /var/www/mysite/html/vendor/

更改目录:

cd /var/www/mysite/html/

安装作曲家包:

composer install

验证安装的文件权限:

ls -la vendor/

所有新创建的文件和文件夹都属于我的用户组,而不是应该属于www-data 组...

drwxrwxrwx+  3 john john    4096

我错过了什么?

注意:如果我的用户创建文件或目录,将应用正确的组权限。该问题仅发生在 composer 命令中。

【问题讨论】:

  • 没关系为什么它不起作用。这样做是个坏主意。 vendor 根本不应该被您的 Web PHP 进程写入。您尝试做的事情是错误的,所以很幸运您没有成功。
  • 为什么这是个问题?你有什么理由需要这个吗?也许 Composer 会自行调整权限?
  • @NicoHaase 好问题。我认为我需要这个,因为我的网络服务器无法提供 composer 生成的文件,因为它不拥有它们也不属于他们的组。安装软件包后,我总是遇到权限错误。我必须手动将所有文件添加到 www-data 组来修复它。
  • 请分享有关您所面临的错误消息的更多详细信息。通常,您永远不应该提供vendor 文件夹中的任何文件

标签: linux permissions composer-php


【解决方案1】:

我终于发现我做错了什么。我混淆了文件“所有权”和文件“权限”。

setfacl 用于为在目录中创建的文件设置默认“权限”。我真正需要的是设置默认的“所有权”。这是通过在正确设置目录组和用户所有权之后使用chmod 命令设置“setgid 标志”来完成的。

我希望我的项目目录中所有新创建的文件都属于用户“john”和组“www-data”。

chown -R john:www-data /srv/www/myproject

现在我们在目录上设置“setgid 标志”,所有新创建的文件都将属于john:www-data

chmod +s /srv/www/myproject

仅此而已,如果您正确设置了其他内容,那么在您提供的文件上设置 www-data 组绝对没有错。事实上,Stackoverflow 上与 Laravel 文件权限相关的投票最多的 anwser(800+ 点赞)推荐了这种确切的方法。那些不同意的人永远不会提供更好的工作解决方案。

总之,Unix 权限是一个复杂的话题。很少有人了解如何在生产服务器上正确设置权限,许多流利的程序员在涉及 Linux 时都是新手。对您在 SO 上阅读的答案持保留态度。

【讨论】:

    猜你喜欢
    • 2013-11-18
    • 1970-01-01
    • 2013-04-17
    • 2012-03-11
    • 2013-08-25
    • 2011-07-29
    • 2011-08-18
    • 2016-11-13
    • 1970-01-01
    相关资源
    最近更新 更多