/etc/passwd
passwd is a command on Unix, Plan 9, Inferno, and most Unix-like operating systems used to change a user's password. The password entered by the user is run through a key derivation function to create a hashed version of the new password, whi ...
and /etc/group
files or their equivalents. Shadow password files and Network Information Service also refer to numeric GIDs. The group identifier is a necessary component of Unix Supplementary groups
In Unix systems, every user must be a member of at least one group, the primary group, which is identified by the numeric GID of the user's entry in the passwd database, which can be viewed with the commandgetent passwd
(usually stored in /etc/passwd
or LDAP). This group is referred to as the ''primary group ID''. A user may be listed as member of additional groups in the relevant entries in the group database, which can be viewed with getent group
(usually stored in /etc/group
or LDAP); the IDs of these groups are referred to as ''supplementary group IDs''.
Effective vs. real
Unix processes have an effective (EUID, EGID), a real (UID, GID) and a saved (SUID, SGID) ID. Normally these are identical, but in setuid
and setgid
processes they are different.
Conventions
Type
Originally, a signed 16-bit integer was used. Since the sign was not necessary – negative numbers do not make valid group IDs – an unsigned integer is now used instead, allowing group IDs between 0 and 65,535. Modern operating systems usually use unsigned 32-bit integers, which allow for group IDs between 0 and 4,294,967,295.Reserved ranges
Many Linux systems reserve the GID number range 0 to 99 for statically allocated groups, and either 100−499 or 100−999 for groups dynamically allocated by the system in post-installation scripts. These ranges are often specified in/etc/login.defs
, for useradd
, groupadd
and similar tools.
On FreeBSD, porters who need a GID for their package can pick a free one from the range 50 to 999 and then register this static allocation iSpecial values
* 0: The(gid_t) -1
is reserved by POSIX to identify an omitted argument.
* 65,534: The Linux kernel defaults to 216−2 = 65,534 (which many Linux distributions map to the group name "nogroup") when a 32-bit GID does not fit into the return value of a 16-bit system call.{{Cite web, title=Namespaces in operation, part 5: User namespaces WN.neturl=https://lwn.net/Articles/532593/, access-date=2021-12-06, website=lwn.net The value is also returned by idmapd if a group name in an incoming NFSv4 packet does not match any known group on the system.
Personal groups
Many system administrators allocate for each user also a personal primary group that has the same name as the user's login name, and often also has the same numeric GID as the user's UID. Such personal groups have no other members and make collaboration with other users in shared directories easier, by allowing users to habitually work with umask 0002
. This way, newly created files can have by default write permissions enabled for group members, because this will normally only enable write access for members of the personal group, that is only for the file's owner. However, if a file is created in a shared directory that belongs to another group and has the setgid bit set, then the created file will automatically become writable to members of that directory's group as well.
On many Linux systems, the USERGROUPS_ENAB
variable in /etc/login.defs
controls whether commands like useradd
or userdel
automatically add or delete an associated personal group.
See also
* setuid * User identifier * Process identifier *References