考虑一个托管多个 Git 存储库的服务器:
$ ls -l /opt/git/
drwxrwxr-x 7 ubuntu root 4096 Jan 2 2014 george.git
drwxrwxr-x 7 ubuntu root 4096 Dec 29 2013 john.git
drwxrwsr-x 7 ubuntu root 4096 Jul 4 2013 paul.git
drwxrwsr-x 7 ubuntu root 4096 Jun 30 2013 ringo.git
到目前为止,所有开发人员都可以通过 SSH 访问所有 Git 存储库。我现在要添加一个只能访问john.git
存储库的开发人员。我创建了一个 Linux 用户yoko
,但我不确定如何以最安全的方式让他yoko
访问/opt/git/john.git
目录,而不让他访问 中的其他目录/opt/git/
。
限制访问的规范方法是什么?
我倾向于创建john.git
as 组foobar
并将该组添加到用户yoko
的组中。但是,如果我稍后需要添加另一个可以访问两个存储库的用户,会发生什么情况?例如,我可能希望将具有和cynthia
访问权限的用户添加到。john.git
paul.git
我是否应该为每个 Git 存储库设立一个单独的组?我发现这很快就会变得难以处理
请注意,这些用户应该有权访问没有什么除了他们自己的/home/user/
目录之外,他们还可以访问他们被允许访问的 Git 存储库。如果有一种方法可以符号链接到 ie/home/yoko/john.git
以/opt/git/john.git
防止访问其余部分,/opt/git/
那就最好了,但我似乎无法这样配置系统。
服务器运行的是 Ubuntu Server 12.04,但如果有需要,我可能会将其更新到 14.04。用户使用 RSA 密钥通过 SSH 连接,无需密码。他们将在服务器上执行操作,仅此而已git pull
。git push
答案1
对于少量的存储库,组方法效果很好。是的,每个存储库都可能需要自己的组,如果您拥有更多存储库,它确实会变得笨重。正如@AlexeyTen 在评论中提到的那样,如果您拥有大量存储库,或者想要更“高级”的管理界面,您应该考虑使用 gitolite 或 gitlab 等存储库管理器。Gitolite 通过 git 存储库中的文本文件进行管理(配置文件和 SSH 密钥提交到特殊的 git 存储库并推送,并且一切都已配置)。另一方面,Gitlab 是一个一体化的 Web 应用程序,在概念上类似于自托管的 Github。如果您不需要所有的花哨功能,gitolite 几乎肯定会完美地完成工作。