組ID
此條目需要精通或熟悉電腦科學的編者參與及協助編輯。 (2022年1月14日) |
在類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/passwd
或 LDAP)查看。這用戶組常稱作主要組ID。 任何用戶可能在組資料庫的相關記錄上列為附加組的成員,可藉助getent group
(多存儲於 /etc/group
或 LDAP)查看;這些組的ID也稱為補充組ID。
有效ID與真實ID
Unix進程具備有效 (EUID, EGID)、真實 (UID, GID) 及暫存 (SUID, SGID) ID。這些數值通常相等,但在 setuid
和 setgid
進程中它們不相同。
命名常規
種類
組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 变量
控制諸如 useradd
或 userdel
的命令是否自動添加或刪除關聯的個人用戶組。
另請參見
參考資料
- ^ Definitions. pubs.opengroup.org. [2021-12-06]. (原始內容存檔於2021-12-06).
- ^ chown. pubs.opengroup.org. [2021-12-06]. (原始內容存檔於2021-07-01).
- ^ Namespaces in operation, part 5: User namespaces [LWN.net]. lwn.net. [2021-12-06]. (原始內容存檔於2022-06-04).