搭建Gitolite实现对源码仓库权限管理
warning:
这篇文章距离上次修改已过1460天,其中的内容可能已经有所变动。
正巧,前一段时间主力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仓用户,克隆gitolite-admin.git
下面是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
etc/passwd
文件,修改git用户默认shell此时未在Gitolite中授权的用户直接被踢出,授权用户则显示可用仓库列表。
打印当前用户可用命令列表
ssh git@host help