Ssh

FreeBSD 上 Git(通過 SSH)的權限問題

  • November 15, 2010

我們在 FreeBSD 上遇到了 Git 的權限問題。設置相當簡單。我們在同一台伺服器上有幾個不同的儲存庫。為簡單起見,假設它們位於 /git/repo1 和 /git/repo2 中。

每個 repo 都由使用者 ‘git’ 和一個自命名的組(例如 repo1)擁有。該 repo 配置了 g+rwX 訪問權限。

每個送出到儲存庫的使用者也是 repo 組的成員(例如 repo1)。

Git 儲存庫都設置了“sharedRepository = group”。

到目前為止一切順利,所有使用者都可以從儲存庫中籤出程式碼,並且第一個使用者可以毫無問題地送出。但是,當下一個使用者嘗試送出儲存庫時,他將收到權限錯誤。

一段時間以來,我們一直在努力解決這個問題,我們設法解決它的唯一方法是在送出之間執行以下腳本(這顯然非常不方便):

查找 /git/repo1 -type d -exec chmod g+s {} ;

chmod -R g+rwX /git/repo1

chown -R git:repo1 /git/repo1/

cd /git/repo1

git gc

有人知道問題出在哪裡嗎?

在我的腦海中,可能是 umask 問題?

您是否考慮過用 gitosis ( http://vafer.org/blog/20080115011413 ) 包裝 git?我發現它是一種使用 Git 的更愉快的方式(沒有權限問題,因為 repo 由一個作業系統使用者擁有),並且您可以使用 gitosis 實現的權限是一個有吸引力的獎勵。

創建新儲存庫時,設置文件夾的組所有權,並給它一個粘性位:

chown git:repo1 /git/repo1

chmod g+ws /git/repo1

還要確保您的每個使用者都有正確的 umask。您可以在 /etc/login.conf 中設置預設的 umask。在 :default 下查找如下所示的行:

:umask=002:

將其更改為:

:umask=022:

並執行:

sudo cap_mkdb /etc/login.conf

引用自:https://serverfault.com/questions/126716