在本地服務器上實現多個用戶僅通過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用戶可寫即可。