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.pswp.cn/pingmian/73320.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73320.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73320.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

全文通讀:126頁華為IPD集成產品開發與DFX實戰【文末附可編輯PPT下載鏈接】

綁定資料內容: 12023華為流程體系及落地實施【108頁 PPT】.pptx22024版基于華為IPD與質量管理體系融合的研發質量管理【63頁】.pptx

//TODO 動態代理的本質?

待解決 //TODO 面試題 為啥mybatis的mapper只有接口沒有實現類,但它卻能工作??(ai參考,待深究源碼) 1. 動態代理生成代理對象 MyBatis 使用 JDK 動態代理 為每個 Mapper 接口生成代理對象: ? 核心類:MapperProxy(…

C++11中智能指針的使用(shared_ptr、unique_ptr、weak_ptr)

C11中智能指針的使用(shared_ptr、unique_ptr、weak_ptr) 一、shared_ptr原理 shared_ptr 是另一種智能指針,用于實現多個 shared_ptr 實例共享同一個對象的所有權。它通過內部的控制塊(通常是一個包含計數器和指向對象的指針的結構)來管理…

2024年認證杯SPSSPRO杯數學建模B題(第二階段)神經外科手術的定位與導航全過程文檔及程序

2024年認證杯SPSSPRO杯數學建模 B題 神經外科手術的定位與導航 原題再現: 人的大腦結構非常復雜,內部交織密布著神經和血管,所以在大腦內做手術具有非常高的精細和復雜程度。例如神經外科的腫瘤切除手術或血腫清除手術,通常需要…

嘗試在軟考62天前開始成為軟件設計師-信息系統安全

安全屬性 保密性:最小授權原則(能干活的最小權限)、防暴露(隱藏)、信息加密、物理保密完整性(防篡改):安全協議、校驗碼、密碼校驗、數字簽名、公證 可用性:綜合保障( IP過濾、業務流控制、路由選擇控制、審計跟蹤)不可抵賴性:數字簽名 對稱加密 DES :替換移位 3重DESAESR…

Rocky9.5基于sealos快速部署k8s集群

首先需要下載 Sealos 命令行工具,sealos 是一個簡單的 Golang 二進制文件,可以安裝在大多數 Linux 操作系統中。 以下是一些基本的安裝要求: 每個集群節點應該有不同的主機名。主機名不要帶下劃線。 所有節點的時間需要同步。 需要在 K8s …

G口服務器和普通服務器之間的區別

今天小編主要來為大家介紹一下G口服務器和普通服務器之間的區別! 首先,從硬件配置上看,普通服務器通常都會配備中央處理器、內存和硬盤等基本的硬件配置,能夠適用于各種應用程序和服務;G口服務器除了基礎的硬件配置還增…

Cursor軟件如何刷新機器碼流程

一.退出Cursor軟件賬號 打開Cursor軟件,點擊設置-->General-->Account-->Log out,現將Cursor軟件上登錄的賬戶退出。 二.將Cursor官網上登錄的Cursor賬戶也清空掉 點擊頭像--> ACCOUNT SETTINGS -->Account-->Advanced-->Delete Account-->…

類與對象(中)(詳解)

【本節目標】 1. 類的6個默認成員函數 2. 構造函數 3. 析構函數 4. 拷貝構造函數 5. 賦值運算符重載 6. const成員函數 7. 取地址及const取地址操作符重載 1.類的6個默認成員函數 如果一個類中什么成員都沒有,簡稱為空類。 空類中真的什么都沒有嗎&…

開發語言漫談-groovy

groovy是一門腳本語言,在前期的腳本語言中簡單介紹了下。現在再深入介紹下,因為它是本平臺上選用的腳本語言。所謂腳本語言就是不用編譯,直接執行。這種特色非常適合做嵌入編程,即編即用。我們知道平臺后臺的業務開發語言是Java&a…

React+Ant Design的Layout布局實現暗黑模式切換

目錄 效果預覽完整代碼我遇到的BUG問題代碼BUG1:暗黑模式下內容區不變成深色BUG2:光亮模式下的左右區域是深色 補充知識ConfigProvider是什么?Ant Design中的theme如何使用?theme 配置的常見字段主題算法通過 useToken 獲取主題 效…

TCP 三次握手與四次揮手過程

TCP 作為一種面向連接的、可靠的傳輸層協議,其連接管理機制對于保障數據的可靠傳輸至關重要。 三次握手(建立連接) 三次握手是 TCP 建立連接時所采用的機制,其目的在于確保客戶端和服務器雙方都具備發送和接收數據的能力&#x…

【線程安全的單例模式和STL是否是線程安全/智能指針是否是線程安全】

文章目錄 一、單例模式的特點二、餓漢模式實現單例三、懶漢模式實現單例四、STL線程安全嗎?五、智能指針線程安全嗎? 一、單例模式的特點 一個類,只應該實例化了一個對象,就是單例。 二、餓漢模式實現單例 舉個餓漢模式的例子&…

力扣DAY24 | 熱100 | 回文鏈表

前言 簡單 √ 是反轉鏈表的衍生題,很快寫完了。不過沒考慮到恢復鏈表結構的問題。 題目 給你一個單鏈表的頭節點 head ,請你判斷該鏈表是否為回文鏈表。如果是,返回 true ;否則,返回 false 。 示例 1: 輸…

【GL010】C++

1.C中的const關鍵字有哪些用法? 1.修飾變量:表示變量的值不可修改。 const int a 10; 2.修飾指針: const int* p: // 指針指向的內容不可修改。 int* const p: // 指針本身不可修改。 const int* const…

金融行業 UE/UI 設計:解鎖高效體驗,重塑行業界面

在數字化浪潮中,金融行業的競爭日益激烈,用戶體驗(UE)和用戶界面(UI)設計成為企業脫穎而出的關鍵。蘭亭妙微憑借豐富的經驗和創新的方法,為金融行業打造了一套行之有效的 UE/UI 解決方案&#x…

C語言字符函數,字符串函數以及內存函數

那么博主寫這一片博客的目的就是為下一篇c的string類做鋪墊,那么下面就請期待博主的下一篇文章吧。 目錄 1.字符函數 2.字符串函數(均在string.h頭文件中) strlen的使用和模擬實現 strcpy 的使用和模擬實現 strcat 的使用和模擬實現 s…

_DISPATCHER_HEADER結構中的WaitListHead和_KWAIT_BLOCK的關系

第一部分: // // Wait block // // begin_ntddk begin_wdm begin_nthal begin_ntifs begin_ntosp typedef struct _KWAIT_BLOCK { LIST_ENTRY WaitListEntry; struct _KTHREAD *RESTRICTED_POINTER Thread; PVOID Object; struct _KWAIT_BLOCK *R…

flutter 自定義控件RenderObjectWidget使用

CustomWidget的自定義組件的注釋還是比較清晰的 參考文檔Flutter實戰 import package:flutter/cupertino.dart; import package:flutter/gestures.dart; import package:flutter/material.dart; /* * 如果組件不會包含子組件,則我們可以直接繼承自 LeafRenderObject…

機器視覺場景應用中,有沒有超景深的工業鏡頭

在機器視覺領域,確實存在具有超景深特性的工業鏡頭,這類鏡頭通過特殊的光學設計或技術手段,能夠顯著擴大清晰成像的縱向范圍,從而滿足復雜檢測場景中對多平面物體清晰成像的需求。以下是相關技術要點及典型鏡頭類型: 1. 遠心鏡頭 遠心鏡頭是超景深鏡頭的典型代表,其特點包…