git是一款可以替代svn對**版本進行管理的工具,近幾年,這款由大神linus開發,託管著linux核心**的小軟體大有在國內徹底取代svn的架勢。
git雖說很強大,不論是多分支開發,分布式**庫都像重慶小火鍋一樣讓人吃上一口就再也無法停下來,但是git也有乙個很「嚴重」的問題,那就是沒有許可權控制功能。git的建立是作為開源社群的**版本管理工具而存在的,但當我們把git引入到團隊內部的開發流程中後就會發現沒有許可權控制的git無法保護核心**的安全,有時候一段錯誤的**神不知鬼不覺的出現在底層類庫中造成災難性的後果。
幸好還有ssh。
由於git的主流連線方式是ssh連線,因此當我們試圖控制乙個git中心庫許可權的時候,可以通過控制ssh登入使用者的許可權來間接的達到目的。
那如何控制ssh的使用者許可權呢?既然我們ssh到中心庫的時候用的可能都是git使用者(linux的使用者),又如何區分到底真是使用者是誰呢?這裡就不得不說ssh的公私鑰模式,當我們將某乙個使用者生成的公鑰新增到git使用者的 ~/.ssh/authorized_keys
檔案後,以該使用者身份ssh連線到git使用者時可以免去輸入密碼的步驟。而git許可權控制的關鍵環節就在這個authorized_keys檔案中。
一般典型的authorized_keys檔案每一行都是乙個公鑰串,簡單直接,但其實這個檔案可以支援更豐富的ssh連線模式,請看下方的截圖
很顯然,這裡面除了公鑰之外還包括幾個其他的配置:
command:以該公鑰對應的私鑰登陸後執行的廚師命令
no-***xx:表示不支援該模式的連線
最後才是對應的公鑰。
如此配置的話,如果使用者試圖使用ssh預設連線方式會得到如下的返回結果
這樣可以限制使用者不可以毫無顧忌的連線到git使用者進而繞過ssh的許可權控制系統。而每次git的push/pull/clone等操作其實都是一次ssh連線從而啟用command命令而執行指令碼。
那麼剩下的就好解釋了,指令碼接受引數,然後去做使用者許可權的判斷,如果使用者具有許可權那麼直接執行ssh連線附帶的命令請求,如果沒有許可權直接exit 1就好啦。
RabbitMQ許可權控制原理
我們在使用mq搭建系統的時候,經常要開放佇列給外接系統訪問。外接系統的穩定性是不可控的。為了防止外接系統不穩定導致誤操作破壞了mq的配置或資料,需要對mq做比較精細的許可權控制。我的需求是這樣的 我有乙個資料查詢服務,並且通過mq推送資料變動訊息。對接mq的每個系統都會有自己乙個獨立的佇列來讀取訊息...
Git版本控制的原理
工作目錄 working directory 暫存區 stage index 資源庫 repository或git directory 遠端的git倉庫 remote directory workspace 工作區,就是你平時存放專案 的地方 index stage 暫存區,用於臨時存放你的改動,事...
RBAC 許可權控制詳解(一) 原理
rbac 中文名稱 基於角色的訪問控制 作用 實現訪問控制 核心 角色 英文名稱 role basedaccess control 一種思想.根據 rbac 思想進行資料庫設計,根據資料庫設計更好的完成許可權控制.1 選單功能 2 url 控制 控制訪問不同的控制器.3 資源可見性控制 頁面某些元素...