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
11       assigned when the process is created  using  fork(2).   A  process  can
12       obtain  its  PID  using getpid(2).  A PID is represented using the type
13       pid_t (defined in <sys/types.h>).
14
15       PIDs are used in a range  of  system  calls  to  identify  the  process
16       affected  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
82       (defined 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
88          getuid(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
96          effective 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),
106          setregid(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
111          below,  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
136       employed 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
141          parameters  (nice  value,  real time scheduling policy and priority,
142          CPU affinity, I/O priority)  using  setpriority(2),  sched_setaffin‐
143          ity(2),  sched_setscheduler(2), sched_setparam(2), sched_setattr(2),
144          and ioprio_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),
208       setuid(2), waitpid(2), euidaccess(3), initgroups(3), killpg(3), tcgetp‐
209       grp(3),  tcgetsid(3),  tcsetpgrp(3),  group(5),  passwd(5),  shadow(5),
210       capabilities(7), namespaces(7), path_resolution(7),  pid_namespaces(7),
211       pthreads(7), signal(7), unix(7), user_namespaces(7), sudo(8)
212

COLOPHON

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