diff options
author | flz <flz@FreeBSD.org> | 2006-05-11 14:23:43 +0000 |
---|---|---|
committer | flz <flz@FreeBSD.org> | 2006-05-11 14:23:43 +0000 |
commit | 76e07854c3d38e3f9613b1d64136e2b025152be2 (patch) | |
tree | d1f35ad9ac90ddf99478f2e51708284ec6e86bf4 | |
parent | 57f8bd589684230bebf5a9cb58756523ca63eff7 (diff) | |
download | FreeBSD-src-76e07854c3d38e3f9613b1d64136e2b025152be2.zip FreeBSD-src-76e07854c3d38e3f9613b1d64136e2b025152be2.tar.gz |
- Change the "jail_" prefix for internal script variables. This fixes an
issue where some global jail_* variables were overriden in the script. [1]
- Change "jid" to "jname" in rc.conf(5), since it's more a jail name than a
jail id. [1]
- Update examples and comments in defaults/rc.conf to advertise new
variables and the fact that some of the jail-specific variables may be made
jail-global. [2]
Reported by: pjd [1], clsung [2]
Approved by: cperciva
X-MFC after: i got sufficient testing from people using rc.d/jail
-rw-r--r-- | etc/defaults/rc.conf | 6 | ||||
-rw-r--r-- | etc/rc.d/jail | 186 | ||||
-rw-r--r-- | share/man/man5/rc.conf.5 | 68 |
3 files changed, 132 insertions, 128 deletions
diff --git a/etc/defaults/rc.conf b/etc/defaults/rc.conf index 6d92919..970ac9a 100644 --- a/etc/defaults/rc.conf +++ b/etc/defaults/rc.conf @@ -555,11 +555,15 @@ jail_sysvipc_allow="NO" # Allow SystemV IPC use from within a jail # # To use rc's built-in jail infrastructure create entries for # each jail, specified in jail_list, with the following variables. -# NOTE: replace 'example' with the jail's name. +# NOTES: +# - replace 'example' with the jail's name. +# - except rootdir, hostname and ip, all of the following variables may be made +# global jail variables if you don't specify a jail name (ie. jail_interface). # #jail_example_rootdir="/usr/jail/default" # Jail's root directory #jail_example_hostname="default.domain.com" # Jail's hostname #jail_example_ip="192.168.0.10" # Jail's IP number +#jail_example_interface="" # Interface to create the IP alias on #jail_example_exec_start="/bin/sh /etc/rc" # command to execute in jail for starting #jail_example_exec_stop="/bin/sh /etc/rc.shutdown" # command to execute in jail for stopping #jail_example_devfs_enable="NO" # mount devfs in the jail diff --git a/etc/rc.d/jail b/etc/rc.d/jail index 7551a18..f0b23b1 100644 --- a/etc/rc.d/jail +++ b/etc/rc.d/jail @@ -27,73 +27,73 @@ init_variables() return fi - eval jail_rootdir=\"\$jail_${_j}_rootdir\" - jail_devdir="${jail_rootdir}/dev" - jail_fdescdir="${jail_devdir}/fd" - jail_procdir="${jail_rootdir}/proc" - eval jail_hostname=\"\$jail_${_j}_hostname\" - eval jail_ip=\"\$jail_${_j}_ip\" - eval jail_interface=\"\${jail_${_j}_interface:-${jail_interface}}\" - eval jail_exec=\"\$jail_${_j}_exec\" - eval jail_exec_start=\"\${jail_${_j}_exec_start:-${jail_exec_start}}\" - eval jail_exec_stop=\"\${jail_${_j}_exec_stop:-${jail_exec_stop}}\" - if [ -n "${jail_exec}" ]; then + eval _rootdir=\"\$jail_${_j}_rootdir\" + _devdir="${_rootdir}/dev" + _fdescdir="${_devdir}/fd" + _procdir="${_rootdir}/proc" + eval _hostname=\"\$jail_${_j}_hostname\" + eval _ip=\"\$jail_${_j}_ip\" + eval _interface=\"\${jail_${_j}_interface:-${jail_interface}}\" + eval _exec=\"\$jail_${_j}_exec\" + eval _exec_start=\"\${jail_${_j}_exec_start:-${jail_exec_start}}\" + eval _exec_stop=\"\${jail_${_j}_exec_stop:-${jail_exec_stop}}\" + if [ -n "${_exec}" ]; then # simple/backward-compatible execution - jail_exec_start="${jail_exec}" - jail_exec_stop="" + _exec_start="${_exec}" + _exec_stop="" else # flexible execution - if [ -z "${jail_exec_start}" ]; then - jail_exec_start="/bin/sh /etc/rc" - if [ -z "${jail_exec_stop}" ]; then - jail_exec_stop="/bin/sh /etc/rc.shutdown" + if [ -z "${_exec_start}" ]; then + _exec_start="/bin/sh /etc/rc" + if [ -z "${_exec_stop}" ]; then + _exec_stop="/bin/sh /etc/rc.shutdown" fi fi fi # The default jail ruleset will be used by rc.subr if none is specified. - eval jail_ruleset=\"\${jail_${_j}_devfs_ruleset:-${jail_devfs_ruleset}}\" - eval jail_devfs=\"\${jail_${_j}_devfs_enable:-${jail_devfs_enable}}\" - [ -z "${jail_devfs}" ] && jail_devfs="NO" - eval jail_fdescfs=\"\${jail_${_j}_fdescfs_enable:-${jail_fdescfs_enable}}\" - [ -z "${jail_fdescfs}" ] && jail_fdescfs="NO" - eval jail_procfs=\"\${jail_${_j}_procfs_enable:-${jail_procfs_enable}}\" - [ -z "${jail_procfs}" ] && jail_procfs="NO" + eval _ruleset=\"\${jail_${_j}_devfs_ruleset:-${jail_devfs_ruleset}}\" + eval _devfs=\"\${jail_${_j}_devfs_enable:-${jail_devfs_enable}}\" + [ -z "${_devfs}" ] && _devfs="NO" + eval _fdescfs=\"\${jail_${_j}_fdescfs_enable:-${jail_fdescfs_enable}}\" + [ -z "${_fdescfs}" ] && _fdescfs="NO" + eval _procfs=\"\${jail_${_j}_procfs_enable:-${jail_procfs_enable}}\" + [ -z "${_procfs}" ] && _procfs="NO" - eval jail_mount=\"\${jail_${_j}_mount_enable:-${jail_mount_enable}}\" - [ -z "${jail_mount}" ] && jail_mount="NO" + eval _mount=\"\${jail_${_j}_mount_enable:-${jail_mount_enable}}\" + [ -z "${_mount}" ] && _mount="NO" # "/etc/fstab.${_j}" will be used for {,u}mount(8) if none is specified. - eval jail_fstab=\"\${jail_${_j}_fstab:-${jail_fstab}}\" - [ -z "${jail_fstab}" ] && jail_fstab="/etc/fstab.${_j}" - eval jail_flags=\"\${jail_${_j}_flags:-${jail_flags}}\" - [ -z "${jail_flags}" ] && jail_flags="-l -U root" + eval _fstab=\"\${jail_${_j}_fstab:-${jail_fstab}}\" + [ -z "${_fstab}" ] && _fstab="/etc/fstab.${_j}" + eval _flags=\"\${jail_${_j}_flags:-${jail_flags}}\" + [ -z "${_flags}" ] && _flags="-l -U root" # Debugging aid # - debug "$_j devfs enable: $jail_devfs" - debug "$_j fdescfs enable: $jail_fdescfs" - debug "$_j procfs enable: $jail_procfs" - debug "$_j mount enable: $jail_mount" - debug "$_j hostname: $jail_hostname" - debug "$_j ip: $jail_ip" - debug "$_j interface: $jail_interface" - debug "$_j root: $jail_rootdir" - debug "$_j devdir: $jail_devdir" - debug "$_j fdescdir: $jail_fdescdir" - debug "$_j procdir: $jail_procdir" - debug "$_j ruleset: $jail_ruleset" - debug "$_j fstab: $jail_fstab" - debug "$_j exec start: $jail_exec_start" - debug "$_j exec stop: $jail_exec_stop" - debug "$_j flags: $jail_flags" + debug "$_j devfs enable: $_devfs" + debug "$_j fdescfs enable: $_fdescfs" + debug "$_j procfs enable: $_procfs" + debug "$_j mount enable: $_mount" + debug "$_j hostname: $_hostname" + debug "$_j ip: $_ip" + debug "$_j interface: $_interface" + debug "$_j root: $_rootdir" + debug "$_j devdir: $_devdir" + debug "$_j fdescdir: $_fdescdir" + debug "$_j procdir: $_procdir" + debug "$_j ruleset: $_ruleset" + debug "$_j fstab: $_fstab" + debug "$_j exec start: $_exec_start" + debug "$_j exec stop: $_exec_stop" + debug "$_j flags: $_flags" - if [ -z "${jail_hostname}" ]; then + if [ -z "${_hostname}" ]; then err 3 "$name: No hostname has been defined for ${_j}" fi - if [ -z "${jail_rootdir}" ]; then + if [ -z "${_rootdir}" ]; then err 3 "$name: No root directory has been defined for ${_j}" fi - if [ -z "${jail_ip}" ]; then + if [ -z "${_ip}" ]; then err 3 "$name: No IP address has been defined for ${_j}" fi @@ -133,24 +133,24 @@ set_sysctl() # jail_umount_fs() { - if checkyesno jail_fdescfs; then - if [ -d "${jail_fdescdir}" ] ; then - umount -f ${jail_fdescdir} >/dev/null 2>&1 + if checkyesno _fdescfs; then + if [ -d "${_fdescdir}" ] ; then + umount -f ${_fdescdir} >/dev/null 2>&1 fi fi - if checkyesno jail_devfs; then - if [ -d "${jail_devdir}" ] ; then - umount -f ${jail_devdir} >/dev/null 2>&1 + if checkyesno _devfs; then + if [ -d "${_devdir}" ] ; then + umount -f ${_devdir} >/dev/null 2>&1 fi fi - if checkyesno jail_procfs; then - if [ -d "${jail_procdir}" ] ; then - umount -f ${jail_procdir} >/dev/null 2>&1 + if checkyesno _procfs; then + if [ -d "${_procdir}" ] ; then + umount -f ${_procdir} >/dev/null 2>&1 fi fi - if checkyesno jail_mount; then - [ -f "${jail_fstab}" ] || warn "${jail_fstab} does not exist" - umount -a -F "${jail_fstab}" >/dev/null 2>&1 + if checkyesno _mount; then + [ -f "${_fstab}" ] || warn "${_fstab} does not exist" + umount -a -F "${_fstab}" >/dev/null 2>&1 fi } @@ -172,29 +172,29 @@ jail_start() do init_variables $_jail if [ -f /var/run/jail_${_jail}.id ]; then - echo -n " [${jail_hostname} already running (/var/run/jail_${_jail}.id exists)]" + echo -n " [${_hostname} already running (/var/run/jail_${_jail}.id exists)]" continue; fi - if [ -n "${jail_interface}" ]; then - ifconfig ${jail_interface} alias ${jail_ip} netmask 255.255.255.255 + if [ -n "${_interface}" ]; then + ifconfig ${_interface} alias ${_ip} netmask 255.255.255.255 fi - if checkyesno jail_mount; then - info "Mounting fstab for jail ${_jail} (${jail_fstab})" - if [ ! -f "${jail_fstab}" ]; then - err 3 "$name: ${jail_fstab} does not exist" + if checkyesno _mount; then + info "Mounting fstab for jail ${_jail} (${_fstab})" + if [ ! -f "${_fstab}" ]; then + err 3 "$name: ${_fstab} does not exist" fi - mount -a -F "${jail_fstab}" + mount -a -F "${_fstab}" fi - if checkyesno jail_devfs; then + if checkyesno _devfs; then # If devfs is already mounted here, skip it. - df -t devfs "${jail_devdir}" >/dev/null + df -t devfs "${_devdir}" >/dev/null if [ $? -ne 0 ]; then - info "Mounting devfs on ${jail_devdir}" - devfs_mount_jail "${jail_devdir}" ${jail_ruleset} + info "Mounting devfs on ${_devdir}" + devfs_mount_jail "${_devdir}" ${_ruleset} # Transitional symlink for old binaries - if [ ! -L "${jail_devdir}/log" ]; then + if [ ! -L "${_devdir}/log" ]; then __pwd="`pwd`" - cd "${jail_devdir}" + cd "${_devdir}" ln -sf ../var/run/log log cd "$__pwd" fi @@ -204,27 +204,27 @@ jail_start() # is a devfs(5) device of the same name. # Jail console output # __pwd="`pwd`" - # cd "${jail_devdir}" + # cd "${_devdir}" # ln -sf ../var/log/console console # cd "$__pwd" fi - if checkyesno jail_fdescfs; then - info "Mounting fdescfs on ${jail_fdescdir}" - mount -t fdescfs fdesc "${jail_fdescdir}" + if checkyesno _fdescfs; then + info "Mounting fdescfs on ${_fdescdir}" + mount -t fdescfs fdesc "${_fdescdir}" fi - if checkyesno jail_procfs; then - info "Mounting procfs onto ${jail_procdir}" - if [ -d "${jail_procdir}" ] ; then - mount -t procfs proc "${jail_procdir}" + if checkyesno _procfs; then + info "Mounting procfs onto ${_procdir}" + if [ -d "${_procdir}" ] ; then + mount -t procfs proc "${_procdir}" fi fi _tmp_jail=${_tmp_dir}/jail.$$ - eval jail ${jail_flags} -i ${jail_rootdir} ${jail_hostname} \ - ${jail_ip} ${jail_exec_start} > ${_tmp_jail} 2>&1 + eval jail ${_flags} -i ${_rootdir} ${_hostname} \ + ${_ip} ${_exec_start} > ${_tmp_jail} 2>&1 if [ "$?" -eq 0 ] ; then - echo -n " $jail_hostname" + echo -n " $_hostname" _jail_id=$(head -1 ${_tmp_jail}) - tail +2 ${_tmp_jail} >${jail_rootdir}/var/log/console.log + tail +2 ${_tmp_jail} >${_rootdir}/var/log/console.log echo ${_jail_id} > /var/run/jail_${_jail}.id else jail_umount_fs @@ -249,18 +249,18 @@ jail_stop() _jail_id=$(cat /var/run/jail_${_jail}.id) if [ ! -z "${_jail_id}" ]; then init_variables $_jail - if [ -n "${jail_exec_stop}" ]; then - eval env -i /usr/sbin/jexec ${_jail_id} ${jail_exec_stop} \ - >> ${jail_rootdir}/var/log/console.log 2>&1 + if [ -n "${_exec_stop}" ]; then + eval env -i /usr/sbin/jexec ${_jail_id} ${_exec_stop} \ + >> ${_rootdir}/var/log/console.log 2>&1 fi killall -j ${_jail_id} -TERM > /dev/null 2>&1 sleep 1 killall -j ${_jail_id} -KILL > /dev/null 2>&1 jail_umount_fs - echo -n " $jail_hostname" + echo -n " $_hostname" fi - if [ -n "${jail_interface}" ]; then - ifconfig ${jail_interface} -alias ${jail_ip} + if [ -n "${_interface}" ]; then + ifconfig ${_interface} -alias ${_ip} fi rm /var/run/jail_${_jail}.id else diff --git a/share/man/man5/rc.conf.5 b/share/man/man5/rc.conf.5 index 5a8b276..ab2aa8f 100644 --- a/share/man/man5/rc.conf.5 +++ b/share/man/man5/rc.conf.5 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd April 18, 2006 +.Dd May 11, 2006 .Dt RC.CONF 5 .Os .Sh NAME @@ -3010,21 +3010,21 @@ jail_vjail_rootdir="/var/jails/vjail/root" .Pq Vt str Unset by default. When set, use as default value for -.Va jail_ Ns Ao Ar jid Ac Ns Va _flags +.Va jail_ Ns Ao Ar jname Ac Ns Va _flags for every jail in .Va jail_list . .It Va jail_interface .Pq Vt str Unset by default. When set, use as default value for -.Va jail_ Ns Ao Ar jid Ac Ns Va _interface +.Va jail_ Ns Ao Ar jname Ac Ns Va _interface for every jail in .Va jail_list . .It Va jail_fstab .Pq Vt str Unset by default. When set, use as default value for -.Va jail_ Ns Ao Ar jid Ac Ns Va _fstab +.Va jail_ Ns Ao Ar jname Ac Ns Va _fstab for every jail in .Va jail_list . .It Va jail_mount_enable @@ -3035,14 +3035,14 @@ by default. When set to .Dq Li YES , sets -.Va jail_ Ns Ao Ar jid Ac Ns Va _mount_enable +.Va jail_ Ns Ao Ar jname Ac Ns Va _mount_enable to YES by default for every jail in .Va jail_list . .It Va jail_devfs_ruleset .Pq Vt str Unset by default. When set, sets -.Va jail_ Ns Ao Ar jid Ac Ns Va _devfs_ruleset +.Va jail_ Ns Ao Ar jname Ac Ns Va _devfs_ruleset to given value for every jail in .Va jail_list . .It Va jail_devfs_enable @@ -3053,7 +3053,7 @@ by default. When set to .Dq Li YES , sets -.Va jail_ Ns Ao Ar jid Ac Ns Va _devfs_enable +.Va jail_ Ns Ao Ar jname Ac Ns Va _devfs_enable to YES by default for every jail in .Va jail_list . .It Va jail_fdescfs_enable @@ -3064,7 +3064,7 @@ by default. When set to .Dq Li YES , sets -.Va jail_ Ns Ao Ar jid Ac Ns Va _fdescfs_enable +.Va jail_ Ns Ao Ar jname Ac Ns Va _fdescfs_enable to YES by default for every jail in .Va jail_list . .It Va jail_procfs_enable @@ -3075,57 +3075,57 @@ by default. When set to .Dq Li YES , sets -.Va jail_ Ns Ao Ar jid Ac Ns Va _fdescfs_enable +.Va jail_ Ns Ao Ar jname Ac Ns Va _fdescfs_enable to YES by default for every jail in .Va jail_list . .It Va jail_exec_start .Pq Vt str Unset by default. When set, use as default value for -.Va jail_ Ns Ao Ar jid Ac Ns Va _exec_start +.Va jail_ Ns Ao Ar jname Ac Ns Va _exec_start for every jail in .Va jail_list . .It Va jail_exec_stop Unset by default. When set, use as default value for -.Va jail_ Ns Ao Ar jid Ac Ns Va _exec_stop +.Va jail_ Ns Ao Ar jname Ac Ns Va _exec_stop for every jail in .Va jail_list . -.It Va jail_ Ns Ao Ar jid Ac Ns Va _rootdir +.It Va jail_ Ns Ao Ar jname Ac Ns Va _rootdir .Pq Vt str Unset by default. Set to the root directory used by jail -.Va jid . -.It Va jail_ Ns Ao Ar jid Ac Ns Va _hostname +.Va jname . +.It Va jail_ Ns Ao Ar jname Ac Ns Va _hostname .Pq Vt str Unset by default. Set to the fully qualified domain name (FQDN) assigned to jail -.Va jid . -.It Va jail_ Ns Ao Ar jid Ac Ns Va _ip +.Va jname . +.It Va jail_ Ns Ao Ar jname Ac Ns Va _ip .Pq Vt str Unset by default. Set to the IP address assigned to jail -.Va jid . -.It Va jail_ Ns Ao Ar jid Ac Ns Va _flags +.Va jname . +.It Va jail_ Ns Ao Ar jname Ac Ns Va _flags .Pq Vt str Set to .Dq Li -l -U root by default. These are flags to pass to .Xr jail . -.It Va jail_ Ns Ao Ar jid Ac Ns Va _interface +.It Va jail_ Ns Ao Ar jname Ac Ns Va _interface .Pq Vt str Unset by default. When set, sets the interface to use when setting IP address alias. Note that the alias is created at jail startup and removed at jail shutdown. -.It Va jail_ Ns Ao Ar jid Ac Ns Va _fstab +.It Va jail_ Ns Ao Ar jname Ac Ns Va _fstab .Pq Vt str Set to -.Pa /etc/fstab. Ns Ao Ar jid Ac +.Pa /etc/fstab. Ns Ao Ar jname Ac by default. This is the file system information file to use for jail -.Va jid . -.It Va jail_ Ns Ao Ar jid Ac Ns Va _mount_enable +.Va jname . +.It Va jail_ Ns Ao Ar jname Ac Ns Va _mount_enable .Pq Vt bool Set to .Dq Li NO @@ -3133,14 +3133,14 @@ by default. When set to .Dq Li YES , mount all file systems from -.Va jail_ Ns Ao Ar jid Ac Ns Va _fstab +.Va jail_ Ns Ao Ar jname Ac Ns Va _fstab at jail startup. -.It Va jail_ Ns Ao Ar jid Ac Ns Va _devfs_ruleset +.It Va jail_ Ns Ao Ar jname Ac Ns Va _devfs_ruleset .Pq Vt str Unset by default. When set, defines the device file system ruleset file to use for jail -.Va jid . -.It Va jail_ Ns Ao Ar jid Ac Ns Va _devfs_enable +.Va jname . +.It Va jail_ Ns Ao Ar jname Ac Ns Va _devfs_enable .Pq Vt bool Set to .Dq Li NO @@ -3148,9 +3148,9 @@ by default. When set to .Dq Li YES , mount the device file system inside jail -.Ar jid +.Ar jname at jail startup. -.It Va jail_ Ns Ao Ar jid Ac Ns Va _fdescfs_enable +.It Va jail_ Ns Ao Ar jname Ac Ns Va _fdescfs_enable .Pq Vt bool Set to .Dq Li NO @@ -3158,9 +3158,9 @@ by default. When set to .Dq Li YES , mount the file-descriptor file system inside jail -.Ar jid +.Ar jname at jail startup. -.It Va jail_ Ns Ao Ar jid Ac Ns Va _procfs_enable +.It Va jail_ Ns Ao Ar jname Ac Ns Va _procfs_enable .Pq Vt bool Set to .Dq Li NO @@ -3168,15 +3168,15 @@ by default. When set to .Dq Li YES , mount the process file system inside jail -.Ar jid +.Ar jname at jail startup. -.It Va jail_ Ns Ao Ar jid Ac Ns Va _exec_start +.It Va jail_ Ns Ao Ar jname Ac Ns Va _exec_start .Pq Vt str Set to .Dq Li /bin/sh /etc/rc by default. This is the command executed at jail startup. -.It Va jail_ Ns Ao Ar jid Ac Ns Va _exec_stop +.It Va jail_ Ns Ao Ar jname Ac Ns Va _exec_stop .Pq Vt str Set to .Dq Li /bin/sh /etc/rc.shutdown |