当前位置: 首页 > article >正文

SSH密钥认证 + 文件系统权限控制 + Git仓库配置+封存与解封GIT仓库

在本地服务器上实现多个用户仅通过git push操作修改仓库、禁止其他改写方式的需求,可以通过以下步骤实现:

方法概述
通过SSH密钥认证 + 文件系统权限控制 + Git仓库配置,确保用户仅能通过git push命令提交修改,而无法通过直接操作服务器文件或其他方式修改仓库。以下是具体操作流程:

步骤 1:创建专用Git用户与裸仓库
1. 创建Git系统用户(用于管理仓库访问权限)

sudo adduser git  # 创建用户名为git的系统账户
sudo passwd git   # 设置密码(可选,后续用SSH密钥认证更安全)

2. 初始化裸仓库(无工作区,仅存储版本数据)

sudo su git  # 切换到git用户
mkdir -p /home/git/repos/project.git  # 创建仓库目录
cd /home/git/repos/project.git
git init --bare  # 初始化裸仓库

3. 设置目录权限(限制非Git用户访问)

sudo chown -R git:git /home/git/repos  # 确保git用户拥有仓库所有权
sudo chmod -R 750 /home/git/repos     # 仅允许git用户及其组读写

4. 手动添加.ssh文件夹和authorized_keys文件

# 在服务器上操作(以git用户身份)
mkdir -p /home/git/.ssh
touch /home/git/.ssh/authorized_keys
chmod 600 /home/git/.ssh/authorized_keys  # 设置权限

步骤 2:配置SSH密钥认证与命令限制
1. 用户生成SSH密钥对(每个用户本地操作)

ssh-keygen -t rsa -C "user@example.com"  # 本地生成密钥,默认保存到~/.ssh/

usr@example.com 可以自己定义:比如:dd@dd。

rsa的形式也可以换其他的编码方式。

2. 这个时候在用户的home下面有个/home/.ssh/会产生一个私钥和一个公钥。公钥的尾缀是.pub

打开公钥文件,复制公钥文件内的内容:

步骤3:使用git用户在git的authorized_keys文件中添加命令如下:

command="git-shell -c \"$SSH_ORIGINAL_COMMAND\"",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAAB3NzaC... user@example.com

最后的部分ssh-rsa AAAAB3NzaC... user@example.com  替换为  之前公钥的部分。

步骤4:GIT客户端

1. 用户克隆仓库(使用SSH协议)

git clone git@yourserver:/home/git/repos/project.git

yourserver改为hostname

这其中需要输入git用户的密码

第一次时要选yes:

2. 正常进行用户提交与推送

git add .  # 添加文件到暂存区
git commit -m "Initial commit"
git push origin main  # 仅允许通过push操作修改仓库

这其中也会要求输入git用户的密码。如果使用smartgit,可以保存密码,这样每次就不用再输入密码了。

使用smartgit进行第一次push,会弹出对话框:

输入git用户密码,并保存。

选择不使用master password

选择accept。

然后就可以正常使用了。

PULL时,直接选PULL就行

封存与解封GIT仓库

1. 封存:对GIT仓库使用chmod -R 555设置为只读。如果还不放心,可以使用root用户,利用chown改变GIT仓库的所有者,并设置为只读。这样所有用户只能pull,不能push

2. 解封:将GIT仓库改为原来的git用户可写即可。


http://www.kler.cn/a/597179.html

相关文章:

  • Redis 全攻略:从基础操作到 Spring Boot 集成实战
  • uniapp可拖拽消息数徽标draggable-badge,仿手机qq聊天列表未读数徽标动效
  • 【第12节】windows sdk编程:动态链接库与静态库
  • AI代码编辑器:Cursor和Trae
  • git tag以及git
  • 有序数组双指针问题
  • OpenCV-Contrib常用扩展模块
  • 【保姆级】Ubuntu 24.04安装Docker
  • 计数组合型dp(四种小球盒子问题总结)
  • 深入理解Linux网络随笔(五):深度理解本机网络I/O
  • 希尔排序
  • vim的一般操作(分屏操作) 和 Makefile 和 gdb
  • 实验10决策树
  • 【Uniapp】关于核心页面生命周期流程详解
  • 面试题(3)
  • Unity代码中修改动画速度
  • C#里使用libxl的数字格式
  • 1.Go - Hello World
  • NR SRS Configuration
  • 天津大学:《2025深度解读DeepSeek:原理与效应》|44页|附PPT下载方法