问题

问题

这个问题已经被问过很多次了,但是似乎没有一个答案能够回答我的具体问题 —— 要么就是我没有明白。

无论如何,根据标题,我试图将我们的 Web 开发人员限制到特定文件夹,例如:/var/www/site1.com并确保他们能够编辑最终属于的文件www-data

到目前为止,我已经设法通过为组中的用户向 sshd_config 附加匹配规则sftp并将用户 chrootingdev到他们的主目录(我mount --bind /var/www/site1.com/ /home/dev/site1.com和)来实现此目的chown -R dev:www-data /var/www/site1.com/
然后,我将所有文件 chmoded 为 644,并将需要写入的目录 chmoded 为 775。

到目前为止,此功能运行正常,但通过网站本身上传的文件除外,/var/www/site1.com/public_html/uploads/因为dev这些文件一旦由网站访问者上传,就最终属于用户www-data

我想我可以添加一个 cron 来定期更改权限,但肯定有更好的方法来完成我想要完成的事情?

Web 服务器是 Ubuntu 14.04 上带有 php5-fpm 的 Nginx。

谢谢!

答案1

问题

对我来说,您的问题没有简单的解决方案:即使您推迟所有权变更,下次您想要编辑/维护文件时也需要再次交换两次。

这会导致出现双头环境:有时允许开发人员编辑内容,有时则不允许... 为什么会这样?如果是生产服务器,他们不应该将其用作游乐场;如果是开发服务器,他们绝对不应该被限制编辑内容!

建议的解决方案

我建议你需要重新考虑你的设置是如何构建的:

  • 使用只有自动发布工具(Git?rsync?)才有手段和访问权限来更改(发布)内容的生产环境
  • 使用开发人员乐于搞乱事情的开发环境
  • 此外,人们通常会使用“暂存”环境,在该环境中,测试内容用于模拟生产的设置,以确保一切正常,并在哪里运行模拟现实世界的测试

为了解决文件的多访问问题,我建议使用 Linux 文件系统管理内置的访问控制机制,并采用默认权限:

  1. user(所有者)拥有rw权利 --> 将其用于内容修改器,即开发环境中的开发人员、准备/生产中的发布工具
  2. groupr权限 --> 将其用于内容访问者(即 Web 服务器、后端应用程序等...),确保所有这些都属于group

特殊情况,如 Web 服务器/应用程序需要写入权限的目录(如上传目录),可通过向此目录添加wforgroup权限来做出例外(或通过将此特定目录设为所有者来将此目录锁定给其他任何人group

现在,要自动使新文件可供 Web 服务器/应用程序读取,您可以使用setgid文件系统权限中的标志。这将自动将任何添加文件的组更改为group

总结

这是一个简单的例子,可以总结一下:

您的 Web 服务器和任何后端应用程序都属于该www-data组。

/srv/www/在两个环境中拥有 Web 根:

  1. 开发,拥有所有者dev:www-data和权利 4755rwxr-sr-x
  2. 生产,拥有所有者git:www-data和权利 4755rwxr-sr-w

要更新开发中的内容,请使用该dev帐户或任何使用该用户的工具。

要更新生产中的内容,请使用正确配置的 git 工具,使用用户将数据推送到正确的位置git

相关内容