If you take a look at the man page, credentials you'll see why child processes cannot have changes made via
adduser immediately reflected in a real-time way:
A child process created by fork(2) inherits copies of its parent's
user and groups IDs. During an execve(2), a process's real user and
group ID and supplementary group IDs are preserved; the effective and
saved set IDs may be changed, as described in execve(2).
So what does this mean?
Logging out ends the parent process from which all your subsequent processes were forked from. Everything in your desktop etc. This original process had your groups info in it, which it populated by reading
Another file that plays a role in how your environment gets your groups information is
/etc/nsswitch.conf. This file contains lines like this:
This instructs your system to only read this information in regarding passowrds, groups, etc. from the files I just mentioned.
These lines could just as easily instruct the system to use other sources such as NIS, LDAP, etc. to acquire this information instead.
If you take a look at the
nsswitch.conf man page you'll find out how the system is able to source the contents of the various "databases" of usernames, groups, and passwords.
A service named SERVICE is implemented by a shared object library named
libnss_SERVICE.so.X that resides in /lib.
/etc/nsswitch.conf configuration file
/lib/libnss_compat.so.X implements `compat' source for glibc2
/lib/libnss_db.so.X implements `db' source for glibc2
/lib/libnss_dns.so.X implements `dns' source for glibc2
/lib/libnss_files.so.X implements `files' source for glibc2
/lib/libnss_hesiod.so.X implements `hesiod' source for glibc2
/lib/libnss_nis.so.X implements `nis' source for glibc2
/lib/libnss_nisplus.so.2 implements `nisplus' source for glibc 2.1
Within each process that uses nsswitch.conf, the entire file is read only
once; if the file is later changed, the process will continue using the
If you notice this note, it's reflecting a similar situation with this file, where changes to the
nsswitch.conf can not be made in a real-time fashion either.