Dado lo dificil y desconcertante de la tarea de administrar sistemas se han ido desarrollando poderosas herramientas con el fin de hacer la vida del administrador más sencilla. Dichas herramientas suelen facilitar cierto tipo de mejoras en la instalación, configuración o mantenimiento de los sistemas. Una de las tareas que se espera que cumpla un administrador de sistemas es la configuración adecuada de la seguridad, de modo que pueda dar el servicio para el que se ha destinado sin que pueda verse comprometido.
Una de las herramientas disponibles para mejorar los niveles de seguridad de un
sistema FreeBSD es el uso de jaulas. Las jaulas fueron introducidas en FreeBSD 4.X por
Poul-Henning Kamp <phk@FreeBSD.org>
, pero en FreeBSD 5.X sus
capacidades fueron aumentadas hasta hacer de ellas un subsistema poderoso y flexible. Su
desarrollo sigue avanzando, aumentando así su utilidad, rendimiento, fiabilidad y
seguridad.
Los sistemas tipo BSD disponen de chroot(2) desde la época de 4.2BSD. chroot(8) permite restringir el directorio raiz de un conjunto de procesos, creando un entorno seguro y separado del resto del sistema. Los procesos creados dentro de un entorno chroot no pueden acceder a ficheros o recursos ubicados fuera del mismo. Por esta razón, si un atacante logra comprometer un servicio que se ejecuta en un entorno chroot no debería automáticamente poder acceder al resto del sistema. chroot(8) es una buena herramienta para tareas sencillas que no requieran mucha flexibilidad o características complejas o muy avanzadas. Por desgracia, desde la invención de chroot se han ido encontrando muchas formas de saltarse las barreras que chroot impone y, aunque estén corregidas en las versiones más modernas del kernel de FreeBSD, era evidente que chroot(2) no era la solución ideal para ejecutar servicios con seguridad. Había que implementar un nuevo subsistema.
Este es uno de los principales motivos por los que se crearon las jaulas.
Las jaulas llevan más allá en muchos sentidos el concepto tradicional de entorno chroot(2). En un entorno chroot(2) tradicional los procesos solo ven limitada la parte del sistema de ficheros a la que pueden acceder. El resto de recursos del sistema, es decir, el conjunto de usuarios del sistema, los procesos en ejecución o el subsistema de red están compartidos entre el sistema alojado y el servidor. Las jaulas extienden este modelo virtualizando no solamente el acceso al sistema de ficheros, sino al conjunto de usuarios, al subsistema de red del kernel de FreeBSD y unas cuantas cosas más. En la Sección 15.5 se detallan diversas opciones de control exhaustivo para configurar el acceso a recursos de un entorno enjaulado.
Una jaula se caracteriza por disponer de cuatro elementos:
Un “subárbol” de directorios: el punto desde el que se entra a una jaula. Una vez dentro de la jaula un proceso no puede escapar de dicho “subárbol”. Los típicos problemas de seguridad que aparecín una y otra vez en el diseño del chroot(2) original no afectan a las jaulas de FreeBSD.
Un nombre de máquina (“hostname”), que definirá a la jaula. Las jaulas se usan principalmente para albergar servicios de red, por lo que disponer de un nombre de máquina descriptivo ayuda enormemente al administrador de sistemas.
Una dirección IP: debe asignarse a la jaula y no cambiarse durante el ciclo de vida de la jaula. La dirección IP de una jaula suele ser un alias de un interfaz de red, aunque no es imprescindible que así sea.
Un comando: La ruta de un ejecutable ubicado dentro de la jaula. La ruta es relativa al directorio raiz de la jaula, por lo que puede ser muy diferentes según el entorno.
Además, las jaulas pueden tener sus propios usuarios e incluso su propio root. Es obvio que este usuario root tiene su poder para hacer circunscrito a la jaula y, desde el punto de vista del servidor, el usuario root de la jaula no es omnipotente. El usuario root de la jaula no puede ejecutar tareas críticas fuera de la jaula (jail(8)) a la que pertenece. Más adelante, en la Sección 15.5, se dará más información sobre las restricciones del usuario root.
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>.