溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用Gitolite來(lái)對(duì)Git的repository實(shí)現(xiàn)權(quán)限控制

發(fā)布時(shí)間:2021-11-23 09:10:22 來(lái)源:億速云 閱讀:179 作者:小新 欄目:網(wǎng)絡(luò)安全

這篇文章將為大家詳細(xì)講解有關(guān)如何使用Gitolite來(lái)對(duì)Git的repository實(shí)現(xiàn)權(quán)限控制,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

Gitolite其實(shí)也是一個(gè)git repository,首先在server上安裝好后,在client上把server上的repository clone下來(lái),在本地做一些更改,再push回server,server端的hooks會(huì)根據(jù)push上來(lái)的配置來(lái)更新權(quán)限。

接下來(lái),介紹下安裝和配置步驟

準(zhǔn)備工作

如果你之前是用git賬號(hào)來(lái)做權(quán)限控制的話,記得把/etc/passwd里git用戶的shell換回/bin/bash,然后把~git/.ssh/authorized_key里不再需要的key移除。

ssh-kengen生成一對(duì)key,比如your-name和your-name.pub(下文均以此為例)

拷貝私鑰到本用戶的.ssh文件夾中

mv your-name ~/.ssh/

拷貝公鑰到git server上

scp you-name.pub git@your.server.name.or.ip.address:~

為了以后方便,這里可以做一個(gè)server別名,指定連接所需的用戶名,server的地址、端口以及私鑰

vim ~/.ssh/config

輸入以下內(nèi)容

host githost
user your-name
hostname your.server.name.or.ip.address
port 22
identityfile ~/.ssh/your-name

安裝Gitolite

登錄git server

ssh git@your.server.name.or.ip.address

下載最新的Gitolite

git clone git://github.com/sitaramc/gitolite

安裝,這里說(shuō)明下,安裝方式有3種,區(qū)別在與指定生成gitolite可執(zhí)行文件的路徑,這里采用Gitolite作者推薦的第二種,也就是把文件生成到$HOME/bin中,這樣可以在接下來(lái)的bash中直接執(zhí)行gitolite命令而不用指定路徑(如果你的~/bin目錄不存在記得先mkdir ~/bin)

gitolite/install -ln

設(shè)置,由于是第一次運(yùn)行這個(gè)命令,所以這里指定的key是擁有Gitolite管理員權(quán)限的

gitolite setup -pk your-name.pub

此命令會(huì)在你的~/repositories/目錄生成兩個(gè)repository:gitolite-admin.git和testing.git

配置權(quán)限

退到你的workstation上

exit

clone剛才生成的gitolite-admin.git

git clone githost:gitolite-admin

注意這里用的是剛才準(zhǔn)備好的server別名來(lái)連接的,其中最重要的區(qū)別是使用your-name.pub這個(gè)key,并且沒(méi)有采用絕對(duì)路徑來(lái)指定想要clone的repository,而是直接使用名稱,并且這個(gè)名稱也沒(méi)有包括.git這個(gè)后綴。這一點(diǎn)很重要,因?yàn)檫@是用Gitolite的機(jī)制來(lái)clone,如果你跳過(guò)它直接使用git來(lái),那么它的一些功能就無(wú)法實(shí)現(xiàn)了。以后clone, push其它需要受Gitolite權(quán)限控制的repository都必須這樣做。

clone完后會(huì)有個(gè)新的目錄gitolite-admin,里面有兩個(gè)文件夾confkeydir,第一個(gè)目錄中包含的是配置文件,里面就是記錄權(quán)限配置的地方,第二個(gè)目錄中則包含所有用戶的pub key。

現(xiàn)在我們打開(kāi)配置文件,按照我們的權(quán)限配置需要進(jìn)行設(shè)置

vim gitolite-admin/conf/gitolite.conf

我期望的配置如下,你也可以根據(jù)你的需要做更改

@repos_a @proj1 @proj2
@repos_b @proj3 @proj4 @proj5

@team_a @user1 @user2
@team_b @user3 @user4

repo gitolite-admin
RW+ = your-name

repo @repos_a
RW+ = @team_a
R = @all

repo @repos_b
RW+ = @team_b

這個(gè)配置很簡(jiǎn)單,首先定義了兩個(gè)repository group,再又定義了兩個(gè)user group,group的好處就是以后添加repository和user的時(shí)候,不需要再單獨(dú)配置,只需加入到對(duì)應(yīng)的group中即可。

  • 添加全新的repository,在上面提到的gitolite.conf文件中配置好對(duì)應(yīng)的名稱和權(quán)限,再push到server即可,server會(huì)自動(dòng)幫你創(chuàng)建一個(gè)empty的bare repository。

  • 如果你已經(jīng)有一個(gè)repository,想把它加進(jìn)來(lái)的話,那就把它拷貝到git server上的~/repositories文件夾里,記得文件夾名要以.git結(jié)尾,并且這個(gè)repository一定要是bare的,(你可以通過(guò)拷貝repository里的.git文件夾,然后運(yùn)行git config --bool core.bare true,也可以運(yùn)行git clone --bare your-repository來(lái)得到bare repository)。這種方式還有一個(gè)額外的操作就是在server上運(yùn)行一次gitolite setup。

  • 移除repository,在配置文件中移除對(duì)應(yīng)的repo,然后push,接著再刪除server上對(duì)應(yīng)的文件夾即可。

  • 添加user,把pub key拷貝到keydir文件夾里

  • 刪除user,一樣,移除keydir里對(duì)應(yīng)的pub key

注意,上面說(shuō)的操作,都必須在clone的gitolite-admin里做更改,然后push,千萬(wàn)別在server上自己來(lái),那樣是沒(méi)用的,因?yàn)檫@些權(quán)限配置、repository管理都有一些額外的操作,gitolite-admin會(huì)幫你搞定一切。

把你的更改push回server上,試試clone,pull,push,看看權(quán)限是否正確。比如

git clone githost:proj3

關(guān)于“如何使用Gitolite來(lái)對(duì)Git的repository實(shí)現(xiàn)權(quán)限控制”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI