前言:原生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.安装支撑工具
执行如下命令安装工具:
执行情况如下图:
依赖关系:
询问时输入y:
密钥提示时输入y:
3.安装GIT服务器
执行如下指令安装git服务器:
执行效果如下:
4.添加GIT组和用户
执行如下命令在CentOS中创建git用户组为git_group(为每个部门、小组新建一个CentOS用户组):
创建git账户(为每个人新建一个CentOS用户):
5.免密操作
在本地git使用clone、push、pull操作时,需要输入CentOS上的用户名和密码,这样做更加安全。但是,某些情况下需要免密,例如频繁push的版本管理员自身或者某些开发人员,可以执行如下操作:
首先,到windows用户目录下,例如c:\user\<用户名>\.ssh,查找id_rsa和id_rsa.pub文件,如果已经存在,则把id_rsa.pub文件提供给版本管理员。否则,所有人员在windows操作系统中,打开Git Bash,执行ssh-keygen,如下:
一直回车:
到默认目录中查看密钥文件:
需要免密的人员都需要创建密钥对,并把公钥提供给版本管理员。
其次,版本管理员上传公钥文件id_rsa.pub到CentOS操作系统,存放位置是对应人员在CentOS上的对应用户的.ssh目录中。
如果没有.ssh目录,版本管理员执行如下命令:
如下图:
随后马上执行如下指令:
如下图:
把需要免密人员的公钥上传到服务器,推荐采用FinalShell的上传功能,如下图:
最后,追加对应人员的公钥到authorized_keys文件中,如下:
6.初始化GIT仓库
切换到默认管理员账户,创建版本仓库的根目录:
(备注:
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。
)
接下来,我们使用如下指令创建一个仓库。可以约定规则:仓库名称采用英文,中文会有带了一些故障,英文单词之间使用连字符分隔,仓库名称后面必须要带.git。
7.测试版本仓库
(1)创建测试账户,然后测试上一步创建的版本仓库。
例如:使用交付人员fengyonghua的名字来创建CentOS账户:
(2)在一台windows办公电脑上安装git和tortoisegit(参见2.2节)之后,启动git bash,输入指令:
其中,192.168.183.138是版本服务器的IP地址,可以使用指令:
如上图,第一个网卡ens33是有效的,IP地址为192.168.183.138。
上面的Git clone指令执行结果报错说不能读版本服务器上的仓库,如下图:
这是因为指定library-manager.git权限时只有git-group组有读写权限,而其他组没有权限,feng-yong-hua是运维组的,所以没有权限。只需再执行如下指令:
重新在本地执行git clone指令:
上图表示成功克隆版本服务器上的仓库library-manager.git到本地。
继续测试上传目录功能,在git bash里面执行如下指令来拷贝所需提交的文件夹到本地仓库下属目录中:
继续执行如下指令以便于提交该文件夹到本地仓库中:
继续执行如下指令以便于推送本地仓库到版本服务器的对应仓库中:
提示写失败,解决办法是在版本服务器上执行如下指令添加其他组的写权限:
重新在本地执行如下指令:
从以上测试步骤看,成功上传“版本管理制度”目录到版本服务器的library-manager.git仓库中,测试成功。
8.安全性设置
不允许git账户通过SSH登录远程登录到版本服务器,需要禁用CentOS上git账户:git_admin的SSH登录权限。
先切换到root用户,再编辑/etc/passwd文件:
找到下面一行,是git_admin的登录规则:
改为: