www.fgks.org   »   [go: up one dir, main page]

Jump to content

User identifier: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
cyber attacks hase been register me in many site unfortuenatly
Tags: Visual edit Mobile edit Mobile web edit
 
(33 intermediate revisions by 26 users not shown)
Line 1: Line 1:
{{Short description|Value identifying a user account in Unix and Unix-like operating systems}}
[[Unix-like]] operating systems identify a user by a value called a '''user identifier''', often abbreviated to '''user ID''' or '''UID'''. The UID, along with the group identifier (GID) and other access control criteria, is used to determine which system resources a user can access. The [[Passwd (file)|password file]] maps textual [[User (computing)|user names]] to UIDs. UIDs are stored in the [[inode]]s of the [[Unix]] [[file system]], running [[Process (computing)|processes]], [[tar (computing)|tar]] archives, and the now-obsolete [[Network Information Service]]. In [[POSIX]]-compliant environments, the command-line command [[Id (Unix)|<code>id</code>]] gives the current user's UID, as well as more information such as the user name, primary user group and group identifier (GID).
[[Unix-like]] operating systems identify a user by a value called a '''user identifier''', often abbreviated to '''user ID''' or '''UID'''. The UID, along with the [[group identifier]] (GID) and other access control criteria, is used to determine which system resources a user can access. The [[Passwd (file)|password file]] maps textual [[User (computing)|user names]] to UIDs. UIDs are stored in the [[inode]]s of the [[Unix]] [[file system]], running processes, [[tar (computing)|tar]] archives, and the now-obsolete [[Network Information Service]]. In [[POSIX]]-compliant environments, the [[Unix shell|shell]] command [[Id (Unix)|<code>id</code>]] gives the current user's UID, as well as more information such as the user name, primary user group and group identifier (GID).


== Process attributes ==
== Process attributes ==
Line 5: Line 6:


===Effective user ID===
===Effective user ID===
The effective UID (<code>euid</code>) of a process is used for most access checks. It is also used as the owner for files created by that process. The effective GID (<code>egid</code>) of a process also affects access control and may also affect file creation, depending on the semantics of the specific kernel implementation in use and possibly the mount options used. According to BSD Unix semantics, the group ownership given to a newly created file is unconditionally inherited from the group ownership of the directory in which it is created. According to [[AT&T]] [[UNIX System V]] semantics (also adopted by Linux variants), a newly created file is normally given the group ownership specified by the <code>egid</code> of the process that creates the file. Most filesystems implement a method to select whether BSD or AT&T semantics should be used regarding group ownership of a newly created file; BSD semantics are selected for specific directories when the S_ISGID (s-gid) permission is set.<ref>{{man|1|chmod|Solaris}}</ref>
The effective UID (<code>euid</code>) of a process is used for most access checks. It is also used as the owner for files created by that process. The effective GID (<code>egid</code>) of a process also affects access control and may also affect file creation, depending on the semantics of the specific kernel implementation in use and possibly the [[Mount (Unix)|mount]] options used. According to [[BSD Unix]] semantics, the group ownership given to a newly created file is unconditionally inherited from the group ownership of the directory in which it is created. According to [[AT&T]] [[UNIX System V]] semantics (also adopted by [[Linux]] variants), a newly created file is normally given the group ownership specified by the <code>egid</code> of the process that creates the file. Most filesystems implement a method to select whether BSD or AT&T semantics should be used regarding group ownership of a newly created file; BSD semantics are selected for specific directories when the S_ISGID (s-gid) permission is set.<ref>{{man|1|chmod|Solaris}}</ref>


====File system user ID====
====File system user ID====
Linux also has a file system user ID (<code>fsuid</code>) which is used explicitly for access control to the file system. It matches the <code>euid</code> unless explicitly set otherwise. It may be root's user ID only if <code>ruid</code>, <code>suid</code>, or <code>euid</code> is root. Whenever the <code>euid</code> is changed, the change is propagated to the <code>fsuid</code>.
Linux also has a file system user ID (<code>fsuid</code>) which is used explicitly for access control to the file system. It matches the <code>euid</code> unless explicitly set otherwise. It may be [[Superuser|root]]'s user ID only if <code>ruid</code>, <code>suid</code>, or <code>euid</code> is root. Whenever the <code>euid</code> is changed, the change is propagated to the <code>fsuid</code>.


The intent of <code>fsuid</code> is to permit programs (e.g., the [[Network File System|NFS]] server) to limit themselves to the file system rights of some given <code>uid</code> without giving that <code>uid</code> permission to send them signals. Since kernel 2.0, the existence of <code>fsuid</code> is no longer necessary because Linux adheres to [[Single UNIX Specification#2001: POSIX:2001, Single UNIX Specification version 3|SUSv3]] rules for sending signals, but <code>fsuid</code> remains for compatibility reasons.<ref name='Kerrisk'>Kerrisk, Michael. ''The Linux Programming Interface''. No Starch Press, 2010, p. 171.</ref>
The intent of <code>fsuid</code> is to permit programs (e.g., the [[Network File System|NFS]] server) to limit themselves to the file system rights of some given <code>uid</code> without giving that <code>uid</code> permission to send them signals. Since kernel 2.0, the existence of <code>fsuid</code> is no longer necessary because Linux adheres to [[Single UNIX Specification#2001: Single UNIX Specification, version 3, POSIX.1-2001|SUSv3]] rules for sending signals, but <code>fsuid</code> remains for compatibility reasons.<ref name='Kerrisk'>Kerrisk, Michael. ''The Linux Programming Interface''. No Starch Press, 2010, p. 171.</ref>


===Saved user ID===
===Saved user ID===
The saved user ID (<code>suid</code>) is used when a program running with elevated privileges needs to do some unprivileged work temporarily; changing <code>euid</code> from a privileged value (typically <code>0</code>) to some unprivileged value (anything other than the privileged value) causes the privileged value to be stored in <code>suid</code>.<ref>{{cite web|url=http://www.cs.berkeley.edu/~daw/papers/setuid-usenix02.pdf |title=Setuid Demystified |website=Cs.berkeley.edu |access-date=2016-09-24}}</ref> Later, a program's <code>euid</code> can be set back to the value stored in <code>suid</code>, so that elevated privileges can be restored; an unprivileged process may set its <code>euid</code> to one of only three values: the value of <code>ruid</code>, the value of <code>suid</code>, or the value of <code>euid</code>.
The saved user ID is used when a program running with elevated privileges needs to do some unprivileged work temporarily; changing <code>euid</code> from a privileged value (typically <code>0</code>) to some unprivileged value (anything other than the privileged value) causes the privileged value to be stored in <code>suid</code>. Later, a program's <code>euid</code> can be set back to the value stored in <code>suid</code>, so that elevated privileges can be restored; an unprivileged process may set its <code>euid</code> to one of only three values: the value of <code>ruid</code>, the value of <code>suid</code>, or the value of <code>euid</code>.


===Real user ID===
===Real user ID===
The real UID (<code>ruid</code>) and real GID (<code>rgid</code>) identify the real owner of the process and affect the permissions for sending signals. A process without superuser privileges may signal another process only if the sender's <code>ruid</code> or <code>euid</code> matches receiver's <code>ruid</code> or <code>suid</code>. Because a child process inherits its credentials from its parent, a child and parent may signal each other.
The real UID (<code>ruid</code>) and real GID (<code>rgid</code>) identify the real owner of the process and affect the permissions for sending signals. A process without superuser privileges may signal another process only if the sender's <code>ruid</code> or <code>euid</code> matches receiver's <code>ruid</code> or <code>suid</code>. Because a child process inherits its credentials from its parent, a child and parent may signal each otter


== Conventions ==
== Conventions ==


=== Type ===
=== Type ===
POSIX requires the UID to be an integer type. Most Unix-like operating systems represent the UID as an unsigned integer. The size of UID values varies amongst different systems; some UNIX OS's{{which|date=June 2014}} used 15-bit values, allowing values up to 32767{{citation needed|reason=SunOS-3.x and SunOS-4.x used -2 as the UID nobody that maps to 65534.|date=June 2015}}, while others such as [[Linux]] (before version 2.4) supported [[16-bit]] UIDs, making 65536 unique IDs possible. The majority of modern Unix-like systems (e.g., Solaris-2.0 in 1990, Linux 2.4 in 2001) have switched to [[32-bit]] UIDs, allowing 4,294,967,296 (2<sup>32</sup>) unique IDs.
POSIX requires the UID to be an integer type. Most Unix-like operating systems represent the UID as an unsigned integer. The size of UID values varies amongst different systems; some UNIX OS's{{which|date=June 2014}} used 15-bit values, allowing values up to 32767{{citation needed|reason=SunOS-3.x and SunOS-4.x used -2 as the UID nobody that maps to 65534.|date=June 2015}}, while others such as Linux (before version 2.4) supported [[16-bit]] UIDs, making 65536 unique IDs possible. The majority of modern Unix-like systems (e.g., Solaris 2.0 in 1990, Linux 2.4 in 2001) have switched to [[32-bit]] UIDs, allowing 4,294,967,296 (2<sup>32</sup>) unique IDs.


=== Reserved ranges ===
=== Reserved ranges ===
Line 28: Line 29:
[[Debian Linux]] not only reserves the range 100–999 for dynamically allocated system users and groups, but also centrally and statically allocates users and groups in the range 60000-64999 and further reserves the range 65000–65533.<ref name=debian>{{cite web|url=https://www.debian.org/doc/debian-policy/ch-opersys.html#uid-and-gid-classes|title=Debian Policy Manual – Section 9.2.2: UID and GID classes|website=Debian.org|date=2019-07-18|access-date=2019-07-26}}</ref>
[[Debian Linux]] not only reserves the range 100–999 for dynamically allocated system users and groups, but also centrally and statically allocates users and groups in the range 60000-64999 and further reserves the range 65000–65533.<ref name=debian>{{cite web|url=https://www.debian.org/doc/debian-policy/ch-opersys.html#uid-and-gid-classes|title=Debian Policy Manual – Section 9.2.2: UID and GID classes|website=Debian.org|date=2019-07-18|access-date=2019-07-26}}</ref>


[[Systemd]] defines a number of special UID ranges, including<ref name=systemd>{{cite web|url=https://github.com/systemd/systemd/blob/master/docs/UIDS-GIDS.md|title=Users, groups, UIDs and GIDs on systemd systems|access-date=2020-09-26}}</ref>
[[Systemd]] defines a number of special UID ranges, including<ref name=systemd>{{cite web|url=https://github.com/systemd/systemd/blob/master/docs/UIDS-GIDS.md|title=Users, groups, UIDs and GIDs on systemd systems|website=[[GitHub]]|access-date=2020-09-26}}</ref>
* 60001-60513: UIDs for home directories managed by systemd-homed
* 60001-60513: UIDs for home directories managed by systemd-homed
* 61184-65519 (0xef00-0xffef): UIDs for dynamic users
* 61184-65519 (0xef00-0xffef): UIDs for dynamic users


On FreeBSD, porters who need a UID for their package can pick a free one from the range 50 to 999 and then register the static allocation.<ref>{{cite web|url=http://www.freebsd.org/doc/en/books/porters-handbook/ |title=FreeBSD Porter's Handbook |website=Freebsd.org |access-date=2016-09-24}}</ref><ref>http://www.freebsd.org/doc/en/books/porters-handbook/users-and-groups.html</ref>
On [[FreeBSD]], porters who need a UID for their package can pick a free one from the range 50 to 999 and then register the static allocation.<ref>{{cite web|url=http://www.freebsd.org/doc/en/books/porters-handbook/ |title=FreeBSD Porter's Handbook |website=Freebsd.org |access-date=2016-09-24}}</ref><ref>{{cite web | url=http://www.freebsd.org/doc/en/books/porters-handbook/users-and-groups.html | title=Chapter 6. Special Considerations }}</ref>


Some POSIX systems allocate UIDs for new users starting from 500 ([[macOS]], [[Red Hat Enterprise Linux]] till version 6), others start at 1000 (Red Hat Enterprise Linux since version 7,<ref>{{cite web|url=https://www.certdepot.net/rhel7-system-changes/ |title=RHEL7 System changes |website=Certdepot.net |date=2016-01-17 |access-date=2017-03-22}}</ref> [[openSUSE]], [[Debian]]<ref name=debian />). On many Linux systems, these ranges are specified in <code>/etc/login.defs</code>, for <code>useradd</code> and similar tools.
Some POSIX systems allocate UIDs for new users starting from 500 ([[macOS]], [[Red Hat Enterprise Linux]] till version 6), others start at 1000 (Red Hat Enterprise Linux since version 7,<ref>{{cite web|url=https://www.certdepot.net/rhel7-system-changes/ |title=RHEL7 System changes |website=Certdepot.net |date=2016-01-17 |access-date=2017-03-22}}</ref> [[openSUSE]], [[Debian]]<ref name=debian />). On many Linux systems, these ranges are specified in <code>/etc/login.defs</code>, for <code>useradd</code> and similar tools.


Central UID allocations in enterprise networks (e.g., via [[LDAP]] and [[Network File System|NFS]] servers) may limit themselves to using only UID numbers well above 1000, and outside the range 60000–65535, to avoid potential conflicts with UIDs locally allocated on client computers.
Central UID allocations in enterprise networks (e.g., via [[LDAP]] and [[Network File System|NFS]] servers) may limit themselves to using only UID numbers well above 1000, and outside the range 60000–65535, to avoid potential conflicts with UIDs locally allocated on client computers. When new users are created locally, the local system is supposed to check for and avoid conflicts with UID's already existing on NSS'<ref>https://systemd.io/UIDS-GIDS/ "for both allocation ranges: when an UID allocation takes place NSS is checked for collisions first, and a different UID is picked if an entry is found"</ref>


[[OS-level virtualization]] can remap user identifiers, e.g. using [[Linux namespaces]], and therefore need to allocate ranges into which remapped UIDs and GIDs are mapped:
[[OS-level virtualization]] can remap user identifiers, e.g. using [[Linux namespaces]], and therefore need to allocate ranges into which remapped UIDs and GIDs are mapped:
Line 47: Line 48:
* −1: The value <code>(uid_t) -1</code> is reserved by POSIX to identify an omitted argument.<ref>{{cite web|url=http://pubs.opengroup.org/onlinepubs/009695399/functions/chown.html |title=Chown |website=Pubs.opengroup.org |access-date=2016-09-24}}</ref>
* −1: The value <code>(uid_t) -1</code> is reserved by POSIX to identify an omitted argument.<ref>{{cite web|url=http://pubs.opengroup.org/onlinepubs/009695399/functions/chown.html |title=Chown |website=Pubs.opengroup.org |access-date=2016-09-24}}</ref>
* 65535: This value is still avoided because it was the API error return value when uid_t was 16 bits.
* 65535: This value is still avoided because it was the API error return value when uid_t was 16 bits.
* Nobody: Historically, the user "[[nobody (username)|nobody]]" was assigned UID <code>-2</code> by several operating systems, although other values such as 2<sup>15</sup>−1 = 32,767 are also in use, such as by [[OpenBSD]].<ref>{{cite web|url=http://gnats.netbsd.org/6594 |title=NetBSD Problem Report #6594: the default "nobody" credentials (32767:9999) do not match mountd's default (-2:-2) |website=GnaNFSv4ts.netbsd.org |access-date=2016-09-24}}</ref> For compatibility between 16-bit and 32-bit UIDs, many Linux distributions now set it to be 2<sup>16</sup>−2 = 65,534; the Linux kernel defaults to returning this value when a 32-bit UID does not fit into the return value of the 16-bit system calls.<ref>{{cite web|url=https://lwn.net/Articles/532593/ |title=Namespaces in operation, part 5: User namespaces |website=Lwn.net |access-date=2016-09-24}}</ref> Fedora Linux assigns the last UID of the range statically allocated for system use (0–99) to nobody: 99, and calls 65534 instead <code>nfsnobody</code>.
* Nobody: Historically, the user "[[nobody (username)|nobody]]" was assigned UID <code>-2</code> by several operating systems, although other values such as 2<sup>15</sup>−1 = 32,767 are also in use, such as by [[OpenBSD]].<ref>{{cite web|url=http://gnats.netbsd.org/6594 |title=NetBSD Problem Report #6594: the default "nobody" credentials (32767:9999) do not match mountd's default (-2:-2) |website=GnaNFSv4ts.netbsd.org |access-date=2016-09-24}}</ref> For compatibility between 16-bit and 32-bit UIDs, many Linux distributions now set it to be 2<sup>16</sup>−2 = 65,534; the Linux kernel defaults to returning this value when a 32-bit UID does not fit into the return value of the 16-bit system calls.<ref>{{cite web|url=https://lwn.net/Articles/532593/ |title=Namespaces in operation, part 5: User namespaces |website=Lwn.net |access-date=2016-09-24}}</ref> [[Fedora Linux]] assigns the last UID of the range statically allocated for system use (0–99) to nobody: 99, and calls 65534 instead <code>nfsnobody</code>.


== Alternatives ==
== Alternatives ==
Line 61: Line 62:


==See also==
==See also==
* [[setuid]]
* [[FAT access rights]]
* [[Sticky bit]]
* [[Group identifier]]
* [[Process identifier]]
* [[File system permissions]]
* [[File system permissions]]
* [[Open (system call)]]
* [[Open (system call)]]
* [[Mount (Unix)]]
* [[Process identifier]]
* [[FAT access rights]]
* [[Security Identifier]] (SID) – the [[Windows NT]] equivalent
* [[Security Identifier]] (SID) – the [[Windows NT]] equivalent
* [[setuid]]
* [[Sticky bit]]


==References==
==References==
{{Reflist}}
{{Reflist}}


{{DEFAULTSORT:User Identifier}}
[[Category:Unix]]
[[Category:Unix]]
[[Category:Unix file system technology]]
[[Category:Unix file system technology]]

Latest revision as of 21:56, 22 May 2024

Unix-like operating systems identify a user by a value called a user identifier, often abbreviated to user ID or UID. The UID, along with the group identifier (GID) and other access control criteria, is used to determine which system resources a user can access. The password file maps textual user names to UIDs. UIDs are stored in the inodes of the Unix file system, running processes, tar archives, and the now-obsolete Network Information Service. In POSIX-compliant environments, the shell command id gives the current user's UID, as well as more information such as the user name, primary user group and group identifier (GID).

Process attributes[edit]

The POSIX standard introduced three different UID fields into the process descriptor table, to allow privileged processes to take on different roles dynamically:

Effective user ID[edit]

The effective UID (euid) of a process is used for most access checks. It is also used as the owner for files created by that process. The effective GID (egid) of a process also affects access control and may also affect file creation, depending on the semantics of the specific kernel implementation in use and possibly the mount options used. According to BSD Unix semantics, the group ownership given to a newly created file is unconditionally inherited from the group ownership of the directory in which it is created. According to AT&T UNIX System V semantics (also adopted by Linux variants), a newly created file is normally given the group ownership specified by the egid of the process that creates the file. Most filesystems implement a method to select whether BSD or AT&T semantics should be used regarding group ownership of a newly created file; BSD semantics are selected for specific directories when the S_ISGID (s-gid) permission is set.[1]

File system user ID[edit]

Linux also has a file system user ID (fsuid) which is used explicitly for access control to the file system. It matches the euid unless explicitly set otherwise. It may be root's user ID only if ruid, suid, or euid is root. Whenever the euid is changed, the change is propagated to the fsuid.

The intent of fsuid is to permit programs (e.g., the NFS server) to limit themselves to the file system rights of some given uid without giving that uid permission to send them signals. Since kernel 2.0, the existence of fsuid is no longer necessary because Linux adheres to SUSv3 rules for sending signals, but fsuid remains for compatibility reasons.[2]

Saved user ID[edit]

The saved user ID is used when a program running with elevated privileges needs to do some unprivileged work temporarily; changing euid from a privileged value (typically 0) to some unprivileged value (anything other than the privileged value) causes the privileged value to be stored in suid. Later, a program's euid can be set back to the value stored in suid, so that elevated privileges can be restored; an unprivileged process may set its euid to one of only three values: the value of ruid, the value of suid, or the value of euid.

Real user ID[edit]

The real UID (ruid) and real GID (rgid) identify the real owner of the process and affect the permissions for sending signals. A process without superuser privileges may signal another process only if the sender's ruid or euid matches receiver's ruid or suid. Because a child process inherits its credentials from its parent, a child and parent may signal each otter

Conventions[edit]

Type[edit]

POSIX requires the UID to be an integer type. Most Unix-like operating systems represent the UID as an unsigned integer. The size of UID values varies amongst different systems; some UNIX OS's[which?] used 15-bit values, allowing values up to 32767[citation needed], while others such as Linux (before version 2.4) supported 16-bit UIDs, making 65536 unique IDs possible. The majority of modern Unix-like systems (e.g., Solaris 2.0 in 1990, Linux 2.4 in 2001) have switched to 32-bit UIDs, allowing 4,294,967,296 (232) unique IDs.

Reserved ranges[edit]

The Linux Standard Base Core Specification specifies that UID values in the range 0 to 99 should be statically allocated by the system, and shall not be created by applications, while UIDs from 100 to 499 should be reserved for dynamic allocation by system administrators and post install scripts.[3]

Debian Linux not only reserves the range 100–999 for dynamically allocated system users and groups, but also centrally and statically allocates users and groups in the range 60000-64999 and further reserves the range 65000–65533.[4]

Systemd defines a number of special UID ranges, including[5]

  • 60001-60513: UIDs for home directories managed by systemd-homed
  • 61184-65519 (0xef00-0xffef): UIDs for dynamic users

On FreeBSD, porters who need a UID for their package can pick a free one from the range 50 to 999 and then register the static allocation.[6][7]

Some POSIX systems allocate UIDs for new users starting from 500 (macOS, Red Hat Enterprise Linux till version 6), others start at 1000 (Red Hat Enterprise Linux since version 7,[8] openSUSE, Debian[4]). On many Linux systems, these ranges are specified in /etc/login.defs, for useradd and similar tools.

Central UID allocations in enterprise networks (e.g., via LDAP and NFS servers) may limit themselves to using only UID numbers well above 1000, and outside the range 60000–65535, to avoid potential conflicts with UIDs locally allocated on client computers. When new users are created locally, the local system is supposed to check for and avoid conflicts with UID's already existing on NSS'[9]

OS-level virtualization can remap user identifiers, e.g. using Linux namespaces, and therefore need to allocate ranges into which remapped UIDs and GIDs are mapped:

  • snapd maps UIDs and GIDs into the range 524288-589823 (0x80000-0x8ffff)
  • systemd-nspawn automatic allocates of per-container UID ranges uses the range 524288-1879048191 (0x80000-0x6fffffff)[5]

The systemd authors recommend that OS-level virtualization systems should allocate 65536 (216) UIDs per container, and map them by adding an integer multiple of 216.[5]

Special values[edit]

  • 0: The superuser normally has a UID of zero (0).[10]
  • −1: The value (uid_t) -1 is reserved by POSIX to identify an omitted argument.[11]
  • 65535: This value is still avoided because it was the API error return value when uid_t was 16 bits.
  • Nobody: Historically, the user "nobody" was assigned UID -2 by several operating systems, although other values such as 215−1 = 32,767 are also in use, such as by OpenBSD.[12] For compatibility between 16-bit and 32-bit UIDs, many Linux distributions now set it to be 216−2 = 65,534; the Linux kernel defaults to returning this value when a 32-bit UID does not fit into the return value of the 16-bit system calls.[13] Fedora Linux assigns the last UID of the range statically allocated for system use (0–99) to nobody: 99, and calls 65534 instead nfsnobody.

Alternatives[edit]

NFSv4 was intended to help avoid numeric identifier collisions by identifying users (and groups) in protocol packets using textual “user@domain” names rather than integer numbers. However, as long as operating-system kernels and local file systems continue to use integer user identifiers, this comes at the expense of additional translation steps (using idmap daemon processes), which can introduce additional failure points if local UID mapping mechanisms or databases get configured incorrectly, lost, or out of sync. The “@domain” part of the user name could be used to indicate which authority allocated a particular name, for example in form of

  • a Kerberos realm name
  • an Active Directory domain name
  • the name of an operating-system vendor (for distribution-specific allocations)
  • the name of a computer (for device-specific allocations)

But in practice many existing implementations only allow setting the NFSv4 domain to a fixed value, thereby rendering it useless.

See also[edit]

References[edit]

  1. ^ chmod(1) – Solaris 11.4 User Commands Reference Manual
  2. ^ Kerrisk, Michael. The Linux Programming Interface. No Starch Press, 2010, p. 171.
  3. ^ "9.3. UID Ranges". Refspecs.linuxfoundation.org. Retrieved 2016-09-24.
  4. ^ a b "Debian Policy Manual – Section 9.2.2: UID and GID classes". Debian.org. 2019-07-18. Retrieved 2019-07-26.
  5. ^ a b c "Users, groups, UIDs and GIDs on systemd systems". GitHub. Retrieved 2020-09-26.
  6. ^ "FreeBSD Porter's Handbook". Freebsd.org. Retrieved 2016-09-24.
  7. ^ "Chapter 6. Special Considerations".
  8. ^ "RHEL7 System changes". Certdepot.net. 2016-01-17. Retrieved 2017-03-22.
  9. ^ https://systemd.io/UIDS-GIDS/ "for both allocation ranges: when an UID allocation takes place NSS is checked for collisions first, and a different UID is picked if an entry is found"
  10. ^ "Getpwuid". Pubs.opengroup.org. Retrieved 2016-09-24.
  11. ^ "Chown". Pubs.opengroup.org. Retrieved 2016-09-24.
  12. ^ "NetBSD Problem Report #6594: the default "nobody" credentials (32767:9999) do not match mountd's default (-2:-2)". GnaNFSv4ts.netbsd.org. Retrieved 2016-09-24.
  13. ^ "Namespaces in operation, part 5: User namespaces". Lwn.net. Retrieved 2016-09-24.