Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 13 Apr 2006 17:21:38 -0300
From:      "Ricardo A. Reis" <ricardo_bsd@yahoo.com.br>
To:        "freebsd-security@freebsd.org" <freebsd-security@freebsd.org>
Cc:        "freebsd-current@freebsd.org" <freebsd-current@freebsd.org>
Subject:   Prototyping for basejail distribuition
Message-ID:  <op.s7yqucz5p1tyz6@localhost>

next in thread | raw e-mail | index | archive | help

[-- Attachment #1 --]

Hi,

I attach 2 files in this email, the first is a Makefile and the second is  
jail.conf.
For demonstre my idea i resolved create one "Pseudo Prototyping", for test  
is necessary:

1 - Create dir /usr/local/basejail
2 - Copy Makefile to /usr/local/basejail
3 - Copy jail.conf to /etc
4 - The initial basejail is precompiled is distributed in CD1,
for simular basejail is necessary a installworld structure in  
/usr/local/basejail
cd /usr/src ; make installworld DESTDIR=/usr/local/basejail

Now is necessary config jail.conf,

-----
#sample template for create freebsd jail
#
# RC.CONF GLOBAL VARIABLES
#
exec_start="/bin/sh /etc/rc"
exec_stop="/bin/sh /etc/rc.shutdown"
devfs_enable="NO"
fdescfs_enable="NO"
procfs_enable="NO"
mount_enable="NO"
devfs_ruleset="ruleset_name"
flags="-l -U root"
#
# JAIL RC.CONF
#
sendmail_enable="NO"
inetd_flags="-wW -a"
rpcbind_enable="NO"
network_interfaces=""
#
# FILES
#
copy_to_jail="/etc/localtime /etc/resolv.conf /etc/csh.cshrc  
/etc/csh.login"
#
# JAILS
#
jail_node01_rootdir="/usr/jail/node01"
jail_node01_hostname="node01.example.com"
jail_node01_ip="127.0.0.1 "

jail_node02_rootdir="/usr/jail/node02"
jail_node02_hostname="node02.example.com"
jail_node02_ip="127.0.0.2 "
-------
In this moment is possible create large numbers of jail, i
implemente in makefile,

[root@daemon:/usr/local/basejail] # make

>>> Sample in /usr/share/examples/etc/jail.conf

jail == create jail
rcconf == create rc.conf for start jails
etcconfig == create rc.conf for jails and copy file
showconfig == show information


Thanks for any comments,
Sorry for my english and poor Makefile.

-- 
Ricardo A. Reis
UNIFESP
Unix and Network Adm
[-- Attachment #2 --]
#sample tamplate for create freebsd jail
#
# RC.CONF GLOBAL VARIABLES
#
exec_start="/bin/sh /etc/rc"
exec_stop="/bin/sh /etc/rc.shutdown"
devfs_enable="NO"
fdescfs_enable="NO"
procfs_enable="NO"
mount_enable="NO"
devfs_ruleset="ruleset_name"
flags="-l -U root"
#
# JAIL RC.CONF
#
sendmail_enable="NO"
inetd_flags="-wW -a"
rpcbind_enable="NO" 
network_interfaces=""
#
# FILES
#
copy_to_jail="/etc/localtime /etc/resolv.conf /etc/csh.cshrc /etc/csh.login"
#
# JAILS
#
jail_node01_rootdir="/usr/jail/node01" 
jail_node01_hostname="node01.example.com"
jail_node01_ip="127.0.0.1"

jail_node02_rootdir="/usr/jail/node02"
jail_node02_hostname="node02.example.com"
jail_node02_ip="127.0.0.2"


[-- Attachment #3 --]
#-*- mode: Fundamental; tab-width: 4; -*-
# ex:ts=4
DISTBASE?=/usr/local/basejail
CONFIGCFG?=/etc/jail.conf
JLISTR!= grep '^jail_[a-z].*_rootdir' $(CONFIGCFG) 2>/dev/null | cut -d= -f2 | sed -e 's/"//g' |tr ' ' '\n' 
JLISTN!= grep '^jail_[a-z].*_' $(CONFIGCFG) 2>/dev/null | cut -d= -f1 |cut -d_ -f2 |sort |uniq
JLISTIIP!= grep '^jail_$(JLISTN)_ip' $(CONFIGCFG) 2>/dev/null | cut -d= -f2 | sed -e 's/"//g'
TMPDIR?=/tmp


.if !exists(${CONFIGCFG})
	@echo ""
	@echo ">>> Please configure $(CONFIGCFG)"
	@echo ">>> Sample in /usr/share/examples$(CONFIGCFG)"
	@echo ""
	@exit 1
.else
. include "$(CONFIGCFG)" 
.endif

help:
	@echo ""
	@echo ">>> Sample in /usr/share/examples$(CONFIGCFG)"
	@echo ""
	@echo "jail       == create jail"
	@echo "rcconf     == create rc.conf for start jails"
	@echo "etcconfig  == create rc.conf for jails and copy file"
	@echo "showconfig == show information for jail.conf"

jail:
.if ${JLISTR} != "" || ${JLISTR} != "" || ${JLISTN} != ""
.for _rootdir in $(JLISTR)
. if !exists(${_rootdir})
	@echo ">>STAGE 1 - Creating ROOTDIR: (${_rootdir})"
	@mkdir -p ${_rootdir}
. endif
#
#CPIO BASEJAIL 
#
	@rm -rf $(TMPDIR)/jail.* 	
	@TMPFILE_01=`mktemp $(TMPDIR)/jail.XXXXXX` || exit 1 && \
	echo ">>STAGE 2 - Populing Jail: (${_rootdir})" - $${TMPFILE_01} ;\
	cd $(DISTBASE) ; find . -depth -print0 |cpio --null -pvdm ${_rootdir} >$${TMPFILE_01}  2>&1 ;\
	rm -rf ${_rootdir}/Makefile

.endfor
	@echo  ""
	@echo  "For create rc.conf use target (rconf)"
	@echo  ""
.else
	@echo ">>> Please define jail TEMPLATE, see jail.cfg(8)"
.endif

rconf:
#
#CREATE RC.CONF FOR START JAIL
#
	@echo $(JLISTN) | tr ' ' '\n' | \
	while read _jname; do \
			JROOTD=`grep ^jail_$${_jname}_rootdir $(CONFIGCFG) 2>/dev/null |cut -d= -f2 | sed -e 's/"//g'` ; \
			JIP=`grep ^jail_$${_jname}_ip  $(CONFIGCFG) 2>/dev/null |cut -d= -f2 | sed -e 's/"//g'` ; \
			JFDQN=`grep ^jail_$${_jname}_hostname $(CONFIGCFG) 2>/dev/null |cut -d= -f2 | sed -e 's/"//g'` ; \
				echo jail_$${_jname}_rootdir=\"$${JROOTD}\" ;\
				echo jail_$${_jname}_ip=\"$${JIP}\" ;\
				echo jail_$${_jname}_hostname=\"$${JFDQN}\" ;\
    	 		echo jail_$${_jname}_exec_start=\"$(exec_start)\" ;\
     			echo jail_$${_jname}_exec_stop=\"$(exec_stop)\" ;\
		    	echo jail_$${_jname}_devfs_enable=\"$(devfs_enable)\" ;\
     			echo jail_$${_jname}_fdescfs_enable=\"$(fdescfs_enable)\" ;\
	     		echo jail_$${_jname}_procfs_enable=\"$(procfs_enable)\" ;\
    	 		echo jail_$${_jname}_mount_enable=\"$(mount_enable)\" ;\
     			echo jail_$${_jname}_devfs_ruleset=\"$(devfs_ruleset)\" ;\
     			echo jail_$${_jname}_fstab=\"/etc/fstab.$${_jname}\" ;\
     			echo jail_$${_jname}_flags=\"$(flags)\" ;\
				echo "" ;\
	done

etcconfig:
#
#CREATE RC.CONF FOR JAIL
#
	@echo ">>STAGE 1 - Creating RC.CONF for JAIL"
	@echo $(JLISTN) | tr ' ' '\n' | \
	while read _jname; do \
			JROOTD=`grep "^jail_$${_jname}_rootdir" $(CONFIGCFG) 2>/dev/null |cut -d= -f2 | sed -e 's/"//g ; s/ //g'` ; \
			JIP=`grep ^jail_$${_jname}_ip  $(CONFIGCFG) 2>/dev/null |cut -d= -f2 | sed -e 's/"//g'` ; \
			exec 3<&0 ;\
			exec > $${JROOTD}/etc/rc.conf;\
 			echo "sendmail_enable=\"$(sendmail_enable)\""    ;\
	   		echo "inetd_flags=\"$(inetd_flags) $${JIP}\""    ;\
    		echo "rpcbind_enable=\"$(rpcbind_enable)\""      ;\
    		echo "network_interfaces=\"$(network_interfaces)\""   ;\
			exec 0<&3 ;\
			exec 3<&- ;\
	done
	@echo ">>STAGE 2 - Coping archives to Jail"
	@echo $(JLISTN) | tr ' ' '\n' | \
	while read _jname; do \
			JROOTD=`grep "^jail_$${_jname}_rootdir" $(CONFIGCFG) 2>/dev/null |cut -d= -f2 | sed -e 's/"//g ; s/ //g'` ; \
			for _files in `echo $(copy_to_jail) | tr ' ' '\n'`; do\
				cp $${_files} $${JROOTD}/$${_files} ;\
			done ; \
	done

showconfig:

	@echo ">>STAGE 1 - Search information in $(CONFIGCFG)"
	@echo ""
	@echo ">>SYSTEM RC.CONF Template Atual:"
	@echo ""
	@echo "jail_XXXXXXX_exec_start=\"$(exec_start)\""
	@echo "jail_XXXXXXX_exec_stop=\"$(exec_stop)\"" 
	@echo "jail_XXXXXXX_devfs_enable=\"$(devfs_enable)\""
	@echo "jail_XXXXXXX_fdescfs_enable=\"$(fdescfs_enable)\""
	@echo "jail_XXXXXXX_procfs_enable=\"$(procfs_enable)\""
	@echo "jail_XXXXXXX_mount_enable=\"$(mount_enable)\""
	@echo "jail_XXXXXXX_devfs_ruleset=\"$(devfs_ruleset)\""
	@echo "jail_XXXXXXX_fstab=\"/etc/fstab.XXXXXXX\""
	@echo "jail_XXXXXXX_flags=\"$(flags)\""
	@echo ""
	@echo ">>JAIL RC.CONF Template Atual:"
	@echo ""
	@echo "sendmail_enable=\"$(sendmail_enable)\""   
	@echo "inetd_flags=\"$(inetd_flags) $${JIP}\"" 
	@echo "rpcbind_enable=\"$(rpcbind_enable)\""
	@echo "network_interfaces=\"$(network_interfaces)\""
	@echo ""
	@echo ">>Files to Jail:"
	@echo ""
	@echo "$(copy_to_jail)"
	@echo ""
	@echo ">>Jails Config:"
	@echo ""
	@echo $(JLISTN) | tr ' ' '\n' | \
	while read _jname; do \
			JROOTD=`grep "^jail_$${_jname}_rootdir" $(CONFIGCFG) 2>/dev/null |cut -d= -f2 | sed -e 's/"//g ; s/ //g'` ; \
			JIP=`grep ^jail_$${_jname}_ip  $(CONFIGCFG) 2>/dev/null |cut -d= -f2 | sed -e 's/"//g'` ; \
 			echo "NAME    = $${_jname}" ;\
			echo "ROOTDIR = $${JROOTD}"  ;\
			echo "IP      = $${JIP}"     ;\
			echo ""	;\
	done


Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?op.s7yqucz5p1tyz6>