Gitolite服務(wù)器搭建及使用教程

Gitolite簡介

先說幾個重要的點

  1. Gitolite是對Git使用的一個封裝
  2. Giolite服務(wù)器其實是使用perl腳本對通過Git命令進行權(quán)限檢查
  3. Gitolite服務(wù)器的管理是通過一個名字叫做gitolite-admin的Git倉庫進行管理的

gitolite 的原理很簡單。首先触幼,它提供了一個 gitolite-shell硼瓣。當(dāng)你使用 ssh 訪問 gitolite 時 ssh 服務(wù)會啟動 gitolite-shell。這個腳本會檢查當(dāng)前用戶是否有權(quán)限訪問對應(yīng)的倉庫置谦。如果用戶通過 git push 修改了倉庫內(nèi)容堂鲤,則會觸發(fā) gitolite 預(yù)先配置 git hook,這些 hook 會執(zhí)行創(chuàng)建倉庫媒峡、添加用戶之類的操作瘟栖。

gitolite的本質(zhì)是幾個 prel 腳本加一些純文本配置文件

Gitolite的安裝

先講明Gitolite服務(wù)器管理的邏輯流程谅阿,這樣在安裝的時候更容易理解半哟。

  1. 首先Gitolite安裝時,最好指定一個特定用戶签餐,由該用戶安裝Gitolite寓涨,這樣易于管理。我們指定的用戶為git
  2. 安裝完成后氯檐,還需要指定一個用戶作為gitolite服務(wù)器管理員戒良,一般這個管理員不是上面說的git用戶,而是日常工作中有權(quán)限管理項目代碼權(quán)限的那個人,我們下面指定的管理員為bianjb冠摄。需要說明糯崎,雖然用戶不同,但是并不要求git用戶和bianjb用戶是否在同一臺物理機器上河泳,視自己情況而定即可
  3. 在安裝gitolite時我們要指定bianjb為管理員沃呢,是依據(jù)bianjb用戶的ssh-key來指定的。

講明了上面三點拆挥,下面開始安裝Gitolite薄霜。
這里使用的是ubuntu14.04平臺,其它ubuntu版本也是類似的纸兔。
前面說了惰瓜,我們需要使用ssh協(xié)議訪問gitolite服務(wù)器,gitolite服務(wù)器是本質(zhì)上是一個git倉庫食拜,所以首先需要安裝基本包gitssh-server,再安裝gitolite
下面的所有操作都在用戶主目錄下進行副编。

1.安裝git和ssh-server
在要安裝gitolite的機器上安裝

sudo apt-get install git openssh-server openssh-client

2.生成管理員公鑰
注意:使用將要設(shè)置為管理員的用戶登錄
首先將gitolite管理用戶的ssh-key準(zhǔn)備好负甸,在bianjb用戶下執(zhí)行如下命令:ssh-keygen -t rsa,之后連續(xù)按三次回車鍵,如下:

bianjb@ubuntu:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/bianjb/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/bianjb/.ssh/id_rsa.
Your public key has been saved in /home/bianjb/.ssh/id_rsa.pub.
The key fingerprint is:
fc:b4:c8:d8:68:f5:38:e4:08:50:cb:9b:36:2a:51:6f bianjb@ubuntu
The key's randomart image is:
+--[ RSA 2048]----+
|    .            |
|   o .           |
|  o o            |
| . o o .         |
|.   E   S .      |
| . + o X * .     |
|. .   = B +      |
| .   .   .       |
|                 |
+-----------------+

這時就在/home/bianjb/.ssh/目錄下生成的公鑰和私鑰呻待,下面的安裝需要用到公鑰id_rsa.pub打月,先把它準(zhǔn)備好。

3.創(chuàng)建用戶git
同樣在將要安裝gitolite服務(wù)器的機器上添加用戶git,并設(shè)置密碼

$ adduser git 
$ passwd git

3. 接下來下載gitolite源碼
切換到git用戶蚕捉,并下載源碼

$su git
$git clone https://github.com/sitaramc/gitolite

如下載成功奏篙,這時在git主目錄下多一個gitolite文件夾。

4.安裝gitolite
在git用戶上進行安裝迫淹,安裝目錄為$HOME/bin秘通,所以先創(chuàng)建安裝目錄再安裝。

$mkdir -p $HOME/bin     
$ gitolite/install -to ${HOME}/bin

注意:安裝路徑要求為絕對路徑敛熬,而不是相對路徑
這時在$HOME/bin目錄下就會多了一引起腳本文件和配置文件肺稀,這些就是gitlote服務(wù)器的程序。

5.設(shè)置gitolite管理員
在git用戶下進行
將第一步中生成的管理員的id_rsa.pub拿過來应民,放在git主目錄下话原,執(zhí)行如下命令:

$bin/gitolite setup -pk id_rsa.pub
Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
Initialized empty Git repository in /home/git/repositories/testing.git/
WARNING: /home/git/.ssh/authorized_keys missing; creating a new one
    (this is normal on a brand new install)

如果輸出相同的信息,那么說明設(shè)置成功了诲锹。從打印信息中可以看到繁仁,此時已經(jīng)生成了服務(wù)器管理倉庫gitolite-admin.git,這時你在git主目錄下也可以看到一個repositories文件夾归园,里面有g(shù)itolite-admin.git文件夾黄虱,就是這個倉庫。

6.gitolite管理員下載管理倉庫
在gitolite管理員用戶下執(zhí)行g(shù)it clone,也只有在管理員用戶下可以clone,其它用戶是沒有權(quán)限的蔓倍。

$git clone git@192.168.111.129:gitolite-admin.git

下載成功后悬钳,就可以看見gitolite-admin文件夾了,里面有conf和keydir兩個目錄偶翅,其中conf是配置倉庫及其權(quán)限的默勾,keydir是用來存放各個用戶的ssh-key。

Gitolite服務(wù)器管理

服務(wù)器管理員如何進行代碼的配置和權(quán)限管理呢聚谁?通過配置兩個文件夾conf和keydir母剥。

添加,刪除形导,重命名一個倉庫示例

編輯gitolite-admin/conf目錄下gitolite.conf 文件

  • 比如添加一個bar倉庫(conf語法可以參考上一節(jié)的介紹)
repo bar    
RW+=   alice
git add .
git commit -m “add user zgkxp”
git push

添加完畢

要移除一個代碼倉庫环疼,類似要編輯gitolite.conf 文件,刪除對應(yīng)的行并提交朵耕。但服務(wù)器的代碼倉庫并不會自動移除需要自己手動去移除炫隶。

重命名一個倉庫按下面順序(注意順序)
(1)到服務(wù)器上把對應(yīng)的倉庫名字改掉,注意要保留“.git”后綴
(2)改變gitolite.conf中倉庫的名字阎曹,并提交到服務(wù)器

keydir文件夾

其中keydir文件夾比較簡伪阶,就是存放所有的用戶公鑰煞檩,不在該文件夾下面的公鑰,其用戶一律沒有任何訪問權(quán)限栅贴。
放在該文件夾下面的公鑰應(yīng)該以用戶名區(qū)分斟湃,不可重復(fù),后綴名為.pub檐薯。
看一下默認的內(nèi)容:

bianjb@ubuntu:~/gitolite-admin/conf$ ls ../keydir/
bianjb.pub

只有一個管理員的公鑰文件凝赛。

conf文件夾

下面詳細說一下conf文件夾下面的gitolite.conf文件的使用,該文件控制了新建git倉庫及其訪問權(quán)限坛缕。
先看一下墓猎,默認的gitolite.conf文件內(nèi)容:

repo gitolite-admin    #管理員倉庫
    RW+     =   bianjb #只有我設(shè)置的bianjb倉庫有讀寫權(quán)限

repo testing    #這是默認的測試用倉庫,名字叫testing
    RW+     =   @all #keydir下任何人都有讀寫權(quán)限

詳細的語法規(guī)則

1 基本語法
(1)注釋祷膳,以“#”作為注釋的開發(fā)
(2)沒有續(xù)行符“\”
(3)所有的東西都是用空格作為分隔符(不用逗號陶衅,分號等)
(4)用戶名和代碼庫名可以包含'.' '_' '-'等,代碼庫可以包含"/"直晨,用戶名可以有“@”
(5)組名必須以@開始

2 組的定義
用戶組和代碼庫組定義是一樣的兩者沒差別搀军。

  • 簡單定義了一個組
@developers     =   dilbert alice wally
  • 組的值是累積的所以也可以按下面這么定義,和上面的一樣
@developers     =   dilbert
@developers     =   alice
@developers     =   wally
  • 組的定義可以嵌套勇皇,但值是立即展開的罩句,也就是說后面定義的值,不會在加的嵌套的組里面
@developers     =   dilbert alice
@interns        =   ashok
@staff          =   @interns @developers
@developers     =   wally# wally 用戶并不屬于 @staff 組
  • 正常使用的一個例子
@developers     =   dilbert alice wally
@foss-repos     =   git gitoliterepo @foss-repos    
RW+=   @developers
  • @all是一個特殊組敛摘,它可以包括所有的用戶或者所有的代碼庫

3. 訪問規(guī)則
訪問規(guī)則一般由四部分組成:[代碼倉庫名] [用戶名] [操作] [ref]

(1)"repo"行
可以跟一個或者多個代碼倉庫门烂,也可以跟組名,或者用正則表達式也可以兄淫。
(2)規(guī)則行
從"repo"開始到下一個"repo"出現(xiàn)之前的行都屬于規(guī)則行屯远,一般是權(quán)限域 refex = 用戶名或者組名等

repo foo bar #兩個倉庫foo和bar配置相同的規(guī)則行
RW+= alice @teamleads 
- master = dilbert @devteam 
- refs/tags/v[0-9] = dilbert @devteam 
RW+ dev/ = dilbert @devteam 
RW= dilbert @devteam 
R= @managers
  • 權(quán)限域里常用的權(quán)限
    • R, 只讀
    • RW, 允許 push 一個分支 branch, 或者創(chuàng)建一個 branch/tag
    • RW+, 可以快速推送, 倒回或者刪除 branches or tags
      • 拒絕訪問
        (3)refex
        用來匹配代碼倉庫的引用(ref),一般使用正則表達式來表示
        如果沒有指定refex捕虽,則是以refs/.*作為默認值慨丐,比如
RW              =   alice

如果指定了refex,但不是以refs/作為開始泄私,則認為以refs/heads/開始房揭,比如

RW  master      =   alice# becomes 'refs/heads/master' internally

如果是對tag進行限制,則必須寫全

RW  refs/tags/v[0-9]    =   bob

refex默認開頭是固定的晌端,但是結(jié)尾可以隨意匹配捅暴,換句話說就是有正則表達式的“^”在開頭但是沒有“$”在結(jié)尾,比如只指定master的話咧纠,下面這些對它都匹配

refs/heads/master
refs/heads/master1
refs/heads/master2
refs/heads/master/full

而對refs/tags/v[0-9]蓬痒, v1 , v12漆羔, v1.2梧奢,v12345這些都是對的瞪讼。
如果你不想隨意匹配的話,那在表達式后面加個$就行了粹断,比如

RW  master$     =   alice

(4)需要注意的是=后面的用戶名或者組名不能使用正則表達式來表示

# managers should be able to read any repo
repo @all    
R=   @managers# ...other rules for other repos...
repo foo bar
RW+             =   alice @teamleads    
-   master         =   dilbert @devteam   
-   refs/tags/v[0-9]  =   dilbert @devteam   
RW+ dev/          =   dilbert @devteam   
RW               =   dilbert @devteam    
R                 =   @managers

補上默認值,等效于下面

1 # managers should be able to read any repo 
2 repo @all 
3     R   refs/.*             =   @managers 
4  
5  # ...other rules for other repos... 
6  
7 repo foo bar
8  
9     RW+ refs/.*               =   alice @teamleads
10     -   refs/heads/master   =   dilbert @devteam
11     -   refs/tags/v[0-9]    =   dilbert @devteam
12     RW+ refs/heads/dev/     =   dilbert @devteam
13     RW  refs/.*               =   dilbert @devteam
14     R   refs/.*               =   @managers

(5)規(guī)則累積

repo 不一定是在一處要全部指定完嫡霞,可以在別處補充瓶埋,也可以被其它repo間接補充
比如

repo foo     # ...some rules...# ...other repos and rules...
repo foo     # ...more rules for foo...
# managers should be able to read any repo
repo @all    
    R=   @managers
# anyone can clone open source repos
repo @FOSS    
    R=   @all

4.規(guī)則檢查
用戶dilbert 對foo代碼倉庫的任何ref(any)的W權(quán)限檢查

gitolite access -s foo dilbert W any

類似的其他檢查

gitolite access -s foo dilbert W xyz
gitolite access -s foo dilbert + refs/heads/xyz
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市诊沪,隨后出現(xiàn)的幾起案子养筒,更是在濱河造成了極大的恐慌,老刑警劉巖端姚,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晕粪,死亡現(xiàn)場離奇詭異,居然都是意外死亡渐裸,警方通過查閱死者的電腦和手機巫湘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昏鹃,“玉大人尚氛,你說我怎么就攤上這事《床常” “怎么了阅嘶?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長载迄。 經(jīng)常有香客問我讯柔,道長,這世上最難降的妖魔是什么护昧? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任魂迄,我火速辦了婚禮,結(jié)果婚禮上捏卓,老公的妹妹穿的比我還像新娘极祸。我一直安慰自己,他們只是感情好怠晴,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布遥金。 她就那樣靜靜地躺著,像睡著了一般蒜田。 火紅的嫁衣襯著肌膚如雪稿械。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天冲粤,我揣著相機與錄音美莫,去河邊找鬼页眯。 笑死,一個胖子當(dāng)著我的面吹牛厢呵,可吹牛的內(nèi)容都是我干的窝撵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼襟铭,長吁一口氣:“原來是場噩夢啊……” “哼碌奉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起寒砖,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赐劣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后哩都,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體魁兼,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年漠嵌,在試婚紗的時候發(fā)現(xiàn)自己被綠了咐汞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡儒鹿,死狀恐怖碉考,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挺身,我是刑警寧澤侯谁,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站章钾,受9級特大地震影響墙贱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贱傀,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一惨撇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧府寒,春花似錦魁衙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至纤房,卻和暖如春纵隔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工捌刮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留碰煌,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓绅作,卻偏偏與公主長得像芦圾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子俄认,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容