自动权限管理 - gitolite

本文接着上一篇文章阿里云git服务器搭建,由于我想把git和gitolite分开,所有会有一些重复的部分,两篇文章的前三步都是一样的。

1. 系统环境

系统: Linux:CentOS 7.2 64位
由于CentOS已经内置了OpenSSH,如果您的系统没有,请自行安装。

查看ssh版本

$ ssh -V

# 输出以下表示没问题,可以继续。 版本可能不一致,能用即可。
OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013

2. 安装git

建议以下操作都切换到root

# 请确保您切换到了root账户
$ su - root
$ yum install -y git

# 验证是否安装成功
$ git --version
# 输出如下内容表示成功:
git version x.x.x.x

3. 添加git的管理的账户和设置密码

设置专门管理git的账号非必须,但是建议这么操作。

# 添加git账户
$ adduser git

# 修改git的密码
$ passwd git
# 然后两次输入git的密码确认后。

# 查看git是否安装成功
$ cd /home && ls -al
# 如果已经有了git,那么表示成,参考如下:
drwxr-xr-x.  5 root root 4096 Apr  4 15:03 .
dr-xr-xr-x. 19 root root 4096 Apr  4 15:05 ..
drwx------  10 git  git  4096 Apr  4 00:26 git

# 默认还给我们分配一个名字叫git的组。

linux用户和用户组参考地址:https://www.jianshu.com/p/a0d76d8371a1

4. git的自动权限管理:gitolite

4.1 gitolite的安装和配置

第一步:添加gitolite依赖的perl的包

$ yum install 'perl(Data::Dumper)' 

第二步:清空服务器端配置的ssh的公钥

确保:~/.ssh/authorized_keys文件是空的,或者不存在。如果已经存在,建议你把他改名即可,比如:authorized_keys.bak

第三步:上传管理员的客户端的ssh公钥到服务器

把你管理员电脑的ssh的id_rsa.pub文件拷贝到服务器的: $HOME/YourName.pub

YourName可以自定义,最好根据不同伙伴的名字命名。

把客户端的文件拷贝到服务器端:

$ cd /Users/xxx/.ssh
$ scp ./id_rsa.pub [email protected]:.ssh/YourName.pub

第四步:安装配置gitolite

用git账号登录,并执行如下命令。

# 切换到git账号
$ su - git

# 进入git主目录
$ cd /home/git

# 下载gitolite的仓库
$ git clone https://github.com/sitaramc/gitolite

# 创建bin文件夹,必须!!!
$ mkdir -p $HOME/bin

# 用下载下来的仓库中的insall执行安装操作,指向的目录就是上一命令行创建的目录
$ ./gitolite/install -to $HOME/bin

# 把上传到服务器的 管理员的公钥setup到gitolite中,注意:YourName.pub改成你自己的文件名。
$ ~/bin/gitolite setup -pk ~/YourName.pub

# 此时安装配完成后,查看git主目录
$ ls /home/git
drwxr-xr-x   7 git  git  4096 Apr  3 23:50 bin               # 我们创建的存放gitolite二进制
drwxrwxr-x   6 git  git  4096 Apr  3 23:40 gitolite
drwx------   6 git  git  4096 Apr  3 23:52 .gitolite
-rw-------   1 git  git  7130 Apr  3 23:52 .gitolite.rc
-rw-------   1 git  git   398 Apr  3 23:39 malun.pub         # 管理员的公钥
drwxrw----   3 git  git  4096 Apr  3 23:40 .pki
-rw-------   1 git  git    19 Apr  4 00:26 projects.list     # 仓库列表(gitolite自动创建)
drwx------   5 git  git  4096 Apr  4 00:26 repositories      # 存放所有仓库文件夹
drwx------   2 git  git  4096 Apr  4 15:50 .ssh

# repositories目录下已经有了两个git仓库了。
# .
# |-- gitolite-admin.git    # 管理配置权限的仓库
# `-- testing.git           # 测试仓库

好了,到此位置,管理员就可以直接把默认的远程管理的仓库gitolite-admin直接clone到本地进行管理git服务了。

第五步:管理员在本地管理和配置服务器端的仓库

下载服务器端的远程管理仓库

# 下载远程管理仓库, 请把aicoder.com换成你自己服务器的域名或者ip
$ git clone git@自己的IP或域名:gitolite-admin
$ cd gitolite-admin
# 目录结构如下:
# .
# ├── conf                # 配置文件夹
# │   └── gitolite.conf   # 配置权限的文件
# └── keydir              # 客户端的公钥文件夹,所有伙伴的公钥要放到此目录下
#     └── malun.pub
4.2 gitolite的权限配置

添加其他开发的小伙伴
把小伙伴的公钥发给管理员。管理员添加到gitolite-admin仓库的keydir目录下,注意文件名字格式为username.pub,username就是配置权限时的用户名。

配置用户对仓库的读写权限
直接修改conf文件夹下的,gitolite.conf文件。简单解释下几个用法:

  • repo代表仓库的意思,如果新添加一个repo,代表服务端新建一个空仓库,仓库push到服务端后会自动创建。
  • RW 代表可读可写
  • @all 代表所有人。
  • masterdev代表分支
    参考:
#yun 和 zz 都代表用户名和YourName.pub的命名一致
@admin = yun  
@om = yun zz   
  
repo gitolite-admin  
    RW+     =   yun
  
repo testing  
    RW+     =   @all  
  
repo om  
    RW+     =   @admin  
    RW+ master = @admin  
    RW+ dev  =   @om  

应用修改到服务器端
做好配置后,由管理员把修改push到服务器端,会自动处理。

$ git add conf
$ git add keydir
$ git commit -m "added foo, gave access to alice, bob, carol"
$ git push

此时登录服务端,查看/home/git/repositories/目录下是否增加了对应的仓库了呢?

你可能感兴趣的:(自动权限管理 - gitolite)