使用Gitolite实现分布式版本控制系统的权限管理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LuyaoYing001/article/details/79763616

Git服务器是用来做分布式版本控制的(安装及使用可参考 https://blog.csdn.net/LuyaoYing001/article/details/79314627),Gitolite 是在 Git 之上的一个授权管理工具,依托 sshd 确定用户是谁,并决定该用户的访问权限。

Gitolite的权限控制能够控制对多个 git 仓库的访问,读访问被repo层控制,写访问在 branch/tag/file/directory 层控制,包括谁能够 rewind,create 以及 delete branches/tags,能够满足轻量级权限控制的需求,使用环境搭建相对比较简单,比较适合小团队的协同开发。

搭建Gitolite服务器

  • 创建git用户
    useradd --system --shell /bin/bash --create-home git
    passwd git
  • 下载并安装Gitolite
    su root
    mkdir /opt/gitolite/bin
    cd /opt/gitolite/bin
    git clone git://github.com/sitaramc/gitolite.git
    /opt/gitolite/install -to /opt/gitolite/bin
  • 生成SSH密钥对(客户端)
    用git生成超级管理员密钥对。
    su git
    cd ~
    ssh-keygen -t rsa -C "[email protected]"
    cp ./.ssh/id_rsa.pub admin.pub

    如果是在客户端生成管理员密钥对,通过scp admin.pub [user-name]@[remote-server]:admin.pub上传至服务端。
  • 配置SSH公钥(服务端)
    su git
    /opt/gitolite/bin/gitolite setup -pk ~/admin.pub
    cd ~
    git clone git@your_server:gitolite-admin

    如果碰到类似这样的问题时:
    FATAL: R any gitolite-admin admin DENIED by fallthru (or you mis-spelled the reponame)
    fatal: Could not read from remote repository.
    删除git目录下的.gitolite目录。

    在管理库里有两个目录conf/和keydir/,conf/gitolite.conf 用于Git项目配置访问权限,keydir/ 用于存储用户的SSH public key(公钥)。

    至此,Gitolite已经安装完成,可以开始使用了。在下面章节,我们介绍如何添加Gitolite项目成员,创建项目仓库以及配置成员的权限。

添加 Gitolite 项目成员

管理员从项目成员那里获取公钥,重命名为username.pub格式,复制到gitolite-admin本地克隆版本库中的keydir目录下,add、commit、push到远程版本库。增加新成员后,项目成员可以通过其公钥访问Git服务。新成员默认可以克隆任何没有被权限控制的仓库,如 Gitolite 自带的 “testing”。

git add.
git commit -m "add user XXX"
git push origin master

创建 Gitolite 项目仓库 (客户端)

用编辑器打开 gitolite-admin/conf/gitolite.conf,加入两行:

repo test
    RW+ = @admin

提交这部分修改,并push到服务器,远程的 Gitolite 就会自动帮你创建好一个空仓库foo并分配给admin组读写、删除的权限。在实际的生产环境中,最好对项目用户精确分配各自的权限,参见#项目授权管理#。

  • 新建一个Git项目
mkdir test
cd test
git init
git remote add origin git@your_server:test.git
touch README
git add README
git commit -m "Initial commit"
git push origin master:refs/heads/master
  • 添加一个存在的Git项目
cd test
git remote rm origin
git remote add origin git@your_server:test.git
git push origin master 或者
git push origin <branch-name>

项目授权管理

Gitolite可以通过授权文件方便地进行授权:

@admins = ad1 ad2
@interns = int1
@staff = @admins @interns

repo testing
    RW int$ = @interns
    RW int- = @interns
    RW refs/tags/rc[0-9] = @staff
    RW+ = @admins

interns 组能对以int结尾或1以int-开头的分支有读写权限;
staff 组对该仓库的 rc[0-9] 的标签分支有读写权限;
admins 组则对本仓库所有的分支有读写权限,而且 + 代表可以有强推、添加和删除的权限。

参考:https://segmentfault.com/a/1190000006939068

猜你喜欢

转载自blog.csdn.net/LuyaoYing001/article/details/79763616