Raphael H. Becker
2006-Dec-19 11:41 UTC
/etc/rc.d/jail: losing IPs if jail_x_interface set and syntax error in jails /etc/rc?
Hi *, I recently triggered an error when setting up a jail-host: I configured the jail(s) like evry jail I set up in the past: On the jail-hosts /etc/rc.conf: # ---- Jail-Globals ---- jail_enable="YES" # Set to NO to disable starting of any jails jail_list="ftp mx1 relay" # Space separated list of names of jails jail_set_hostname_allow="NO" # Allow root user in a jail to change its hostname jail_socket_unixiproute_only="YES" # Route only TCP/IP within a jail jail_sysvipc_allow="NO" # allow SystemV IPC use from within a jail # ---- Jail-Defaults ---- jail_interface="fxp0" jail_devfs_enable="YES" # mount devfs in the jail jail_fdescfs_enable="YES" # mount fdescfs in the jail jail_procfs_enable="YES" # mount procfs in jail jail_mount_enable="NO" # mount/umount jail's fs [...] # ---- ftp jail_ftp_rootdir="/data/jails/ftp.XXX.YYY.com" jail_ftp_ip="62.xxx.yyy.133" jail_ftp_hostname="ftp.XXX.YYY.com" This works well on other systems. Starting the ftp-Jail using /etc/rc.d/jail start ftp the system went "offline", ifconfig showed this: fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=8<VLAN_MTU> inet 62.xxx.yyy.133 netmask 0xffffffff broadcast 62.xxx.yyy.133 ether 00:06:5b:04:54:69 media: Ethernet autoselect (100baseTX <full-duplex>) status: active Bad thing. The primary IP of the Host and any other IPs on fxp0 got lost, just the jails IP/32 (alias) was left. On normal state ifconfig looks like this with some jails running: fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=8<VLAN_MTU> inet 62.xxx.yyy.150 netmask 0xffffff00 broadcast 62.xxx.yyy.255 inet 62.xxx.yyy.133 netmask 0xffffffff broadcast 62.xxx.yyy.133 inet 62.xxx.yyy.131 netmask 0xffffffff broadcast 62.xxx.yyy.131 inet 62.xxx.yyy.132 netmask 0xffffffff broadcast 62.xxx.yyy.132 ether 00:06:5b:04:54:69 media: Ethernet autoselect (100baseTX <full-duplex>) status: active It turned out, that a syntax error in the jails /etc/rc.conf (missing quote) break the jai-Host?!? Can anyone confirm this? If a jails rc.conf can break a jail host like this, this might be a serious problem for systems with "untrusted" ~root in the jails and should be fixed in 6.2. Regards Raphael Becker PS: System ist 6.2-RC1 # $FreeBSD: src/etc/rc.d/jail,v 1.23.2.7 2006/06/06 15:04:39 flz Exp $
Philipp Wuensche
2006-Dec-21 19:02 UTC
/etc/rc.d/jail: losing IPs if jail_x_interface set and syntax error in jails /etc/rc?
Raphael H. Becker wrote:> Hi *, > > I recently triggered an error when setting up a jail-host: I configured > the jail(s) like evry jail I set up in the past:Yes, this is a bug in rc.d/jail and was introduced in this change: http://www.freebsd.org/cgi/cvsweb.cgi/src/etc/rc.d/jail.diff?r1=1.31&r2=1.32. When a jail fails to start, in your case a broken rc.conf in the jail, the jail is stopped and the ipaddr-alias is unconfigured from the interface with the following command: ifconfig ${jail_interface} -alias ${jail_ip} Unfortunately in the change above the variables were renamed to _interface and _ip, this leads to ifconfig getting executed without a specified ipaddr. and therefore the first alias is unconfigured, which is in most cases the ipaddr. you are having access to the remote host. ${jail_interface} is only the correct interface out of luck, so it should be changed to _interface too. I think the correct way would be to call jail_stop() instead of doing the cleanup by hand but in the current implementation this would leave the ipaddr-alias configured on the interface. I think I already mentioned once that I don't like this interface and ipaddr. configuration feature in rc.d/jail at all. Anyway, the quick fix is trivial and should be included in 6.2. Otherwise we have a possible DoS security problem with the new release. --- rc.d/jail.old Fri Dec 22 03:09:27 2006 +++ rc.d/jail Fri Dec 22 03:10:07 2006 @@ -228,8 +228,8 @@ echo ${_jail_id} > /var/run/jail_${_jail}.id else jail_umount_fs - if [ -n "${jail_interface}" ]; then - ifconfig ${jail_interface} -alias ${jail_ip} + if [ -n "${_interface}" ]; then + ifconfig ${_interface} -alias ${_ip} fi echo " cannot start jail \"${_jail}\": " tail +2 ${_tmp_jail} greetings, philipp
Raphael H. Becker
2006-Dec-24 16:51 UTC
/etc/rc.d/jail: losing IPs if jail_x_interface set and syntax error in jails /etc/rc?
Hi Philipp, On Fri, Dec 22, 2006 at 03:35:37AM +0100, Philipp Wuensche wrote:> Raphael H. Becker wrote: > > Hi *, > > > > I recently triggered an error when setting up a jail-host: I configured > > the jail(s) like evry jail I set up in the past:> --- rc.d/jail.old Fri Dec 22 03:09:27 2006 > +++ rc.d/jail Fri Dec 22 03:10:07 2006 > @@ -228,8 +228,8 @@K?mmerst Du dich darum, dass der Patch reinkommt oder soll ich mich direkt an Florent (letzter Committer) wenden? Oder ist der Patch schon unterwegs? Ich verfolge eigentlich recht l?ckenlos cvs-all (bzw cvs-src und cvs-ports) und da w?re es mir aufgefallen, wenn sich da was getan h?tte. In RC2 scheint es noch nicht drin zu sein. Besten Dank! Gru? Raphael
Reasonably Related Threads
- FreeBSD Security Advisory FreeBSD-SA-07:01.jail
- [ronvdaal@zarathustra.linux666.com: Possible security issue with FreeBSD 5.4 jailing and BPF]
- Configuring JAIL to bind on lo0 interface
- problem stoping jails with jail(8), jail.conf and mount.fstab
- A simple rc.d jail patch to enable priority