正确分配权限和组

正确分配权限和组

所以我的 nginx 正在使用www-data:www-data,并且我想通过 sftp 使用 Beanstalk 正确地将文件部署到我的服务器。

因此我创建了一个名为的用户beanstalk并将他添加到www-data组中。

$ id beanstalk
uid=1000(beanstalk) gid=1000(beanstalk) groups=1000(beanstalk),33(www-data)

$ groups beanstalk
beanstalk : beanstalk www-data

现在我已经运行了一个生成subby.site.net并将其权限设置为755 www-data:www-data(EasyEngine)的脚本,我已准备好部署我的东西了,但是事情是这样的:

[email protected]:/var/www/subby.site.net.net$ ls -la
total 20
drwxr-sr-x  4 www-data www-data 4096 Nov 14 08:50 .
drwxrwsr-x 26 www-data www-data 4096 Nov 14 09:32 ..
drwxr-sr-x  5 www-data www-data 4096 Nov 14 08:50 htdocs
drwxr-sr-x  2 www-data www-data 4096 Nov 14 08:50 logs
-rw-r--r--  1 www-data www-data 3052 Nov 14 08:50 wp-config.php

[email protected]:/var/www/subby.site.net.net$ mkdir test
mkdir: cannot create directory ‘test’: Permission denied

如果我这样做sudo chmod 775 /var/www/subby.site.net,我可以使用beanstalk用户创建该测试目录,但我不认为 775 是设置 Web 服务器权限的正确方法,还是我错了?

答案1

beanstalk:www-data您的问题是,当您尝试访问您拥有的目录树时,您的 beanstalk 会与用户/组一起运行www-data:www-data(beanstalk 组在这里没用)。

由于用户beanstalk在那里没有权限(文件/目录归用户所有www-data,权限在组级别决定(文件/目录属于www-databeanstalk 所属的组)。也可能使用“其他”权限。

但是,当您755对目录使用权限时,“组”和“其他”权限为5,这意味着r-x。因此,您的 beanstalk 程序能够打开(执行)该目录并读取其内容……但不能在那里创建文件!

我认为您提供的 ACL 解决方案存在的问题是每次创建新文件/目录时都需要刷新这些 ACL。

使用 ext 文件系统本身的属性,您可以执行以下操作之一:

  • 让您的树拥有beanstalk:www-data默认权限:默认情况下,用户是唯一允许写入(755对于目录和644文件)的用户。由于您只需要 beanstalk 来执行此操作,所以没问题!nginx 和任何 Web 服务器程序通常只需要文件并浏览目录树,因此将它们作为 的一部分www-data就足够了。为了确保后续创建的目录自动具有 www-data 组,您可以setgid在现有目录上设置标志,这些目录已与所有者对一起设置beanstalk:www-data。现在创建的每个新文件/目录都将归beanstalk:www-data!所有!
  • 将组的写入权限添加到每个创建的目录。但是,再次,默认掩码将创建目录,755您需要手动转换为775... 如果您的 Web 内容目录树位于专用分区上,则可以更改默认权限掩码,使其为775,这是一个限制。另一个缺点是,现在属于该www-data组的每个应用程序都能够在目录树中写入数据... 其中包括 nginx,以及可能的任何后端应用程序。我发现允许他们“开放”权限很糟糕:想想当他们以某种方式被注入时,他们可以随意破坏/删除所有内容!

相关内容