POSIX requires the UID to be an integer type. Most Unix-like Operating System represent the UID as an unsigned integer. The size of UidNumber values varies amongst different systems; some UnixLinux Operating Systems used 15-bit values, allowing values up to 32,767, while others such as Linux (before version 2.4) supported 16-bit UidNumbers, making 65,536 UidNumbers 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 UidNumbers, allowing 4,294,967,296 (232) UidNumbers.
Even more complex is the situation around nobody. The user nobody and group nogroup came from the NFS software and was defined as being having the highest UidNumber, since the function was oposite to the root:
This resulted in some confusion. To this confusion was added the use of using -2 for the nobody ID, as was done by the software itself if nobody and nogroup where not defined. GNU/Linux distribution creators defined the account as 65534, however Red Hat supplied under that UidNumber nfsnobody with another nobody having UidNumber 99. And there is nogroup usage, but also groups that are called nobody. All in all a rough overview of what is used where can be created like this:
IDs | Usage |
---|---|
-2 | nobody on AIX and MacOS |
0-99 | Unix local users and groups, statically assigned |
99 | Red Hat based system nobody user and group UidNumber |
100-499 | Unix local users and groups, dynamic |
529 | Used as UidNumber for nobody on some systems (and not used by Microsoft) |
32767 | Historic reservation for nobody (have not find any use) |
60001 | Nobody on IRIX and SunOS |
65530-65535 | Unix nobody user and (no)group (Debian and nfsnobody RHEL) |
4294967292 | Group-owner on Isilon BSD |
4294967293 | Null user on Isilon BSD |
4294967294 | Everyone on Isilon BSD |
4294967295 | Nobody (32-bit) |