1 .\" Copyright (c) 2007 by Michael Kerrisk <mtk.manpages@gmail.com>
3 .\" %%%LICENSE_START(VERBATIM)
4 .\" Permission is granted to make and distribute verbatim copies of this
5 .\" manual provided the copyright notice and this permission notice are
6 .\" preserved on all copies.
8 .\" Permission is granted to copy and distribute modified versions of this
9 .\" manual under the conditions for verbatim copying, provided that the
10 .\" entire resulting derived work is distributed under the terms of a
11 .\" permission notice identical to this one.
13 .\" Since the Linux kernel and libraries are constantly changing, this
14 .\" manual page may be incorrect or out-of-date. The author(s) assume no
15 .\" responsibility for errors or omissions, or for damages resulting from
16 .\" the use of the information contained herein. The author(s) may not
17 .\" have taken the same level of care in the production of this manual,
18 .\" which is licensed free of charge, as they might when working
21 .\" Formatted or processed versions of this manual, if unaccompanied by
22 .\" the source, must acknowledge the copyright and authors of this work.
25 .\" 2007-06-13 Creation
27 .TH CREDENTIALS 7 2008-06-03 "Linux" "Linux Programmer's Manual"
29 credentials \- process identifiers
32 Each process has a unique nonnegative integer identifier
33 that is assigned when the process is created using
35 A process can obtain its PID using
37 A PID is represented using the type
42 PIDs are used in a range of system calls to identify the process
43 affected by the call, for example:
47 .\" .BR sched_rr_get_interval (2),
48 .\" .BR sched_getaffinity (2),
49 .\" .BR sched_setaffinity (2),
50 .\" .BR sched_getparam (2),
51 .\" .BR sched_setparam (2),
52 .\" .BR sched_setscheduler (2),
53 .\" .BR sched_getscheduler (2),
63 A process's PID is preserved across an
65 .SS Parent process ID (PPID)
66 A process's parent process ID identifies the process that created
69 A process can obtain its PPID using
71 A PPID is represented using the type
74 A process's PPID is preserved across an
76 .SS Process group ID and session ID
77 Each process has a session ID and a process group ID,
78 both represented using the type
80 A process can obtain its session ID using
82 and its process group ID using
87 inherits its parent's session ID and process group ID.
88 A process's session ID and process group ID are preserved across an
91 Sessions and process groups are abstractions devised to support shell
93 A process group (sometimes called a "job") is a collection of
94 processes that share the same process group ID;
95 the shell creates a new process group for the process(es) used
96 to execute single command or pipeline (e.g., the two processes
97 created to execute the command "ls\ |\ wc" are placed in the
99 A process's group membership can be set using
101 The process whose process ID is the same as its process group ID is the
102 \fIprocess group leader\fP for that group.
104 A session is a collection of processes that share the same session ID.
105 All of the members of a process group also have the same session ID
106 (i.e., all of the members of a process group always belong to the
107 same session, so that sessions and process groups form a strict
108 two-level hierarchy of processes.)
109 A new session is created when a process calls
111 which creates a new session whose session ID is the same
112 as the PID of the process that called
114 The creator of the session is called the \fIsession leader\fP.
115 .SS User and group identifiers
116 Each process has various associated user and groups IDs.
117 These IDs are integers, respectively represented using the types
124 On Linux, each process has the following user and group identifiers:
126 Real user ID and real group ID.
127 These IDs determine who owns the process.
128 A process can obtain its real user (group) ID using
132 Effective user ID and effective group ID.
133 These IDs are used by the kernel to determine the permissions
134 that the process will have when accessing shared resources such
135 as message queues, shared memory, and semaphores.
136 On most UNIX systems, these IDs also determine the
137 permissions when accessing files.
138 However, Linux uses the filesystem IDs described below
140 A process can obtain its effective user (group) ID using
144 Saved set-user-ID and saved set-group-ID.
145 These IDs are used in set-user-ID and set-group-ID programs to save
146 a copy of the corresponding effective IDs that were set when
147 the program was executed (see
149 A set-user-ID program can assume and drop privileges by
150 switching its effective user ID back and forth between the values
151 in its real user ID and saved set-user-ID.
152 This switching is done via calls to
157 A set-group-ID program performs the analogous tasks using
162 A process can obtain its saved set-user-ID (set-group-ID) using
164 .RB ( getresgid (2)).
166 Filesystem user ID and filesystem group ID (Linux-specific).
167 These IDs, in conjunction with the supplementary group IDs described
168 below, are used to determine permissions for accessing files; see
169 .BR path_resolution (7)
171 Whenever a process's effective user (group) ID is changed,
172 the kernel also automatically changes the filesystem user (group) ID
174 Consequently, the filesystem IDs normally have the same values
175 as the corresponding effective ID, and the semantics for file-permission
176 checks are thus the same on Linux as on other UNIX systems.
177 The filesystem IDs can be made to differ from the effective IDs
183 Supplementary group IDs.
184 This is a set of additional group IDs that are used for permission
185 checks when accessing files and other shared resources.
186 On Linux kernels before 2.6.4,
187 a process can be a member of up to 32 supplementary groups;
189 a process can be a member of up to 65536 supplementary groups.
191 .I sysconf(_SC_NGROUPS_MAX)
192 can be used to determine the number of supplementary groups
193 of which a process may be a member.
194 .\" Since kernel 2.6.4, the limit is visible via the read-only file
195 .\" /proc/sys/kernel/ngroups_max.
196 .\" As at 2.6.22-rc2, this file is still read-only.
197 A process can obtain its set of supplementary group IDs using
199 and can modify the set using
202 A child process created by
204 inherits copies of its parent's user and groups IDs.
207 a process's real user and group ID and supplementary
208 group IDs are preserved;
209 the effective and saved set IDs may be changed, as described in
212 Aside from the purposes noted above,
213 a process's user IDs are also employed in a number of other contexts:
215 when determining the permissions for sending signals\(emsee
218 when determining the permissions for setting
219 process-scheduling parameters (nice value, real time
220 scheduling policy and priority, CPU affinity, I/O priority) using
222 .BR sched_setaffinity (2),
223 .BR sched_setscheduler (2),
224 .BR sched_setparam (2),
228 when checking resource limits; see
231 when checking the limit on the number of inotify instances
232 that the process may create; see
235 Process IDs, parent process IDs, process group IDs, and session IDs
236 are specified in POSIX.1-2001.
237 The real, effective, and saved set user and groups IDs,
238 and the supplementary group IDs, are specified in POSIX.1-2001.
239 The filesystem user and group IDs are a Linux extension.
241 The POSIX threads specification requires that
242 credentials are shared by all of the threads in a process.
243 However, at the kernel level, Linux maintains separate user and group
244 credentials for each thread.
245 The NPTL threading implementation does some work to ensure
246 that any change to user or group credentials
250 is carried through to all of the POSIX threads in a process.
279 .BR capabilities (7),
280 .BR path_resolution (7),