搭建Gitolite实现对源码仓库权限管理

warning: 这篇文章距离上次修改已过1506天,其中的内容可能已经有所变动。

正巧,前一段时间主力NAS炸了(详情见此处),临时把NanoPi NEO2翻出来顶上了。顺手用导热胶把散热片和外壳粘一起了,效果拔群。

经过这一段时间的使用,发现被动散热真是个好东西。原先的主力NAS,现在设置成冷备机,通过网络唤醒,每周自动执行备份同步,然后关机。完美,终于没有风扇的噪音了~

因为NanoPi上跑的东西有点多(Docker真是个好东西),所以需要一个轻量的Git权限管理工具。

最后我选定了Gitolite来实现对源码仓库权限管理。


部署&配置Gitolite

部署

推荐新建个低权限用户安装运行
#新建一个用户git,<-s>参数指定新用户使用的shell路径
sudo useradd -s /bin/bash git
#设置密码
sudo passwd git
#切换用户
su git

说真的,Gitolite安装非常简单。你可以直接从源来安装。

sudo apt install gitolite3

当然,你也可以从仓库拉取源码安装。

git clone https://github.com/sitaramc/gitolite
mkdir -p $HOME/bin
gitolite/install -to $HOME/bin

配置

首先上传你用来管理Git仓用户的公钥。

info:注意:请保证公钥名称和用户名一致

初始化gitolite

gitolite setup -pk YourName.pub

初始化的两个git仓库初始化的两个git仓库

然后,使用你用来管理Git仓用户,克隆gitolite-admin.git

gitolite核心权限仓库gitolite核心权限仓库

下面是gitolite.conf文件的说明

#用户组users
@users = ding Administrator

#管理员库
repo gitolite-admin
    #可以执行任何操作(create, push, delete, rewind/overwrite etc)
    RW+     =   ding

#contact.git仓库(新建仓库的增加此句即可)
repo contact
    #拥有此权限的用户有ding
    RW+     =   ding
    #仅可以clone/pull
    R        =   Administrator

repo testing
    #@all表示所有人(仅限于提交公钥的用户)
    RW+     =   @all

repo foo
    #可以clone/pull、push
    RW     =   @users
    #可以push任何不以master开头的分支,且创建任何不以v+数字头的标签
    -   master              =   @all
    -   refs/tags/v[0-9]    =   @all
    RW                      =   @all

然后像提交仓库一样push就行了,权限自动生效,新添加仓库自动初始化。

git add conf
git add keydir
git commit -m "提交说明"
git push

禁止非授权用户使用shell

此时,使用SSH登陆git用户时,Gitolite会接管shell,显示当前用户可以使用的仓库列表。

显示当前用户可以使用的仓库列表显示当前用户可以使用的仓库列表

如果,该用户没有提交公钥到Gitolite中,仍可以正常登陆。为了安全需要限制这一问题。

我们可以把用户shell指向到Gitolite提供的shell,来解决这个问题。

#编辑etc/passwd文件
sudo vim /etc/passwd

编辑<code>etc/passwd</code>文件,修改git用户默认shell编辑etc/passwd文件,修改git用户默认shell

此时未在Gitolite中授权的用户直接被踢出,授权用户则显示可用仓库列表。

未授权用户直接被踢出未授权用户直接被踢出


打印当前用户可用命令列表

ssh git@host help

打印可用命令列表打印可用命令列表

添加新评论