我的网站在带有 Gunicorn/nginx 的远程服务器上运行。 nginx 从 /var/www 目录运行,其所有者为 root:www-data
drwxrwxr-x 5 root www-data 4096 Apr 8 17:32 www
我在 /var/gitrepo 中还有一个裸 git 存储库,如下所示
drwxrwxr-x 7 django django 4096 Apr 8 23:20 gitrepo
django 用户是 sudo 组的成员,但不是 www-data 组的成员。服务器上没有其他用户具有登录 shell。
然后我在 /var/gitrepo/hooks/post-receive 中有 post-receive git hook,如下所示
#!/bin/sh
git --work-tree=/var/www --git-dir=/var/gitrepo checkout -f
想法是,当我git push ssh://django@<site_IP>:/var/gitrepo master
从笔记本电脑运行时,存储库被推送到 gitrepo 目录,然后 /var/www 将通过 post-receive 挂钩接收更新的文件。
上面的post-receive
钩子自然会失败,因为 django 用户没有权限在 /var/www 目录中创建目标目录。我能想到的一种解决方案是将 django 用户添加到 :www-data 组。这对安全有什么影响?我还可以让 django 成为 /var 和 /var/www 的所有者。但这对于 django 用户来说可能权限过多。
编辑:如果我将 django 用户添加到 www-data 组,那么新的 git repo 文件将正确复制到 /var/www 目录,并且网站可以正常工作。我只是不知道这是否会造成安全问题。
我应该怎么办?谢谢