什么是Gitosis?
Gitosis是一套用来管理authorized_keys文件和实现简单连接限制的脚本。
而且Gitosis管理用户权限并不是通过网页或者某个程序,而是通过一个特殊的Git仓库来管理。你只需要在这个非常“特殊”的仓库配置好用户和权限,然后推送到服务器上面,Gitosis就会随之改变运行策略。
一、Git的安装与配置
root@192.168.204.130是服务端(Ubuntu主机) , ip是: 192.168.204.130
myWindows$ 是服务器的管理员(也可以作为客户端使用)
1.安装git和openssh
从这里开始的命令在服务端执行(记得要登陆到root用户下哦,当然在普通用户下也可以在命令前加 sudo 来提权执行)
root@ubuntu:/# apt-get update
root@ubuntu:/# apt-get install git-core openssh-server openssh-client
git-core 是git版本控制的核心软件
openssh-server和openssh-client 是由于git需要通过ssh协议在服务端与客户端之间传输文件
2.创建git用户组与git用户
该用户作为Git仓库和用户权限的管理员(这里不建议创建为其他用户名管理,本人试过用自己的名字,最后仍然是真香了)
root@ubuntu:/# groupadd git
root@ubuntu:/# git -g git -m
root@ubuntu:/# passwd git //设置git用户的密码
二、Gitosis的安装与配置
1.安装gitosis前的准备
初始化服务器的全局设置,为安装gitosis做准备。在任何机器上,第一次使用git,必须要先设置user.name和user.email这两条属性。
root@ubuntu:/# git config --global user.name "你的name"
root@ubuntu:/# git config --global user.email "你的邮箱"
2.安装python的setuptools
root@ubuntu:/# apt-get install python-setuptools
3.安装gitosis
/tmp 是ubuntu各种安装包与文件的存放目录,所以建议进入此目录获取gitosis包,并安装。
root@ubuntu:/# cd /tmp
root@ubuntu:/tmp# git clone https://github.com/res0nat0r/gitosis.git
root@ubuntu:/tmp# cd gitosis
root@ubuntu:/tmp/gitosis# python setup.py install
4.配置gitosis
接下来的命令在管理员机器执行(本文是Windows系统)
使用git管理员的PC(Windows系统)来生成访问git服务器的ssh公钥,然后将生成的ssh公钥拷贝到git服务器,执行相关的命令来允许你的个人计算机进行访问和管理git服务器。本文使用 myWindows$ 来作为远程访问和控制git服务器的管理员。
管理员PC也要安装git , Windows安装git for Windows , Linux系统参照本篇文章 一、Git的安装与配置
执行命令使用的是Git Bash窗口
然后设置user.name和user.email这两条属性。
之后,执行接下来的这条命令,记得不要输入任何字符,直接回车
myWindows /$ ssh-keygen -t rsa
执行完毕后 , 会在当前用户目录下生成.ssh/id_rsa和.ssh/id_rsa.pub。其中.ssh/id_rsa是私钥.ssh/id_rsa.pub是公钥。接下来可以使用如下命令将git管理员的公钥上传到git服务器,也可以直接拷贝到git服务器,建议目录是 /tmp。
myWindows /$ scp ~/.ssh/id_rsa.pub root@192.168.204.130:/tmp/id_rsa.pub
如果这条命令拷贝不成功你也可以用其他方式上传到服务器的/tmp目录下,展开你的想象上传吧!!
回到git服务器的/tmp/gitosis目录下,执行(又开始用服务端了哦!)
root@ubuntu:/tmp/gitosis# chmod a+r /tmp/id_rsa.pub
root@ubuntu:/tmp/gitosis# -H -u git gitosis-init < /tmp/id_rsa.pub
执行完毕后会出现以下信息 :
已初始化空的 Git 仓库于 /home/git/repositories/gitosis-admin.git/
重新初始化已存在的 Git 仓库于 /home/git/repositories/gitosis-admin.git/
Gitosis通过一个git仓库来管理配置文件,仓库放在/home/git/repositories/gitosis-admin.git中。接下来设置git仓库的权限
root@ubuntu:/tmp/gitosis# chown git:git /home/git/repositories
root@ubuntu:/tmp/gitosis# chmod 755 /home/git/repositories
root@ubuntu:/tmp/gitosis# chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
5.在服务器上新建一个测试项目仓库
接下来的命令在服务端执行
在服务器上新建一个空的项目仓库,叫做 "test" 。
这里需要切换到git用户!!并且确保你在/home/git/repositories目录下,可以使用pwd命令来查看现在处于什么位置。
root@ubuntu:/tmp/gitosis# su - git
$ cd repositories
$ git init --bare test.git
$ exit
到此为止,test只是一个空的仓库,它是不能被clone的。为了能clone,必须要让管理员放一个初始化的版本到仓库中。所以现在我们需要先修改一下gitosis-admin仓库。
6.管理gitosis的配置文件
接下来的命令在管理员机器执行
Gitosis本身的配置也是通过git来实现的。在刚刚上传公匙的电脑(就是使用ssh-keygen -t rsa命令的机器)上把服务器上的gitosis-admin.git这个仓库clone下来,就可以用管理员的身份修改配置了。因为之后还要继续进行管理所以最好有特定的文件夹存放。
注意:访问git用户仓库的默认路径是/home/git/repositories/
myWindows /$ cd /
myWindows /$ mkdir admin
myWindows /$ cd admin
myWindows /admin$ git clone git@192.168.204.130:gitosis-admin.git
myWindows /admin$ cd gitosis-admin
该目录下的keydir目录是用来存放所有需要访问git服务器的用户的ssh公钥。哥哥用户按照前面的方法生成各自的ssh公钥之后按照名字重新命名一下,然后拷贝到keydir目录下,然后修改本目录下的gitosis.conf文件,做出相应的配置:
[gitosis]
[group gitosis-admin]
members = tom david
writable = gitosis-admin
[group team]
members = david tom pitter
writable = test
注意:members = keydir目录下 .pub文件名,否则是没有访问权限的!多个管理者之间要用空格分开,项目名也是一样的。
这个配置文件表达了如下 :
gitosis-admin组成员有david和tom , 该组对gitosis-admin仓库有读写权限 ; test组由david tom和pitter三个成员 , 该组对test仓库有读写权限。
目前这些配置更改只是在本地,必须推送到远程的git服务器上才能真正生效。所以在gitosis-admin目录下执行一下操作
myWindows /admin/gitosis-admin(master)$ git add .
myWindows /admin/gitosis-admin(master)$ git commit -am "更改git服务器配置,增加管理员,配置成员可读写的库"
myWindows /admin/gitosis-admin(master)$ git push origin master
7.初始化测试项目
现在,服务器已经搭建完毕,并且有一个空的项目test在服务器上。接下来,需要测试一下,空仓库是不能被clone的,所以需要某个由读写权限的人初始化一个版本。在管理员的PC执行 :
myWindows /admin/gitosis-admin(master)$ cd /
myWindows /$ mkdir test-ori
myWindows /$ cd test-ori
myWindows /test-ori$ git init
myWindows /test-ori(master)$ echo "/*初始化一个版本,这样其他的成员才能clone*/" > version.txt
myWindows /test-ori(master)$ git add .
myWindows /test-ori(master)$ git commit -m "initial version"
myWindows /test-ori(master)$ git remote add origin git@192.168.204.130:test.git
myWindows /test-ori(master)$ git push origin master
到此为止,test已经有一个版本了。team的其他成员只要先clone一下test仓库就可以了,而且这些成员需要在gitosis.conf中被赋予读写权限。
三、安装GitWeb
1.安装gitweb,apache2
root@ubuntu:/tmp/gitosis# cd /
root@ubuntu:/# apt-get install gitweb apache2
2.修改配置文件(记得保存)
①修改/etc/gitweb.conf
内容如下:
vim /etc/gitweb.conf
$projectroot = "/home/git/repositories";
$git_temp = "/tmp";
$projects_list = $projectroot;
@stylesheets = ("../gitweb/static/gitweb.css");
$javascript = "../gitweb/static/gitweb.js";
$logo = "../gitweb/static/git-logo.png";
$favicon = "../gitweb/static/git-favicon.png";
@diff_opts = ();
这个文件的更改基本就是去除注释而已啦,很简单的。
②修改/etc/apache2/conf-available/gitweb.conf
内容如下:
Alias /gitweb /usr/share/gitweb
<Directory /usr/share/gitweb>
Options +FollowSymLinks +ExecCGI
AddHandler cgi-script .cgi
3.使cgi生效
root@ubuntu:/# a2enmod cgi
root@ubuntu:/# service apache2 restart
4.访问GitWeb
192.168.204.130/gitweb/