什么是Gitosis?
? Gitosis是一套用來管理authorized_keys檔案和實作簡單連接限制的腳本,
? 而且Gitosis管理用戶權限并不是通過網頁或者某個程式,而是通過一個特殊的Git倉庫來管理,你只需要在這個非常“特殊”的倉庫配置好用戶和權限,然后推送到服務器上面,Gitosis就會隨之改變運行策略,
一、Git的安裝與配置
? [email protected]是服務端(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 [email protected]:/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 [email protected]: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 [email protected]: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/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/45307.html
標籤:其他
上一篇:淺談家中路由器組網方式
下一篇:GNU ARM 匯編基礎
