如何強制在特定目錄中建立的檔案的群組和權限?

如何強制在特定目錄中建立的檔案的群組和權限?

對於從以下位置建立的文件測試用戶/var/www 目錄中的帳戶,我需要他們有克+讀寫作為權限,以及www-數據作為團體。

我怎樣才能實現這個目標?

我正在透過 SSH 建立文件。

答案1

要設定組,請/var/www給出設定gid位元:

chgrp www-data /var/www
chmod g+s /var/www

還要調整子目錄:find /var/www -type d -exec chmod g+s {} +

這將使所有新建立的檔案繼承父目錄的群組,而不是使用者的群組。


要設定預設群組權限,您必須使用ACL。設定“預設”ACL:

setfacl -m "default:group::rwx" /var/www

還要調整子目錄:find /var/www -type d -exec setfacl -m d:g::rwx {} +

注意:檔案系統必須啟用 ACL 支援。有時預設情況下它是打開的;在外部3或者外部4您可能會收到“不支援操作”,在這種情況下必須手動啟用:

  • 對於目前安裝的檔案系統:mount -o remount,acl /

  • 永久 -以下方法之一:

    • 在 fstab 層級:編輯/etc/fstab以包含acl在選項欄位中

    • 在檔案系統層級:tune2fs -o acl /dev/diskname

答案2

這可能會讓一些人在setgid 上陷入“grawity”答案,如果資料夾的群組與您自己的群組不同,您可能需要以root 身份運行chmod,但您不會收到任何指示您需要執行此操作的錯誤。

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir

$ chmod g+s dir                                    #no errors

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #but nothing changed

$ touch dir/nosudo && ls -l dir/
-rw-rw-r-- 1 luke luke 0 Mar  9 10:51 nosudo       #and the group is still wrong


$ sudo chmod g+s dir

$ ls -ld dir
drwxrwsr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #the setgid bit is now on

$ touch dir/withsudo && ls -l dir/
-rw-rw-r-- 1 luke luke      0 Mar  9 10:51 nosudo
-rw-rw-r-- 1 luke testgroup 0 Mar  9 10:51 withsudo #and group is set

答案3

使用者建立的文件的群組是該使用者的群組(在/etc/group)。權限由UMASK參數控制 看到這個

相關內容