類Unix系統上,用戶可分為不同的組。 POSIX 以及常規 Unix 文件系統權限被分為三類:用戶其他。 用戶組的使用允許附加權限,如磁盤、打印機及其他外部設備的訪問,得到有序的分配。這種(還有其他)方法也允許超級用戶向普通用戶指定某些管理員任務,類似於 Microsoft Windows NT及其變種上的Administrators組。

組ID(英語:Group identifier),常縮寫為GID,是用於表示特定組的數值。[1] 在不同系統上,GID數值範圍各不相同;一個GID至少可介於0和32,767之間,但有一個限制:超級用戶的登錄組GID必須為0。這數值用來指代 /etc/passwd/etc/group (或與之對等)文件中的用戶組。 Passwd 文件和網路資訊服務也會參考GID數值。組ID是Unix文件系統進程中不可或缺的一部分。

附加組

在Unix系統上,任何用戶必須是至少一個組——主用戶組的成員,由passwd數據庫中對應用戶記錄的GID數值確定,並可藉助getent passwd 命令(多存儲於 /etc/passwdLDAP)查看。這用戶組常稱作主要組ID。 任何用戶可能在組數據庫的相關記錄上列為附加組的成員,可藉助getent group(多存儲於 /etc/groupLDAP)查看;這些組的ID也稱為補充組ID

有效ID與真實ID

Unix進程具備有效 (EUID, EGID)、真實 (UID, GID) 及暫存 (SUID, SGID) ID。這些數值通常相等,但在 setuidsetgid 進程中它們不相同。

命名常規

種類

組ID最早使用有符號16位整數。由於符號位並無必要——負數不能構成有效組ID——目前使用的是無符號整數,使組ID介於0和65,535之間。現代操作系統多採用無符號32位整數,允許組ID介於0和4,294,967,295之間。

保留區段

眾多Linux系統將GID編號段0至99保留給靜態分配的用戶組,將100−499或100−999預留給由系統中post-installation腳本動態分配的用戶組。這些編號段常在 /etc/login.defs 中為useradd、groupadd等類似工具指定。

在FreeBSD上,需要為自己的程序包分配一個GID的軟件移植者可以從50和999的範圍中任選一個空閒的值,然後把這個靜態指定的值註冊到ports/GIDs頁面存檔備份,存於網際網路檔案館)上。

特殊值

  • 0:超級用戶GID通常是零 (0)。
  • −1:數值 (gid_t) -1 由 POSIX 預留以標明省略的參數。[2]
  • 65,534: 當32位GID與16位系統調用不吻合時,Linux內核默認將最大值設定為216−2 = 65,534(很多Linux發行版將此值映射到"nogroup"組)。[3] 如果一個傳入NFSv4數據包不符合系統上任何已知的組, 此數值也會被idmapd返回。

個人組

許多系統管理員也會為每個用戶分配一個主要個人組,這個組名稱與對應用戶登錄名相同,且通常具有和用戶UID相同的GID數值。這種個人組沒有其他成員,允許用戶在umask 0002下操作可使用戶在共享目錄下與其他用戶協作更加容易。這方法使新建文件的寫權限默認為組成員啟用,因為這通常只會為個人組成員啟用寫權限,也就是只為文件所有者啟用。然而,如果某個文件被創建於屬於另一個組的公用目錄 ,且設定了 setgid 位,則那個目錄所有者的其他組成員也會自動對這個文件可寫。

在眾多Linux系統上,/etc/login.defs 中的USERGROUPS_ENAB 变量控制諸如 useradduserdel 的命令是否自動添加或刪除關聯的個人用戶組。

另請參見

參考資料

  1. ^ Definitions. pubs.opengroup.org. [2021-12-06]. (原始內容存檔於2021-12-06). 
  2. ^ chown. pubs.opengroup.org. [2021-12-06]. (原始內容存檔於2021-07-01). 
  3. ^ Namespaces in operation, part 5: User namespaces [LWN.net]. lwn.net. [2021-12-06]. (原始內容存檔於2022-06-04).