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

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用户可写即可。

相关文章:

  • mac环境下chatwoot客服聊天docker本地部署+对接通义千问Qwen2.5
  • RAG 架构地基工程-Retrieval 模块的系统设计分享
  • 安卓15/aosp15/lineage21使用brunch编译老是报错OOM内存不足
  • 怎样才能把网页数据保存到网络上?
  • 【redis】在 Spring中操作 Redis
  • 设计模式之命令模式:原理、实现与应用
  • u-net系列算法
  • 工作相关记录
  • SpringSecurity——前后端分离登录认证
  • 区块链赋能项目包装融资:开启融资新范式
  • OpenCV中距离公式
  • Visual C++ 6.0(.dsp/.dsw)项目升级成VS2022
  • stm32g030移植RT-Thread
  • Enovia许可分析的自动化解决方案
  • STM32八股【1】-----启动流程和startup文件理解
  • dify中飞书插件安装及授权
  • AI Agent设计模式 四种高层次模式以及更具体的九种模式
  • Docker安装教程详解
  • [每周一更]-(第137期):Go + Gin 实战:Docker Compose + Apache 反向代理全流程
  • Redis Lua脚本实现令牌桶限流算法
  • 牧原股份子公司与养殖户种猪买卖纠纷案一审胜诉
  • 牟海松任国家信访局副局长
  • 警方通报“网约车司机偷拍女乘客”:已被行政拘留
  • “影像上海”中的自媒体影像特展:无论何时,影像都需要空间
  • 王毅同印度国家安全顾问多瓦尔通电话
  • 重温经典|《南郭先生》:不模仿别人,不重复自己