这个问题已经被问过很多次了,但是似乎没有一个答案能够回答我的具体问题 —— 要么就是我没有明白。
无论如何,根据标题,我试图将我们的 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 文件系统管理内置的访问控制机制,并采用默认权限:
user
(所有者)拥有rw
权利 --> 将其用于内容修改器,即开发环境中的开发人员、准备/生产中的发布工具group
有r
权限 --> 将其用于内容访问者(即 Web 服务器、后端应用程序等...),确保所有这些都属于group
特殊情况,如 Web 服务器/应用程序需要写入权限的目录(如上传目录),可通过向此目录添加w
forgroup
权限来做出例外(或通过将此特定目录设为所有者来将此目录锁定给其他任何人group
)
现在,要自动使新文件可供 Web 服务器/应用程序读取,您可以使用setgid
文件系统权限中的标志。这将自动将任何添加文件的组更改为group
。
总结
这是一个简单的例子,可以总结一下:
您的 Web 服务器和任何后端应用程序都属于该www-data
组。
您/srv/www/
在两个环境中拥有 Web 根:
- 开发,拥有所有者
dev:www-data
和权利 4755rwxr-sr-x
- 生产,拥有所有者
git:www-data
和权利 4755rwxr-sr-w
要更新开发中的内容,请使用该dev
帐户或任何使用该用户的工具。
要更新生产中的内容,请使用正确配置的 git 工具,使用用户将数据推送到正确的位置git
。