焦點觀察:原生GIT版本服務器配置和測試

2023-01-14 11:25:28 來源:51CTO博客

前言:原生GIT版本服務器指使用Linux內核自帶的GIT軟件來構建版本服務器,而不采用Git-lab、SCM-Manager等非Linux原生系統。本文提供原生GIT安裝、配置、測試和安全性設置。以下實驗針對CentOS 7.9,其他類型的Linux和版本均大同小異。


1.原生Git的好處

原生Git默認訪問方式采用SSH協議,而大部分非原生Git工具采用HTTP/HTTPS協議。


(資料圖片)

HTTP/HTTPS協議是目前版本管理公有云(例如:Gitee、GitHub)采用的通用訪問方式。SSH和HTTP/HTTPS相比并不復雜,使用命令行或者圖形界面操作均相同。HTTP/HTTPS的優點是共享方便,就像GitHub一樣,幾萬個用戶拉取版本,但是大多數用戶并不修改。但是,企業內部的版本服務器并不需要太多共享,反而需要嚴格的訪問和權限控制,版本最終應控制到版本管理員手上。

原生git服務器優點有:

首先,原生git服務器內置于Linux內核,不需要安裝,多數管理員都有使用經驗,并且多數操作系統都包含了它及相關的管理工具。

其次,原生git服務器相比HTTP/HTTPS更加安全。不但所有傳輸數據都要經過授權和加密,而且在需要時可以利用Linux操作系統的用戶組和用戶權限來控制訪問和權限,粒度可以細到每個用戶的讀、寫、執行操作。

最后,原生git服務器相比HTTP/HTTPS更高效,在傳輸前也會盡量壓縮數據。HTTP/HTTPS是更高層的應用協議,封裝次數更多,導致延遲多,故障也會相對更多。


2.安裝支撐工具

執行如下命令安裝工具:

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel #安裝支撐工具curl、openssl、perl等

執行情況如下圖:

依賴關系:

詢問時輸入y:

密鑰提示時輸入y:


3.安裝GIT服務器

執行如下指令安裝git服務器:

yum install git #git一般在CentOS7已經安裝好了,為了保證正確性還是要執行一遍

執行效果如下:


4.添加GIT組和用戶

執行如下命令在CentOS中創建git用戶組為git_group(為每個部門、小組新建一個CentOS用戶組):

groupadd git-group #版本管理組groupadd maintain-group #運維組

創建git賬戶(為每個人新建一個CentOS用戶):

useradd git-admin -g git-group #默認版本管理員賬號passwd git-admin #設置默認版本管理員密碼

5.免密操作

在本地git使用clone、push、pull操作時,需要輸入CentOS上的用戶名和密碼,這樣做更加安全。但是,某些情況下需要免密,例如頻繁push的版本管理員自身或者某些開發人員,可以執行如下操作:

首先,到windows用戶目錄下,例如c:\user\<用戶名>\.ssh,查找id_rsa和id_rsa.pub文件,如果已經存在,則把id_rsa.pub文件提供給版本管理員。否則,所有人員在windows操作系統中,打開Git Bash,執行ssh-keygen,如下:

ssh-keygen

一直回車:

到默認目錄中查看密鑰文件:

需要免密的人員都需要創建密鑰對,并把公鑰提供給版本管理員。

其次,版本管理員上傳公鑰文件id_rsa.pub到CentOS操作系統,存放位置是對應人員在CentOS上的對應用戶的.ssh目錄中。

如果沒有.ssh目錄,版本管理員執行如下命令:

su git-admin #切換到默認管理員賬戶cd ~ #進入默認管理員的home目錄mkdir .ssh #創建認證目錄cd .ssh #進入認證目錄touch authorized_keys #創建認證密鑰文件

如下圖:

隨后馬上執行如下指令:

chmod 700 /home/git-admin/.ssh/ #修改認證目錄權限chmod 600 /home/git-admin/.ssh/authorized_keys #修改認證密鑰文件權限

如下圖:

把需要免密人員的公鑰上傳到服務器,推薦采用FinalShell的上傳功能,如下圖:

最后,追加對應人員的公鑰到authorized_keys文件中,如下:

cat id_rsa.pub >> authorized_keys #默認公鑰文件名id_rsa.pub。該指令比vim要好。

6.初始化GIT倉庫

切換到默認管理員賬戶,創建版本倉庫的根目錄:

su -  #切換到root賬戶cd /var  #進入可變數據目錄varmkdir repositories  #創建版本倉庫根目錄chown git-admin:git-group /var/repositories/   #修改版本倉庫根目錄擁有者chmod 711 /var/repositories/  #修改版本倉庫根目錄權限,擁有者(版本管理員git-admin)有讀、寫、執行權限,管理員組git-group有執行權限,其他組有執行權限

(備注:

chmod 命令可以用來修改用戶對某個文件或文件夾的權限。

Linux 系統中文件的基本權限由 9 個字符組成。r、w、x 分別表示讀、寫、執行權限。第1/2/3個字符針對擁有者,第4/5/6個字符針對擁有者所屬組,第7/8/9個字符針對其他組。

我們可以使用數字來代表各個權限,各個權限與數字的對應關系如下:

r --> 4

w --> 2

x --> 1

例如: rwxrw-r-x,擁有者、所屬組和其他人分別對應的權限值為:

擁有者 = rwx = 4+2+1 = 7

所屬組 = rw- = 4+2+0 = 6

其他組 = r-x = 4+0+1 = 5

所以,此權限對應的權限值就是 765。

接下來,我們使用如下指令創建一個倉庫??梢约s定規則:倉庫名稱采用英文,中文會有帶了一些故障,英文單詞之間使用連字符分隔,倉庫名稱后面必須要帶.git。

git init --bare library-manager.git #--bare表示空白倉庫,library-manager是倉庫名稱chown -R git-admin:git-group library-manager.git/  #調整版本倉庫目錄的擁有者,必須加-R參數,表示遞歸子目錄。擁有者是默認版本管理員chmod 760 -R library-manager.git/ #修改目錄權限,擁有者有讀、寫、執行權限,版本管理組git-group有讀、寫權限,其他組沒有權限

7.測試版本倉庫

(1)創建測試賬戶,然后測試上一步創建的版本倉庫。

例如:使用交付人員fengyonghua的名字來創建CentOS賬戶:

useradd feng-yong-hua  #新增測試賬戶:運維人員馮永華,我們可以約定:全拼中間加連字符usermod -a -G maintain-group feng-yong-hua  #把fengyonghua加入到運維組passwd feng-yong-hua  #設置初始密碼,后續密碼需要版本管理員來幫運維人員馮永華修改,密碼規則可以定為:姓名第一個字母+@+組名的第一個字母+隨機數。

(2)在一臺windows辦公電腦上安裝git和tortoisegit(參見2.2節)之后,啟動git bash,輸入指令:

git clone feng-yong-hua@192.168.183.138:/var/repositories/library-manager.git #克隆版本倉庫library-manager到本地計算機

其中,192.168.183.138是版本服務器的IP地址,可以使用指令:

Ifconfig #查看CentOS服務器的網卡配置

如上圖,第一個網卡ens33是有效的,IP地址為192.168.183.138。

上面的Git clone指令執行結果報錯說不能讀版本服務器上的倉庫,如下圖:

這是因為指定library-manager.git權限時只有git-group組有讀寫權限,而其他組沒有權限,feng-yong-hua是運維組的,所以沒有權限。只需再執行如下指令:

chmod 755-R library-manager.git/ #修改目錄權限,擁有者有讀、寫、執行權限,版本管理組git-group有讀、執行權限,其他組有讀、執行權限

重新在本地執行git clone指令:

上圖表示成功克隆版本服務器上的倉庫library-manager.git到本地。

繼續測試上傳目錄功能,在git bash里面執行如下指令來拷貝所需提交的文件夾到本地倉庫下屬目錄中:

cd library-manager/  #進入本地版本倉庫下屬目錄cp -r /d/mywork/版本管理制度 .  #拷貝所需提交的文件夾ll  #查看拷貝后的目錄情況

繼續執行如下指令以便于提交該文件夾到本地倉庫中:

cd 版本管理制度/  #進入所需提交的文件夾git init #初始化所需提交的文件夾到本地倉庫git add . #增加所需提交的文件夾的文件到本地倉庫中,即進入暫存區git commit -m "按照集團要求,編寫版本管理制度,已定稿" #提交文件到本地倉庫,并附加變更說明

繼續執行如下指令以便于推送本地倉庫到版本服務器的對應倉庫中:

git remote add origin feng-yong-hua@192.168.183.138:/var/repositories/library-manager.git  #新增版本服務器和版本倉庫配置origingit remote -v #查看版本服務器配置git push -u origin master #同步本地版本倉庫到版本服務器的library-manager.git倉庫master基線中

提示寫失敗,解決辦法是在版本服務器上執行如下指令添加其他組的寫權限:

chmod 757-R library-manager.git/ #修改目錄權限,擁有者有讀、寫、執行權限,版本管理組git-group有讀、執行權限,其他組有讀、寫、執行權限

重新在本地執行如下指令:

git push -u origin master #同步本地版本倉庫到版本服務器的library-manager.git倉庫master基線中

從以上測試步驟看,成功上傳“版本管理制度”目錄到版本服務器的library-manager.git倉庫中,測試成功。


8.安全性設置

不允許git賬戶通過SSH登錄遠程登錄到版本服務器,需要禁用CentOS上git賬戶:git_admin的SSH登錄權限。

先切換到root用戶,再編輯/etc/passwd文件:

找到下面一行,是git_admin的登錄規則:

改為:

標簽: 版本管理 服務器的 操作系統

上一篇:自定義函數打印100到200間的素數
下一篇:精彩看點:【深入淺出Seata原理及實戰】「入門基礎專題」探索Seata服務的AT模式下的分布式開發實戰指南(2)