Unix
為特定目錄中的新文件指定預設組和權限
我有一個目錄,其中有一個由多個使用者共享的項目。這些使用者使用 SSH 訪問該目錄並修改/創建文件。
這個項目應該只對特定的使用者組是可寫的:我們稱之為“mygroup”。在 SSH 會話期間,目前使用者創建的所有文件/目錄預設應歸組“mygroup”所有,並具有組可寫權限。
我可以通過以下方式解決權限問題
umask
:$ cd project $ umask 002 $ touch test.txt
文件“test.txt”現在是組可寫的,但仍然屬於我的預設組(“mislav”,與我的使用者名相同)而不是“mygroup”。我可以
chgrp
遞歸地設置所需的組,但我想知道是否有辦法隱式設置某些組,例如 umask 在會話期間更改預設權限。這個特定目錄是一個帶有工作副本的共享 git 儲存庫,我希望
git checkout
和git 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 {} +