在本地服务器上实现多个用户仅通过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就行