git目录必须有可读写权限吗?
时间:2021-11-18

在这篇文章中,我将介绍如何在一阿里云主机上构建自己的git服务器。详细介绍了每一步,具体如下:

1.安装git。

首先安装git。一般来说,服务器已经内置了git安装包,我们只需要执行简单的安装命令就可以安装。


比如:

$ yum install git # centos


$ apt-get install git # ubuntu

直接使用root登录服务器进行操作也是为了方便演示。

git不同于mysql。安装mysql时,必须安装mysql-server,即mysql服务器。git是分布式的。每台安装git的计算机都是客户端和服务器。git和git可以相互通信,我们所谓的git服务器实际上与我们自己的计算机没有本质区别。然而,为了更有效地管理项目,我们都采用集中管理的方法,因此我们创建了一个git服务器作为其他人提交代码的最终终端。

2.创建git用户和权限。

当然,我们不允许直接使用root进行通信交互,所以我们创建一个git用户作为未来提交代码的用户。

$ adduser git

执行此命令后,您发现在/home目录下有一个git目录。按理说,现在你的系统中有更多的git用户,家庭目录在/home/git中。但是,我们不希望这个用户通过ssh连接到服务器上,所以我们应该禁止这个用户使用ssh连接来操作。我们通过编辑权限文件来处理:

$ vi /etc/passwd

找到类似于

git:x:1001:1001:,,,:/home/git:/bin/bash

这样的行,你可以看到最后的/bin/bash是允许ssh连接操作的权限。我们将其改为/user/bin/git-shell,结果如下:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样处理好了,git就连不上ssh了(其实是可以的,只是会闪退)。

执行:

$ passwd git 123456(你的密码)

以后提交代码时使用此密码。

3.公钥

这是git中特殊的一步操作。通信时,客户端和服务器需要一个证书来验证。操作方法很简单,首先在自己的电脑上(ubuntu)生成自己的公钥:

$ cd ~


$ ssh-keygen -t rsa

这时,你自己的电脑上有一个公钥,但它在哪里呢?在ssh目录下,.开头的文件夹都是隐藏的,但是可以cd进去。

$ cd .ssh


$ vi id_rsa.pub

这样就可以看到你的公钥,复制所有内容。接下来,我们将回到服务器上进行操作。

$ cd /home/git/


$ mkdir .ssh


$ cd .ssh


$ vi authorized_keys

如果是裸机,服务器上/home/git目录下应该没有ssh目录,所以我们自己创建,打开(自动创建)authorized_keys,然后粘贴刚刚复制的公钥,ok,保存退出。

使用证书主要是提交代码,无需密码。

4.初始化一个git仓库。

我习惯于把这种东西扔到/var下去,所以我们在/var下创建git目录。

$ cd /var


$ mkdir git


$ chown -R git:git git


$chmod 777 git


$ cd git

接下来,我们用git命令初始化一个仓库:

$ git init --bare arepoforyourproject.git

初始化完成后,空仓库就可以了。

这里有一个细节,那就是git目录必须有可读写权限,因为当我们在push时,我们使用git用户将其推送到服务器上,并且会有一个写入过程。如果不赋予可写权限,push将失败。

5.试试克隆。

回到你当地的电脑上,我们试着通过克隆来使用仓库:

$ git clone git@10.0.0.121:/var/git/arepoforyourproject.git

然后提示你输入git密码,然后提示你克隆一个空白版本库。这说明服务器已经OK了。

6.多用户和权限管理。

如果团队很小,在服务器/home/git/.sh/authorized_keys文件中收集每个人的公钥是可行的。假如团队有几百人,就不能这样玩,此时,可以用Gitosis来管理公钥。


标签: git服务器用户