gitlab、gitolite的权限管理是怎么运作,实现原理?


git分布式代码版本控制并没有太多的权限控制的功能,依赖的是系统的用户授权认证的方式。
对于团队协作管理来说依然不是很方便,因此有了gitlab、gitolite等对git改进、功能扩展的系统。

但对于他们是怎么实现的权限控制,这方面资料不是很多,不是很清楚。

登录认证方面,都是使用ssh的authorized_keys实现的对公用用户git的认证访问。
虽然限制了git用户的shell登录访问,但他是怎样做到对不同代码库的可见、可读的权限控制的呢?

gitlab

YuanL 10 years, 9 months ago

2年前用gitolite,当初也研究了下,按照我的理解说明下:
1、所有用户都利用git的账户,通过ssh连接git服务器,当你将keys推送到gitolite的admin仓库后,该仓库的钩子会自动将你的key加入到git用户的authorized_keys文件中,以允许连接;

2、git账户的登录shell,被接管了,当你试图通过shell来访问的时候,会直接显示你私钥的账号对应信息和拥有权限的仓库列表;

3、当你每次通过git指令与远程的git仓库通讯的时候,远程的git仓库部署有钩子程序(?),该程序会检测你对应的shell账号(账号是git,对应公钥解析出来有个用户名,权限配置在该用户名上),是否有权限执行该命令。

大致就是这样,主要利用ssh的自定义shell,还有git仓库可以配置钩子shell的机制。

天空中的人 answered 10 years, 9 months ago

http://gitolite.com/gitolite/how.html
看下官方在线slides 一目了然

我要神ID answered 10 years, 9 months ago

Gitlab 还不成熟的时候我在公司用 Gitolite 搭了一套服务,用了三年多了,挺好的,就是搭建起来比较累,坑也多,挺考验动手能力的,而且那一套管理操作也没有后来 Gitlab GUI 式的界面来的直观。

Anyway,你的问题当时我也研究过,Gitolite 的文档里有很多这方面的描述,你可以从这里开始 http://gitolite.com/gitolite/overview.html ,重点在第三节。

简言之,Gitolite 提供了一层 shell,插在 sshd git-receive-pack 的信道之间,它确保通过 ssh 发送给 git 的命令先要经过这层 shell 的鉴权。

起名字好烦 answered 10 years, 9 months ago

Your Answer