关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

云服务器数据安全-git文件服务器

发布时间:2023-12-25 10:38:11

搭建git服务器: 


首先要选择搭建git时的协议,在文档里有三种协议

      1.本地协议:就是多人使用一台电脑,就是使用不同的账号登录同一台电脑,使用共享文件来同时进行操作,很危险。因为你的所有代码版本库如果长存于同一台电脑,更可能发生灾难性的损失。使用命令为:      


1 $ git clone /opt/git/project.git

1.

    注意:因此本地协议常见于团队每一个成员都对一个共享的文件系统(例如一个挂载的 NFS)拥有访问权,通过共享文件夹避免多人使用一台电脑的缺点(单点问题)。


    使用本地协议执行如下的命令:      


1 $ git clone /opt/git/project.git

    或可以执行这个命令:      


1 $ git clone file:///opt/git/project.git

    如果在 URL 开头明确的指定 file://,那么 Git 的行为会略有不同。 如果仅是指定路径,Git 会尝试使用硬链接(hard link)或直接复制所需要的文件。 如果指定 file://,Git 会触发平时用于网路传输资料的进程,那通常是传输效率较低的方法。 指定 file:// 的主要目的是取得一个没有外部参考(extraneous references)或对象(object)的干净版本库副本– 通常是在从其他版本控制系统导入后或一些类似情况需要这么做。 在此我们将使用普通路径(即/opt/git/project.git),因为这样通常更快。


      2.HTTP 协议: http协议又分为两种 一种为智能(Smart) HTTP 协议 和 哑(Dumb) HTTP 协议 。命令类似于


1 $ git clone https://example.com/gitproject.git


     3.ssh协议: 架设 Git 服务器时常用 SSH 协议作为传输协议,优点大多数环境下已经支持 SSH 访问,并且非常普遍性,架设和使用都很容易。命令类似于:


1 $ git clone ssh://user@server/project.git


  4.git协议:


  Git 协议包含在 Git 里的一个特殊的守护进程(即要安装git-daemon软件包);它监听在一个特定的端口(9418),类似于 SSH 服务,但是访问无需任何授权。 要让版本库支持 Git 协议,需要先创建一个 git-daemon-export-ok 文件 —— 它是 Git 协议守护进程为这个版本库提供服务的必要条件 —— 但是除此之外没有任何安全措施。 要么谁都可以克隆这个版本库,要么谁也不能。 这意味着,通常不能通过 Git 协议推送。 由于没有授权机制,一旦你开放推送操作,意味着网络上知道这个项目 URL 的人都可以向项目推送数据。 不用说,极少会有人这么做。


  注意:git-daemon-export-ok 文件是告诉Git 协议哪个仓库提供无授权访问。


    所以你需要告诉 Git 哪些仓库允许基于服务器的无授权访问。 你可以在相关仓库下创建一个名为 git-daemon-export-ok 的文件来实现。如下:


1 $ cd /path/to/project.git        //进入Git服务器上的project.git版本库存储路径

2 $ touch git-daemon-export-ok


    但有些人会发现自己的版本库没有创建git-daemon-export-ok,而在git clone过程能无授权访问。那是为什么?是因为在git-daemon守护进程启动过程中使用了--export-all 参数选项。


    --export-all  :使用该选项后,在git仓库中就不必创建git-daemon-export-ok文件。如果不使用该选项,则还需要创建git-daemon-export-ok文件。


Git 协议优点:目前,Git 协议是 Git 使用的网络传输协议里最快的。


Git 协议缺点:是缺乏授权机制。 把 Git 协议作为访问项目版本库的唯一手段是不可取的。 一般的做法里,会同时提供 SSH 或者 HTTPS 协议的访问服务,只让少数几个开发者有推送(写)权限,其他人通过 git:// 访问只有读权限。 Git 协议也许也是最难架设的。 它要求有自己的守护进程,这就要配置 xinetd 或者其他的程序,这些工作并不简单。 它还要求防火墙开放 9418 端口,但是企业防火墙一般不会开放这个非标准端口。 而大型的企业防火墙通常会封锁这个端口。


本例搭建本地协议的git服务器:


在搭建本地协议的git服务器以多人使用一台电脑的场景开始,系统以Centos 7为环境:


1)服务器创建一个空版本库:


[root@db-52 ~]# yum -y install git    //安装git

[root@db-52 ~]# mkdir /var/git         //版本库目录

[root@db-52 ~]# cd /var/git

[root@db-52 git]# git init --bare /var/git/wordpress.git   //创建名为wordpress.git空版本库

2)查看版本库的权限


1 [root@db-52 ~]# ll -d /var/git/wordpress.git

2 drwxr-xr-x. 7 root root 4096 9月  29 01:34 /var/git/wordpress.git

1.

2.

3)创建用户,以模拟多人使用一台电脑


1 [root@db-52 ~]# useradd tom

2 [root@db-52 ~]# useradd jack

3 [root@db-52 ~]# echo 1 | passwd --stdin tom

4 [root@db-52 ~]# echo 1 | passwd --stdin jack


4)添加权限:修改对wordpress版本添加tom,jack用户权限(git push需要对wordpress的w权限)


  规划:对WordPress库 tom用户有rw的读和提交权限;jack用户只有r的读的权限。


1 [root@db-52 ~]# ll -d /var/git/wordpress.git

 2 drwxr-xr-x. 7 root root 4096 9月  29 01:34 /var/git/wordpress.git

 3 [root@db-52 ~]# getfacl /var/git/wordpress.git/

 4 getfacl: Removing leading '/' from absolute path names

 5 # file: var/git/wordpress.git/

 6 # owner: root

 7 # group: root

 8 user::rwx

 9 group::r-x

10 other::r-x

11 [root@db-52 ~]# setfacl -Rm u:tom:rwx /var/git/wordpress.git/

12 [root@db-52 ~]# setfacl -Rm u:jack:rx /var/git/wordpress.git/

13 [root@db-52 ~]# getfacl /var/git/wordpress.git/

14 getfacl: Removing leading '/' from absolute path names

15 # file: var/git/wordpress.git/

16 # owner: root

17 # group: root

18 user::rwx

19 user:tom:rwx

20 user:jack:r-x

21 group::r-x

22 mask::rwx

23 other::r-x

5)tom对WordPress版本库进行下载并提交新增内容 


1 [root@db-52 ~]# su - tom

 2 [tom@db-52 ~]$ mkdir git

 3 [tom@db-52 ~]$ cd git/

 4 [tom@db-52 git]$ git clone file:///var/git/wordpress.git          //下载一个版本库

 5 正克隆到 'wordpress'...

 6 warning: 您似乎克隆了一个空版本库。

 7 [tom@db-52 git]$ ls

 8 wordpress

 9 [tom@db-52 git]$ cd wordpress/

10 [tom@db-52 wordpress]$ echo wx > index.html

11 [tom@db-52 wordpress]$ echo tom > tom.txt

12 [tom@db-52 ~]$ git config --global push.default simple

13 [tom@db-52 wordpress]$ git config --global user.email "tom@example.com"    //全局配置邮箱

14 [tom@db-52 wordpress]$  git config --global user.name "tom"      //全局配置用户名

15 [tom@db-52 wordpress]$ git add .              //

16 [tom@db-52 wordpress]$ git commit -m "tom code"     //

17 [master(根提交) b693669] tom code

18  2 files changed, 2 insertions(+)

19  create mode 100644 index.html

20  create mode 100644 tom.txt

21 [tom@db-52 wordpress]$ git push              //上传新增内容

22 Counting objects: 4, done.

23 Compressing objects: 100% (2/2), done.

24 Writing objects: 100% (4/4), 250 bytes | 0 bytes/s, done.

25 Total 4 (delta 0), reused 0 (delta 0)

26 To file:///var/git/wordpress.git

27  * [new branch]      master -> master

28 [tom@db-52 wordpress]$ exit

6)jack用户对WordPress版本库只有下载无提交功能。


1 [root@db-52 ~]# su - jack

 2 [jack@db-52 ~]$ mkdir git

 3 [jack@db-52 ~]$ cd git

 4 [jack@db-52 git]$ git clone file:///var/git/wordpress.git/

 5 正克隆到 'wordpress'...

 6 remote: Counting objects: 4, done.

 7 remote: Compressing objects: 100% (2/2), done.

 8 remote: Total 4 (delta 0), reused 0 (delta 0)

 9 接收对象中: 100% (4/4), done.

10 [jack@db-52 git]$ ls

11 wordpress

12 [jack@db-52 git]$ cd wordpress/

13 [jack@db-52 wordpress]$ ls

14 index.html  tom.txt

16 [jack@db-52 wordpress]$ echo jack > jack.txt

17 [jack@db-52 wordpress]$ git config --global user.email "jack@example.com"

18 [jack@db-52 wordpress]$ git config --global user.name "jack"

19 [jack@db-52 wordpress]$ git config --global push.default simple

20 

21 

22 [jack@db-52 wordpress]$ git add .

23 [jack@db-52 wordpress]$ git commit -m 'jack code'

24 [master 66b1be3] jack code

25  1 file changed, 1 insertion(+)

26  create mode 100644 jack.txt

27 [jack@db-52 wordpress]$ git push

28 Counting objects: 4, done.

29 Compressing objects: 100% (2/2), done.

30 Writing objects: 100% (4/4), 250 bytes | 0 bytes/s, done.

31 Total 4 (delta 0), reused 0 (delta 0)

32 remote: error: insufficient permission for adding an object to repository database ./objects

33 remote: fatal: failed to write object

34 error: unpack failed: unpack-objects abnormal exit

35 To file:///var/git/wordpress.git

36  ! [remote rejected] master -> master (unpacker error)

37 error: 无法推送一些引用到 'file:///var/git/wordpress.git'

38 [jack@db-52 wordpress]$


补充:


  1)git配置文件的优先级


      .git/conifg > ~/.gitconfig > etc/gitconfig


    说明:

      第一个(.git/conifg)指的是特定版本库的配置文件;

      第二个(~/.gitconfig)是当前系统用户环境下的配置文件;

      第三个(etc/gitconfig)是系统级别的配置文件。


搭建中引出问题:


1)/etc/services


2)/etc/inetd

git 云服务器 数据安全 git 文件服务器


/template/Home/Zkeys/PC/Static