如何在給定目錄的任何現有或未來子目錄中授予特定使用者讀/寫權限?
我在 VPS 上託管自己的 git 儲存庫。假設我的使用者是 john。
我正在使用 ssh 協議來訪問我的 git 儲存庫,所以我的 url 類似於
ssh://john@myserver.com/path/to/git/myrepo/
.Root 是所有內容的所有者
/path/to/git
我正在嘗試向 john 授予對以下所有內容的讀/寫訪問權限
/path/to/git/myrepo
我已經嘗試了
chmod
和setfacl
來控制訪問,但都以相同的方式失敗:它們遞歸地(使用正確的選項)將權限應用於 的所有目前現有子目錄,/path/to/git/myrepo
但是一旦創建了新目錄,我的使用者就無法寫入在新目錄中。我知道 git 中有一些鉤子可以讓我在每次送出後重新應用權限,但我開始認為我走錯了路,因為這對於一個非常基本的目的來說似乎太複雜了。
問:我應該如何設置我的權利,讓 rw 可以訪問 john 下的任何內容,
/path/to/git/myrepo
並使其能夠適應樹結構的變化?Q2:如果我應該退後一步改變一般方法,請告訴我。
編輯:問題按原樣回答,但這是錯誤的問題。正確的問題應該是“如何在伺服器上配置一個裸 git 儲存庫以用於 ssh 訪問?”。看我自己的答案。
例如,創建一個組
myrepousers
,並將您的 git 使用者添加到該組。然後將 /path/to/git/myrepo 下的所有內容組更改為 myrepousers:
chown -R .myrepousers /path/to/git/myrepo
然後修復權限:
chmod -R g+w /path/to/git/myrepo find /path/to/git/myrepo -type d -exec chmod g+s {} \;
應該都設置好了。
其實那是錯誤的做法。經過額外的研究,我發現在我的情況下,我必須使用 git 的內置功能來處理儲存庫中的文件系統權限。
它基本上是用 的
shared
選項完成的git init
,它可以具有(除其他外)以下值:
group
:初始化儲存庫,使文件和目錄具有使用者和組的寫訪問權限,而其他所有人都具有讀訪問權限0660
: 相同,但其他人沒有讀取權限。新創建的目錄和文件自動具有正確的權限。您還可以
git init
在現有儲存庫上使用它來重新配置它,而不會失去它的內容。所以最後我必須做的是:
- 創建群組
mygitrepo
- 向其中添加使用者
- chmod -R git 儲存庫
root:mygitrepo
現在該組的每個使用者都可以拉/推,而其他人都不能,而且不會弄亂文件系統權限。
git init --bare --shared=0660
http://www.kernel.org/pub/software/scm/git/docs/git-init.html了解更多資訊。