Git服务器Gitosis安装设置

Git服务器Gitosis安装设置

下载地址: https://github.com/res0nat0r/gitosis

把所有用户的公钥保存在 authorized_keys 文件的做法,只能凑和一阵子,当用户数量达到几百人的规模时,管理起来就会十分痛苦。每次改删用户都必须登录服务器不去说,这种做法还缺少必要的权限管理 — 每个人都对所有项目拥有完整的读写权限。

幸好我们还可以选择应用广泛的 Gitosis 项目。简单地说,Gitosis 就是一套用来管理 authorized_keys 文件和实现简单连接限制的脚本。有趣的是,用来添加用户和设定权限的并非通过网页程序,而只是管理一个特殊的 Git 仓库。你只需要在这个特殊仓库内做好相应的设定,然后推送到服务器上,Gitosis 就会随之改变运行策略,听起来就很酷,对吧?

Gitosis 的安装算不上傻瓜化,但也不算太难。用 Linux 服务器架设起来最简单 — 以下例子中,我们使用装有 Ubuntu 1404 系统的服务器。

1、安装python

Gitosis 的工作依赖于某些 Python 工具,所以首先要安装 Python 的 setuptools 包,在 Ubuntu 上称为 python-setuptools:

$ apt-get install python-setuptools

2、安装gitosis

接下来,从 Gitosis 项目主页克隆并安装:

git clone git://eagain.net/gitosis.git
cd gitosis
sudo python setup.py install
cp ~/.ssh/id_rsa.pub ./

3、配置

1)首先要生成一个ssh的公钥和私钥
sean@sean:~/git/gitosis$ sudo -H -u git gitosis-init < id_rsa.pub 
Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/

2)
sean@sean:~/git/gitosis$ sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

3)
sean@sean:~/git$ git clone git@192.168.1.31:gitosis-admin.git
Cloning into 'gitosis-admin'...
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 5 (delta 0), reused 5 (delta 0)
Receiving objects: 100% (5/5), done.
Checking connectivity... done.

4)
sean@sean:~/git$ 
sean@sean:~/git$ cd gitosis
gitosis/       gitosis-admin/ 
sean@sean:~/git$ cd gitosis-admin/
sean@sean:~/git/gitosis-admin$ ls
gitosis.conf  keydir
sean@sean:~/git/gitosis-admin$ 
sean@sean:~/git/gitosis-admin$ cat gitosis.conf 
[gitosis]

[group gitosis-admin]
members = sean@sztozed.net
writable = gitosis-admin
#readonly = gitosis-admin

sean@sean:~/git/gitosis-admin$ cat keydir/sean@sztozed.net.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzDoyVGN/E99GWJLcnJA3vNGR7mzoAlJF2C1fMqKzYPEc+wSgN5uFpxZGGLa8Vn9gZBEzNPky//OGMPfyo7tcx6Xp8Zn/eAAejVmdxCv3qMjezhvFHz9f+jqrogBigxGFtyQqTvTKI+lrn+ddzd0JgB8F7aau1RkesxTGajYVfClTzFEPmMMvYEvmz9MUcGbwv0HRZfNiSNN8s2ZLVGiPJrvhbL4N5yvTfzkC7IQPezXrftEmnKByKzVItOQ5zbj6j/zo1YVYB3woZ6/rGWsF2MTmaVL8ahQrWoIIJXuGRmpVsRfsrr+b5O8AiOxlPHs3fYkCn3DIBV2bYTi6/b1y1 sean@sztozed.net
sean@sean:~/git/gitosis-admin$ 

之后修改gitosis.conf和keydir下的文件即可。keydir下放用户的公钥,对应的文件名添加到gitosis.conf文件中。

4、应用

1) 先在/home/git/repositories,新建一个仓库:

git init --bare demo.git
sudo chmod 777 -R demo.git

2) 增加用户权限

sean@sean:~/git/gitosis-admin$ cat gitosis.conf 
[gitosis]

[group gitosis-admin]
members = sean@sztozed.net
writable = gitosis-admin

[group demo]
members = sean@sztozed.net
writable = demo
sean@sean:~/git/gitosis-admin$ 

sean@sean:~/git/gitosis-admin$ 
git commit -am "add the demo project and demo group"
sean@sean:~/git/gitosis-admin$ 
git push origin master

3) 下载代码仓库

sean@sean:~/git$ git clone git@192.168.1.31:demo.git
Cloning into 'demo'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.

完成。

4)其他

要和朋友们在一个项目上协同工作,就得重新添加他们的公钥。不过这次不用在服务器上一个一个手工添加到 ~/.ssh/authorized_keys 文件末端,而只需管理 keydir 目录中的公钥文件。文件的命名将决定在 gitosis.conf 中对用户的标识。现在我们为 John,Josie 和 Jessica 添加公钥:

$ cp /tmp/id_rsa.john.pub keydir/john.pub
$ cp /tmp/id_rsa.josie.pub keydir/josie.pub
$ cp /tmp/id_rsa.jessica.pub keydir/jessica.pub
然后把他们都加进 ‘mobile’ 团队,让他们对 iphone_project 具有读写权限:

[group mobile]
writable = iphone_project
members = scott john josie jessica
如果你提交并推送这个修改,四个用户将同时具有该项目的读写权限。

Gitosis 也具有简单的访问控制功能。如果想让 John 只有读权限,可以这样做:

[group mobile]
writable = iphone_project
members = scott josie jessica

[group mobile_ro]
readonly = iphone_project
members = john
现在 John 可以克隆和获取更新,但 Gitosis 不会允许他向项目推送任何内容。像这样的组可以随意创建,多少不限,每个都可以包含若干不同的用户和项目。甚至还可以指定某个组为成员之一(在组名前加上 @ 前缀),自动继承该组的成员:

[group mobile_committers]
members = scott josie jessica

[group mobile]
writable  = iphone_project
members   = @mobile_committers

[group mobile_2]
writable  = another_iphone_project
members   = @mobile_committers john
如果遇到意外问题,试试看把 loglevel=DEBUG 加到 [gitosis] 的段落(译注:把日志设置为调试级别,记录更详细的运行信息。)。如果一不小心搞错了配置,失去了推送权限,也可以手工修改服务器上的 /home/git/.gitosis.conf 文件 — Gitosis 实际是从该文件读取信息的。它在得到推送数据时,会把新的 gitosis.conf 存到该路径上。所以如果你手工编辑该文件的话,它会一直保持到下次向 gitosis-admin 推送新版本的配置内容为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值