Algunos administradores dividen las jaulas en dos tipos: jaulas “completas”, que recrean un sistema FreeBSD real, y jaulas “de servicio”, que son aquellas que están dedicadas a una sola aplicación o servicio, en muchos casos ejecutándose sin privilegios. Se trata de una división exclusivamente conceptual, por lo que el proceso de generación de una jaula no se ve afectado por ella. La página de manual jail(8) explica claramente el procedimiento a seguir para generar una jaula:
#
setenv D /aquí/está/la/jaula
#
mkdir -p $D
![]()
#
cd /usr/src
#
make world DESTDIR=$D
![]()
#
cd etc/
[9]#
make distribution DESTDIR=$D
![]()
#
mount_devfs devfs $D/dev
El mejor punto de partida es la elección del punto
del sistema de ficheros del servidor donde estará
físicamente ubicada la jaula. | |
Este comando creará el contenido necesario (binarios, bibliotecas, páginas de manual, etc.) y lo copiará al “subárbol” elegido como ubicación física de la jaula. Todo se hace al típico estilo FreeBSD: se compila todo y luego se instala en la ruta de destino. | |
Al pasar el “target”
| |
No es imprescindible montar el sistema de ficheros devfs(8) dentro de la jaula aunque por otra parte (casi) todas las aplicaciones necesitan acceso al menos a un dispositivo, dependiendo esto del propósito de la aplicación. Es muy importante el control del acceso a dispositivos desde la jaula, puesto que una configuración descuidada puede permitir que un atacante haga de las suyas. El control sobre devfs(8) se gestiona mediante reglas que se detallan en las páginas de manual devfs(8) y devfs.conf(5). |
Una vez instalada la jaula puede arrancarla mediante
jail(8). jail(8) usa los cuatro argumentos que
se detallan en la Sección 15.3.1, “Qué es una jaula”. Puede pasarle otros argumentos
además de estos, por ejemplo para ejecutar procesos
enjaulados bajo los permisos de un usuario específico. El
argumento
depende del tipo de jaula; si se trata de un
virtual system comando
/etc/rc
es una buena elección, puesto que ejecutará la
secuencia de arranque de un sistema FreeBSD real. Si se trata
de una jaula de servicio depende del
servicio o aplicación que se quiera ejecutar mediante
la jaula.
Con frecuencia las jaulas se arrancan durante el arranque del
servidor que las aloja; el sistema rc
de
FreeBSD permite hacerlo de un modo muy sencillo.
Puede crear una lista de jaulas que quiera arrancar en el inicio del sistema en el fichero rc.conf(5):
jail_enable="YES" # Ponga NO si quiere desactivar el arranque de jaulas
jail_list="www
" # Lista de nombres de jaulas separados por espacios
Tendrá que añadir parámetros específicos para cada jaula al fichero rc.conf(5):
jail_www
_rootdir="/usr/jail/www" # directorio raiz de la jaula jail_www
_hostname="www
.example.org" # nombre de máquina de la jaula jail_www
_ip="192.168.0.10" # dirección IP de la jaula jail_www
_devfs_enable="YES" # montar devfs en la jaula jail_www
_devfs_ruleset="www_ruleset
" # reglas a aplicar a devfs dentro de la jaula
El arranque de jaulas por omisión que se
configure en rc.conf(5) ejecutará el script
/etc/rc
de la jaula y asumirá
que es un sistema virtual completo. Si se trata de una
jaula de servicio el comando de arranque por omisión
tendrá que cambiarse configurando la opción
jail_
según convenga.nombredejaula
_exec_start
Si quiere consultar la lista completa de opciones consulte la página de manual rc.conf(5).
Puede arrancar o parar a mano una jaula mediante el script
/etc/rc.d/jail
siempre y cuando la jaula
aparezca en rc.conf
:
#
/etc/rc.d/jail start www
#
/etc/rc.d/jail stop www
De momento no hay una forma limpia de apagar una jaula (jail(8)) debido a que los comandos que se usan normalmente para producir un apagado limpio del sistema no pueden usarse dentro de una jaula. La mejor forma de parar una jaula es ejecutar el siguiente comando desde dentro de la propia jaula o bien mediante jexec(8) desde fuera:
#
sh /etc/rc.shutdown
Para más información consulte la página de manual jail(8).
Puede descargar éste y muchos otros documentos desde ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/
Si tiene dudas sobre FreeBSD consulte la
documentación antes de escribir a la lista
<questions@FreeBSD.org>.
Envíe sus preguntas sobre la documentación a
<doc@FreeBSD.org>.