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