组ID

在类Unix系统上，用户可分为不同的组。 POSIX 以及常规 Unix 文件系统权限被分为三类：用户、组、其他。 用户组的使用允许附加权限，如磁盘、打印机及其他外部设备的访问，得到有序的分配。这种（还有其他）方法也允许超级用户向普通用户指定某些管理员任务，类似于 Microsoft Windows NT及其变种上的Administrators组。

组ID（），常缩写为GID，是用于表示特定组的数值。 在不同系统上，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 预留以标明省略的参数。
 65,534: 当32位GID与16位系统调用不吻合时，Linux内核默认将最大值设定为216−2 = 65,534（很多Linux发行版将此值映射到"nogroup"组）。 如果一个传入NFSv4数据包不符合系统上任何已知的组， 此数值也会被idmapd返回。

 个人组 
许多系统管理员也会为每个用户分配一个主要个人组，这个组名称与对应用户登录名相同，且通常具有和用户UID相同的GID数值。这种个人组没有其他成员，允许用户在umask 0002下操作可使用户在共享目录下与其他用户协作更加容易。这方法使新建文件的写权限默认为组成员启用，因为这通常只会为个人组成员启用写权限，也就是只为文件所有者启用。然而，如果某个文件被创建于属于另一个组的公用目录 ，且设定了 setgid 位，则那个目录所有者的其他组成员也会自动对这个文件可写。

在众多Linux系统上，/etc/login.defs 中的USERGROUPS_ENAB 变量控制诸如 useradd 或 userdel 的命令是否自动添加或删除关联的个人用户组。

 另请参见 

 setuid
 用户ID
 进程ID
 Inode
 Id (Unix)

 参考资料 

Category:Unix文件系统技术
Category:Unix