proc.5: Remove duplicated /proc/[pid]/gid_map entry
[man-pages.git] / man7 / user_namespaces.7
blobf8224bddab533214b8b6f7fa3bc827535d131d5d
1 .\" Copyright (c) 2013, 2014 by Michael Kerrisk <mtk.manpages@gmail.com>
2 .\" and Copyright (c) 2012, 2014 by Eric W. Biederman <ebiederm@xmission.com>
3 .\"
4 .\" %%%LICENSE_START(VERBATIM)
5 .\" Permission is granted to make and distribute verbatim copies of this
6 .\" manual provided the copyright notice and this permission notice are
7 .\" preserved on all copies.
8 .\"
9 .\" Permission is granted to copy and distribute modified versions of this
10 .\" manual under the conditions for verbatim copying, provided that the
11 .\" entire resulting derived work is distributed under the terms of a
12 .\" permission notice identical to this one.
13 .\"
14 .\" Since the Linux kernel and libraries are constantly changing, this
15 .\" manual page may be incorrect or out-of-date.  The author(s) assume no
16 .\" responsibility for errors or omissions, or for damages resulting from
17 .\" the use of the information contained herein.  The author(s) may not
18 .\" have taken the same level of care in the production of this manual,
19 .\" which is licensed free of charge, as they might when working
20 .\" professionally.
21 .\"
22 .\" Formatted or processed versions of this manual, if unaccompanied by
23 .\" the source, must acknowledge the copyright and authors of this work.
24 .\" %%%LICENSE_END
25 .\"
26 .\"
27 .TH USER_NAMESPACES 7 2021-03-22 "Linux" "Linux Programmer's Manual"
28 .SH NAME
29 user_namespaces \- overview of Linux user namespaces
30 .SH DESCRIPTION
31 For an overview of namespaces, see
32 .BR namespaces (7).
33 .PP
34 User namespaces isolate security-related identifiers and attributes,
35 in particular,
36 user IDs and group IDs (see
37 .BR credentials (7)),
38 the root directory,
39 keys (see
40 .BR keyrings (7)),
41 .\" FIXME: This page says very little about the interaction
42 .\" of user namespaces and keys. Add something on this topic.
43 and capabilities (see
44 .BR capabilities (7)).
45 A process's user and group IDs can be different
46 inside and outside a user namespace.
47 In particular,
48 a process can have a normal unprivileged user ID outside a user namespace
49 while at the same time having a user ID of 0 inside the namespace;
50 in other words,
51 the process has full privileges for operations inside the user namespace,
52 but is unprivileged for operations outside the namespace.
53 .\"
54 .\" ============================================================
55 .\"
56 .SS Nested namespaces, namespace membership
57 User namespaces can be nested;
58 that is, each user namespace\(emexcept the initial ("root")
59 namespace\(emhas a parent user namespace,
60 and can have zero or more child user namespaces.
61 The parent user namespace is the user namespace
62 of the process that creates the user namespace via a call to
63 .BR unshare (2)
65 .BR clone (2)
66 with the
67 .BR CLONE_NEWUSER
68 flag.
69 .PP
70 The kernel imposes (since version 3.11) a limit of 32 nested levels of
71 .\" commit 8742f229b635bf1c1c84a3dfe5e47c814c20b5c8
72 user namespaces.
73 .\" FIXME Explain the rationale for this limit. (What is the rationale?)
74 Calls to
75 .BR unshare (2)
77 .BR clone (2)
78 that would cause this limit to be exceeded fail with the error
79 .BR EUSERS .
80 .PP
81 Each process is a member of exactly one user namespace.
82 A process created via
83 .BR fork (2)
85 .BR clone (2)
86 without the
87 .BR CLONE_NEWUSER
88 flag is a member of the same user namespace as its parent.
89 A single-threaded process can join another user namespace with
90 .BR setns (2)
91 if it has the
92 .BR CAP_SYS_ADMIN
93 in that namespace;
94 upon doing so, it gains a full set of capabilities in that namespace.
95 .PP
96 A call to
97 .BR clone (2)
99 .BR unshare (2)
100 with the
101 .BR CLONE_NEWUSER
102 flag makes the new child process (for
103 .BR clone (2))
104 or the caller (for
105 .BR unshare (2))
106 a member of the new user namespace created by the call.
109 .BR NS_GET_PARENT
110 .BR ioctl (2)
111 operation can be used to discover the parental relationship
112 between user namespaces; see
113 .BR ioctl_ns (2).
115 .\" ============================================================
117 .SS Capabilities
118 The child process created by
119 .BR clone (2)
120 with the
121 .BR CLONE_NEWUSER
122 flag starts out with a complete set
123 of capabilities in the new user namespace.
124 Likewise, a process that creates a new user namespace using
125 .BR unshare (2)
126 or joins an existing user namespace using
127 .BR setns (2)
128 gains a full set of capabilities in that namespace.
129 On the other hand,
130 that process has no capabilities in the parent (in the case of
131 .BR clone (2))
132 or previous (in the case of
133 .BR unshare (2)
135 .BR setns (2))
136 user namespace,
137 even if the new namespace is created or joined by the root user
138 (i.e., a process with user ID 0 in the root namespace).
140 Note that a call to
141 .BR execve (2)
142 will cause a process's capabilities to be recalculated in the usual way (see
143 .BR capabilities (7)).
144 Consequently,
145 unless the process has a user ID of 0 within the namespace,
146 or the executable file has a nonempty inheritable capabilities mask,
147 the process will lose all capabilities.
148 See the discussion of user and group ID mappings, below.
150 A call to
151 .BR clone (2)
153 .BR unshare (2)
154 using the
155 .BR CLONE_NEWUSER
156 flag
157 or a call to
158 .BR setns (2)
159 that moves the caller into another user namespace
160 sets the "securebits" flags
161 (see
162 .BR capabilities (7))
163 to their default values (all flags disabled) in the child (for
164 .BR clone (2))
165 or caller (for
166 .BR unshare (2)
168 .BR setns (2)).
169 Note that because the caller no longer has capabilities
170 in its original user namespace after a call to
171 .BR setns (2),
172 it is not possible for a process to reset its "securebits" flags while
173 retaining its user namespace membership by using a pair of
174 .BR setns (2)
175 calls to move to another user namespace and then return to
176 its original user namespace.
178 The rules for determining whether or not a process has a capability
179 in a particular user namespace are as follows:
180 .IP 1. 3
181 A process has a capability inside a user namespace
182 if it is a member of that namespace and
183 it has the capability in its effective capability set.
184 A process can gain capabilities in its effective capability
185 set in various ways.
186 For example, it may execute a set-user-ID program or an
187 executable with associated file capabilities.
188 In addition,
189 a process may gain capabilities via the effect of
190 .BR clone (2),
191 .BR unshare (2),
193 .BR setns (2),
194 as already described.
195 .\" In the 3.8 sources, see security/commoncap.c::cap_capable():
196 .IP 2.
197 If a process has a capability in a user namespace,
198 then it has that capability in all child (and further removed descendant)
199 namespaces as well.
200 .IP 3.
201 .\" * The owner of the user namespace in the parent of the
202 .\" * user namespace has all caps.
203 When a user namespace is created, the kernel records the effective
204 user ID of the creating process as being the "owner" of the namespace.
205 .\" (and likewise associates the effective group ID of the creating process
206 .\" with the namespace).
207 A process that resides
208 in the parent of the user namespace
209 .\" See kernel commit 520d9eabce18edfef76a60b7b839d54facafe1f9 for a fix
210 .\" on this point
211 and whose effective user ID matches the owner of the namespace
212 has all capabilities in the namespace.
213 .\"     This includes the case where the process executes a set-user-ID
214 .\"     program that confers the effective UID of the creator of the namespace.
215 By virtue of the previous rule,
216 this means that the process has all capabilities in all
217 further removed descendant user namespaces as well.
219 .B NS_GET_OWNER_UID
220 .BR ioctl (2)
221 operation can be used to discover the user ID of the owner of the namespace;
223 .BR ioctl_ns (2).
225 .\" ============================================================
227 .SS Effect of capabilities within a user namespace
228 Having a capability inside a user namespace
229 permits a process to perform operations (that require privilege)
230 only on resources governed by that namespace.
231 In other words, having a capability in a user namespace permits a process
232 to perform privileged operations on resources that are governed by (nonuser)
233 namespaces owned by (associated with) the user namespace
234 (see the next subsection).
236 On the other hand, there are many privileged operations that affect
237 resources that are not associated with any namespace type,
238 for example, changing the system (i.e., calendar) time (governed by
239 .BR CAP_SYS_TIME ),
240 loading a kernel module (governed by
241 .BR CAP_SYS_MODULE ),
242 and creating a device (governed by
243 .BR CAP_MKNOD ).
244 Only a process with privileges in the
245 .I initial
246 user namespace can perform such operations.
248 Holding
249 .B CAP_SYS_ADMIN
250 within the user namespace that owns a process's mount namespace
251 allows that process to create bind mounts
252 and mount the following types of filesystems:
253 .\" fs_flags = FS_USERNS_MOUNT in kernel sources
255 .RS 4
256 .PD 0
257 .IP * 2
258 .IR /proc
259 (since Linux 3.8)
260 .IP *
261 .IR /sys
262 (since Linux 3.8)
263 .IP *
264 .IR devpts
265 (since Linux 3.9)
266 .IP *
267 .BR tmpfs (5)
268 (since Linux 3.9)
269 .IP *
270 .IR ramfs
271 (since Linux 3.9)
272 .IP *
273 .IR mqueue
274 (since Linux 3.9)
275 .IP *
276 .IR bpf
277 .\" commit b2197755b2633e164a439682fb05a9b5ea48f706
278 (since Linux 4.4)
279 .IP *
280 .IR overlayfs
281 .\" commit 92dbc9dedccb9759c7f9f2f0ae6242396376988f
282 .\" commit 4cb2c00c43b3fe88b32f29df4f76da1b92c33224
283 (since Linux 5.11)
287 Holding
288 .B CAP_SYS_ADMIN
289 within the user namespace that owns a process's cgroup namespace
290 allows (since Linux 4.6)
291 that process to the mount the cgroup version 2 filesystem and
292 cgroup version 1 named hierarchies
293 (i.e., cgroup filesystems mounted with the
294 .IR """none,name="""
295 option).
297 Holding
298 .B CAP_SYS_ADMIN
299 within the user namespace that owns a process's PID namespace
300 allows (since Linux 3.8)
301 that process to mount
302 .I /proc
303 filesystems.
305 Note, however, that mounting block-based filesystems can be done
306 only by a process that holds
307 .BR CAP_SYS_ADMIN
308 in the initial user namespace.
310 .\" ============================================================
312 .SS Interaction of user namespaces and other types of namespaces
313 Starting in Linux 3.8, unprivileged processes can create user namespaces,
314 and the other types of namespaces can be created with just the
315 .B CAP_SYS_ADMIN
316 capability in the caller's user namespace.
318 When a nonuser namespace is created,
319 it is owned by the user namespace in which the creating process
320 was a member at the time of the creation of the namespace.
321 Privileged operations on resources governed by the nonuser namespace
322 require that the process has the necessary capabilities
323 in the user namespace that owns the nonuser namespace.
326 .BR CLONE_NEWUSER
327 is specified along with other
328 .B CLONE_NEW*
329 flags in a single
330 .BR clone (2)
332 .BR unshare (2)
333 call, the user namespace is guaranteed to be created first,
334 giving the child
335 .RB ( clone (2))
336 or caller
337 .RB ( unshare (2))
338 privileges over the remaining namespaces created by the call.
339 Thus, it is possible for an unprivileged caller to specify this combination
340 of flags.
342 When a new namespace (other than a user namespace) is created via
343 .BR clone (2)
345 .BR unshare (2),
346 the kernel records the user namespace of the creating process as the owner of
347 the new namespace.
348 (This association can't be changed.)
349 When a process in the new namespace subsequently performs
350 privileged operations that operate on global
351 resources isolated by the namespace,
352 the permission checks are performed according to the process's capabilities
353 in the user namespace that the kernel associated with the new namespace.
354 For example, suppose that a process attempts to change the hostname
355 .RB ( sethostname (2)),
356 a resource governed by the UTS namespace.
357 In this case,
358 the kernel will determine which user namespace owns
359 the process's UTS namespace, and check whether the process has the
360 required capability
361 .RB ( CAP_SYS_ADMIN )
362 in that user namespace.
365 .BR NS_GET_USERNS
366 .BR ioctl (2)
367 operation can be used to discover the user namespace
368 that owns a nonuser namespace; see
369 .BR ioctl_ns (2).
371 .\" ============================================================
373 .SS User and group ID mappings: uid_map and gid_map
374 When a user namespace is created,
375 it starts out without a mapping of user IDs (group IDs)
376 to the parent user namespace.
378 .IR /proc/[pid]/uid_map
380 .IR /proc/[pid]/gid_map
381 files (available since Linux 3.5)
382 .\" commit 22d917d80e842829d0ca0a561967d728eb1d6303
383 expose the mappings for user and group IDs
384 inside the user namespace for the process
385 .IR pid .
386 These files can be read to view the mappings in a user namespace and
387 written to (once) to define the mappings.
389 The description in the following paragraphs explains the details for
390 .IR uid_map ;
391 .IR gid_map
392 is exactly the same,
393 but each instance of "user ID" is replaced by "group ID".
396 .I uid_map
397 file exposes the mapping of user IDs from the user namespace
398 of the process
399 .IR pid
400 to the user namespace of the process that opened
401 .IR uid_map
402 (but see a qualification to this point below).
403 In other words, processes that are in different user namespaces
404 will potentially see different values when reading from a particular
405 .I uid_map
406 file, depending on the user ID mappings for the user namespaces
407 of the reading processes.
409 Each line in the
410 .I uid_map
411 file specifies a 1-to-1 mapping of a range of contiguous
412 user IDs between two user namespaces.
413 (When a user namespace is first created, this file is empty.)
414 The specification in each line takes the form of
415 three numbers delimited by white space.
416 The first two numbers specify the starting user ID in
417 each of the two user namespaces.
418 The third number specifies the length of the mapped range.
419 In detail, the fields are interpreted as follows:
420 .IP (1) 4
421 The start of the range of user IDs in
422 the user namespace of the process
423 .IR pid .
424 .IP (2)
425 The start of the range of user
426 IDs to which the user IDs specified by field one map.
427 How field two is interpreted depends on whether the process that opened
428 .I uid_map
429 and the process
430 .IR pid
431 are in the same user namespace, as follows:
433 .IP a) 3
434 If the two processes are in different user namespaces:
435 field two is the start of a range of
436 user IDs in the user namespace of the process that opened
437 .IR uid_map .
438 .IP b)
439 If the two processes are in the same user namespace:
440 field two is the start of the range of
441 user IDs in the parent user namespace of the process
442 .IR pid .
443 This case enables the opener of
444 .I uid_map
445 (the common case here is opening
446 .IR /proc/self/uid_map )
447 to see the mapping of user IDs into the user namespace of the process
448 that created this user namespace.
450 .IP (3)
451 The length of the range of user IDs that is mapped between the two
452 user namespaces.
454 System calls that return user IDs (group IDs)\(emfor example,
455 .BR getuid (2),
456 .BR getgid (2),
457 and the credential fields in the structure returned by
458 .BR stat (2)\(emreturn
459 the user ID (group ID) mapped into the caller's user namespace.
461 When a process accesses a file, its user and group IDs
462 are mapped into the initial user namespace for the purpose of permission
463 checking and assigning IDs when creating a file.
464 When a process retrieves file user and group IDs via
465 .BR stat (2),
466 the IDs are mapped in the opposite direction,
467 to produce values relative to the process user and group ID mappings.
469 The initial user namespace has no parent namespace,
470 but, for consistency, the kernel provides dummy user and group
471 ID mapping files for this namespace.
472 Looking at the
473 .I uid_map
474 file
475 .RI ( gid_map
476 is the same) from a shell in the initial namespace shows:
478 .in +4n
480 $ \fBcat /proc/$$/uid_map\fP
481          0          0 4294967295
485 This mapping tells us
486 that the range starting at user ID 0 in this namespace
487 maps to a range starting at 0 in the (nonexistent) parent namespace,
488 and the length of the range is the largest 32-bit unsigned integer.
489 This leaves 4294967295 (the 32-bit signed \-1 value) unmapped.
490 This is deliberate:
491 .IR "(uid_t)\ \-1"
492 is used in several interfaces (e.g.,
493 .BR setreuid (2))
494 as a way to specify "no user ID".
495 Leaving
496 .IR "(uid_t)\ \-1"
497 unmapped and unusable guarantees that there will be no
498 confusion when using these interfaces.
500 .\" ============================================================
502 .SS Defining user and group ID mappings: writing to uid_map and gid_map
503 After the creation of a new user namespace, the
504 .I uid_map
505 file of
506 .I one
507 of the processes in the namespace may be written to
508 .I once
509 to define the mapping of user IDs in the new user namespace.
510 An attempt to write more than once to a
511 .I uid_map
512 file in a user namespace fails with the error
513 .BR EPERM .
514 Similar rules apply for
515 .I gid_map
516 files.
518 The lines written to
519 .IR uid_map
520 .RI ( gid_map )
521 must conform to the following validity rules:
522 .IP * 3
523 The three fields must be valid numbers,
524 and the last field must be greater than 0.
525 .IP *
526 Lines are terminated by newline characters.
527 .IP *
528 There is a limit on the number of lines in the file.
529 In Linux 4.14 and earlier, this limit was (arbitrarily)
530 .\" 5*12-byte records could fit in a 64B cache line
531 set at 5 lines.
532 Since Linux 4.15,
533 .\" commit 6397fac4915ab3002dc15aae751455da1a852f25
534 the limit is 340 lines.
535 In addition, the number of bytes written to
536 the file must be less than the system page size,
537 and the write must be performed at the start of the file (i.e.,
538 .BR lseek (2)
540 .BR pwrite (2)
541 can't be used to write to nonzero offsets in the file).
542 .IP *
543 The range of user IDs (group IDs)
544 specified in each line cannot overlap with the ranges
545 in any other lines.
546 In the initial implementation (Linux 3.8), this requirement was
547 satisfied by a simplistic implementation that imposed the further
548 requirement that
549 the values in both field 1 and field 2 of successive lines must be
550 in ascending numerical order,
551 which prevented some otherwise valid maps from being created.
552 Linux 3.9 and later
553 .\" commit 0bd14b4fd72afd5df41e9fd59f356740f22fceba
554 fix this limitation, allowing any valid set of nonoverlapping maps.
555 .IP *
556 At least one line must be written to the file.
558 Writes that violate the above rules fail with the error
559 .BR EINVAL .
561 In order for a process to write to the
562 .I /proc/[pid]/uid_map
563 .RI ( /proc/[pid]/gid_map )
564 file, all of the following permission requirements must be met:
565 .IP 1. 3
566 The writing process must have the
567 .BR CAP_SETUID
568 .RB ( CAP_SETGID )
569 capability in the user namespace of the process
570 .IR pid .
571 .IP 2.
572 The writing process must either be in the user namespace of the process
573 .I pid
574 or be in the parent user namespace of the process
575 .IR pid .
576 .IP 3.
577 The mapped user IDs (group IDs) must in turn have a mapping
578 in the parent user namespace.
579 .IP 4.
580 If updating
581 .IR /proc/[pid]/uid_map
582 to create a mapping that maps UID 0 in the parent namespace,
583 then one of the following must be true:
585 .IP * 3
586 if writing process is in the parent user namespace,
587 then it must have the
588 .BR CAP_SETFCAP
589 capability in that user namespace; or
590 .IP *
591 if the writing process is in the child user namespace,
592 then the process that created the user namespace must have had the
593 .BR CAP_SETFCAP
594 capability when the namespace was created.
597 This rule has been in place since
598 .\" commit db2e718a47984b9d71ed890eb2ea36ecf150de18
599 Linux 5.12.
600 It eliminates an earlier security bug whereby
601 a UID 0 process that lacks the
602 .B CAP_SETFCAP
603 capability,
604 which is needed to create a binary with namespaced file capabilities
605 (as described in
606 .BR capabilities (7)),
607 could nevertheless create such a binary,
608 by the following steps:
610 .IP * 3
611 Create a new user namespace with the identity mapping
612 (i.e., UID 0 in the new user namespace maps to UID 0 in the parent namespace),
613 so that UID 0 in both namespaces is equivalent to the same root user ID.
614 .IP *
615 Since the child process has the
616 .B CAP_SETFCAP
617 capability, it could create a binary with namespaced file capabilities
618 that would then be effective in the parent user namespace
619 (because the root user IDs are the same in the two namespaces).
621 .IP 5.
622 One of the following two cases applies:
624 .IP * 3
625 .IR Either
626 the writing process has the
627 .BR CAP_SETUID
628 .RB ( CAP_SETGID )
629 capability in the
630 .I parent
631 user namespace.
633 .IP + 3
634 No further restrictions apply:
635 the process can make mappings to arbitrary user IDs (group IDs)
636 in the parent user namespace.
638 .IP * 3
639 .IR Or
640 otherwise all of the following restrictions apply:
642 .IP + 3
643 The data written to
644 .I uid_map
645 .RI ( gid_map )
646 must consist of a single line that maps
647 the writing process's effective user ID
648 (group ID) in the parent user namespace to a user ID (group ID)
649 in the user namespace.
650 .IP +
651 The writing process must have the same effective user ID as the process
652 that created the user namespace.
653 .IP +
654 In the case of
655 .IR gid_map ,
656 use of the
657 .BR setgroups (2)
658 system call must first be denied by writing
659 .RI \(dq deny \(dq
660 to the
661 .I /proc/[pid]/setgroups
662 file (see below) before writing to
663 .IR gid_map .
667 Writes that violate the above rules fail with the error
668 .BR EPERM .
670 .\" ============================================================
672 .SS Project ID mappings: projid_map
673 Similarly to user and group ID mappings,
674 it is possible to create project ID mappings for a user namespace.
675 (Project IDs are used for disk quotas; see
676 .BR setquota (8)
678 .BR quotactl (2).)
680 Project ID mappings are defined by writing to the
681 .I /proc/[pid]/projid_map
682 file (present since
683 .\" commit f76d207a66c3a53defea67e7d36c3eb1b7d6d61d
684 Linux 3.7).
686 The validity rules for writing to the
687 .I /proc/[pid]/projid_map
688 file are as for writing to the
689 .I uid_map
690 file; violation of these rules causes
691 .BR write (2)
692 to fail with the error
693 .BR EINVAL .
695 The permission rules for writing to the
696 .I /proc/[pid]/projid_map
697 file are as follows:
698 .IP 1. 3
699 The writing process must either be in the user namespace of the process
700 .I pid
701 or be in the parent user namespace of the process
702 .IR pid .
703 .IP 2.
704 The mapped project IDs must in turn have a mapping
705 in the parent user namespace.
707 Violation of these rules causes
708 .BR write (2)
709 to fail with the error
710 .BR EPERM .
712 .\" ============================================================
714 .SS Interaction with system calls that change process UIDs or GIDs
715 In a user namespace where the
716 .I uid_map
717 file has not been written, the system calls that change user IDs will fail.
718 Similarly, if the
719 .I gid_map
720 file has not been written, the system calls that change group IDs will fail.
721 After the
722 .I uid_map
724 .I gid_map
725 files have been written, only the mapped values may be used in
726 system calls that change user and group IDs.
728 For user IDs, the relevant system calls include
729 .BR setuid (2),
730 .BR setfsuid (2),
731 .BR setreuid (2),
733 .BR setresuid (2).
734 For group IDs, the relevant system calls include
735 .BR setgid (2),
736 .BR setfsgid (2),
737 .BR setregid (2),
738 .BR setresgid (2),
740 .BR setgroups (2).
742 Writing
743 .RI \(dq deny \(dq
744 to the
745 .I /proc/[pid]/setgroups
746 file before writing to
747 .I /proc/[pid]/gid_map
748 .\" Things changed in Linux 3.19
749 .\" commit 9cc46516ddf497ea16e8d7cb986ae03a0f6b92f8
750 .\" commit 66d2f338ee4c449396b6f99f5e75cd18eb6df272
751 .\" http://lwn.net/Articles/626665/
752 will permanently disable
753 .BR setgroups (2)
754 in a user namespace and allow writing to
755 .I /proc/[pid]/gid_map
756 without having the
757 .BR CAP_SETGID
758 capability in the parent user namespace.
760 .\" ============================================================
762 .SS The /proc/[pid]/setgroups file
764 .\" commit 9cc46516ddf497ea16e8d7cb986ae03a0f6b92f8
765 .\" commit 66d2f338ee4c449396b6f99f5e75cd18eb6df272
766 .\" http://lwn.net/Articles/626665/
767 .\" http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-8989
770 .I /proc/[pid]/setgroups
771 file displays the string
772 .RI \(dq allow \(dq
773 if processes in the user namespace that contains the process
774 .I pid
775 are permitted to employ the
776 .BR setgroups (2)
777 system call; it displays
778 .RI \(dq deny \(dq
780 .BR setgroups (2)
781 is not permitted in that user namespace.
782 Note that regardless of the value in the
783 .I /proc/[pid]/setgroups
784 file (and regardless of the process's capabilities), calls to
785 .BR setgroups (2)
786 are also not permitted if
787 .IR /proc/[pid]/gid_map
788 has not yet been set.
790 A privileged process (one with the
791 .BR CAP_SYS_ADMIN
792 capability in the namespace) may write either of the strings
793 .RI \(dq allow \(dq
795 .RI \(dq deny \(dq
796 to this file
797 .I before
798 writing a group ID mapping
799 for this user namespace to the file
800 .IR /proc/[pid]/gid_map .
801 Writing the string
802 .RI \(dq deny \(dq
803 prevents any process in the user namespace from employing
804 .BR setgroups (2).
806 The essence of the restrictions described in the preceding
807 paragraph is that it is permitted to write to
808 .I /proc/[pid]/setgroups
809 only so long as calling
810 .BR setgroups (2)
811 is disallowed because
812 .I /proc/[pid]/gid_map
813 has not been set.
814 This ensures that a process cannot transition from a state where
815 .BR setgroups (2)
816 is allowed to a state where
817 .BR setgroups (2)
818 is denied;
819 a process can transition only from
820 .BR setgroups (2)
821 being disallowed to
822 .BR setgroups (2)
823 being allowed.
825 The default value of this file in the initial user namespace is
826 .RI \(dq allow \(dq.
828 Once
829 .IR /proc/[pid]/gid_map
830 has been written to
831 (which has the effect of enabling
832 .BR setgroups (2)
833 in the user namespace),
834 it is no longer possible to disallow
835 .BR setgroups (2)
836 by writing
837 .RI \(dq deny \(dq
839 .IR /proc/[pid]/setgroups
840 (the write fails with the error
841 .BR EPERM ).
843 A child user namespace inherits the
844 .IR /proc/[pid]/setgroups
845 setting from its parent.
847 If the
848 .I setgroups
849 file has the value
850 .RI \(dq deny \(dq,
851 then the
852 .BR setgroups (2)
853 system call can't subsequently be reenabled (by writing
854 .RI \(dq allow \(dq
855 to the file) in this user namespace.
856 (Attempts to do so fail with the error
857 .BR EPERM .)
858 This restriction also propagates down to all child user namespaces of
859 this user namespace.
862 .I /proc/[pid]/setgroups
863 file was added in Linux 3.19,
864 but was backported to many earlier stable kernel series,
865 because it addresses a security issue.
866 The issue concerned files with permissions such as "rwx\-\-\-rwx".
867 Such files give fewer permissions to "group" than they do to "other".
868 This means that dropping groups using
869 .BR setgroups (2)
870 might allow a process file access that it did not formerly have.
871 Before the existence of user namespaces this was not a concern,
872 since only a privileged process (one with the
873 .BR CAP_SETGID
874 capability) could call
875 .BR setgroups (2).
876 However, with the introduction of user namespaces,
877 it became possible for an unprivileged process to create
878 a new namespace in which the user had all privileges.
879 This then allowed formerly unprivileged
880 users to drop groups and thus gain file access
881 that they did not previously have.
883 .I /proc/[pid]/setgroups
884 file was added to address this security issue,
885 by denying any pathway for an unprivileged process to drop groups with
886 .BR setgroups (2).
888 .\" /proc/PID/setgroups
889 .\"     [allow == setgroups() is allowed, "deny" == setgroups() is disallowed]
890 .\"     * Can write if have CAP_SYS_ADMIN in NS
891 .\"     * Must write BEFORE writing to /proc/PID/gid_map
893 .\" setgroups()
894 .\"     * Must already have written to gid_map
895 .\"     * /proc/PID/setgroups must be "allow"
897 .\" /proc/PID/gid_map -- writing
898 .\"     * Must already have written "deny" to /proc/PID/setgroups
900 .\" ============================================================
902 .SS Unmapped user and group IDs
903 There are various places where an unmapped user ID (group ID)
904 may be exposed to user space.
905 For example, the first process in a new user namespace may call
906 .BR getuid (2)
907 before a user ID mapping has been defined for the namespace.
908 In most such cases, an unmapped user ID is converted
909 .\" from_kuid_munged(), from_kgid_munged()
910 to the overflow user ID (group ID);
911 the default value for the overflow user ID (group ID) is 65534.
912 See the descriptions of
913 .IR /proc/sys/kernel/overflowuid
915 .IR /proc/sys/kernel/overflowgid
917 .BR proc (5).
919 The cases where unmapped IDs are mapped in this fashion include
920 system calls that return user IDs
921 .RB ( getuid (2),
922 .BR getgid (2),
923 and similar),
924 credentials passed over a UNIX domain socket,
925 .\" also SO_PEERCRED
926 credentials returned by
927 .BR stat (2),
928 .BR waitid (2),
929 and the System V IPC "ctl"
930 .B IPC_STAT
931 operations,
932 credentials exposed by
933 .IR /proc/[pid]/status
934 and the files in
935 .IR /proc/sysvipc/* ,
936 credentials returned via the
937 .I si_uid
938 field in the
939 .I siginfo_t
940 received with a signal (see
941 .BR sigaction (2)),
942 credentials written to the process accounting file (see
943 .BR acct (5)),
944 and credentials returned with POSIX message queue notifications (see
945 .BR mq_notify (3)).
947 There is one notable case where unmapped user and group IDs are
948 .I not
949 .\" from_kuid(), from_kgid()
950 .\" Also F_GETOWNER_UIDS is an exception
951 converted to the corresponding overflow ID value.
952 When viewing a
953 .I uid_map
955 .I gid_map
956 file in which there is no mapping for the second field,
957 that field is displayed as 4294967295 (\-1 as an unsigned integer).
959 .\" ============================================================
961 .SS Accessing files
962 In order to determine permissions when an unprivileged process accesses a file,
963 the process credentials (UID, GID) and the file credentials
964 are in effect mapped back to what they would be in
965 the initial user namespace and then compared to determine
966 the permissions that the process has on the file.
967 The same is also of other objects that employ the credentials plus
968 permissions mask accessibility model, such as System V IPC objects
970 .\" ============================================================
972 .SS Operation of file-related capabilities
973 Certain capabilities allow a process to bypass various
974 kernel-enforced restrictions when performing operations on
975 files owned by other users or groups.
976 These capabilities are:
977 .BR CAP_CHOWN ,
978 .BR CAP_DAC_OVERRIDE ,
979 .BR CAP_DAC_READ_SEARCH ,
980 .BR CAP_FOWNER ,
982 .BR CAP_FSETID .
984 Within a user namespace,
985 these capabilities allow a process to bypass the rules
986 if the process has the relevant capability over the file,
987 meaning that:
988 .IP * 3
989 the process has the relevant effective capability in its user namespace; and
990 .IP *
991 the file's user ID and group ID both have valid mappings
992 in the user namespace.
995 .BR CAP_FOWNER
996 capability is treated somewhat exceptionally:
997 .\" These are the checks performed by the kernel function
998 .\" inode_owner_or_capable(). There is one exception to the exception:
999 .\" overriding the directory sticky permission bit requires that
1000 .\" the file has a valid mapping for both its UID and GID.
1001 it allows a process to bypass the corresponding rules so long as
1002 at least the file's user ID has a mapping in the user namespace
1003 (i.e., the file's group ID does not need to have a valid mapping).
1005 .\" ============================================================
1007 .SS Set-user-ID and set-group-ID programs
1008 When a process inside a user namespace executes
1009 a set-user-ID (set-group-ID) program,
1010 the process's effective user (group) ID inside the namespace is changed
1011 to whatever value is mapped for the user (group) ID of the file.
1012 However, if either the user
1013 .I or
1014 the group ID of the file has no mapping inside the namespace,
1015 the set-user-ID (set-group-ID) bit is silently ignored:
1016 the new program is executed,
1017 but the process's effective user (group) ID is left unchanged.
1018 (This mirrors the semantics of executing a set-user-ID or set-group-ID
1019 program that resides on a filesystem that was mounted with the
1020 .BR MS_NOSUID
1021 flag, as described in
1022 .BR mount (2).)
1024 .\" ============================================================
1026 .SS Miscellaneous
1027 When a process's user and group IDs are passed over a UNIX domain socket
1028 to a process in a different user namespace (see the description of
1029 .B SCM_CREDENTIALS
1031 .BR unix (7)),
1032 they are translated into the corresponding values as per the
1033 receiving process's user and group ID mappings.
1035 .SH CONFORMING TO
1036 Namespaces are a Linux-specific feature.
1038 .SH NOTES
1039 Over the years, there have been a lot of features that have been added
1040 to the Linux kernel that have been made available only to privileged users
1041 because of their potential to confuse set-user-ID-root applications.
1042 In general, it becomes safe to allow the root user in a user namespace to
1043 use those features because it is impossible, while in a user namespace,
1044 to gain more privilege than the root user of a user namespace has.
1046 .\" ============================================================
1048 .SS Availability
1049 Use of user namespaces requires a kernel that is configured with the
1050 .B CONFIG_USER_NS
1051 option.
1052 User namespaces require support in a range of subsystems across
1053 the kernel.
1054 When an unsupported subsystem is configured into the kernel,
1055 it is not possible to configure user namespaces support.
1057 As at Linux 3.8, most relevant subsystems supported user namespaces,
1058 but a number of filesystems did not have the infrastructure needed
1059 to map user and group IDs between user namespaces.
1060 Linux 3.9 added the required infrastructure support for many of
1061 the remaining unsupported filesystems
1062 (Plan 9 (9P), Andrew File System (AFS), Ceph, CIFS, CODA, NFS, and OCFS2).
1063 Linux 3.12 added support for the last of the unsupported major filesystems,
1064 .\" commit d6970d4b726cea6d7a9bc4120814f95c09571fc3
1065 XFS.
1067 .SH EXAMPLES
1068 The program below is designed to allow experimenting with
1069 user namespaces, as well as other types of namespaces.
1070 It creates namespaces as specified by command-line options and then executes
1071 a command inside those namespaces.
1072 The comments and
1073 .I usage()
1074 function inside the program provide a full explanation of the program.
1075 The following shell session demonstrates its use.
1077 First, we look at the run-time environment:
1079 .in +4n
1081 $ \fBuname \-rs\fP     # Need Linux 3.8 or later
1082 Linux 3.8.0
1083 $ \fBid \-u\fP         # Running as unprivileged user
1084 1000
1085 $ \fBid \-g\fP
1086 1000
1090 Now start a new shell in new user
1091 .RI ( \-U ),
1092 mount
1093 .RI ( \-m ),
1094 and PID
1095 .RI ( \-p )
1096 namespaces, with user ID
1097 .RI ( \-M )
1098 and group ID
1099 .RI ( \-G )
1100 1000 mapped to 0 inside the user namespace:
1102 .in +4n
1104 $ \fB./userns_child_exec \-p \-m \-U \-M \(aq0 1000 1\(aq \-G \(aq0 1000 1\(aq bash\fP
1108 The shell has PID 1, because it is the first process in the new
1109 PID namespace:
1111 .in +4n
1113 bash$ \fBecho $$\fP
1118 Mounting a new
1119 .I /proc
1120 filesystem and listing all of the processes visible
1121 in the new PID namespace shows that the shell can't see
1122 any processes outside the PID namespace:
1124 .in +4n
1126 bash$ \fBmount \-t proc proc /proc\fP
1127 bash$ \fBps ax\fP
1128   PID TTY      STAT   TIME COMMAND
1129     1 pts/3    S      0:00 bash
1130    22 pts/3    R+     0:00 ps ax
1134 Inside the user namespace, the shell has user and group ID 0,
1135 and a full set of permitted and effective capabilities:
1137 .in +4n
1139 bash$ \fBcat /proc/$$/status | egrep \(aq\(ha[UG]id\(aq\fP
1140 Uid:    0       0       0       0
1141 Gid:    0       0       0       0
1142 bash$ \fBcat /proc/$$/status | egrep \(aq\(haCap(Prm|Inh|Eff)\(aq\fP
1143 CapInh: 0000000000000000
1144 CapPrm: 0000001fffffffff
1145 CapEff: 0000001fffffffff
1148 .SS Program source
1151 /* userns_child_exec.c
1153    Licensed under GNU General Public License v2 or later
1155    Create a child process that executes a shell command in new
1156    namespace(s); allow UID and GID mappings to be specified when
1157    creating a user namespace.
1159 #define _GNU_SOURCE
1160 #include <sched.h>
1161 #include <unistd.h>
1162 #include <stdint.h>
1163 #include <stdlib.h>
1164 #include <sys/wait.h>
1165 #include <signal.h>
1166 #include <fcntl.h>
1167 #include <stdio.h>
1168 #include <string.h>
1169 #include <limits.h>
1170 #include <errno.h>
1172 /* A simple error\-handling function: print an error message based
1173    on the value in \(aqerrno\(aq and terminate the calling process. */
1175 #define errExit(msg)    do { perror(msg); exit(EXIT_FAILURE); \e
1176                         } while (0)
1178 struct child_args {
1179     char **argv;        /* Command to be executed by child, with args */
1180     int    pipe_fd[2];  /* Pipe used to synchronize parent and child */
1183 static int verbose;
1185 static void
1186 usage(char *pname)
1188     fprintf(stderr, "Usage: %s [options] cmd [arg...]\en\en", pname);
1189     fprintf(stderr, "Create a child process that executes a shell "
1190             "command in a new user namespace,\en"
1191             "and possibly also other new namespace(s).\en\en");
1192     fprintf(stderr, "Options can be:\en\en");
1193 #define fpe(str) fprintf(stderr, "    %s", str);
1194     fpe("\-i          New IPC namespace\en");
1195     fpe("\-m          New mount namespace\en");
1196     fpe("\-n          New network namespace\en");
1197     fpe("\-p          New PID namespace\en");
1198     fpe("\-u          New UTS namespace\en");
1199     fpe("\-U          New user namespace\en");
1200     fpe("\-M uid_map  Specify UID map for user namespace\en");
1201     fpe("\-G gid_map  Specify GID map for user namespace\en");
1202     fpe("\-z          Map user\(aqs UID and GID to 0 in user namespace\en");
1203     fpe("            (equivalent to: \-M \(aq0 <uid> 1\(aq \-G \(aq0 <gid> 1\(aq)\en");
1204     fpe("\-v          Display verbose messages\en");
1205     fpe("\en");
1206     fpe("If \-z, \-M, or \-G is specified, \-U is required.\en");
1207     fpe("It is not permitted to specify both \-z and either \-M or \-G.\en");
1208     fpe("\en");
1209     fpe("Map strings for \-M and \-G consist of records of the form:\en");
1210     fpe("\en");
1211     fpe("    ID\-inside\-ns   ID\-outside\-ns   len\en");
1212     fpe("\en");
1213     fpe("A map string can contain multiple records, separated"
1214         " by commas;\en");
1215     fpe("the commas are replaced by newlines before writing"
1216         " to map files.\en");
1218     exit(EXIT_FAILURE);
1221 /* Update the mapping file \(aqmap_file\(aq, with the value provided in
1222    \(aqmapping\(aq, a string that defines a UID or GID mapping. A UID or
1223    GID mapping consists of one or more newline\-delimited records
1224    of the form:
1226        ID_inside\-ns    ID\-outside\-ns   length
1228    Requiring the user to supply a string that contains newlines is
1229    of course inconvenient for command\-line use. Thus, we permit the
1230    use of commas to delimit records in this string, and replace them
1231    with newlines before writing the string to the file. */
1233 static void
1234 update_map(char *mapping, char *map_file)
1236     int fd;
1237     size_t map_len;     /* Length of \(aqmapping\(aq */
1239     /* Replace commas in mapping string with newlines. */
1241     map_len = strlen(mapping);
1242     for (int j = 0; j < map_len; j++)
1243         if (mapping[j] == \(aq,\(aq)
1244             mapping[j] = \(aq\en\(aq;
1246     fd = open(map_file, O_RDWR);
1247     if (fd == \-1) {
1248         fprintf(stderr, "ERROR: open %s: %s\en", map_file,
1249                 strerror(errno));
1250         exit(EXIT_FAILURE);
1251     }
1253     if (write(fd, mapping, map_len) != map_len) {
1254         fprintf(stderr, "ERROR: write %s: %s\en", map_file,
1255                 strerror(errno));
1256         exit(EXIT_FAILURE);
1257     }
1259     close(fd);
1262 /* Linux 3.19 made a change in the handling of setgroups(2) and the
1263    \(aqgid_map\(aq file to address a security issue. The issue allowed
1264    *unprivileged* users to employ user namespaces in order to drop
1265    The upshot of the 3.19 changes is that in order to update the
1266    \(aqgid_maps\(aq file, use of the setgroups() system call in this
1267    user namespace must first be disabled by writing "deny" to one of
1268    the /proc/PID/setgroups files for this namespace.  That is the
1269    purpose of the following function. */
1271 static void
1272 proc_setgroups_write(pid_t child_pid, char *str)
1274     char setgroups_path[PATH_MAX];
1275     int fd;
1277     snprintf(setgroups_path, PATH_MAX, "/proc/%jd/setgroups",
1278             (intmax_t) child_pid);
1280     fd = open(setgroups_path, O_RDWR);
1281     if (fd == \-1) {
1283         /* We may be on a system that doesn\(aqt support
1284            /proc/PID/setgroups. In that case, the file won\(aqt exist,
1285            and the system won\(aqt impose the restrictions that Linux 3.19
1286            added. That\(aqs fine: we don\(aqt need to do anything in order
1287            to permit \(aqgid_map\(aq to be updated.
1289            However, if the error from open() was something other than
1290            the ENOENT error that is expected for that case,  let the
1291            user know. */
1293         if (errno != ENOENT)
1294             fprintf(stderr, "ERROR: open %s: %s\en", setgroups_path,
1295                 strerror(errno));
1296         return;
1297     }
1299     if (write(fd, str, strlen(str)) == \-1)
1300         fprintf(stderr, "ERROR: write %s: %s\en", setgroups_path,
1301             strerror(errno));
1303     close(fd);
1306 static int              /* Start function for cloned child */
1307 childFunc(void *arg)
1309     struct child_args *args = arg;
1310     char ch;
1312     /* Wait until the parent has updated the UID and GID mappings.
1313        See the comment in main(). We wait for end of file on a
1314        pipe that will be closed by the parent process once it has
1315        updated the mappings. */
1317     close(args\->pipe_fd[1]);    /* Close our descriptor for the write
1318                                    end of the pipe so that we see EOF
1319                                    when parent closes its descriptor. */
1320     if (read(args\->pipe_fd[0], &ch, 1) != 0) {
1321         fprintf(stderr,
1322                 "Failure in child: read from pipe returned != 0\en");
1323         exit(EXIT_FAILURE);
1324     }
1326     close(args\->pipe_fd[0]);
1328     /* Execute a shell command. */
1330     printf("About to exec %s\en", args\->argv[0]);
1331     execvp(args\->argv[0], args\->argv);
1332     errExit("execvp");
1335 #define STACK_SIZE (1024 * 1024)
1337 static char child_stack[STACK_SIZE];    /* Space for child\(aqs stack */
1340 main(int argc, char *argv[])
1342     int flags, opt, map_zero;
1343     pid_t child_pid;
1344     struct child_args args;
1345     char *uid_map, *gid_map;
1346     const int MAP_BUF_SIZE = 100;
1347     char map_buf[MAP_BUF_SIZE];
1348     char map_path[PATH_MAX];
1350     /* Parse command\-line options. The initial \(aq+\(aq character in
1351        the final getopt() argument prevents GNU\-style permutation
1352        of command\-line options. That\(aqs useful, since sometimes
1353        the \(aqcommand\(aq to be executed by this program itself
1354        has command\-line options. We don\(aqt want getopt() to treat
1355        those as options to this program. */
1357     flags = 0;
1358     verbose = 0;
1359     gid_map = NULL;
1360     uid_map = NULL;
1361     map_zero = 0;
1362     while ((opt = getopt(argc, argv, "+imnpuUM:G:zv")) != \-1) {
1363         switch (opt) {
1364         case \(aqi\(aq: flags |= CLONE_NEWIPC;        break;
1365         case \(aqm\(aq: flags |= CLONE_NEWNS;         break;
1366         case \(aqn\(aq: flags |= CLONE_NEWNET;        break;
1367         case \(aqp\(aq: flags |= CLONE_NEWPID;        break;
1368         case \(aqu\(aq: flags |= CLONE_NEWUTS;        break;
1369         case \(aqv\(aq: verbose = 1;                  break;
1370         case \(aqz\(aq: map_zero = 1;                 break;
1371         case \(aqM\(aq: uid_map = optarg;             break;
1372         case \(aqG\(aq: gid_map = optarg;             break;
1373         case \(aqU\(aq: flags |= CLONE_NEWUSER;       break;
1374         default:  usage(argv[0]);
1375         }
1376     }
1378     /* \-M or \-G without \-U is nonsensical */
1380     if (((uid_map != NULL || gid_map != NULL || map_zero) &&
1381                 !(flags & CLONE_NEWUSER)) ||
1382             (map_zero && (uid_map != NULL || gid_map != NULL)))
1383         usage(argv[0]);
1385     args.argv = &argv[optind];
1387     /* We use a pipe to synchronize the parent and child, in order to
1388        ensure that the parent sets the UID and GID maps before the child
1389        calls execve(). This ensures that the child maintains its
1390        capabilities during the execve() in the common case where we
1391        want to map the child\(aqs effective user ID to 0 in the new user
1392        namespace. Without this synchronization, the child would lose
1393        its capabilities if it performed an execve() with nonzero
1394        user IDs (see the capabilities(7) man page for details of the
1395        transformation of a process\(aqs capabilities during execve()). */
1397     if (pipe(args.pipe_fd) == \-1)
1398         errExit("pipe");
1400     /* Create the child in new namespace(s). */
1402     child_pid = clone(childFunc, child_stack + STACK_SIZE,
1403                       flags | SIGCHLD, &args);
1404     if (child_pid == \-1)
1405         errExit("clone");
1407     /* Parent falls through to here. */
1409     if (verbose)
1410         printf("%s: PID of child created by clone() is %jd\en",
1411                 argv[0], (intmax_t) child_pid);
1413     /* Update the UID and GID maps in the child. */
1415     if (uid_map != NULL || map_zero) {
1416         snprintf(map_path, PATH_MAX, "/proc/%jd/uid_map",
1417                 (intmax_t) child_pid);
1418         if (map_zero) {
1419             snprintf(map_buf, MAP_BUF_SIZE, "0 %jd 1",
1420                     (intmax_t) getuid());
1421             uid_map = map_buf;
1422         }
1423         update_map(uid_map, map_path);
1424     }
1426     if (gid_map != NULL || map_zero) {
1427         proc_setgroups_write(child_pid, "deny");
1429         snprintf(map_path, PATH_MAX, "/proc/%jd/gid_map",
1430                 (intmax_t) child_pid);
1431         if (map_zero) {
1432             snprintf(map_buf, MAP_BUF_SIZE, "0 %ld 1",
1433                     (intmax_t) getgid());
1434             gid_map = map_buf;
1435         }
1436         update_map(gid_map, map_path);
1437     }
1439     /* Close the write end of the pipe, to signal to the child that we
1440        have updated the UID and GID maps. */
1442     close(args.pipe_fd[1]);
1444     if (waitpid(child_pid, NULL, 0) == \-1)      /* Wait for child */
1445         errExit("waitpid");
1447     if (verbose)
1448         printf("%s: terminating\en", argv[0]);
1450     exit(EXIT_SUCCESS);
1453 .SH SEE ALSO
1454 .BR newgidmap (1),      \" From the shadow package
1455 .BR newuidmap (1),      \" From the shadow package
1456 .BR clone (2),
1457 .BR ptrace (2),
1458 .BR setns (2),
1459 .BR unshare (2),
1460 .BR proc (5),
1461 .BR subgid (5),         \" From the shadow package
1462 .BR subuid (5),         \" From the shadow package
1463 .BR capabilities (7),
1464 .BR cgroup_namespaces (7),
1465 .BR credentials (7),
1466 .BR namespaces (7),
1467 .BR pid_namespaces (7)
1469 The kernel source file
1470 .IR Documentation/admin\-guide/namespaces/resource\-control.rst .