git:如何最好地在“后端服务器”上设置用户模型

时间:2011-05-04 17:43:20

标签: git

我对用户模型有一个非常具体的问题。 (我猜这个问题会背叛我的无知,但是嘿,我只是想知道!)

我有一个简单的Ubuntu服务器,它将保存我们的项目存储库,大约6个人将从中克隆项目。每个人在此主机上都有自己的用户帐户。项目存储库位于 /home/git/project-name.git 路径上。我可以设置一个组来保护这些用户和git用户。

当开发人员用户推送到这个远程存储库时,我不希望他们以同一个用户(比如用户' git'或其他东西)完成所有工作,因为我想知道谁做了什么。

如果我让每个人都将id_rsa.pub.name键放到路径 /home/git/.ssh / 上,那么将自己添加到* / home / git / .ssh / authorized_keys *,我不会发现谁做了什么,对吗?

因此,我是否授予开发者用户帐户所属的每个组 /home/git/project-name.git 的完全访问权限?

任何建议都会受到热烈欢迎。

谢谢, 拉斯

4 个答案:

答案 0 :(得分:5)

我建议使用 Gitolite 进行细粒度授权,而不是Gitosis,而不是基于ssh的身份验证。

答案 1 :(得分:3)

一般做法是拥有一个帐户,而不是为每个想要推送回购的人提供多个ssh帐户。

http://progit.org/book/ch4-4.html

http://blog.felipebalbi.com/2008/01/03/git-push-and-ssh-keys/

这并没有消除你知道谁犯了什么的能力。作者/提交者独立于ssh用户。

答案 2 :(得分:3)

我建议您使用Gitolitedownload)之类的内容,以便您可以选择有权访问的内容。你设置了一个每个人都用于Git推送的“git”用户。 Git本身跟踪谁做了什么承诺,所以你不应该失去它。

答案 3 :(得分:2)

让多个用户写入存储库并不意味着您将能够确定“谁做了什么”。

确实,创建特定对象(blob,tree,commit,annotated tag)的第一个(服务器本地)用户将是对象的松散目标文件的所有者(尽管任何其他具有写访问权限的用户都可能删除并重写文件),但最终这些松散的目标文件是短暂的。个别松散物体最终将被打包和删除(例如,通过git gc,手动或自动累积松散物体后自动删除。

Git既不进行身份验证,也不进行授权,因此不知道正在执行push 1 的“用户”。由于它没有活动用户的概念,因此无法提供“谁推送/修改/删除了什么”的日志。如果您需要这样的audit log,您将不得不依赖于实际进行身份验证的任何工具。不幸的是,许多Git托管工具专注于Git的分布式特性,因此他们往往不会像审计日志那样为“集中式”功能提供太多支持。但是有一些例外:

  • Gitolite会保留一个可用作审核日志的日志(验证由SSH服务器或HTTP服务器完成,但Gitolite会授权)。
  • Gerrit似乎有一些内置限制,试图更强烈地将提交者(和作者,取决于配置)用户信息与经过身份验证的用户帐户相关联(请参阅Forge Identity);虽然这不是审计日志,但如果您始终限制“伪造”权限,则可能就足够了。

(可能还有其他工具或服务具有一些日志记录/限制功能。)

另请参阅:Git Log History

1 Git会跟踪每个提交的作者和提交者(每个带注释的标记的标记),但它们的值不受Git限制。任何人都可以通过更改(或覆盖)他们的user.emailuser.name配置变量,或者在提交或标记时设置GIT_AUTHOR_NAME,GIT_AUTHOR_EMAIL,GIT_COMMITTER_NAME和GIT_COMMITTER_EMAIL环境变量来更改有效的作者或提交者。