Linux学习笔记-Ubuntu系统下配置用户ssh只能访问git仓库

目录

  • 一、基本信息
    • 1.1 系统信息
    • 1.2 git版本[^1]
      • 1.2.1 服务器端git版本
      • 1.2.2 客户端TortoiseGit版本
      • 1.2.3 客户端Git for windows版本
  • 二、创建git用户和群组[^2]
    • 2.1 使用groupadd创建群组
    • 2.2 创建git用户
      • 2.2.1 使用useradd创建git用户
      • 2.2.2 配置新建的git用户ssh免密访问
    • 2.3 创建git仓库文件夹
    • 2.4 切换到项目文件夹初始化git仓库
  • 三、配置权限
    • 3.1 直接使用zero账户访问
    • 3.2 通过gpasswd设置git仓库权限
    • 3.3 设置git_user的权限

一、基本信息

1.1 系统信息

zero@ubuntu:~$ uname -a
Linux ubuntu 5.15.0-79-generic #86-Ubuntu SMP Mon Jul 10 16:07:21 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

1.2 git版本1

1.2.1 服务器端git版本

zero@ubuntu:~$ git --version
git version 2.34.1

1.2.2 客户端TortoiseGit版本

Linux学习笔记-Ubuntu系统下配置用户ssh只能访问git仓库_第1张图片

1.2.3 客户端Git for windows版本

$ git --version
git version 2.38.1.windows.1

二、创建git用户和群组2

2.1 使用groupadd创建群组

zero@ubuntu:~$ sudo groupadd git	# 创建git群组
[sudo] password for zero:
zero@ubuntu:~$ getent group git		# 查询git群组信息
git:x:1001:

2.2 创建git用户

2.2.1 使用useradd创建git用户

zero@ubuntu:/etc/ssh$ sudo useradd -m -g git git_user		# 创建用户,并指定初始区组为git,创建家目录
zero@ubuntu:~$ id git_user						# 查询用户基本信息
uid=1001(git_user) gid=1001(git) groups=1001(git)
zero@ubuntu:/etc/ssh$ sudo passwd git_user		# 修改用户密码,不修改密码,可能后续ssh无法登录
New password:
Retype new password:
passwd: password updated successfully

此处创建用户的时候就指定初始群组为git了,亦可以先行创建用户,然后通过gpasswd将用户添加到创建的git群组中。

2.2.2 配置新建的git用户ssh免密访问

因为ssh的文件存储的是在配置用户家目录的.ssh文件夹下,所以新建的用户并不能直接使用管理用户之前配置的ssh密钥,需要重新配置ssh配置才可正常使用。

zero@ubuntu:~$ sudo cp .ssh/authorized_keys /home/git_user/.ssh/authorized_keys		# 拷贝密钥文件到新用户家目录下

zero@ubuntu:~$ sudo chown -R git_user /home/git_user/.ssh/authorized_keys			# 修改拥有者
[sudo] password for zero:
zero@ubuntu:~$ sudo chgrp -R git /home/git_user/.ssh/authorized_keys				# 修改拥有者群组
zero@ubuntu:~$ sudo getfacl /home/git_user/.ssh/authorized_keys

# 查询文件权限
getfacl: Removing leading '/' from absolute path names					
# file: home/git_user/.ssh/authorized_keys
# owner: git_user
# group: git
user::rw-
group::---
other::---

2.3 创建git仓库文件夹

# 创建文件夹,可以根据自己需求创建文件夹,一般项目文件放置到mnt目录下
# 不要在根目录直接创建仓库文件夹,否则,由于权限问题,git会无法访问到仓库。
zero@ubuntu:~$ sudo mkdir /mnt/git	

# 切换到仓库文件夹中,创建项目文件夹
zero@ubuntu:~$ cd /mnt/git
zero@ubuntu:/mnt/git$ ll
total 8
drwxr-xr-x 2 root root 4096 Sep  9 22:16 ./
drwxr-xr-x 3 root root 4096 Sep  9 22:16 ../

zero@ubuntu:/mnt/git$ sudo mkdir testproject	
zero@ubuntu:/mnt/git$ ll
total 12
drwxr-xr-x 3 root root 4096 Sep  9 22:16 ./
drwxr-xr-x 3 root root 4096 Sep  9 22:16 ../
drwxr-xr-x 2 root root 4096 Sep  9 22:16 testproject/

小插曲,苦于每次sudo都要输入密码,所以将zero账户的默认群组改成sudo,同时将账户添加到root群组中,省去每次sudo都需要输入密码。

# 实测过程中,发现此操作可以解决一部分,不过有的指令还是需要输入密码,后续再研究研究怎么处理。
zero@ubuntu:~$ sudo usermod -g sudo zero
zero@ubuntu:~$ id zero
uid=1000(zero) gid=27(sudo) groups=27(sudo),4(adm),24(cdrom),30(dip),46(plugdev),110(lxd)
zero@ubuntu:~$ sudo gpasswd -a zero root
Adding user zero to group root

2.4 切换到项目文件夹初始化git仓库

# 切换到项目文件夹
zero@ubuntu:~$ sudo mkdir /mnt/git	

# 初始化项目库,注意需要使用root权限,然后使用--bare参数		
zero@ubuntu:/mnt/git/testproject$ git init --bare
/mnt/git/testproject/branches/: Permission denied
zero@ubuntu:/mnt/git/testproject$ sudo git init --bare
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint:   git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint:   git branch -m <name>
Initialized empty Git repository in /mnt/git/testproject/

可以查看下仓库的权限,具体如下:

zero@ubuntu:/mnt/git/testproject$ cd ..
zero@ubuntu:/mnt/git$ ll testproject
total 40
drwxr-xr-x 7 root root 4096 Sep  9 22:21 ./
drwxr-xr-x 3 root root 4096 Sep  9 22:16 ../
drwxr-xr-x 2 root root 4096 Sep  9 22:21 branches/
-rw-r--r-- 1 root root   66 Sep  9 22:21 config
-rw-r--r-- 1 root root   73 Sep  9 22:21 description
-rw-r--r-- 1 root root   23 Sep  9 22:21 HEAD
drwxr-xr-x 2 root root 4096 Sep  9 22:21 hooks/
drwxr-xr-x 2 root root 4096 Sep  9 22:21 info/
drwxr-xr-x 4 root root 4096 Sep  9 22:21 objects/
drwxr-xr-x 4 root root 4096 Sep  9 22:21 refs/

可以看出目前权限为root,需要手动配置权限,用户才能正常访问。

三、配置权限

3.1 直接使用zero账户访问

由于创建的项目权限有的文件权限不足,我们就先给他修改下,给所有文件充足的权限,先确保能正常访问:
配置完之后仓库的默认权限是root,我们使用zero账户可以访问,如下:
Linux学习笔记-Ubuntu系统下配置用户ssh只能访问git仓库_第2张图片
若账户未通过2.2.2章节配置免密登录时,此时使用新建用户无法下载,如下,一直卡着,无法克隆下来(下图是win11系统没有提示,换成win10系统后,会提示需要输入密码)
Linux学习笔记-Ubuntu系统下配置用户ssh只能访问git仓库_第3张图片

3.2 通过gpasswd设置git仓库权限

# 将git仓库的权限配置给git群组,-R表示所有子项目相同设置,-m表示设定后续参数,g表示设置群组信息
zero@ubuntu:/mnt$ sudo setfacl -R -m g:git:rwx git
zero@ubuntu:/mnt$ ll git
total 12
drwxrwxr-x+ 3 root root 4096 Sep  9 22:16 ./
drwxr-xr-x  3 root root 4096 Sep  9 22:16 ../
drwxrwxr-x+ 7 root root 4096 Sep  9 22:21 testproject/
zero@ubuntu:/mnt$ getfacl git
# file: git
# owner: root
# group: root
user::rwx
group::r-x
group:git:rwx
mask::rwx
other::r-x

3.3 设置git_user的权限

多用户使用时,建议修改git群组的权限,不给git群组多余的权限,只提供指定项目文件夹的权限即可,这样,新用户只能有限的访问git项目,无法修改系统参数。
闲话一嘴:想要配置用户只能通过ssh拉取git,但是不能通过ssh登录服务器,但是这个对使用ssh访问git的操作有点冲突,以后再看看。


  1. git仓库配置过程详见Ubuntu Server搭建Git服务器 ↩︎

  2. 关于ubuntu的用户和群组管理可参考:Linux学习笔记-Ubuntu系统用户、群组、权限管理 ↩︎

你可能感兴趣的:(#,Ubuntu,linux,学习,笔记)