Git配置Gitosis,实现权限控制

作者:小虾米 发表时间:2017-10-11 18:25:37 类别:Linux

Git服务器: 192.168.0.235
管理员机: 192.168.0.234
普通用户机: 192.168.0.236

git服务器搭建请参考另一篇文章《Git服务器搭建及Hooks自动部署》

192.168.0.235 安装、配置Gitosis

从 Gitosis 项目主页克隆并安装:

[root]$ git clone https://github.com/tv42/gitosis.git
[root]$ cd gitosis
[root]$ sudo python setup.py install
这会安装几个供Gitosis使用的工具。默认Gitosis会把/home/git作为存储所有Git仓库的根目录,不过我之前已经把项目仓库都放在/data/git里面了,所以为方便起见,我们可以做一个符号连接,直接划转过去,而不必重新配置:
[root]$ ln -s /data/git /home/git/repositories

※ 如果/home/git/.ssh下有authorized_keys文件,需要先备份,后面gitosis会自动更新这个文件。

使用gitosis-init命令初始化Gitosis,user_name.pub为权限管理员的公钥文件。

[git]$ sudo -H -u git gitosis-init < /tmp/user_name.pub
这样该公钥的拥有者就能修改用于配置Gitosis的那个特殊Git仓库了。接下来,需要手工对该仓库中的post-update脚本加上可执行权限:
[git]$ sudo chmod 755 /opt/git/gitosis-admin.git/hooks/post-update
基本上就算是好了。如果设定过程没出什么差错,现在可以试一下用初始化 Gitosis 的公钥的拥有者身份 SSH 登录服务器,应该会看到类似下面这样:

//在管理员机上操作:
[~]$ ssh git@192.168.0.235
PTY allocation request failed on channel 0
ERROR:gitosis.serve.main:Need SSH_ORIGINAL_COMMAND in environment.
Connection to 192.168.0.235 closed.

192.168.0.234 管理员机

克隆Gitosis控制仓库

$ git clone git@gitserver:gitosis-admin.git ./gitosis
gitosis.conf文件是用来设置用户、仓库和权限的控制文件。
keydir目录则是保存所有具有访问权限用户公钥的地方—每人一个。在keydir里的文件名(比如scott.pub)应该跟你的不一样。Gitosis会自动从使用gitosis-init脚本导入的公钥尾部的描述中获取该名字。

$ cat gitosis.conf
[gitosis]
[group gitosis-admin]
members = xxx #管理员用户,唯一可以管理gitosis-admin项目的人。
writable = gitosis-admin #有写权限的项目
添加一个新项目
[group mobile]
members = scott #可以操作新项目的用户列表,多个用户以空格分隔
writable = mars #可以操作的项目,没有则会自动创建
修改完后,提交更新
先在本地初始化好项目目录,然后添加远程分支
$ git remote add origin git@192.168.0.234:mars.git
$ git push origin master
上面操作仅供参考,有任意提交操作即可在服务器自动生成一个库。不用再到服务器上手动新建库。
这里不用指明完整路径(实际上,如果加上反而没用),只需要一个冒号加项目名字即可,Gitosis会自动帮你映射到实际位置。

192.168.0.236 开发机

只需管理keydir目录中的公钥文件。文件的命名将决定在gitosis.conf中对用户的标识

  • 192.168.0.236用户机:

    1、生成key文件
    2、复制生成的id_rsa.pub文件并重命名,如:client236.pub
    3、传送至192.168.0.234管理员机

  • 192.168.0.234管理员机:

    把client236.pub文件放在gitosis-admin项目的keydir目录 修改配置文件 /path/to/gitosis/gitosis.conf

    [group mobile]
    members = scott john josie client236
    writable = mars
    

Gitosis 也具有简单的访问控制功能。新加一个只有读权限的用户,可以克隆和获取更新,但不允许向项目推送任何内容。
[group read_only]
members = new_user
readonly = new_project
像这样的组可以随意创建,多少不限,每个都可以包含若干不同的用户和项目。甚至还可以`指定某个组`为成员之一(在组名前加上 @ 前缀),自动继承该组的成员:
[group g_committers]
members = scott josie jessica

[group g_write]
members   = @g_committers
writable  = project

[group g_another_write]
members   = @g_committers john
writable  = another_project

如果遇到意外问题,试试看把loglevel=DEBUG加到[gitosis]的段落(译注:把日志设置为调试级别,记录更详细的运行信息)。如果一不小心搞错了配置,失去了推送权限,也可以手工修改服务器上的/home/git/.gitosis.conf文件 — Gitosis实际是从该文件读取信息的。它在得到推送数据时,会把新的gitosis.conf存到该路径上。所以如果你手工编辑该文件的话,它会一直保持到下次向gitosis-admin推送新版本的配置内容为止。

参考文章:4.7 服务器上的 Git - Gitosis

沪ICP备17012897号-1 | Copyright ©2024