xref: /freebsd/usr.sbin/jail/jail.8 (revision 752d135e0dacd9a463d24ffb89779b67ce0a7ea0)
1.\" Copyright (c) 2000, 2003 Robert N. M. Watson
2.\" Copyright (c) 2008-2012 James Gritton
3.\" All rights reserved.
4.\"
5.\" Redistribution and use in source and binary forms, with or without
6.\" modification, are permitted provided that the following conditions
7.\" are met:
8.\" 1. Redistributions of source code must retain the above copyright
9.\"    notice, this list of conditions and the following disclaimer.
10.\" 2. Redistributions in binary form must reproduce the above copyright
11.\"    notice, this list of conditions and the following disclaimer in the
12.\"    documentation and/or other materials provided with the distribution.
13.\"
14.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24.\" SUCH DAMAGE.
25.\"
26.\" $FreeBSD$
27.\"
28.Dd November 10, 2018
29.Dt JAIL 8
30.Os
31.Sh NAME
32.Nm jail
33.Nd "manage system jails"
34.Sh SYNOPSIS
35.Nm
36.Op Fl dhilqv
37.Op Fl J Ar jid_file
38.Op Fl u Ar username
39.Op Fl U Ar username
40.Op Fl cmr
41.Ar param Ns = Ns Ar value ...
42.Op Cm command Ns = Ns Ar command ...
43.Nm
44.Op Fl dqv
45.Op Fl f Ar conf_file
46.Op Fl p Ar limit
47.Op Fl cmr
48.Op Ar jail
49.Nm
50.Op Fl qv
51.Op Fl f Ar conf_file
52.Op Fl e Ar separator
53.Op Fl rR
54.Op Cm * | Ar jail ...
55.Nm
56.Op Fl dhilqv
57.Op Fl J Ar jid_file
58.Op Fl u Ar username
59.Op Fl U Ar username
60.Op Fl n Ar jailname
61.Op Fl s Ar securelevel
62.Op Ar path hostname [ Ar ip Ns [ Ns Ar ,... Ns ]] Ar command ...
63.Sh DESCRIPTION
64The
65.Nm
66utility creates new jails, or modifies or removes existing jails.
67It can also print a list of configured jails and their parameters.
68A jail
69.Pq or Dq prison
70is specified via parameters on the command line, or in the
71.Xr jail.conf 5
72file.
73.Pp
74At least one of the options
75.Fl c ,
76.Fl e ,
77.Fl m
78or
79.Fl r
80must be specified.
81These options are used alone or in combination to describe the operation to
82perform:
83.Bl -tag -width indent
84.It Fl c
85Create a new jail.
86The jail
87.Va jid
88and
89.Va name
90parameters (if specified on the command line)
91must not refer to an existing jail.
92.It Fl e Ar separator
93Exhibit a list of all configured non-wildcard jails and their parameters.
94No jail creation, modification or removal performed if this option is used.
95The
96.Ar separator
97string is used to separate parameters.
98Use
99.Xr jls 8
100utility to list running jails.
101.It Fl m
102Modify an existing jail.
103One of the
104.Va jid
105or
106.Va name
107parameters must exist and refer to an existing jail.
108Some parameters may not be changed on a running jail.
109.It Fl r
110Remove the
111.Ar jail
112specified by jid or name.
113All jailed processes are killed, and all jails that are
114children of this jail are also
115removed.
116.It Fl rc
117Restart an existing jail.
118The jail is first removed and then re-created, as if
119.Dq Nm Fl r
120and
121.Dq Nm Fl c
122were run in succession.
123.It Fl cm
124Create a jail if it does not exist, or modify the jail if it does exist.
125.It Fl mr
126Modify an existing jail.
127The jail may be restarted if necessary to modify parameters than could
128not otherwise be changed.
129.It Fl cmr
130Create a jail if it doesn't exist, or modify (and possibly restart) the
131jail if it does exist.
132.El
133.Pp
134Other available options are:
135.Bl -tag -width indent
136.It Fl d
137Allow making changes to a dying jail, equivalent to the
138.Va allow.dying
139parameter.
140.It Fl f Ar conf_file
141Use configuration file
142.Ar conf_file
143instead of the default
144.Pa /etc/jail.conf .
145.It Fl h
146Resolve the
147.Va host.hostname
148parameter (or
149.Va hostname )
150and add all IP addresses returned by the resolver
151to the list of addresses for this jail.
152This is equivalent to the
153.Va ip_hostname
154parameter.
155.It Fl i
156Output (only) the jail identifier of the newly created jail(s).
157This implies the
158.Fl q
159option.
160.It Fl J Ar jid_file
161Write a
162.Ar jid_file
163file, containing the parameters used to start the jail.
164.It Fl l
165Run commands in a clean environment.
166This is deprecated and is equivalent to the exec.clean parameter.
167.It Fl n Ar jailname
168Set the jail's name.
169This is deprecated and is equivalent to the
170.Va name
171parameter.
172.It Fl p Ar limit
173Limit the number of commands from
174.Va  exec.*
175that can run simultaneously.
176.It Fl q
177Suppress the message printed whenever a jail is created, modified or removed.
178Only error messages will be printed.
179.It Fl R
180A variation of the
181.Fl r
182option that removes an existing jail without using the configuration file.
183No removal-related parameters for this jail will be used \(em the jail will
184simply be removed.
185.It Fl s Ar securelevel
186Set the
187.Va kern.securelevel
188MIB entry to the specified value inside the newly created jail.
189This is deprecated and is equivalent to the
190.Va securelevel
191parameter.
192.It Fl u Ar username
193The user name from host environment as whom jailed commands should run.
194This is deprecated and is equivalent to the
195.Va exec.jail_user
196and
197.Va exec.system_jail_user
198parameters.
199.It Fl U Ar username
200The user name from the jailed environment as whom jailed commands should run.
201This is deprecated and is equivalent to the
202.Va exec.jail_user
203parameter.
204.It Fl v
205Print a message on every operation, such as running commands and
206mounting filesystems.
207.El
208.Pp
209If no arguments are given after the options, the operation (except
210remove) will be performed on all jails specified in the
211.Xr jail.conf 5
212file.
213A single argument of a jail name will operate only on the specified jail.
214The
215.Fl r
216and
217.Fl R
218options can also remove running jails that aren't in the
219.Xr jail.conf 5
220file, specified by name or jid.
221.Pp
222An argument of
223.Dq *
224is a wildcard that will operate on all jails, regardless of whether
225they appear in
226.Xr jail.conf 5 ;
227this is the surest way for
228.Fl r
229to remove all jails.
230If hierarchical jails exist, a partial-matching wildcard definition may
231be specified.
232For example, an argument of
233.Dq foo.*
234would apply to jails with names like
235.Dq foo.bar
236and
237.Dq foo.bar.baz .
238.Pp
239A jail may be specified with parameters directly on the command line.
240In this case, the
241.Xr jail.conf 5
242file will not be used.
243For backward compatibility, the command line may also have four fixed
244parameters, without names:
245.Ar path ,
246.Ar hostname ,
247.Ar ip ,
248and
249.Ar command .
250This mode will always create a new jail, and the
251.Fl c
252and
253.Fl m
254options do not apply (and must not be present).
255.Ss Jail Parameters
256Parameters in the
257.Xr jail.conf 5
258file, or on the command line, are generally of the form
259.Dq name=value .
260Some parameters are boolean, and do not have a value but are set by the
261name alone with or without a
262.Dq no
263prefix, e.g.
264.Va persist
265or
266.Va nopersist .
267They can also be given the values
268.Dq true
269and
270.Dq false .
271Other parameters may have more than one value, specified as a
272comma-separated list or with
273.Dq +=
274in the configuration file (see
275.Xr jail.conf 5
276for details).
277.Pp
278The
279.Nm
280utility recognizes two classes of parameters.
281There are the true jail
282parameters that are passed to the kernel when the jail is created,
283which can be seen with
284.Xr jls 8 ,
285and can (usually) be changed with
286.Dq Nm Fl m .
287Then there are pseudo-parameters that are only used by
288.Nm
289itself.
290.Pp
291Jails have a set of core parameters, and kernel modules can add their own
292jail parameters.
293The current set of available parameters can be retrieved via
294.Dq Nm sysctl Fl d Va security.jail.param .
295Any parameters not set will be given default values, often based on the
296current environment.
297The core parameters are:
298.Bl -tag -width indent
299.It Va jid
300The jail identifier.
301This will be assigned automatically to a new jail (or can be explicitly
302set), and can be used to identify the jail for later modification, or
303for such commands as
304.Xr jls 8
305or
306.Xr jexec 8 .
307.It Va name
308The jail name.
309This is an arbitrary string that identifies a jail (except it may not
310contain a
311.Sq \&. ) .
312Like the
313.Va jid ,
314it can be passed to later
315.Nm
316commands, or to
317.Xr jls 8
318or
319.Xr jexec 8 .
320If no
321.Va name
322is supplied, a default is assumed that is the same as the
323.Va jid .
324The
325.Va name
326parameter is implied by the
327.Xr jail.conf 5
328file format, and need not be explicitly set when using the configuration
329file.
330.It Va path
331The directory which is to be the root of the jail.
332Any commands run inside the jail, either by
333.Nm
334or from
335.Xr jexec 8 ,
336are run from this directory.
337.It Va ip4.addr
338A list of IPv4 addresses assigned to the jail.
339If this is set, the jail is restricted to using only these addresses.
340Any attempts to use other addresses fail, and attempts to use wildcard
341addresses silently use the jailed address instead.
342For IPv4 the first address given will be used as the source address
343when source address selection on unbound sockets cannot find a better
344match.
345It is only possible to start multiple jails with the same IP address
346if none of the jails has more than this single overlapping IP address
347assigned to itself.
348.It Va ip4.saddrsel
349A boolean option to change the formerly mentioned behaviour and disable
350IPv4 source address selection for the jail in favour of the primary
351IPv4 address of the jail.
352Source address selection is enabled by default for all jails and the
353.Va ip4.nosaddrsel
354setting of a parent jail is not inherited for any child jails.
355.It Va ip4
356Control the availability of IPv4 addresses.
357Possible values are
358.Dq inherit
359to allow unrestricted access to all system addresses,
360.Dq new
361to restrict addresses via
362.Va ip4.addr ,
363and
364.Dq disable
365to stop the jail from using IPv4 entirely.
366Setting the
367.Va ip4.addr
368parameter implies a value of
369.Dq new .
370.It Va ip6.addr , Va ip6.saddrsel , Va ip6
371A set of IPv6 options for the jail, the counterparts to
372.Va ip4.addr ,
373.Va ip4.saddrsel
374and
375.Va ip4
376above.
377.It Va vnet
378Create the jail with its own virtual network stack,
379with its own network interfaces, addresses, routing table, etc.
380The kernel must have been compiled with the
381.Sy VIMAGE option
382for this to be available.
383Possible values are
384.Dq inherit
385to use the system network stack, possibly with restricted IP addresses,
386and
387.Dq new
388to create a new network stack.
389.It Va host.hostname
390The hostname of the jail.
391Other similar parameters are
392.Va host.domainname ,
393.Va host.hostuuid
394and
395.Va host.hostid .
396.It Va host
397Set the origin of hostname and related information.
398Possible values are
399.Dq inherit
400to use the system information and
401.Dq new
402for the jail to use the information from the above fields.
403Setting any of the above fields implies a value of
404.Dq new .
405.It Va securelevel
406The value of the jail's
407.Va kern.securelevel
408sysctl.
409A jail never has a lower securelevel than its parent system, but by
410setting this parameter it may have a higher one.
411If the system securelevel is changed, any jail securelevels will be at
412least as secure.
413.It Va devfs_ruleset
414The number of the devfs ruleset that is enforced for mounting devfs in
415this jail.
416A value of zero (default) means no ruleset is enforced.
417Descendant jails inherit the parent jail's devfs ruleset enforcement.
418Mounting devfs inside a jail is possible only if the
419.Va allow.mount
420and
421.Va allow.mount.devfs
422permissions are effective and
423.Va enforce_statfs
424is set to a value lower than 2.
425Devfs rules and rulesets cannot be viewed or modified from inside a jail.
426.Pp
427NOTE: It is important that only appropriate device nodes in devfs be
428exposed to a jail; access to disk devices in the jail may permit processes
429in the jail to bypass the jail sandboxing by modifying files outside of
430the jail.
431See
432.Xr devfs 8
433for information on how to use devfs rules to limit access to entries
434in the per-jail devfs.
435A simple devfs ruleset for jails is available as ruleset #4 in
436.Pa /etc/defaults/devfs.rules .
437.It Va children.max
438The number of child jails allowed to be created by this jail (or by
439other jails under this jail).
440This limit is zero by default, indicating the jail is not allowed to
441create child jails.
442See the
443.Sx "Hierarchical Jails"
444section for more information.
445.It Va children.cur
446The number of descendants of this jail, including its own child jails
447and any jails created under them.
448.It Va enforce_statfs
449This determines what information processes in a jail are able to get
450about mount points.
451It affects the behaviour of the following syscalls:
452.Xr statfs 2 ,
453.Xr fstatfs 2 ,
454.Xr getfsstat 2 ,
455and
456.Xr fhstatfs 2
457(as well as similar compatibility syscalls).
458When set to 0, all mount points are available without any restrictions.
459When set to 1, only mount points below the jail's chroot directory are
460visible.
461In addition to that, the path to the jail's chroot directory is removed
462from the front of their pathnames.
463When set to 2 (default), above syscalls can operate only on a mount-point
464where the jail's chroot directory is located.
465.It Va persist
466Setting this boolean parameter allows a jail to exist without any
467processes.
468Normally, a command is run as part of jail creation, and then the jail
469is destroyed as its last process exits.
470A new jail must have either the
471.Va persist
472parameter or
473.Va exec.start
474or
475.Va command
476pseudo-parameter set.
477.It Va cpuset.id
478The ID of the cpuset associated with this jail (read-only).
479.It Va dying
480This is true if the jail is in the process of shutting down (read-only).
481.It Va parent
482The
483.Va jid
484of the parent of this jail, or zero if this is a top-level jail
485(read-only).
486.It Va osrelease
487The string for the jail's
488.Va kern.osrelease
489sysctl and uname -r.
490.It Va osreldate
491The number for the jail's
492.Va kern.osreldate
493and uname -K.
494.It Va allow.*
495Some restrictions of the jail environment may be set on a per-jail
496basis.
497With the exception of
498.Va allow.set_hostname
499and
500.Va allow.reserved_ports ,
501these boolean parameters are off by default.
502.Bl -tag -width indent
503.It Va allow.set_hostname
504The jail's hostname may be changed via
505.Xr hostname 1
506or
507.Xr sethostname 3 .
508.It Va allow.sysvipc
509A process within the jail has access to System V IPC primitives.
510This is deprecated in favor of the per-module parameters (see below).
511When this parameter is set, it is equivalent to setting
512.Va sysvmsg ,
513.Va sysvsem ,
514and
515.Va sysvshm
516all to
517.Dq inherit .
518.It Va allow.raw_sockets
519The jail root is allowed to create raw sockets.
520Setting this parameter allows utilities like
521.Xr ping 8
522and
523.Xr traceroute 8
524to operate inside the jail.
525If this is set, the source IP addresses are enforced to comply
526with the IP address bound to the jail, regardless of whether or not
527the
528.Dv IP_HDRINCL
529flag has been set on the socket.
530Since raw sockets can be used to configure and interact with various
531network subsystems, extra caution should be used where privileged access
532to jails is given out to untrusted parties.
533.It Va allow.chflags
534Normally, privileged users inside a jail are treated as unprivileged by
535.Xr chflags 2 .
536When this parameter is set, such users are treated as privileged, and
537may manipulate system file flags subject to the usual constraints on
538.Va kern.securelevel .
539.It Va allow.mount
540privileged users inside the jail will be able to mount and unmount file
541system types marked as jail-friendly.
542The
543.Xr lsvfs 1
544command can be used to find file system types available for mount from
545within a jail.
546This permission is effective only if
547.Va enforce_statfs
548is set to a value lower than 2.
549.It Va allow.mount.devfs
550privileged users inside the jail will be able to mount and unmount the
551devfs file system.
552This permission is effective only together with
553.Va allow.mount
554and only when
555.Va enforce_statfs
556is set to a value lower than 2.
557The devfs ruleset should be restricted from the default by using the
558.Va devfs_ruleset
559option.
560.It Va allow.quotas
561The jail root may administer quotas on the jail's filesystem(s).
562This includes filesystems that the jail may share with other jails or
563with non-jailed parts of the system.
564.It Va allow.read_msgbuf
565Jailed users may read the kernel message buffer.
566If the
567.Va security.bsd.unprivileged_read_msgbuf
568MIB entry is zero, this will be restricted to the root user.
569.It Va allow.socket_af
570Sockets within a jail are normally restricted to IPv4, IPv6, local
571(UNIX), and route.  This allows access to other protocol stacks that
572have not had jail functionality added to them.
573.It Va allow.mlock
574Locking or unlocking physical pages in memory are normally not available
575within a jail.
576When this parameter is set, users may
577.Xr mlock 2
578or
579.Xr munlock 2
580memory subject to
581.Va security.bsd.unprivileged_mlock
582and resource limits.
583.It Va allow.reserved_ports
584The jail root may bind to ports lower than 1024.
585.El
586.El
587.Pp
588Kernel modules may add their own parameters, which only exist when the
589module is loaded.
590These are typically headed under a parameter named after the module,
591with values of
592.Dq inherit
593to give the jail full use of the module,
594.Dq new
595to encapsulate the jail in some module-specific way,
596and
597.Dq disable
598to make the module unavailable to the jail.
599There also may be other parameters to define jail behavior within the module.
600Module-specific parameters include:
601.Bl -tag -width indent
602.It Va allow.mount.fdescfs
603privileged users inside the jail will be able to mount and unmount the
604fdescfs file system.
605This permission is effective only together with
606.Va allow.mount
607and only when
608.Va enforce_statfs
609is set to a value lower than 2.
610.It Va allow.mount.fusefs
611privileged users inside the jail will be able to mount and unmount
612fuse-based file systems.
613This permission is effective only together with
614.Va allow.mount
615and only when
616.Va enforce_statfs
617is set to a value lower than 2.
618.It Va allow.mount.nullfs
619privileged users inside the jail will be able to mount and unmount the
620nullfs file system.
621This permission is effective only together with
622.Va allow.mount
623and only when
624.Va enforce_statfs
625is set to a value lower than 2.
626.It Va allow.mount.procfs
627privileged users inside the jail will be able to mount and unmount the
628procfs file system.
629This permission is effective only together with
630.Va allow.mount
631and only when
632.Va enforce_statfs
633is set to a value lower than 2.
634.It Va allow.mount.linprocfs
635privileged users inside the jail will be able to mount and unmount the
636linprocfs file system.
637This permission is effective only together with
638.Va allow.mount
639and only when
640.Va enforce_statfs
641is set to a value lower than 2.
642.It Va allow.mount.linsysfs
643privileged users inside the jail will be able to mount and unmount the
644linsysfs file system.
645This permission is effective only together with
646.Va allow.mount
647and only when
648.Va enforce_statfs
649is set to a value lower than 2.
650.It Va allow.mount.tmpfs
651privileged users inside the jail will be able to mount and unmount the
652tmpfs file system.
653This permission is effective only together with
654.Va allow.mount
655and only when
656.Va enforce_statfs
657is set to a value lower than 2.
658.It Va allow.mount.zfs
659privileged users inside the jail will be able to mount and unmount the
660ZFS file system.
661This permission is effective only together with
662.Va allow.mount
663and only when
664.Va enforce_statfs
665is set to a value lower than 2.
666See
667.Xr zfs 8
668for information on how to configure the ZFS filesystem to operate from
669within a jail.
670.It Va allow.vmm
671The jail may access
672.Xr vmm 4 .
673This flag is only available when the
674.Xr vmm 4
675kernel module is loaded.
676.It Va linux
677Determine how a jail's Linux emulation environment appears.
678A value of
679.Dq inherit
680will keep the same environment, and
681.Dq new
682will give the jail it's own environment (still originally inherited when
683the jail is created).
684.It Va linux.osname , linux.osrelease , linux.oss_version
685The Linux OS name, OS release, and OSS version associated with this jail.
686.It Va sysvmsg
687Allow access to SYSV IPC message primitives.
688If set to
689.Dq inherit ,
690all IPC objects on the system are visible to this jail, whether they
691were created by the jail itself, the base system, or other jails.
692If set to
693.Dq new ,
694the jail will have its own key namespace, and can only see the objects
695that it has created;
696the system (or parent jail) has access to the jail's objects, but not to
697its keys.
698If set to
699.Dq disable ,
700the jail cannot perform any sysvmsg-related system calls.
701.It Va sysvsem, sysvshm
702Allow access to SYSV IPC semaphore and shared memory primitives, in the
703same manner as
704.Va sysvmsg.
705.El
706.Pp
707There are pseudo-parameters that are not passed to the kernel, but are
708used by
709.Nm
710to set up the jail environment, often by running specified commands
711when jails are created or removed.
712The
713.Va exec.*
714command parameters are
715.Xr sh 1
716command lines that are run in either the system or jail environment.
717They may be given multiple values, which would run the specified
718commands in sequence.
719All commands must succeed (return a zero exit status), or the jail will
720not be created or removed, as appropriate.
721.Pp
722The pseudo-parameters are:
723.Bl -tag -width indent
724.It Va exec.prestart
725Command(s) to run in the system environment before a jail is created.
726.It Va exec.created
727Command(s) to run in the system environment right after a jail has been
728created, but before commands (or services) get executed in the jail.
729.It Va exec.start
730Command(s) to run in the jail environment when a jail is created.
731A typical command to run is
732.Dq sh /etc/rc .
733.It Va command
734A synonym for
735.Va exec.start
736for use when specifying a jail directly on the command line.
737Unlike other parameters whose value is a single string,
738.Va command
739uses the remainder of the
740.Nm
741command line as its own arguments.
742.It Va exec.poststart
743Command(s) to run in the system environment after a jail is created,
744and after any
745.Va exec.start
746commands have completed.
747.It Va exec.prestop
748Command(s) to run in the system environment before a jail is removed.
749.It Va exec.stop
750Command(s) to run in the jail environment before a jail is removed,
751and after any
752.Va exec.prestop
753commands have completed.
754A typical command to run is
755.Dq sh /etc/rc.shutdown .
756.It Va exec.poststop
757Command(s) to run in the system environment after a jail is removed.
758.It Va exec.clean
759Run commands in a clean environment.
760The environment is discarded except for
761.Ev HOME , SHELL , TERM
762and
763.Ev USER .
764.Ev HOME
765and
766.Ev SHELL
767are set to the target login's default values.
768.Ev USER
769is set to the target login.
770.Ev TERM
771is imported from the current environment.
772The environment variables from the login class capability database for the
773target login are also set.
774.It Va exec.jail_user
775The user to run commands as, when running in the jail environment.
776The default is to run the commands as the current user.
777.It Va exec.system_jail_user
778This boolean option looks for the
779.Va exec.jail_user
780in the system
781.Xr passwd 5
782file, instead of in the jail's file.
783.It Va exec.system_user
784The user to run commands as, when running in the system environment.
785The default is to run the commands as the current user.
786.It Va exec.timeout
787The maximum amount of time to wait for a command to complete, in
788seconds.
789If a command is still running after this timeout has passed,
790the jail will not be created or removed, as appropriate.
791.It Va exec.consolelog
792A file to direct command output (stdout and stderr) to.
793.It Va exec.fib
794The FIB (routing table) to set when running commands inside the jail.
795.It Va stop.timeout
796The maximum amount of time to wait for a jail's processes to exit
797after sending them a
798.Dv SIGTERM
799signal (which happens after the
800.Va exec.stop
801commands have completed).
802After this many seconds have passed, the jail will be removed, which
803will kill any remaining processes.
804If this is set to zero, no
805.Dv SIGTERM
806is sent and the jail is immediately removed.
807The default is 10 seconds.
808.It Va interface
809A network interface to add the jail's IP addresses
810.Va ( ip4.addr
811and
812.Va ip6.addr )
813to.
814An alias for each address will be added to the interface before the
815jail is created, and will be removed from the interface after the
816jail is removed.
817.It Va ip4.addr
818In addition to the IP addresses that are passed to the kernel, an
819interface, netmask and additional parameters (as supported by
820.Xr ifconfig 8 Ns )
821may also be specified, in the form
822.Dq Ar interface Ns | Ns Ar ip-address Ns / Ns Ar netmask param ... .
823If an interface is given before the IP address, an alias for the address
824will be added to that interface, as it is with the
825.Va interface
826parameter.
827If a netmask in either dotted-quad or CIDR form is given
828after an IP address, it will be used when adding the IP alias.
829If additional parameters are specified then they will also be used when
830adding the IP alias.
831.It Va ip6.addr
832In addition to the IP addresses that are passed to the kernel,
833an interface, prefix and additional parameters (as supported by
834.Xr ifconfig 8 Ns )
835may also be specified, in the form
836.Dq Ar interface Ns | Ns Ar ip-address Ns / Ns Ar prefix param ... .
837.It Va vnet.interface
838A network interface to give to a vnet-enabled jail after is it created.
839The interface will automatically be released when the jail is removed.
840.It Va ip_hostname
841Resolve the
842.Va host.hostname
843parameter and add all IP addresses returned by the resolver
844to the list of addresses
845.Po Va ip4.addr
846or
847.Va ip6.addr Pc
848for this jail.
849This may affect default address selection for outgoing IPv4 connections
850from jails.
851The address first returned by the resolver for each address family
852will be used as the primary address.
853.It Va mount
854A filesystem to mount before creating the jail (and to unmount after
855removing it), given as a single
856.Xr fstab 5
857line.
858.It Va mount.fstab
859An
860.Xr fstab 5
861format file containing filesystems to mount before creating a jail.
862.It Va mount.devfs
863Mount a
864.Xr devfs 5
865filesystem on the chrooted
866.Pa /dev
867directory, and apply the ruleset in the
868.Va devfs_ruleset
869parameter (or a default of ruleset 4: devfsrules_jail)
870to restrict the devices visible inside the jail.
871.It Va mount.fdescfs
872Mount a
873.Xr fdescfs 5
874filesystem on the chrooted
875.Pa /dev/fd
876directory.
877.It Va mount.procfs
878Mount a
879.Xr procfs 5
880filesystem on the chrooted
881.Pa /proc
882directory.
883.It Va allow.dying
884Allow making changes to a
885.Va dying
886jail.
887.It Va depend
888Specify a jail (or jails) that this jail depends on.
889When this jail is to be created, any jail(s) it depends on must already exist.
890If not, they will be created automatically, up to the completion of the last
891.Va exec.poststart
892command, before any action will taken to create this jail.
893When jails are removed the opposite is true:
894this jail will be removed, up to the last
895.Va exec.poststop
896command, before any jail(s) it depends on are stopped.
897.El
898.Sh EXAMPLES
899Jails are typically set up using one of two philosophies: either to
900constrain a specific application (possibly running with privilege), or
901to create a
902.Dq "virtual system image"
903running a variety of daemons and services.
904In both cases, a fairly complete file system install of
905.Fx
906is
907required, so as to provide the necessary command line tools, daemons,
908libraries, application configuration files, etc.
909However, for a virtual server configuration, a fair amount of
910additional work is required so as to replace the
911.Dq boot
912process.
913This manual page documents the configuration steps necessary to support
914either of these steps, although the configuration steps may need to be
915refined based on local requirements.
916.Ss "Setting up a Jail Directory Tree"
917To set up a jail directory tree containing an entire
918.Fx
919distribution, the following
920.Xr sh 1
921command script can be used:
922.Bd -literal
923D=/here/is/the/jail
924cd /usr/src
925mkdir -p $D
926make world DESTDIR=$D
927make distribution DESTDIR=$D
928.Ed
929.Pp
930In many cases this example would put far more in the jail than needed.
931In the other extreme case a jail might contain only one file:
932the executable to be run in the jail.
933.Pp
934We recommend experimentation, and caution that it is a lot easier to
935start with a
936.Dq fat
937jail and remove things until it stops working,
938than it is to start with a
939.Dq thin
940jail and add things until it works.
941.Ss "Setting Up a Jail"
942Do what was described in
943.Sx "Setting Up a Jail Directory Tree"
944to build the jail directory tree.
945For the sake of this example, we will
946assume you built it in
947.Pa /data/jail/testjail ,
948for a jail named
949.Dq testjail .
950Substitute below as needed with your
951own directory, IP address, and hostname.
952.Ss "Setting up the Host Environment"
953First, set up the real system's environment to be
954.Dq jail-friendly .
955For consistency, we will refer to the parent box as the
956.Dq "host environment" ,
957and to the jailed virtual machine as the
958.Dq "jail environment" .
959Since jails are implemented using IP aliases, one of the first things to do
960is to disable IP services on the host system that listen on all local
961IP addresses for a service.
962If a network service is present in the host environment that binds all
963available IP addresses rather than specific IP addresses, it may service
964requests sent to jail IP addresses if the jail did not bind the port.
965This means changing
966.Xr inetd 8
967to only listen on the
968appropriate IP address, and so forth.
969Add the following to
970.Pa /etc/rc.conf
971in the host environment:
972.Bd -literal -offset indent
973sendmail_enable="NO"
974inetd_flags="-wW -a 192.0.2.23"
975rpcbind_enable="NO"
976.Ed
977.Pp
978.Li 192.0.2.23
979is the native IP address for the host system, in this example.
980Daemons that run out of
981.Xr inetd 8
982can be easily configured to use only the specified host IP address.
983Other daemons
984will need to be manually configured \(em for some this is possible through
985.Xr rc.conf 5
986flags entries; for others it is necessary to modify per-application
987configuration files, or to recompile the application.
988The following frequently deployed services must have their individual
989configuration files modified to limit the application to listening
990to a specific IP address:
991.Pp
992To configure
993.Xr sshd 8 ,
994it is necessary to modify
995.Pa /etc/ssh/sshd_config .
996.Pp
997To configure
998.Xr sendmail 8 ,
999it is necessary to modify
1000.Pa /etc/mail/sendmail.cf .
1001.Pp
1002For
1003.Xr named 8 ,
1004it is necessary to modify
1005.Pa /etc/namedb/named.conf .
1006.Pp
1007In addition, a number of services must be recompiled in order to run
1008them in the host environment.
1009This includes most applications providing services using
1010.Xr rpc 3 ,
1011such as
1012.Xr rpcbind 8 ,
1013.Xr nfsd 8 ,
1014and
1015.Xr mountd 8 .
1016In general, applications for which it is not possible to specify which
1017IP address to bind should not be run in the host environment unless they
1018should also service requests sent to jail IP addresses.
1019Attempting to serve
1020NFS from the host environment may also cause confusion, and cannot be
1021easily reconfigured to use only specific IPs, as some NFS services are
1022hosted directly from the kernel.
1023Any third-party network software running
1024in the host environment should also be checked and configured so that it
1025does not bind all IP addresses, which would result in those services also
1026appearing to be offered by the jail environments.
1027.Pp
1028Once
1029these daemons have been disabled or fixed in the host environment, it is
1030best to reboot so that all daemons are in a known state, to reduce the
1031potential for confusion later (such as finding that when you send mail
1032to a jail, and its sendmail is down, the mail is delivered to the host,
1033etc.).
1034.Ss "Configuring the Jail"
1035Start any jail for the first time without configuring the network
1036interface so that you can clean it up a little and set up accounts.
1037As
1038with any machine (virtual or not), you will need to set a root password, time
1039zone, etc.
1040Some of these steps apply only if you intend to run a full virtual server
1041inside the jail; others apply both for constraining a particular application
1042or for running a virtual server.
1043.Pp
1044Start a shell in the jail:
1045.Bd -literal -offset indent
1046jail -c path=/data/jail/testjail mount.devfs \\
1047	host.hostname=testhostname ip4.addr=192.0.2.100 \\
1048	command=/bin/sh
1049.Ed
1050.Pp
1051Assuming no errors, you will end up with a shell prompt within the jail.
1052You can now run
1053.Xr bsdconfig 8
1054and do the post-install configuration to set various configuration options,
1055or perform these actions manually by editing
1056.Pa /etc/rc.conf ,
1057etc.
1058.Pp
1059.Bl -bullet -offset indent -compact
1060.It
1061Configure
1062.Pa /etc/resolv.conf
1063so that name resolution within the jail will work correctly.
1064.It
1065Run
1066.Xr newaliases 1
1067to quell
1068.Xr sendmail 8
1069warnings.
1070.It
1071Set a root password, probably different from the real host system.
1072.It
1073Set the timezone.
1074.It
1075Add accounts for users in the jail environment.
1076.It
1077Install any packages the environment requires.
1078.El
1079.Pp
1080You may also want to perform any package-specific configuration (web servers,
1081SSH servers, etc), patch up
1082.Pa /etc/syslog.conf
1083so it logs as you would like, etc.
1084If you are not using a virtual server, you may wish to modify
1085.Xr syslogd 8
1086in the host environment to listen on the syslog socket in the jail
1087environment; in this example, the syslog socket would be stored in
1088.Pa /data/jail/testjail/var/run/log .
1089.Pp
1090Exit from the shell, and the jail will be shut down.
1091.Ss "Starting the Jail"
1092You are now ready to restart the jail and bring up the environment with
1093all of its daemons and other programs.
1094Create an entry for the jail in
1095.Pa /etc/jail.conf :
1096.Bd -literal -offset indent
1097testjail {
1098	path = /tmp/jail/testjail;
1099	mount.devfs;
1100	host.hostname = testhostname;
1101	ip4.addr = 192.0.2.100;
1102	interface = ed0;
1103	exec.start = "/bin/sh /etc/rc";
1104	exec.stop = "/bin/sh /etc/rc.shutdown";
1105}
1106.Ed
1107.Pp
1108To start a virtual server environment,
1109.Pa /etc/rc
1110is run to launch various daemons and services, and
1111.Pa /etc/rc.shutdown
1112is run to shut them down when the jail is removed.
1113If you are running a single application in the jail,
1114substitute the command used to start the application for
1115.Dq /bin/sh /etc/rc ;
1116there may be some script available to cleanly shut down the application,
1117or it may be sufficient to go without a stop command, and have
1118.Nm
1119send
1120.Dv SIGTERM
1121to the application.
1122.Pp
1123Start the jail by running:
1124.Bd -literal -offset indent
1125jail -c testjail
1126.Ed
1127.Pp
1128A few warnings may be produced; however, it should all work properly.
1129You should be able to see
1130.Xr inetd 8 ,
1131.Xr syslogd 8 ,
1132and other processes running within the jail using
1133.Xr ps 1 ,
1134with the
1135.Ql J
1136flag appearing beside jailed processes.
1137To see an active list of jails, use
1138.Xr jls 8 .
1139If
1140.Xr sshd 8
1141is enabled in the jail environment, you should be able to
1142.Xr ssh 1
1143to the hostname or IP address of the jailed environment, and log
1144in using the accounts you created previously.
1145.Pp
1146It is possible to have jails started at boot time.
1147Please refer to the
1148.Dq jail_*
1149variables in
1150.Xr rc.conf 5
1151for more information.
1152.Ss "Managing the Jail"
1153Normal machine shutdown commands, such as
1154.Xr halt 8 ,
1155.Xr reboot 8 ,
1156and
1157.Xr shutdown 8 ,
1158cannot be used successfully within the jail.
1159To kill all processes from within a jail, you may use one of the
1160following commands, depending on what you want to accomplish:
1161.Bd -literal -offset indent
1162kill -TERM -1
1163kill -KILL -1
1164.Ed
1165.Pp
1166This will send the
1167.Dv SIGTERM
1168or
1169.Dv SIGKILL
1170signals to all processes in the jail \(em be careful not to run this from
1171the host environment!
1172Once all of the jail's processes have died, unless the jail was created
1173with the
1174.Va persist
1175parameter, the jail will be removed.
1176Depending on
1177the intended use of the jail, you may also want to run
1178.Pa /etc/rc.shutdown
1179from within the jail.
1180.Pp
1181To shut down the jail from the outside, simply remove it with
1182.Nm
1183.Ar -r ,
1184which will run any commands specified by
1185.Va exec.stop ,
1186and then send
1187.Dv SIGTERM
1188and eventually
1189.Dv SIGKILL
1190to any remaining jailed processes.
1191.Pp
1192The
1193.Pa /proc/ Ns Ar pid Ns Pa /status
1194file contains, as its last field, the name of the jail in which the
1195process runs, or
1196.Dq Li -
1197to indicate that the process is not running within a jail.
1198The
1199.Xr ps 1
1200command also shows a
1201.Ql J
1202flag for processes in a jail.
1203.Pp
1204You can also list/kill processes based on their jail ID.
1205To show processes and their jail ID, use the following command:
1206.Pp
1207.Dl "ps ax -o pid,jid,args"
1208.Pp
1209To show and then kill processes in jail number 3 use the following commands:
1210.Bd -literal -offset indent
1211pgrep -lfj 3
1212pkill -j 3
1213.Ed
1214or:
1215.Pp
1216.Dl "killall -j 3"
1217.Ss "Jails and File Systems"
1218It is not possible to
1219.Xr mount 8
1220or
1221.Xr umount 8
1222any file system inside a jail unless the file system is marked
1223jail-friendly, the jail's
1224.Va allow.mount
1225parameter is set, and the jail's
1226.Va enforce_statfs
1227parameter is lower than 2.
1228.Pp
1229Multiple jails sharing the same file system can influence each other.
1230For example, a user in one jail can fill the file system,
1231leaving no space for processes in the other jail.
1232Trying to use
1233.Xr quota 1
1234to prevent this will not work either, as the file system quotas
1235are not aware of jails but only look at the user and group IDs.
1236This means the same user ID in two jails share a single file
1237system quota.
1238One would need to use one file system per jail to make this work.
1239.Ss "Sysctl MIB Entries"
1240The read-only entry
1241.Va security.jail.jailed
1242can be used to determine if a process is running inside a jail (value
1243is one) or not (value is zero).
1244.Pp
1245The variable
1246.Va security.jail.max_af_ips
1247determines how may address per address family a jail may have.
1248The default is 255.
1249.Pp
1250Some MIB variables have per-jail settings.
1251Changes to these variables by a jailed process do not affect the host
1252environment, only the jail environment.
1253These variables are
1254.Va kern.securelevel ,
1255.Va kern.hostname ,
1256.Va kern.domainname ,
1257.Va kern.hostid ,
1258and
1259.Va kern.hostuuid .
1260.Ss "Hierarchical Jails"
1261By setting a jail's
1262.Va children.max
1263parameter, processes within a jail may be able to create jails of their own.
1264These child jails are kept in a hierarchy, with jails only able to see and/or
1265modify the jails they created (or those jails' children).
1266Each jail has a read-only
1267.Va parent
1268parameter, containing the
1269.Va jid
1270of the jail that created it; a
1271.Va jid
1272of 0 indicates the jail is a child of the current jail (or is a top-level
1273jail if the current process isn't jailed).
1274.Pp
1275Jailed processes are not allowed to confer greater permissions than they
1276themselves are given, e.g., if a jail is created with
1277.Va allow.nomount ,
1278it is not able to create a jail with
1279.Va allow.mount
1280set.
1281Similarly, such restrictions as
1282.Va ip4.addr
1283and
1284.Va securelevel
1285may not be bypassed in child jails.
1286.Pp
1287A child jail may in turn create its own child jails if its own
1288.Va children.max
1289parameter is set (remember it is zero by default).
1290These jails are visible to and can be modified by their parent and all
1291ancestors.
1292.Pp
1293Jail names reflect this hierarchy, with a full name being an MIB-type string
1294separated by dots.
1295For example, if a base system process creates a jail
1296.Dq foo ,
1297and a process under that jail creates another jail
1298.Dq bar ,
1299then the second jail will be seen as
1300.Dq foo.bar
1301in the base system (though it is only seen as
1302.Dq bar
1303to any processes inside jail
1304.Dq foo ) .
1305Jids on the other hand exist in a single space, and each jail must have a
1306unique jid.
1307.Pp
1308Like the names, a child jail's
1309.Va path
1310appears relative to its creator's own
1311.Va path .
1312This is by virtue of the child jail being created in the chrooted
1313environment of the first jail.
1314.Sh SEE ALSO
1315.Xr killall 1 ,
1316.Xr lsvfs 1 ,
1317.Xr newaliases 1 ,
1318.Xr pgrep 1 ,
1319.Xr pkill 1 ,
1320.Xr ps 1 ,
1321.Xr quota 1 ,
1322.Xr jail_set 2 ,
1323.Xr vmm 4 ,
1324.Xr devfs 5 ,
1325.Xr fdescfs 5 ,
1326.Xr jail.conf 5 ,
1327.Xr linprocfs 5 ,
1328.Xr linsysfs 5 ,
1329.Xr procfs 5 ,
1330.Xr rc.conf 5 ,
1331.Xr sysctl.conf 5 ,
1332.Xr bsdconfig 8 ,
1333.Xr chroot 8 ,
1334.Xr devfs 8 ,
1335.Xr halt 8 ,
1336.Xr ifconfig 8 ,
1337.Xr inetd 8 ,
1338.Xr jexec 8 ,
1339.Xr jls 8 ,
1340.Xr mount 8 ,
1341.Xr named 8 ,
1342.Xr reboot 8 ,
1343.Xr rpcbind 8 ,
1344.Xr sendmail 8 ,
1345.Xr shutdown 8 ,
1346.Xr sysctl 8 ,
1347.Xr syslogd 8 ,
1348.Xr umount 8
1349.Sh HISTORY
1350The
1351.Nm
1352utility appeared in
1353.Fx 4.0 .
1354Hierarchical/extensible jails were introduced in
1355.Fx 8.0 .
1356The configuration file was introduced in
1357.Fx 9.1 .
1358.Sh AUTHORS
1359.An -nosplit
1360The jail feature was written by
1361.An Poul-Henning Kamp
1362for R&D Associates
1363who contributed it to
1364.Fx .
1365.Pp
1366.An Robert Watson
1367wrote the extended documentation, found a few bugs, added
1368a few new features, and cleaned up the userland jail environment.
1369.Pp
1370.An Bjoern A. Zeeb
1371added multi-IP jail support for IPv4 and IPv6 based on a patch
1372originally done by
1373.An Pawel Jakub Dawidek
1374for IPv4.
1375.Pp
1376.An James Gritton
1377added the extensible jail parameters, hierarchical jails,
1378and the configuration file.
1379.Sh BUGS
1380It might be a good idea to add an
1381address alias flag such that daemons listening on all IPs
1382.Pq Dv INADDR_ANY
1383will not bind on that address, which would facilitate building a safe
1384host environment such that host daemons do not impose on services offered
1385from within jails.
1386Currently, the simplest answer is to minimize services
1387offered on the host, possibly limiting it to services offered from
1388.Xr inetd 8
1389which is easily configurable.
1390.Sh NOTES
1391Great care should be taken when managing directories visible within the jail.
1392For example, if a jailed process has its current working directory set to a
1393directory that is moved out of the jail's chroot, then the process may gain
1394access to the file space outside of the jail.
1395It is recommended that directories always be copied, rather than moved, out
1396of a jail.
1397.Pp
1398In addition, there are several ways in which an unprivileged user
1399outside the jail can cooperate with a privileged user inside the jail
1400and thereby obtain elevated privileges in the host environment.
1401Most of these attacks can be mitigated by ensuring that the jail root
1402is not accessible to unprivileged users in the host environment.
1403Regardless, as a general rule, untrusted users with privileged access
1404to a jail should not be given access to the host environment.
1405