我想透過 ssh 設定一個 git 伺服器,並為該專案使用一個 SSH 帳戶。所有專案成員都應將其 ssh 金鑰列在authorized_keys 中。鎖定應該限制存取只能執行 git 操作,並且只能在專用目錄內進行。
創建這樣的設定的最佳方法是什麼?有 git-shell,它顯然可以鎖定只執行 git 命令,但我不知道如何限制對單一目錄的存取。還有各種 Python 和 Ruby 包裝器 - 我應該信任其中哪一個?
答案1
答案2
你的威脅模型是什麼?
好人不小心破壞了 git 儲存庫或其他資料:確保您的用戶只能寫入他們的 homedir、tmp 和 git 儲存庫。每次提交後備份儲存庫並定期練習恢復過程。
壞人竊取某人的私鑰並想要擁有您的系統:您的攻擊面僅限於受身份驗證保護的 sshd 部分 - 以及您使用的任何 shell 接口,因此請使其盡可能小。 Python/Ruby 包裝器涉及大量程式碼,並且存在大量錯誤空間。使用 git-shell 或考慮使用 sshd_config 中的 Match 和 ChrootDirectory 指令來限制使用者可以存取檔案系統的哪些部分。
壞人竊取某人的私鑰並獲取您的原始程式碼:教導使用者如何保護其私鑰並建立快速撤銷金鑰的程式(例如,凌晨 4 點打電話給誰以撤銷金鑰)。
不要使用.ssh/authorized_keys
,而是使用AuthorizedKeyfile
sshd_config 中的關鍵字來指定使用者沒有寫存取權限的路徑,例如/etc/ssh/keys/%u
。很難確保用戶永遠無法用自己的副本覆蓋 .ssh/authorized_keys。
另外,保持使用者金鑰檔案和 sshd_config 版本受控,以允許審核。