新创建的文件忽略 Linux ACL 权限

Newly created files ignore Linux ACL permissions

我对 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 命令中。

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

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 组绝对没有错。事实上,Whosebug 上与 Laravel 文件权限相关的最受支持的答案(800+ upvote)推荐了这种确切的方法。那些不同意的人永远不会提供更好的工作解决方案。

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