新创建的文件忽略 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 上阅读的答案持保留态度。
我对 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 上阅读的答案持保留态度。