我对用户模型有一个非常具体的问题。 (我猜这个问题会背叛我的无知,但是嘿,我只是想知道!)
我有一个简单的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 的完全访问权限?
任何建议都会受到热烈欢迎。
谢谢, 拉斯
答案 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)
答案 3 :(得分:2)
让多个用户写入存储库并不意味着您将能够确定“谁做了什么”。
确实,创建特定对象(blob,tree,commit,annotated tag)的第一个(服务器本地)用户将是对象的松散目标文件的所有者(尽管任何其他具有写访问权限的用户都可能删除并重写文件),但最终这些松散的目标文件是短暂的。个别松散物体最终将被打包和删除(例如,通过git gc
,手动或自动累积松散物体后自动删除。
Git既不进行身份验证,也不进行授权,因此不知道正在执行push 1 的“用户”。由于它没有活动用户的概念,因此无法提供“谁推送/修改/删除了什么”的日志。如果您需要这样的audit log,您将不得不依赖于实际进行身份验证的任何工具。不幸的是,许多Git托管工具专注于Git的分布式特性,因此他们往往不会像审计日志那样为“集中式”功能提供太多支持。但是有一些例外:
(可能还有其他工具或服务具有一些日志记录/限制功能。)
另请参阅:Git Log History
1
Git会跟踪每个提交的作者和提交者(每个带注释的标记的标记),但它们的值不受Git限制。任何人都可以通过更改(或覆盖)他们的user.email
和user.name
配置变量,或者在提交或标记时设置GIT_AUTHOR_NAME,GIT_AUTHOR_EMAIL,GIT_COMMITTER_NAME和GIT_COMMITTER_EMAIL环境变量来更改有效的作者或提交者。