Linux

setgid 目錄的目的是什麼?

  • February 25, 2019

我知道 setgid 是如何工作的,但我不知道為什麼要設計它,有沒有例子來說明它解決了什麼問題?

雖然 setgid 文件/二進製文件可能沒有明顯用處,但我絕對發現 setgid 位在目錄上非常有用。假設您是不同工作組的一部分,每個工作組都有自己的 unix(權限)組。您肯定希望將 setgid 位放在項目文件夾中,確保在創建新文件時應用正確的組所有權,從而允許該項目組中的同事訪問這些文件?

主要用途是保留文件樹的組所有者:

[lockie@bubbles tmp]$ mkdir dir1 && touch dir1/file && mkdir dir1/dir
[lockie@bubbles tmp]$ mkdir dir2 && chgrp staff dir2 && chmod 2755 dir2 && touch dir2/file && mkdir dir2/dir
[lockie@bubbles tmp]$ ls -al dir1
total 32
drwxrwxr-x   3 lockie  lockie   4096 Dec 13 19:32 .
drwxrwxrwt 125 root root 20480 Dec 13 19:32 ..
drwxrwxr-x   2 lockie  lockie   4096 Dec 13 19:32 dir
-rw-rw-r--   1 lockie  lockie      0 Dec 13 19:32 file
[lockie@bubbles tmp]$ ls -al dir2
total 32
drwxr-sr-x   3 lockie  staff  4096 Dec 13 19:32 .
drwxrwxrwt 125 root root  20480 Dec 13 19:32 ..
drwxrwsr-x   2 lockie  staff  4096 Dec 13 19:32 dir  < note new dir is g+s, owned by "staff" group, so the setgid behaviour acts recursively
-rw-rw-r--   1 lockie  staff     0 Dec 13 19:32 file < note new file is owned by "staff" group
[lockie@bubbles tmp]$

這在不同使用者將在目錄下創建/編輯文件/目錄的環境中往往很有用:當所有文件/目錄共享同一個組時,所有使用者都可以編輯/更改文件/目錄(權限允許):這避免了情況例如“xyz 擁有文件 abc,所以我無法編輯它”。

以這種方式使用 setgid 的替代方法是grpid文件系統掛載選項。

從人掛載:

grpid 或 bsdgroups / nogrpid 或 sysvgroups

這些選項定義了新創建的文件獲得的組 ID。設置 grpid 時,它採用創建它的目錄的組 ID;否則(預設)它採用目前程序的 fsgid,除非該目錄設置了 setgid 位,在這種情況下,它從父目錄獲取 gid,並且如果它是一個目錄本身,也獲取 setgid 位。

啟用後,在 grpid 掛載的文件系統上創建的文件/目錄也繼承父目錄的組:

[lockie@bubbles ~]$ mount | grep /home
/dev/mapper/VolGroup00-home on /home type ext3 (rw,grpid)
[lockie@bubbles ~]$ mkdir dir3 && touch dir3/file && mkdir dir3/dir
[lockie@bubbles ~]$ ls -al dir3
total 12
drwxrwxr-x  3 lockie users 4096 Dec 13 19:37 .
drwxrwxr-x 12 lockie users 4096 Dec 13 19:37 ..
drwxrwxr-x  2 lockie users 4096 Dec 13 19:37 dir < inherited "users" group from parent dir
-rw-rw-r--  1 lockie users    0 Dec 13 19:37 file  < inherited "users" group from parent dir
[lockie@bubbles ~]$

我發現使用grpid選項可以適當地減少人為錯誤的機會(因為文件系統可以完成工作,而不管目錄權限如何)。

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