Permissions

使組可以訪問目錄中的所有新文件

  • December 23, 2021

假設我有兩個使用者 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

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