What are the well-known UIDs?

unix

Solution

`getpwent(3)` iterates through the password database (usually `/etc/passwd`, but not necessarily; for example, the system may be in a NIS domain). Any UID known to the system should be represented there.

For demonstration, the following shell fragment and C code both should print all known UIDs on the system.

$ getent passwd | cut -d: -f3
#include <pwd.h>
#include <stdio.h>
int main() {
    struct passwd *pw;
    while ((pw = getpwent()))
        printf("%d\n", pw->pw_uid);
}

UID 0 is always root and conventionally UID 65534 is `nobody`, but you shouldn't count on that, nor anything else. What UIDs are in use varies by OS, distribution, and even system -- for example, many system services on Gentoo allocate UIDs as they are installed. There is no central database of UIDs in use.

Also, `/etc/login.defs` defines what "system UIDs" are. On my desktop, it is configured so that UIDs 100-999 are treated as system accounts, and UIDS 1000-60000 are user accounts, but this can easily be changed.

If you are writing a service, I would suggest that the package installation be scripted to allocate a UID as needed, and that your software be configurable to use any UID/username.

Problem

According to the `useradd` manpage, UIDs below 1000 are typically reserved for system accounts. I'm developing a service that will run as its own user. I know that well-known ports can be found in `/etc/services`. Is there a place where I can find out what well-known UIDs are out there? I would like to avoid crashing with someone else's UID.

Original source