Permissions

如何在給定目錄的任何現有或未來子目錄中授予特定使用者讀/寫權限?

  • June 19, 2021

我在 VPS 上託管自己的 git 儲存庫。假設我的使用者是 john。

我正在使用 ssh 協議來訪問我的 git 儲存庫,所以我的 url 類似於ssh://john@myserver.com/path/to/git/myrepo/.

Root 是所有內容的所有者/path/to/git

我正在嘗試向 john 授予對以下所有內容的讀/寫訪問權限/path/to/git/myrepo

我已經嘗試了chmodsetfacl來控制訪問,但都以相同的方式失敗:它們遞歸地(使用正確的選項)將權限應用於 的所有目前現有子目錄/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了解更多資訊。

引用自:https://unix.stackexchange.com/questions/49396