]> git.ipfire.org Git - thirdparty/util-linux.git/blame - sys-utils/unshare.1
sfdisk: (man) fix typo
[thirdparty/util-linux.git] / sys-utils / unshare.1
CommitLineData
de0f3763 1.TH UNSHARE 1 "February 2016" "util-linux" "User Commands"
4205f1fd 2.SH NAME
ef6acdb8 3unshare \- run program with some namespaces unshared from parent
4205f1fd
MG
4.SH SYNOPSIS
5.B unshare
cf8e0bae 6[options]
b5672517
KZ
7.RI [ program
8.RI [ arguments ]]
4205f1fd 9.SH DESCRIPTION
dde08a87 10Unshares the indicated namespaces from the parent process and then executes
b5672517
KZ
11the specified \fIprogram\fR. If \fIprogram\fR is not given, then ``${SHELL}'' is
12run (default: /bin/sh).
0490a6ca 13.PP
de0f3763
BS
14The namespaces can optionally be made persistent by bind mounting
15/proc/\fIpid\fR/ns/\fItype\fR files to a filesystem path and entered with
16.BR \%nsenter (1)
ca538975
KZ
17even after the \fIprogram\fR terminates (except PID namespaces where
18permanently running init process is required).
de0f3763 19Once a persistent \%namespace is no longer needed, it can be unpersisted with
0490a6ca 20.BR umount (8).
de0f3763 21See the \fBEXAMPLES\fR section for more details.
0490a6ca 22.PP
0d5260b6 23.B unshare
24since util-linux version 2.36 uses /\fIproc/[pid]/ns/pid_for_children\fP and \fI/proc/[pid]/ns/time_for_children\fP
25files for persistent PID and TIME namespaces. This change requires Linux kernel 4.17 or newer.
26.PP
0490a6ca 27The namespaces to be unshared are indicated via options. Unshareable namespaces are:
4205f1fd 28.TP
0bb7e904 29.B mount namespace
f85b9777
MK
30Mounting and unmounting filesystems will not affect the rest of the system,
31except for filesystems which are explicitly marked as
1c4c6024
BIG
32shared (with \fBmount \-\-make-shared\fP; see \fI/proc/self/mountinfo\fP or
33\fBfindmnt \-o+PROPAGATION\fP for the \fBshared\fP flags).
f85b9777
MK
34For further details, see
35.BR mount_namespaces (7)
36and the discussion of the
0bb7e904 37.B CLONE_NEWNS
f85b9777
MK
38flag in
39.BR clone (2).
cf8e0bae 40.sp
f0f22e9c
KZ
41.B unshare
42since util-linux version 2.27 automatically sets propagation to \fBprivate\fP
de0f3763
BS
43in a new mount namespace to make sure that the new namespace is really
44unshared. It's possible to disable this feature with option
45\fB\-\-propagation unchanged\fP.
f0f22e9c 46Note that \fBprivate\fP is the kernel default.
4205f1fd 47.TP
0bb7e904 48.B UTS namespace
dde08a87 49Setting hostname or domainname will not affect the rest of the system.
f85b9777
MK
50For further details, see
51.BR namespaces (7)
52and the discussion of the
0bb7e904 53.B CLONE_NEWUTS
f85b9777
MK
54flag in
55.BR clone (2).
4205f1fd 56.TP
0bb7e904 57.B IPC namespace
170a8e4a
MK
58The process will have an independent namespace for POSIX message queues
59as well as System V \%message queues,
f85b9777
MK
60semaphore sets and shared memory segments.
61For further details, see
62.BR namespaces (7)
63and the discussion of the
0bb7e904 64.B CLONE_NEWIPC
f85b9777
MK
65flag in
66.BR clone (2).
4205f1fd 67.TP
0bb7e904 68.B network namespace
dde08a87
BS
69The process will have independent IPv4 and IPv6 stacks, IP routing tables,
70firewall rules, the \fI/proc/net\fP and \fI/sys/class/net\fP directory trees,
f85b9777
MK
71sockets, etc.
72For further details, see
73.BR namespaces (7)
74and the discussion of the
0bb7e904 75.B CLONE_NEWNET
f85b9777
MK
76flag in
77.BR clone (2).
4205f1fd 78.TP
0bb7e904 79.B PID namespace
de0f3763 80Children will have a distinct set of PID-to-process mappings from their parent.
f85b9777
MK
81For further details, see
82.BR pid_namespaces (7)
83and
84the discussion of the
0bb7e904 85.B CLONE_NEWPID
f85b9777
MK
86flag in
87.BR clone (2).
bc7f9b95 88.TP
0bb7e904 89.B cgroup namespace
f9e7b66d
SH
90The process will have a virtualized view of \fI/proc\:/self\:/cgroup\fP, and new
91cgroup mounts will be rooted at the namespace cgroup root.
f85b9777
MK
92For further details, see
93.BR cgroup_namespaces (7)
94and the discussion of the
0bb7e904 95.B CLONE_NEWCGROUP
f85b9777
MK
96flag in
97.BR clone (2).
f9e7b66d 98.TP
0bb7e904 99.B user namespace
dde08a87 100The process will have a distinct set of UIDs, GIDs and capabilities.
f85b9777
MK
101For further details, see
102.BR user_namespaces (7)
103and the discussion of the
0bb7e904 104.B CLONE_NEWUSER
f85b9777
MK
105flag in
106.BR clone (2).
be7df01a
AR
107.TP
108.B time namespace
109The process can have a distinct view of
110.B CLOCK_MONOTONIC
111and/or
112.B CLOCK_BOOTTIME
113which can be changed using \fI/proc/self/timens_offsets\fP.
4205f1fd
MG
114.SH OPTIONS
115.TP
de0f3763
BS
116.BR \-i , " \-\-ipc" [ =\fIfile ]
117Unshare the IPC namespace. If \fIfile\fP is specified, then a persistent
118namespace is created by a bind mount.
dde08a87 119.TP
de0f3763
BS
120.BR \-m , " \-\-mount" [ =\fIfile ]
121Unshare the mount namespace. If \fIfile\fP is specified, then a persistent
122namespace is created by a bind mount.
123Note that \fIfile\fP has to be located on a filesystem with the propagation
1c4c6024 124flag set to \fBprivate\fP. Use the command \fBfindmnt \-o+PROPAGATION\fP
de0f3763 125when not sure about the current setting. See also the examples below.
4205f1fd 126.TP
de0f3763
BS
127.BR \-n , " \-\-net" [ =\fIfile ]
128Unshare the network namespace. If \fIfile\fP is specified, then a persistent
129namespace is created by a bind mount.
bc7f9b95 130.TP
de0f3763
BS
131.BR \-p , " \-\-pid" [ =\fIfile ]
132Unshare the PID namespace. If \fIfile\fP is specified then persistent
1c4c6024
BIG
133namespace is created by a bind mount. See also the \fB\-\-fork\fP and
134\fB\-\-mount-proc\fP options.
bc7f9b95 135.TP
de0f3763
BS
136.BR \-u , " \-\-uts" [ =\fIfile ]
137Unshare the UTS namespace. If \fIfile\fP is specified, then a persistent
138namespace is created by a bind mount.
dde08a87 139.TP
de0f3763
BS
140.BR \-U , " \-\-user" [ =\fIfile ]
141Unshare the user namespace. If \fIfile\fP is specified, then a persistent
142namespace is created by a bind mount.
5088ec33 143.TP
f9e7b66d
SH
144.BR \-C , " \-\-cgroup"[=\fIfile\fP]
145Unshare the cgroup namespace. If \fIfile\fP is specified then persistent namespace is created
146by bind mount.
147.TP
f218fd97 148.BR \-T , " \-\-time"[=\fIfile\fP]
be7df01a
AR
149Unshare the time namespace. If \fIfile\fP is specified then a persistent
150namespace is created by a bind mount. The \fB\-\-monotonic\fP and
151\fB\-\-boottime\fP options can be used to specify the corresponding
152offset in the time namespace.
153.TP
5088ec33 154.BR \-f , " \-\-fork"
87ec43b6 155Fork the specified \fIprogram\fR as a child process of \fBunshare\fR rather than
de0f3763 156running it directly. This is useful when creating a new PID namespace.
6728ca10 157.TP
2fb684f0 158.B \-\-keep\-caps
1c4c6024 159When the \fB\-\-user\fP option is given, ensure that capabilities granted
cef4decf
JP
160in the user namespace are preserved in the child process.
161.TP
8b39a17c
NH
162.BR \-\-kill\-child [ =\fIsigname ]
163When \fBunshare\fR terminates, have \fIsigname\fP be sent to the forked child process.
1c4c6024 164Combined with \fB\-\-pid\fR this allows for an easy and reliable killing of the entire
8e8f0fa5 165process tree below \fBunshare\fR.
8b39a17c 166If not given, \fIsigname\fP defaults to \fBSIGKILL\fR.
1c4c6024 167This option implies \fB\-\-fork\fR.
8e8f0fa5 168.TP
de0f3763 169.BR \-\-mount\-proc [ =\fImountpoint ]
cf8e0bae 170Just before running the program, mount the proc filesystem at \fImountpoint\fP
de0f3763 171(default is /proc). This is useful when creating a new PID namespace. It also
6728ca10 172implies creating a new mount namespace since the /proc mount would otherwise
cf8e0bae 173mess up existing programs on the system. The new proc filesystem is explicitly
de0f3763 174mounted as private (with MS_PRIVATE|MS_REC).
4da21e37 175.TP
987550cb 176.BR \-\-map\-user=\fIuid|name
6e837b5a
MHB
177Run the program only after the current effective user ID has been mapped to \fIuid\fP.
178If this option is specified multiple times, the last occurrence takes precedence.
179This option implies \fB\-\-user\fR.
180.TP
987550cb 181.BR \-\-map\-group=\fIgid|name
6e837b5a
MHB
182Run the program only after the current effective group ID has been mapped to \fIgid\fP.
183If this option is specified multiple times, the last occurrence takes precedence.
184This option implies \fB\-\-setgroups=deny\fR and \fB\-\-user\fR.
185.TP
b06c1ca6 186.BR \-r , " \-\-map\-root\-user"
cf8e0bae
BS
187Run the program only after the current effective user and group IDs have been mapped to
188the superuser UID and GID in the newly created user namespace. This makes it possible to
189conveniently gain capabilities needed to manage various aspects of the newly created
190namespaces (such as configuring interfaces in the network namespace or mounting filesystems in
191the mount namespace) even when run unprivileged. As a mere convenience feature, it does not support
4da21e37 192more sophisticated use cases, such as mapping multiple ranges of UIDs and GIDs.
1c4c6024 193This option implies \fB\-\-setgroups=deny\fR and \fB\-\-user\fR.
6e837b5a 194This option is equivalent to \fB\-\-map-user=0 \-\-map-group=0\fR.
4175f29e
JP
195.TP
196.BR \-c , " \-\-map\-current\-user"
197Run the program only after the current effective user and group IDs have been mapped to
198the same UID and GID in the newly created user namespace. This option implies
1c4c6024 199\fB\-\-setgroups=deny\fR and \fB\-\-user\fR.
6e837b5a 200This option is equivalent to \fB\-\-map-user=$(id -ru) \-\-map-group=$(id -rg)\fR.
fbceefde 201.TP
de0f3763
BS
202.BR "\-\-propagation private" | shared | slave | unchanged
203Recursively set the mount propagation flag in the new mount namespace. The default
204is to set the propagation to \fIprivate\fP. It is possible to disable this feature
205with the argument \fBunchanged\fR. The option is silently ignored when the mount
206namespace (\fB\-\-mount\fP) is not requested.
f0f22e9c 207.TP
de0f3763
BS
208.BR "\-\-setgroups allow" | deny
209Allow or deny the
fbceefde 210.BR setgroups (2)
3be5d977 211system call in a user namespace.
afaf3103
BS
212.sp
213To be able to call
214.BR setgroups (2),
215the calling process must at least have CAP_SETGID.
216But since Linux 3.19 a further restriction applies:
217the kernel gives permission to call
218.BR \%setgroups (2)
219only after the GID map (\fB/proc/\fIpid\fB/gid_map\fR) has been set.
220The GID map is writable by root when
221.BR \%setgroups (2)
eb024893 222is enabled (i.e., \fBallow\fR, the default), and
afaf3103
BS
223the GID map becomes writable by unprivileged processes when
224.BR \%setgroups (2)
225is permanently disabled (with \fBdeny\fR).
5e43af7e 226.TP
bf8834d4
LV
227.BR \-R, "\-\-root=\fIdir"
228run the command with root directory set to \fIdir\fP.
229.TP
230.BR \-w, "\-\-wd=\fIdir"
231change working directory to \fIdir\fP.
232.TP
f0af42b5
LV
233.BR \-S, "\-\-setuid \fIuid"
234Set the user ID which will be used in the entered namespace.
235.TP
236.BR \-G, "\-\-setgid \fIgid"
237Set the group ID which will be used in the entered namespace and drop
238supplementary groups.
239.TP
be7df01a
AR
240.BR "\-\-monotonic \fIoffset"
241Set the offset of
242.B CLOCK_MONOTONIC
243which will be used in the entered time namespace. This option requires
244unsharing a time namespace with \fB\-\-time\fP.
245.TP
246.BR "\-\-boottime \fIoffset"
247Set the offset of
248.B CLOCK_BOOTTIME
249which will be used in the entered time namespace. This option requires
250unsharing a time namespace with \fB\-\-time\fP.
251.TP
5e43af7e
BS
252.BR \-V , " \-\-version"
253Display version information and exit.
254.TP
255.BR \-h , " \-\-help"
256Display help text and exit.
86b6d7f4
KZ
257.SH NOTES
258The proc and sysfs filesystems mounting as root in a user namespace have to be
259restricted so that a less privileged user can not get more access to sensitive
260files that a more privileged user made unavailable. In short the rule for proc
261and sysfs is as close to a bind mount as possible.
69a7761b
LR
262.SH EXAMPLES
263.TP
1c4c6024 264.B # unshare \-\-fork \-\-pid \-\-mount-proc readlink /proc/self
69a7761b
LR
265.TQ
2661
267.br
de0f3763 268Establish a PID namespace, ensure we're PID 1 in it against a newly mounted
69a7761b
LR
269procfs instance.
270.TP
1c4c6024 271.B $ unshare \-\-map-root-user \-\-user sh \-c whoami
69a7761b
LR
272.TQ
273root
274.br
275Establish a user namespace as an unprivileged user with a root user within it.
0490a6ca 276.TP
0490a6ca
KZ
277.B # touch /root/uts-ns
278.TQ
1c4c6024 279.B # unshare \-\-uts=/root/uts-ns hostname FOO
0490a6ca 280.TQ
1c4c6024 281.B # nsenter \-\-uts=/root/uts-ns hostname
0490a6ca
KZ
282.TQ
283FOO
284.TQ
285.B # umount /root/uts-ns
286.br
de0f3763
BS
287Establish a persistent UTS namespace, and modify the hostname. The namespace
288is then entered with \fBnsenter\fR. The namespace is destroyed by unmounting
289the bind reference.
249fc8fe 290.TP
1c4c6024 291.B # mount \-\-bind /root/namespaces /root/namespaces
249fc8fe 292.TQ
1c4c6024 293.B # mount \-\-make-private /root/namespaces
249fc8fe 294.TQ
de0f3763 295.B # touch /root/namespaces/mnt
249fc8fe 296.TQ
1c4c6024 297.B # unshare \-\-mount=/root/namespaces/mnt
249fc8fe
KZ
298.br
299Establish a persistent mount namespace referenced by the bind mount
de0f3763
BS
300/root/namespaces/mnt. This example shows a portable solution, because it
301makes sure that the bind mount is created on a shared filesystem.
8e8f0fa5 302.TP
1c4c6024 303.B # unshare \-pf \-\-kill-child \-\- bash \-c "(sleep 999 &) && sleep 1000" &
8e8f0fa5
NH
304.TQ
305.B # pid=$!
306.TQ
307.B # kill $pid
308.br
309Reliable killing of subprocesses of the \fIprogram\fR.
310When \fBunshare\fR gets killed, everything below it gets killed as well.
311Without it, the children of \fIprogram\fR would have orphaned and
312been re-parented to PID 1.
be7df01a
AR
313.TP
314.B # unshare \-\-fork \-\-time \-\-boottime 100000000 uptime
315.TQ
316 10:58:48 up 1158 days, 6:05, 1 user, load average: 0.00, 0.00, 0.00
249fc8fe 317
4205f1fd 318.SH SEE ALSO
c07f86e7 319.BR clone (2),
f053ff1e 320.BR unshare (2),
4a3f0735 321.BR namespaces (7),
c07f86e7 322.BR mount (8)
0490a6ca
KZ
323.SH AUTHORS
324.UR dottedmag@dottedmag.net
325Mikhail Gusarov
326.UE
327.br
328.UR kzak@redhat.com
329Karel Zak
330.UE
4205f1fd 331.SH AVAILABILITY
601d12fb 332The unshare command is part of the util-linux package and is available from
d673b74e 333https://www.kernel.org/pub/linux/utils/util-linux/.