我已经建立了一个网络服务器,它将为多个客户托管网站,每个客户都有自己的用户,并且他们的网站文件将存在于其中/var/www
。
我们通过名为 DeployHQ 的服务部署代码,该服务使用客户端用户名通过 SSH 连接,因此当文件被推送到服务器时,它们是使用该客户端用户名和组创建的。
我遇到的问题是 Web 服务器用户www-data
无法更新文件,例如此.htaccess
文件:
4 -rw-rw-r-- 1 client_user client_user 945 Oct 30 12:07 .htaccess
我可以将文件组更改为www-data
,但是不会以这种方式创建部署的新文件,因此这不是一个长期的解决方案。
考虑到我希望每个客户端都有一个用户,有人可以推荐一种方法来允许www-data
客户端用户可以做任何事情吗?
我刚刚读了一些有关设置的内容Set-Group-ID
,这是我应该考虑的吗?
非常感谢
答案1
这可以通过在每个用户的目录上设置 SGID 位来实现。例如:
tom@tomh:~▶ mkdir testdir # Just an example dir
tom@tomh:~▶ sudo chgrp www-data testdir # Change the group
tom@tomh:~▶ touch testdir/before
tom@tomh:~▶ ls -la testdir/before # At the moment files have the default group 'tom'
-rw-rw-r-- 1 tom tom 0 Nov 5 11:04 testdir/before
tom@tomh:~▶ sudo chmod g+s testdir/ # Set the SGID bit on the dir
tom@tomh:~▶ touch testdir/after
tom@tomh:~▶ ls -la testdir/after # Files now have the same group as the dir
-rw-rw-r-- 1 tom www-data 0 Nov 5 11:04 testdir/after
请记住确保用户的 umask 也为文件设置了正确的组权限!