前一篇GIT服务器的搭建【简单版】已经基本实现代码的共享,但美中不足的是,没有实现项目代码的权限控制。
本篇简要记录提高安全性能的权限控制,使用gitolite. (gitosis与gitolite类似,只是早了一些,并且于09年不再更新)
本文的蓝本来自于: http://zengrong.net/post/1720.htm, 在其基础上做细节更新
git默认使用SSH协议,在服务器上基本上不用怎么配置就能直接使用。但是如果面向团队服务,需要控制权限的话,还是用gitolite方便些。
本文的大部分内容来自 https://github.com/sitaramc/gitolite ,但并不是翻译。
本文面向的版本是gitolite v3;所有的操作基于命令行;
gitolite vs gitosis
为什么不用gitosis呢?原因很简单,它已经好几年没有更新了。
gitolite原本是作为gitosis的lite版本出现的,可是现在的功能甚至已经超过gitosis了。
关于gitolite和gitosis的更详细信息,可以看看下面几篇文章:
系统需求
- 类unix操作系统
- sh
- git 1.6.6+
- perl 5.8.8+
- openssh 5.0+
- 一个git用户 (服务器上可以通过各种方式创建,目的于合适管理)
- 一个openssh公钥 (客户端通过ssh-key -t rsa 创建,默认生成于~/.ssh/id_rsa.pub)
安装(服务端)
- 登录到git用户。如果没有给git用户设置密码,可以从root用户通过su切换过去。
- 确认
~/.ssh/authorized_keys
不存在 - 将公钥放在
~/YourName.pub
(从客户端scp过来,用完后就么用了) - 运行下面的命令:
1 2 3 4 5 6 7 8
# 获取版本库 git clone git://github.com/sitaramc/gitolite # 创建bin目录,用于存放安装后的文件 mkdir -p ~/bin # 将gitolite安装到bin目录 gitolite/install -to ~/bin # 使用YourName.pub公钥初始化版本库 gitolite setup -pk YourName.pub (YourName.pub完成历史使命,key被cat到服务端的
~/.ssh/authorized_keys中
)管理用户和版本库
不应该手动在服务器端加入新的用户或者版本库。
gitolite使用一个特殊的版本库gitolite-admin
来管理员用户和版本库,只要在这个版本库中修改并push
,服务器就会自动根据配置作出修改。首先在客户端迁出版本库:
1
git clone git@host:gitolite-admin
如果在迁出的过程中询问密码,那么说明配置出了问题。一般情况是密钥配置错误。可以检查客户端的
~/.ssh
下有没有 YourName 私钥。如果需要使用不同的密钥连接多个ssh服务器,可以编辑~/.ssh/config
进行配置。进入
gitolite-admin
目录,其中的keydir
目录是用来放置用户公钥的,而conf/gitolite.conf
则是用来配置用户和版本库。编辑
conf/gitolite.conf
如下:@admin = smith
@developer = david, bob
repo foo RW+ = alice RW = @developer R = carol
上面的配置的含义是:
- 定义两个用户组,admin和developer
- 有一个名为
foo
的版本库; - 用户
alice
对它有读、写、删除权限; - 用户组 developer 对它有读写权限;
- 用户
carol
对它仅有只读权限。 - 另外,需要找
alice/bob/carol
用户索要他们的公钥,保存在keydir
目录中,命名为alice.pub/bob.pub/carol.pub
,然后提交这些改动,push
到服务器。 - 多用户有定义方式,1)keydir/alice.pub keydir/ubuntu/alice.pub keydir/windows/alice.pub可以表示用户alice的三个不同的public key 2)keydir/alice@ubuntu.pub 和keydir/alice@windows.pub 3)邮件地址形式。推荐使用方式 1
服务器会自动将公钥加入到
~/.ssh/authorized_keys
中,并创建foo
版本库。foo
版本库的访问地址为git@host:foo
。如果希望把
foo
版本库放在bar
目录下,可以这样编辑配置文件:repo bar/foo RW+ = alice RW = bob R = carol
此时
foo
版本库的访问地址为git@host:bar/foo
。SSH带端口访问
git clone ssh://git@192.168.0.100:2234/testing.git
使用ssh-copy-id 设置无密码登陆git服务器
更多内容