您的位置:首页 > 其它

Gitolite 构建 Git 服务器的权限管理

2012-05-11 16:41 423 查看
参考资料:
http://www.ossxp.com/doc/git/gitolite.html

架设环境debian squeeze,所有安装软件均为debian源上自带。

主要参考文献:

1、蒋鑫作品http://www.ossxp.com/doc/git/gitolite.html (堪称中文入门手册)

2、Gitolite自带文档https://github.com/sitaramc/gitolite/tree/master/doc (仔细阅读自带文档,会帮助解决细节问题)

3、Gitolite WIKI http://sitaramc.github.com/gitolite/
Gitolite安装:

1、安装软件

sudo apt-get install gitolite git-core

2、产生G管理员的ssh key

确定某个账号,可以是server上的账号,也可以是某个客户端的账号,但是只能是唯一的。

在该账号下,用ssh-keygen产生ssh key。

在终端下运行ssh-keygen,默认在~/.ssh下产生文件 id_rsa.pub。

将这个文件放到服务器/tmp/下,命名为admin.pub。

2、建立git专用账号

sudo adduser --system
--shell /bin/bash --group git

sudo adduser git ssh

sudo passwd git

以后上传下载工作都通过该账号进行,但是不直接使用该账号登陆,而是通过ssh key的认证。原理见文献1。

3、建立Gitolite仓库

su git进入git账号

gl-setup /tmp/admin.pub以admin.pub的账号为管理员,建立Gitolite仓库。

这时会在git账号下产生repositories目录,下面有两个子目录gitolite-admin.git和testing.git

4、初涉Gitolite管理

在G管理员账号下,运行 git clone git@server_ip:gitolite_admin.git

这样在G管理员帐号下,就有一个gitolite_admin的文件夹,里面是管理gitolite仓库的配置文件和Key文件。

增加用户:

将某人的ssh key文件abc.pub,复制到gitolite_admin/Keydir下;

然后 git add Keydir/abc.pub

git commit -m 'add abc'

git push origin master

这样就添加好了abc用户。

Gitolite是管理git用户的,但Gitolite本身又是通过git来操作的。很有意思吧!

相信删除的方法不用我讲了吧!

配置用户权限:

Gitolite是用来管理用户行为的,这个有conf/gitolite.conf完成。

下面所有例子来自参考文献1。由于个别地方已不适用,所以稍作修改。

下面我们看一个简单的授权文件:

1   @admin = jiangxin wangsheng

2

3   repo gitolite-admin

4       RW+                 = jiangxin

5

6   repo ossxp/..*

7       C                   = @admin

8       RW                  = @all

9

10  repo testing

11      RW+                         =   @admin

12      RW      master              =   junio

13      RW+     pu                  =   junio

14      RW      cogito$             =   pasky

15      RW      bw/                 =   linus

16      -                           =   somebody

17      RW      tmp/                =   @all

18      RW      refs/tags/v[0-9]    =   junio


在上面的示例中,我们演示了很多授权指令。

第1行,定义了用户组 @admin,包含两个用户 jiangxin 和 wangsheng。

第3-4行,定义了版本库 gitolite-admin。并指定只有用户 jiangxin 才能够访问,并拥有读(R)写(W)和强制更新(+)的权限。

第6行,通过正则表达式定义了一组版本库,即在 ossxp/ 目录下的所有版本库。

第7行,用户组 @admin 中的用户,可以在 ossxp/ 目录下创建版本库。

创建版本库的用户,具有对版本库操作的所有权限。

第8行,所有用户都可以读写 ossxp 目录下的版本库,但不能强制更新。

(注意:RW和C分开两行是指软件仓库的权限,RWC在一行是分支的权限。见gitolite文档wildcard-repositories.mkd)

第9行开始,定义的 testing 版本库授权使用了引用授权语法。

第11行,用户组 @admin 对所有的分支和里程碑拥有读写、重置、添加和删除的授权。

第12行,用户 junio 可以读写 master 分支。(还包括名字以 master 开头的其他分支,如果有的话)。

第13行,用户 junio 可以读写、强制更新、创建以及删除 pu 开头的分支。

第14行,用户 pasky 可以读写 cogito 分支。 (仅此分支,精确匹配)。

5、添加版本库

a、建一个空版本库

只需要在conf/gitolite.conf中添加一个规则,比如

repo work1

RW+=@all

这样gitolite就会自动创建一个空的版本库。

b、上传已有版本库

如上面的例子第6~8行中设定的规则,可以由admin(或指定其他账号),在指定目录下上传版本库。

在本机的版本库下执行:

git remote add r-server git@server_ip:ossxp/repo.git

git push r-server master

即推送完成。

6、高级管理

在4里,提到了大部分权限管理的情况。如果还不够用,就要进入通配符授权:

a、用户私有版本库

授权文件如下:

1  @administrators = jiangxin admin

2

3  repo users/CREATOR/.+$

4      C = @all

5      R = @administrators


说明:用户可以在自己的名字空间( /users/<userid>/ )下,自己创建版本库。

CREATOR是所有用户的通配符。创建者对版本库有最高权限,其他人只有读权限(当然可以另外设置)。

b、用户私有分支

授权文件:
repo test/repo4
RW+   dev/USER/  	= @all
RW+   master 	= @dev


说明:

所有用户都可以在 refs/heads/dev/<userid>/ (自己的名字空间)下创建、删除分支。但是不能修改其他人的分支。
用户组 @dev 中的用户,对 master 分支具有读写和强制更新的权限,但是不能删除。

更改好配置文件后,同样适用git的方法,push到server上去。

7、Gitweb

上述操作的结果都没有直观的显示,这对将来的用户会造成一定的了解障碍。

这个障碍可以通过Gitweb来克服。Gitweb是一个网页前端,它的工作就是将git仓库的内容用网页形式展现出来。(如git.kernel.org上密密麻麻的仓库与分支)

这样开发者会更清楚地知道,去找自己需要的东西。

1、安装软件

sudo apt-get install gitweb

2、修改/etc/gitweb.conf

$projectroot = "/data/git-repo" <-- 此处应该是gitolite仓库的位置。我将之前git账号下的repositories移出来了,然后做了个链接回去(ln -s /data/git-repo /home/git/repositories)。

3、配置web

修改/etc/apache2/sites-available/default

我将原来的/var/www的内容换成了:

DocumentRoot /var/www

<Directory /var/www>

Options ExecCGI Indexes +FollowSymLinks MultiViews

Order allow,deny

Allow from all

AllowOverride all

AddHandler cgi-script cgi

DirectoryIndex gitweb.cgi

SetEnv GITWEB_CONFIG /etc/gitweb.conf

</Directory>

然后,在/var/www下执行

sudo ln -s /usr/share/gitweb/* .

sudo ln -s gitweb.cgi index.html

这样进入http://server-ip就可以看到类似git.kernel.org的东东了。

对了,别忘了修改仓库的权限(chmod a+x /data/git-repo -R)

4、将www-data加入git组
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: