2013-11-20 66 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是相當不錯的。