1CREDENTIALS(7)             Linux Programmer's Manual            CREDENTIALS(7)
2
3
4

NAME

6       credentials - process identifiers
7

DESCRIPTION

9   Process ID (PID)
10       Each  process  has  a unique nonnegative integer identifier that is as‐
11       signed when the process is created using fork(2).  A process can obtain
12       its  PID  using  getpid(2).   A PID is represented using the type pid_t
13       (defined in <sys/types.h>).
14
15       PIDs are used in a range of system calls to identify  the  process  af‐
16       fected  by  the  call,  for example: kill(2), ptrace(2), setpriority(2)
17       setpgid(2), setsid(2), sigqueue(3), and waitpid(2).
18
19       A process's PID is preserved across an execve(2).
20
21   Parent process ID (PPID)
22       A process's parent process ID identifies the process that created  this
23       process using fork(2).  A process can obtain its PPID using getppid(2).
24       A PPID is represented using the type pid_t.
25
26       A process's PPID is preserved across an execve(2).
27
28   Process group ID and session ID
29       Each process has a session ID and a process group ID, both  represented
30       using  the  type pid_t.  A process can obtain its session ID using get‐
31       sid(2), and its process group ID using getpgrp(2).
32
33       A child created by fork(2) inherits its parent's session ID and process
34       group  ID.   A  process's session ID and process group ID are preserved
35       across an execve(2).
36
37       Sessions and process groups are abstractions devised to  support  shell
38       job  control.   A process group (sometimes called a "job") is a collec‐
39       tion of processes that share the same process group ID; the shell  cre‐
40       ates  a  new  process  group for the process(es) used to execute single
41       command or pipeline (e.g., the two processes  created  to  execute  the
42       command  "ls | wc"  are placed in the same process group).  A process's
43       group membership can  be  set  using  setpgid(2).   The  process  whose
44       process  ID  is  the  same as its process group ID is the process group
45       leader for that group.
46
47       A session is a collection of processes that share the same session  ID.
48       All  of  the  members  of a process group also have the same session ID
49       (i.e., all of the members of a process group always belong to the  same
50       session,  so  that  sessions and process groups form a strict two-level
51       hierarchy of processes.)  A new session is created when a process calls
52       setsid(2),  which creates a new session whose session ID is the same as
53       the PID of the process that called setsid(2).  The creator of the  ses‐
54       sion is called the session leader.
55
56       All  of  the  processes in a session share a controlling terminal.  The
57       controlling terminal is established when the session leader first opens
58       a  terminal  (unless  the  O_NOCTTY  flag  is  specified  when  calling
59       open(2)).  A terminal may be the controlling terminal of  at  most  one
60       session.
61
62       At  most  one of the jobs in a session may be the foreground job; other
63       jobs in the session are background jobs.  Only the foreground  job  may
64       read  from  the  terminal; when a process in the background attempts to
65       read from the terminal, its process group is  sent  a  SIGTTIN  signal,
66       which suspends the job.  If the TOSTOP flag has been set for the termi‐
67       nal (see termios(3)), then only the foreground job  may  write  to  the
68       terminal;  writes from background job cause a SIGTTOU signal to be gen‐
69       erated, which suspends the job.  When terminal  keys  that  generate  a
70       signal (such as the interrupt key, normally control-C) are pressed, the
71       signal is sent to the processes in the foreground job.
72
73       Various system calls and library functions may operate on  all  members
74       of  a process group, including kill(2), killpg(3), getpriority(2), set‐
75       priority(2), ioprio_get(2), ioprio_set(2), waitid(2),  and  waitpid(2).
76       See  also  the  discussion  of the F_GETOWN, F_GETOWN_EX, F_SETOWN, and
77       F_SETOWN_EX operations in fcntl(2).
78
79   User and group identifiers
80       Each process has various associated user and group IDs.  These IDs  are
81       integers, respectively represented using the types uid_t and gid_t (de‐
82       fined in <sys/types.h>).
83
84       On Linux, each process has the following user and group identifiers:
85
86       *  Real user ID and real group ID.  These IDs determine  who  owns  the
87          process.   A  process  can obtain its real user (group) ID using ge‐
88          tuid(2) (getgid(2)).
89
90       *  Effective user ID and effective group ID.  These IDs are used by the
91          kernel  to determine the permissions that the process will have when
92          accessing shared resources such as message  queues,  shared  memory,
93          and  semaphores.  On most UNIX systems, these IDs also determine the
94          permissions when accessing files.  However, Linux uses the  filesys‐
95          tem IDs described below for this task.  A process can obtain its ef‐
96          fective user (group) ID using geteuid(2) (getegid(2)).
97
98       *  Saved set-user-ID and saved set-group-ID.  These  IDs  are  used  in
99          set-user-ID  and  set-group-ID programs to save a copy of the corre‐
100          sponding effective IDs that were set when the program  was  executed
101          (see  execve(2)).   A set-user-ID program can assume and drop privi‐
102          leges by switching its effective user ID back and forth between  the
103          values in its real user ID and saved set-user-ID.  This switching is
104          done via calls to seteuid(2), setreuid(2), or setresuid(2).  A  set-
105          group-ID  program performs the analogous tasks using setegid(2), se‐
106          tregid(2), or setresgid(2).  A process can  obtain  its  saved  set-
107          user-ID (set-group-ID) using getresuid(2) (getresgid(2)).
108
109       *  Filesystem  user ID and filesystem group ID (Linux-specific).  These
110          IDs, in conjunction with the supplementary group IDs  described  be‐
111          low,  are  used  to  determine  permissions for accessing files; see
112          path_resolution(7) for details.  Whenever a process's effective user
113          (group)  ID  is  changed,  the kernel also automatically changes the
114          filesystem user (group) ID to the  same  value.   Consequently,  the
115          filesystem  IDs  normally  have the same values as the corresponding
116          effective ID, and the semantics for file-permission checks are  thus
117          the  same on Linux as on other UNIX systems.  The filesystem IDs can
118          be made to differ from the effective IDs by calling setfsuid(2)  and
119          setfsgid(2).
120
121       *  Supplementary group IDs.  This is a set of additional group IDs that
122          are used for permission checks when accessing files and other shared
123          resources.  On Linux kernels before 2.6.4, a process can be a member
124          of up to 32 supplementary groups; since kernel 2.6.4, a process  can
125          be  a  member  of  up  to  65536  supplementary  groups.   The  call
126          sysconf(_SC_NGROUPS_MAX) can be used to determine the number of sup‐
127          plementary groups of which a process may be a member.  A process can
128          obtain its set of supplementary group IDs using getgroups(2).
129
130       A child process created by fork(2) inherits copies of its parent's user
131       and  groups  IDs.  During an execve(2), a process's real user and group
132       ID and supplementary group IDs are preserved; the effective  and  saved
133       set IDs may be changed, as described in execve(2).
134
135       Aside  from the purposes noted above, a process's user IDs are also em‐
136       ployed in a number of other contexts:
137
138       *  when determining the permissions for sending signals (see kill(2));
139
140       *  when determining the permissions for setting process-scheduling  pa‐
141          rameters  (nice value, real time scheduling policy and priority, CPU
142          affinity, I/O priority) using setpriority(2),  sched_setaffinity(2),
143          sched_setscheduler(2),  sched_setparam(2), sched_setattr(2), and io‐
144          prio_set(2);
145
146       *  when checking resource limits (see getrlimit(2));
147
148       *  when checking the limit on the number of inotify instances that  the
149          process may create (see inotify(7)).
150
151   Modifying process user and group IDs
152       Subject  to rules described in the relevant manual pages, a process can
153       use the following APIs to modify its user and group IDs:
154
155       setuid(2) (setgid(2))
156              Modify the process's real (and possibly effective and saved-set)
157              user (group) IDs.
158
159       seteuid(2) (setegid(2))
160              Modify the process's effective user (group) ID.
161
162       setfsuid(2) (setfsgid(2))
163              Modify the process's filesystem user (group) ID.
164
165       setreuid(2) (setregid(2))
166              Modify the process's real and effective (and possibly saved-set)
167              user (group) IDs.
168
169       setresuid(2) (setresgid(2))
170              Modify the process's real, effective, and saved-set user (group)
171              IDs.
172
173       setgroups(2)
174              Modify the process's supplementary group list.
175
176       Any  changes to a process's effective user (group) ID are automatically
177       carried over to the process's filesystem user (group) ID.  Changes to a
178       process's  effective  user  or  group  ID  can  also affect the process
179       "dumpable" attribute, as described in prctl(2).
180
181       Changes to process user and group IDs can affect  the  capabilities  of
182       the process, as described in capabilities(7).
183

CONFORMING TO

185       Process IDs, parent process IDs, process group IDs, and session IDs are
186       specified in POSIX.1.  The real, effective,  and  saved  set  user  and
187       groups  IDs, and the supplementary group IDs, are specified in POSIX.1.
188       The filesystem user and group IDs are a Linux extension.
189

NOTES

191       Various fields in the /proc/[pid]/status file show the process  creden‐
192       tials described above.  See proc(5) for further information.
193
194       The POSIX threads specification requires that credentials are shared by
195       all of the threads in a process.  However, at the kernel  level,  Linux
196       maintains  separate  user  and  group credentials for each thread.  The
197       NPTL threading implementation does some work to ensure that any  change
198       to  user  or group credentials (e.g., calls to setuid(2), setresuid(2))
199       is carried through to all of the  POSIX  threads  in  a  process.   See
200       nptl(7) for further details.
201

SEE ALSO

203       bash(1),  csh(1),  groups(1), id(1), newgrp(1), ps(1), runuser(1), set‐
204       priv(1), sg(1), su(1),  access(2),  execve(2),  faccessat(2),  fork(2),
205       getgroups(2),  getpgrp(2),  getpid(2),  getppid(2), getsid(2), kill(2),
206       setegid(2),  seteuid(2),  setfsgid(2),  setfsuid(2),  setgid(2),   set‐
207       groups(2),   setpgid(2),  setresgid(2),  setresuid(2),  setsid(2),  se‐
208       tuid(2), waitpid(2), euidaccess(3), initgroups(3),  killpg(3),  tcgetp‐
209       grp(3),  tcgetsid(3), tcsetpgrp(3), group(5), passwd(5), shadow(5), ca‐
210       pabilities(7),  namespaces(7),  path_resolution(7),  pid_namespaces(7),
211       pthreads(7),   signal(7),   system_data_types(7),  unix(7),  user_name‐
212       spaces(7), sudo(8)
213

COLOPHON

215       This page is part of release 5.12 of the Linux  man-pages  project.   A
216       description  of  the project, information about reporting bugs, and the
217       latest    version    of    this    page,    can     be     found     at
218       https://www.kernel.org/doc/man-pages/.
219
220
221
222Linux                             2020-11-01                    CREDENTIALS(7)
Impressum