2013-11-20 63 views
1

我正在合作项目,我们已经建立了一个git回购管理代码。它在我托管的服务器上,通过ssh共享(repo在/ srv/project上)。我发现分享推送访问权限的唯一方式是为每个人创建一个新用户,将他们添加到“项目”组中,并使该组的repo目录可写。分享(推送到)git回购没有给予写权限

这有一个缺点:如果我的队友中的任何一个决定ssh进入服务器和整个回购,我什么都做不了。并不是我不相信他们,而是“更安全而不是抱歉”(大型组织也必须为此问题提供解决方案)。

有没有办法授予推送功能但没有写入权限?

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

谢谢!

回答

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密钥进行验证,而不是密码。我从临Git的书,它详细真实解释这个例子:

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

如果您没有权限(一个共享的主机为例)修改用户帐户,您可以使用ssh与在~/.ssh/authorized_keys文件中的命令限制,这样的键:

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

这样,授权用户可以用SSH登录,但不是一个普通的外壳,它们将被限制在git-shell。这有点骇人听闻,如果你只需要更改/etc/passwd中的shell,那就更好了。

+0

太好了。我甚至可以为每个人创建两个用户,“john”和“john-git”,这样他们就可以以john-git的身份推送回购,但不能将其写为“john”。谢谢! – Guido

1

看一看gitolite。 Gitolite是一个访问控制层,它可以让你通过ssh服务git仓库而无需授予一般的shell访问权限,并为你提供限制谁可以推送到某些分支的功能。

如果你想要更多的图形,但自我托管的东西,GitLab是相当不错的。