Gitolite搭建git仓库实现权限控制

2017/06/14 linux

创建用户

创建一个git用户,用来运行gitolite服务。如果你之前是用git账号来做权限控制的话,记得把/etc/passwd里git用户的shell换回/bin/bash

# git server
adduser git

工作机生成一个rsa密匙,并将公匙拷贝至git服务器下

# 工作机
ssh-keygen
scp /root/.ssh/id_rsa.pub root@cp01-matrix-sandbox-03.epc.baidu.com:/home/git/admin.pub

安装gitolite

切换到git用户安装gitolite,指定之前要root账户下生成的git_admin.pub密匙

~/repositories/目录生成两个repository:gitolite-admin.git和testing.git ,gitolite-admin.git是用于管理gitolite配置与权限,testing.git.git是测试库。

用户目录下生成一个project.list,默认里面有一个testing的git的project

# git server
su git
cd ~

git clone git://github.com/sitaramc/gitolite

mkdir -p $HOME/bin
gitolite/install -to /home/git/bin/

/home/git/bin/gitolite setup -pk /home/git/admin.pub
[git@cp01-mawmd-rd02 ~]$ ll repositories/
total 8
drwx------ 8 git git 4096 Jun 14 15:41 gitolite-admin.git
drwx------ 7 git git 4096 Jun 14 15:41 testing.git

配置权限

检出gitolite-admin仓库(这里是在本地服务器上直接做检出,输入之前的 git账户密码即可)

# 工作机
git clone git@cp01-matrix-sandbox-03.epc.baidu.com:gitolite-admin

conf是放置配置文件的目录 - gitolite.conf就是gitolite的配置文件,包含对用户、仓储、仓储权限的配置 - keydir目录用来放置所有的用户公钥 - admin.pub为安装时setup -pk的那个用户公钥。 ```sh [root@cp01-mawmd-rd02 test]# tree . └── gitolite-admin ├── conf │   └── gitolite.conf └── keydir └── admin.pub

3 directories, 2 files




## 创建新 git库并添加授权用户

> 检出gitolite-admin代码

```sh
git clone git@cp01-matrix-sandbox-03.epc.baidu.com:gitolite-admin
cd gitolite-admin

创建一个xiaocai的git仓库,@all是所有用户

vim conf/gitolite.conf
----------------------------
repo gitolite-admin
    RW+     =   admin

repo testing
    RW+     =   @all

repo xiaocai
    RW+     =   @all

编辑完之后用git进行提交

[root@cp01-mawmd-rd02 gitolite-admin]# git add .
[root@cp01-mawmd-rd02 gitolite-admin]# git commit -m "新增库"
[master a074c50] 新增库
 1 files changed, 3 insertions(+), 0 deletions(-)
[root@cp01-mawmd-rd02 gitolite-admin]# git push origin
Counting objects: 7, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 388 bytes, done.
Total 4 (delta 0), reused 0 (delta 0)
remote: Initialized empty Git repository in /home/git/repositories/xiaocai.git/
To git@cp01-matrix-sandbox-03.epc.baidu.com:gitolite-admin
   737b13e..a074c50  master -> master

这时候进入git服务器查看,可以看到名为xiaocai.git的裸库已经创建好了(也可以在服务器上先执行 git init --bare xiaocai.git)(gitolite删除裸库则需要在服务器上操作)

[git@cp01-matrix-sandbox-03 ~]$ cd /home/git/repositories
[git@cp01-matrix-sandbox-03 repositories]$ ll
total 12
drwx------ 8 git git 4096 Jun 14 17:19 gitolite-admin.git
drwx------ 7 git git 4096 Jun 14 17:19 testing.git
drwx------ 7 git git 4096 Jun 14 17:19 xiaocai.git

用户权限控制,创建RD和QA用户组

@group_qa @user1 @user2 @user3
@group_rd @user4 @user5

repo gitolite-admin
    RW+     =   admin

repo testing
    RW+     =   @all

repo xiaocai
    R       =   @group_qa
    RW+     =   @group_rd user6

接着要在keydir目录下分别对应用户的rsa公匙

└── gitolite-admin
    ├── conf
    │   └── gitolite.conf
    └── keydir
        └── admin.pub
        └── user1.pub
        └── user2.pub
        └── user3.pub
        └── user4.pub
        └── user5.pub
        └── user6.pub

操作符

C

代表创建。仅在 通配符版本库 授权时可以使用。用于指定谁可以创建和通配符匹配的版本库。

R, RW, 和 RW+

R 为只读。RW 为读写权限。RW+ 含义为除了具有读写外,还可以对 rewind 的提交强制 PUSH。

RWC, RW+C

只有当授权指令中定义了正则引用(正则表达式定义的分支、里程碑等),才可以使用该授权指令。其中 C 的含义是允许创建和正则引用匹配的引用(分支或里程碑等)。

RWD, RW+D

只有当授权指令中定义了正则引用(正则表达式定义的分支、里程碑等),才可以使用该授权指令。其中 D 的含义是允许删除和正则引用匹配的引用(分支或里程碑等)。

RWCD, RW+CD

只有当授权指令中定义了正则引用(正则表达式定义的分支、里程碑等),才可以使用该授权指令。其中 C 的含义是允许创建和正则引用匹配的引用(分支或里程碑等),D 的含义是允许删除和正则引用匹配的引用(分支或里程碑等)。

- (是的,这是一个减号,你没看错)

是一条禁用指令。只对写操作起作用,即禁用用户的写操作。

参考资料

  • https://github.com/sitaramc/gitolite
  • http://airk000.github.io/git/2013/09/25/gitby-gitolite.html

Search

    Table of Contents