组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).