分享(推送)git repo而不提供写入权限

时间:2013-11-20 23:08:33

标签: git encryption version-control permissions

我正在开展一个协作项目,我们已经设置了一个git仓库来管理代码。它位于我托管的服务器上,通过ssh共享(repo在/ srv / project上)。我发现与队友共享推送权限的唯一方法是为每个人创建一个新用户,将他们添加到“项目”组,并使该组可写的repo目录。

这有一个缺点:如果我的队友决定进入服务器并rm -rf整个回购,我对此无能为力。并不是我不相信他们,而是“更安全而不是抱歉”(大型组织也必须有解决方案)。

有没有办法授予推送功能但没有写烫发?

使用SSH是必须的。 GitHub也是不可接受的。

谢谢!

2 个答案:

答案 0 :(得分:1)

看看gitolite。 Gitolite是一个访问控制层,允许您通过ssh提供git存储库而不授予一般的shell访问权限,并为您提供限制谁可以推送到某些分支的功能。

如果你想要更具图形性但是自我托管的东西,GitLab非常好。

答案 1 :(得分:1)

您可以拥有一个专用帐户,例如用户名git,使用git-shell作为其shell而不是bash。也就是说,更改/etc/passwd中的帐户:

git:x:1000:1000::/home/git:/bin/sh

到此:

git:x:1000:1000::/home/git:/usr/bin/git-shell

还建议使用ssh密钥进行身份验证而不是密码。我从Pro Git书中拿到了这个例子,在那里有更详细的解释:

http://git-scm.com/book/en/Git-on-the-Server-Setting-Up-the-Server

如果您没有权限修改用户帐户(例如在共享主机上),则可以在~/.ssh/authorized_keys文件中使用带有命令限制的ssh密钥,如下所示:

command="perl -e 'exec qw(git-shell -c), $ENV{SSH_ORIGINAL_COMMAND}'",no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAAB...

这样授权用户可以使用ssh登录,但不是常规shell,而是限制为git-shell。这有点hackish,如果你可以在/etc/passwd更改shell,那就更好了。