使組可以訪問目錄中的所有新文件
假設我有兩個使用者 Alice 和 Bob 以及一個組 GROUPNAME 和一個 folder
foo
,這兩個使用者都是 GROUPNAME 的成員(使用 Linux 和 ext3)。如果我將文件保存為使用者 Alice
foo
,則權限為:-rw-r--r-- Alice Alice
. 但是,是否有可能實現保存在某個子目錄下的每個文件都foo
具有權限-rwxrwx--- Alice GROUPNAME
(即所有者 Alice,組 GROUPNAME)?
您可以使用 和 控制分配的權限位
umask
,並通過將目錄設置為 來控制組GROUPNAME
。$ umask 002 # allow group write; everyone must do this $ chgrp GROUPNAME . # set directory group to GROUPNAME $ chmod g+s . # files created in directory will be in group GROUPNAME
請注意,您必須為每個子目錄執行
chgrp
/chmod
;它不會自動傳播到現有目錄。在 OS X 上,隨後在setgid目錄下創建的目錄將是setgid,儘管後者將在 group 中GROUPNAME
。在大多數 Linux 發行版上,setgid位將傳播到新的子目錄。另請注意,這
umask
是一個程序屬性,適用於由該程序及其子程序創建的所有文件(它們umask
在其父程序中繼承有效fork()
)。使用者可能需要在 中進行設置~/.profile
,並且可能需要注意與您的目錄無關的需要不同權限的內容。 如果您在做不同的事情時需要不同的設置,模組可能會很有用。如果您可以使用 POSIX ACL,您可以更好地控制事情;應該可以同時指定權限遮罩和組,並讓它們合理地傳播。不過,對 POSIX ACL 的支持有些不同。
如果可能,請使用訪問控制列表 (ACL)。
在 Linux 下,確保您使用的文件系統支持 ACL(大多數 unix 文件系統都支持)。您可能需要更改掛載選項以啟用 ACL:對於 ext2/ext3/ext4,自 2.6.39 以來的核心預設值是啟用 ACL。在較舊的核心上,您可能需要
acl
顯式指定掛載選項,因此條目/etc/fstab
應類似於/dev/sda1 / ext4 errors=remount-ro,acl 0 1
. 執行mount -o remount,acl /
以啟動 ACL 而無需重新啟動。還要安裝 ACL 命令行工具getfacl
,並且setfacl
通常在名為acl
.現在一次性設置已經結束,更改目錄的 ACL 以授予組寫入權限並使這些權限由新創建的文件繼承。在 Linux 下:
setfacl -d -m group:GROUPNAME:rwx /path/to/directory setfacl -m group:GROUPNAME:rwx /path/to/directory
如果 ACL 不是一個選項,則使目錄歸組所有
GROUPNAME
,並將其權限設置為 2775 或 2770:chmod g+rwxs /path/to/directory
。這裡s
的意思是setgid位;對於目錄,這意味著在該目錄中創建的文件將屬於擁有該目錄的組。您還需要設置 Alice 和 Bob 的umask以使他們的所有文件預設為組可寫。大多數係統上預設的 umask 是 022,這意味著文件可以擁有除按組和其他寫入之外的所有權限。將其更改為 002,表示僅禁止 write-by-other 權限。您通常會將該設置放在您的
~/.profile
:umask 002 # or 007 to have files not readable by others