Ezjail es una utilidad que nos ayudará a gestionar de forma mas sencilla los jails sobre FreeBSD, una caracterÃstica interesante es que utiliza una plantilla base que se comparte entre jails mediante nullfs, de este modo se reutilizará la base sin utilizar espacio adicional en disco.’, ‘Las actualizaciones realizadas en la base se aplicarán de forma automática en el resto de jails, el sistema de ports se comportará de forma análoga.
Para utilizar jails debemos crear una interfaz de loopback secundaria, con ello tendremos una red 127.0.0.0/8 totalmente aislada:
cloned_interfaces="lo1"
Con esta interfaz todas los jails podrán verse entre ellos, el primer jail será la 127.0.0.1, el siguiente la .2 y asà sucesivamente.
Instalamos ezjail:
Lo habilitamos en el arranque:
Ahora lo hacemos manualmente:
Instalamos el template base de todos los jails:
Creamos el primer jail:
Si queremos que ping funcione el jail debe utilizar raw sockets, editamos la config para permitÃrselo, solo debemos habilitar las opciones estrictamente necesarias para que el jail pueda dar servicio, el ping no lo es, pero en este ejemplo lo habilitaremos para debugear con mayor facilidad ya que se trata de nuestro primera jail:
export jail_kr0mjail_parameters="allow.raw_sockets=1"
Arrancamos el jail:
Comprobamos que haya arrancado y que la configuración de red sea correcta:
STA JID IP Hostname Root Directory
--- ---- --------------- ------------------------------ ------------------------
DR 2 127.0.0.1 kr0mjail /usr/jails/kr0mjail
2 em0|192.168.69.24
Entramos en el jail y le asignamos un password al usuario root:
Habilitamos ssh en el arranque:
Lo arrancamos manualmente:
Añadimos un usuario secundario:
Configuramos el timezone:
adjkerntz intentará ajustar la hora del sistema pero el jail no será capaz asà que lo comentamos en el crontab:
Configuramos los servidores dns:
echo “nameserver 8.8.4.4” » /etc/resolv.conf
Configuramos el /etc/hosts:
::1 localhost kr0mjail
127.0.0.1 localhost kr0mjail
Ya debemos tener acceso por ssh:
Las actualizaciones base se realizarán en el host padre mediante:
Si no es una actualización rutinaria si no una actualización de versión, primero debemos averiguar de que versión partimos:
/usr/jails/basejail/bin/sh: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, for FreeBSD 12.0 (1200086), FreeBSD-style, stripped
Luego ejecutarÃamos:
Ahora hay que terminar el update desde dentro de cada jail, dependiendo de si los usuarios/servicios del jail son de fiar o no procederemos de distinto modo.
No fiable:
Montamos el directorio /usr/src dentro de el jail:
mkdir /usr/jails/kr0mjail/usr/src
mount -t nullfs -o ro /usr/src /usr/jails/kr0mjail/usr/src
Accedemos a el jail y ejecutamos mergemaster:
cd /usr/src
mergemaster -U
exit
Desmontamos /usr/src:
Fiable:
Los ports se comparten entre jails, procedemos a actualizarlos en todos los jails de forma simultánea:
NOTA: Algunos ports necesitan ser compilados con la opción JAIL para que funcionen correctamente.
NOTA: El borrado de un jail está bugeado, deja ficheros residuales.
Borramos el jail:
Si intentamos crearlo de nuevo:
Error: A file or a non empty directory already exists at the specified jail root /usr/jails/kr0mjail.
Eliminamos el flag inmutable del directorio y lo borramos:
rm -rf /usr/jails/kr0mjail
Ezjail nos permite archivar un jail y restaurarlo en el propio host o en cualquier otro, de este modo podemos duplicar jails de forma rápida:
chflags noschg /usr/jails/kr0mjail//var/empty/
ezjail-admin archive kr0mjail
ls -la /usr/jails/ezjail_archives/
total 10
drwxr-xr-x 2 root wheel 3 Apr 25 20:46 .
drwxr-xr-x 7 root wheel 7 Apr 25 15:51 ..
-rw-r--r-- 1 root wheel 1033845 Apr 25 20:46 kr0mjail-201904251646.31.tar.gz
Podemos restaurar el archive con otro nombre:
ezjail-admin list
ezjail-admin list
STA JID IP Hostname Root Directory
--- ---- --------------- ------------------------------ ------------------------
DS N/A 127.0.0.2 kr0mjail-clone /usr/jails/kr0mjail-clone
N/A em0|192.168.69.25
DS N/A 127.0.0.1 kr0mjail /usr/jails/kr0mjail
N/A em0|192.168.69.24
Arrancamos la copia y el jail original:
ezjail-admin start kr0mjail
A modo de resumen dejo las operaciones básicas realizadas en ezjail.
Arrancar jail:
Para jail:
Deshabilitar el autoarranque:
Habilitar el autoarranque: