【问题标题】:Permissions with Git Post-ReceiveGit Post-Receive 的权限
【发布时间】:2013-03-29 11:48:06
【问题描述】:

我已经在本地和我的服务器上设置了 git,并创建了一个“post-receive”,这样当我推送到实时服务器时,它应该检查到网站的虚拟主机目录。

#!/bin/sh
GIT_WORK_TREE=/var/www/domainname/public_html/ git checkout -f

但是,当我尝试进行推送时,它会成功退出主服务器,但尝试在服务器 Web 根目录上创建这些文件时出现权限被拒绝错误。

例如remote: error: unable to create file index.php (Permission denied)

由于我设置服务器的方式,这些错误对我来说实际上是有意义的。我禁用了 root 访问并创建了一个新用户,该用户通过 visudo 添加到 sudoers - 然后我为该用户设置了 SSH 密钥。我使用此用户将我的 git 更改推送到服务器。

我认为,问题是我连接到 push 的这个用户没有写入虚拟主机目录的权限。我在这些文件夹中的所有文件都归同一个组的 www-data(我的 nginx 用户)所有。

解决办法是什么?使用 SSH 密钥创建另一个用户以仅用于具有更高权限的 git 连接,或者有没有办法授予 post-receive sudo 之类的能力?

为这个冗长的问题道歉,但我想完全清楚我做了什么。

【问题讨论】:

    标签: git permissions vps


    【解决方案1】:

    如果您的存储库是使用--shared 选项创建的(请参阅“Change GIT repository to shared”),这将允许同一组 中的用户访问和写入。

    有什么方法可以将这些不同的用户分组到同一个组中?
    有点像“Git unable to create file permission denied”同组中提到的。
    或者sudo访问,在this question的cmets中解释,改变sudoers:

     git ALL = (root) NOPASSWD: /usr/local/sbin/prgetsimpleappscom 
    

    【讨论】:

    • 感谢您的回复。不过要明确一点,我在推送到服务器上的 repo 时没有问题,当 post-receive 尝试将文件复制到我遇到问题的 web 根目录时。那里的文件归 www-data 所有,以便网络服务器可以写入/正确运行它们。例如从管理员添加插件。
    • 此外,它是我用来使用 ssh 进行远程推送的用户,该用户无权复制和覆盖 Web 根目录中的文件。我觉得我忽略了一些明显的东西!
    • @bbish007 唯一可以帮助的(除了使用 sudo 权限执行命令)是该用户与 Web 根目录中的文件组位于同一组中。
    • 实际上最后一个链接中的某些内容可能已经确定了,将确认 asap.git ALL = (root) NOPASSWD: /usr/local/sbin/prgetsimpleappscom
    • 谢谢,是的,我已经尝试将用户添加到与 Web 根目录中的文件组相同的组中。在这种情况下,www-data,它似乎没有任何区别。
    猜你喜欢
    • 2013-04-14
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 2012-04-16
    • 2014-06-02
    • 2014-09-05
    相关资源
    最近更新 更多