Gitolite v3安装配置指南
使用gitolite对git仓储进行权限配置
gitolite在近期做了很多代码改动,升级到了v3版本,而我使用的是v3.5.2。在《Git权威指南》中所提及的是v2版本,有很多东西已经不适合当前的v3版本,比如安装和用户自有仓储的配置,一些公用的部分有一些从书中摘抄而来。
1.ssh协议SSH 协议用于为 Git 提供远程读写操作,是远程写操作的标准服务,在智能HTTP协议出现之前,甚至是写操作的唯一标准服务。ssh可用于远程登录,服务端需要安装openssh-server,客户端需要安装openssh-client。之所以介绍ssh协议是因为gitolite以及gitosis都是基于ssh公钥认证的。
$ ssh-keygen
该命令会在用户目录下.ssh目录下生成两个文件 id_rsa
私钥文件。是基于 RSA 算法创建。该私钥文件要妥善保管,不要泄漏。
id_rsa.pub
公钥文件。和 id_rsa 文件是一对儿,该文件作为公钥文件,可以公开。$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@server将本地公钥提供给远程服务器,以达到无需口令直接登录的效果。实际上是将id_rsa.pub添加到authorized_keys中,直接操作authorized_keys效果一样。 远程登录方法:ssh user@server 使用主机别名方法登录:
编辑~/.ssh/confighost server
user admin
port 22
identityfile ~/.ssh/jiangxing #指定登录时使用的本地公钥 本地可以生成不同别名的公钥,方法是:ssh-keygen -f ~/.ssh/<filename>
2.创建git用户
$ sudo adduser --system --shell /bin/bash --group git有的系统,只允许特定的用户组(如 ssh 用户组)的用户才可以通过 SSH 协议登录,这就需要将新建的 git 用户添加到 ssh 用户组中。$ sudo adduser git ssh设置密码$ passwd git
3.生成ssh key
切换到git用户:$ su git$ ssh-keygen$ ssh-copy-id git@127.0.0.1
4.下载gitolite
git clone git://github.com/sitaramc/gitolite
5.安装配置
我是安装在git用户根目录下的。在根目录下创建bin文件夹然后执行:~/gitolite/install -to ~/bin
mv ~/.ssh/authorized_keys ~/git.pub
~/bin/gitolite setup-pk ~/git.pub成功后出现:初始化空的 Git 版本库于 /home/git/repositories/gitolite-admin.git/
初始化空的 Git 版本库于 /home/git/repositories/testing.git/安装成功。所谓更新就是重新安装。
6.测试
还是在git用户下ssh git@127.0.0.1如果返回类似这样的信息:hello git, this is git@linux-dev running gitolite3 v3.5.2-4-g62fb317 on git1.8.1.2
R W gitolite-admin
R W testing代表gitolite工作正常
7.添加用户
在第5步可以看到,成功安装后gitolite会自动生成两个仓储,一个是testing.git用来测试,另一个gitolite-admin就是用来管理gitolite的配置仓储。 将gitolite-admin.git clone到本地,注意:还是在git用户下,因为当前只有git用户对其有读写权限。$ git clone git@127.0.0.1:gitolite-admin成功clone到本地后,可以看到这个目录结构如下:git@linux-dev:~/gitolite-admin$ tree
.
├── conf
│ └── gitolite.conf
└── keydir
└── git.pub
2 directories, 2 filesconf是放置配置文件的目录,gitolite.conf就是gitolite的配置文件,包含对用户、仓储、仓储权限的配置。keydir目录用来放置所有的用户公钥。git.pub为安装时setup -pk的那个用户公钥。 添加用户,首先就是要把目标用户的公钥添加到keydir下,并重命名为该用户的用户名.pub。目标用户:$ echo ~/.ssh/id_rsa.pubssh - rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVPPqRucnXGPOP2I6NbJ4wgg9vwb91mo9Q3AZJgbaK45Qz5UK71qM9JxL71jU3F2ogk1NHD0MCIlmmI50/1f1BHhd+ xxxxxxxxxxxx+ DU30KzsylQVN3sAz4gOpvz+ zl7ftBPxtVYwSluJ+ om4V4mbXT9+ uczRbCe1ejhYdg7vKYQV7K1VJ26hON8ztCRarL52Irq/6a5It1Q78xv6Xf5F4mQOzUQsQp2EthtoA9XPiIybMjzNThDfbbKeW7kRZxBgi0RWLRYUSmc/ UBNkQuub8l+ II4S0FNhnUlNkmC/ mUHKTqcjeS1fyJAkRcYC+ fVTd4zqBNj1JupZfafpaeB keven@linux- dev将显示内容给git用户,或在git用户下粘贴来也可。目标用户名为keven,则最终应该以git用户身份将其保存在keydir目录下,命名为keven.pub然后添加用户相应权限。只要是在keydir下存在的用户,都属于@all用户组,其他用户组可通过在gitolite.conf自行定义。如:
@admin = git keven
repo gitolite - admin
RW + = @admin
repo testing
RW + = git
RW = @all@admin用户组有两个用户git keven,分别对应keydir下的git.pub, keven.pub。gitolite-admin仓储的读/写/强制更新权限 只有@admin用户组拥有;testing仓储的读/写/强制更新全系爱你 只有git用户拥有,其他所有在keydir下存在公钥的用户享有读/写权限。
8.权限配置
权限配置在gitolite.conf中进行,注释用#表示。
C
C 代表创建。仅在 通配符版本库 授权时可以使用。用于指定谁可以创建和通配符匹配的版本库。
R, RW, 和 RW+
R 为只读。RW 为读写权限。RW+ 含义为除了具有读写外,还可以对 rewind 的提交强制 PUSH。
RWC, RW+C
只有当授权指令中定义了正则引用(正则表达式定义的分支、里程碑等),才可以使用该授权指令。其中 C 的含义是允许创建和正则引用匹配的引用(分支或里程碑等)。
RWD, RW+D
只有当授权指令中定义了正则引用(正则表达式定义的分支、里程碑等),才可以使用该授权指令。其中 D 的含义是允许删除和正则引用匹配的引用(分支或里程碑等)。
RWCD, RW+CD
只有当授权指令中定义了正则引用(正则表达式定义的分支、里程碑等),才可以使用该授权指令。其中 C 的含义是允许创建和正则引用匹配的引用(分支或里程碑等),D 的含义是允许删除和正则引用匹配的引用(分支或里程碑等)。
-
是一条禁用指令。只对写操作起作用,即禁用用户的写操作。 接下来实际分析一个稍微复杂一些的配置文件
1 @admin = git keven admin1 admin213 - = fish
14 RW master = @dev
15 RW+ dev = dev1
16 RW wip$ = dev2
逐行解释:1: @admin用户组有git keven admin1 admin2四个用户2:@devteam用户组有dev1 dev2 dev3 fish四个用户4:对于gitolite-admin仓储5:git keven两个用户拥有读/写/强制更新的权限7:对于Projects下所有的git仓储(/.+代表递归所有)8:@admin用户组拥有创建仓储的权限9:所有人均可读/写11:对于testing.git12:@admin用户组拥有读/写/强制更新的权限13:fish是新手,对其屏蔽写的权限。因为其属@dev组,则还只剩下R 读的权限14:@dev用户组对master开头的分支拥有读/写权限15:dev1这个用户对dev开头的分支拥有读/写/强制更新的权限16:dev2这个用户对于wip分支(严格匹配)具有读/写权限 冷门用法,需要用户对gitolite有一定了解有的时候用户可能需要在服务器端创建属于自己的仓储,这个时候就需要像下边这样:
1 @admin = git keven admin1 admin2
ssh git@server perms pub/<username>/somegit READERS user1
mkdir somegit.git
repo testing2
git@linux-dev:~/gitolite-admin$ git commit-m'add test2'
mkdir somegit