Unix

為特定目錄中的新文件指定預設組和權限

  • April 12, 2016

我有一個目錄,其中有一個由多個使用者共享的項目。這些使用者使用 SSH 訪問該目錄並修改/創建文件。

這個項目應該只對特定的使用者組是可寫的:我們稱之為“mygroup”。在 SSH 會話期間,目前使用者創建的所有文件/目錄預設應歸組“mygroup”所有,並具有組可寫權限。

我可以通過以下方式解決權限問題umask

$ cd project
$ umask 002
$ touch test.txt

文件“test.txt”現在是組可寫的,但仍然屬於我的預設組(“mislav”,與我的使用者名相同)而不是“mygroup”。我可以chgrp遞歸地設置所需的組,但我想知道是否有辦法隱式設置某些組,例如 umask 在會話期間更改預設權限。

這個特定目錄是一個帶有工作副本的共享 git 儲存庫,我希望git checkoutgit reset操作為在工作副本中創建的新文件設置正確的遮罩和組。作業系統是 Ubuntu Linux。

**更新:**一位同事建議我應該研究POSIX ACL的 getfacl/setfacl,但下面的解決方案結合umask 002目前會話對我來說已經足夠好了,而且更簡單。

為了讓給定目錄下的所有文件繼承組權限,您需要在目錄上使用 setgid 位。請參閱此連結

$ mkdir test
$ sudo chown raphink.staff test
$ ls -lhd test
    drwxr-xr-x 2 raphink staff 4.0K 2009-12-21 16:19 test
$ sudo chmod g+s test # Set the setgid bit
$ ls -lhd test
    drwxr-sr-x 2 raphink staff 4.0K 2009-12-21 16:21 test
$ touch test/foo
$ ls -lh test
    total 0
    -rw-r--r-- 1 raphink staff 0 2009-12-21 16:23 foo

如果要對現有文件夾執行此操作,則需要確保所有子文件夾的 setgid 位也已啟用。但是,您不需要在文件上使用它,而且您可能也不希望在文件上使用它。以下是如何為所有子文件夾遞歸設置它。

find /path/to/base/dir -type d -exec chmod g+s {} +

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