所以我的 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-data
beanstalk 所属的组)。也可能使用“其他”权限。
但是,当您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,以及可能的任何后端应用程序。我发现允许他们“开放”权限很糟糕:想想当他们以某种方式被注入时,他们可以随意破坏/删除所有内容!