2024-12-26 17:16:58 +01:00
2024-12-26 17:16:58 +01:00
2024-12-26 13:39:17 +01:00
2024-12-26 17:16:58 +01:00

FreeBSD Jails implementación

Un ejemplo de implementar Jails mediante el uso de ThinJails/NullFS.

Probablemente no sea la mejor ni la manera mas eficiente de hacerlo, pero puede servir para aprender como funcionan las jails en FreeBSD.

Recuerda que la comunidad dispone de otras maneras de hacer esto: Jail Managers.

##  Detalle

Las Jails se van a apoyar en ZFS para su creacion y mantenimiento. Se va a seguir esta estructura de archivos

Base de la distribucion

El directorio donde se descarga el release de FreeBSD correspondiente que actuara como base para las jails usara el zfs slice / directorio:

zroot/jails/releases    /usr/local/jails/releases

Ejemplo:

zroot/jails                                   1.14T   384G    88K  /usr/local/jails
zroot/jails/releases                          5.47G   384G    96K  /usr/local/jails/releases
zroot/jails/releases/13.1-RELEASE             2.32G   384G  1.40G  /usr/local/jails/releases/13.1-RELEASE
zroot/jails/releases/13.2-RELEASE             1.41G   384G  1.41G  /usr/local/jails/releases/13.2-RELEASE
zroot/jails/releases/14.0-RELEASE             1.30G   384G  1.30G  /usr/local/jails/releases/14.0-RELEASE
zroot/jails/releases/14.1-RELEASE              451M   384G   451M  /usr/local/jails/releases/14.1-RELEASE

Base jails

Una vez descarado el sistema base se separa en dos partes, por un lado el "userspace" de FreeBSD en solo ReadOnly y por otro los directorios escribibiles en modo RW clonando el release anterior y dividiendo en dos partes:

zroot/jails/templates       /usr/local/jails/templates

# Parte solo lectura
zroot/jails/templates/base-$FREEBSD_RELEASE-RELEASE     /usr/local/jails/templates/base-$FREEBSD_RELEASE-RELEASE

# Parte lectura/escritura
zroot/jails/templates/skeleton-$FREEBSD_RELEASE-RELEASE     /usr/local/jails/templates/skeleton-$FREEBSD_RELEASE-RELEASE

Por ejemplo:

zroot/jails/templates                         84.5M   384G   120K  /srv/jails/templates
zroot/jails/templates/base-13.1-RELEASE       50.1M   384G  1.36G  /srv/jails/templates/base-13.1-RELEASE
zroot/jails/templates/base-13.2-RELEASE        568K   384G  1.40G  /srv/jails/templates/base-13.2-RELEASE
zroot/jails/templates/base-14.0-RELEASE        552K   384G  1.29G  /srv/jails/templates/base-14.0-RELEASE
zroot/jails/templates/base-14.1-RELEASE        232K   384G   447M  /srv/jails/templates/base-14.1-RELEASE
zroot/jails/templates/skeleton-12.1-RELEASE   4.85M   384G  4.46M  /srv/jails/templates/skeleton-12.1-RELEASE
zroot/jails/templates/skeleton-12.2-RELEASE   4.92M   384G  4.49M  /srv/jails/templates/skeleton-12.2-RELEASE
zroot/jails/templates/skeleton-13.0-RELEASE   4.78M   384G  4.34M  /srv/jails/templates/skeleton-13.0-RELEASE
zroot/jails/templates/skeleton-13.1-RELEASE   4.82M   384G  4.38M  /srv/jails/templates/skeleton-13.1-RELEASE
zroot/jails/templates/skeleton-13.2-RELEASE   4.48M   384G  4.41M  /srv/jails/templates/skeleton-13.2-RELEASE
zroot/jails/templates/skeleton-14.0-RELEASE   4.52M   384G  4.43M  /srv/jails/templates/skeleton-14.0-RELEASE
zroot/jails/templates/skeleton-14.1-RELEASE   4.42M   384G  4.42M  /srv/jails/templates/skeleton-14.1-RELEASE

Mas detalle:

# ls -lah /usr/local/jails/templates/base-14.1-RELEASE/
total 88
drwxr-xr-x  15 root wheel   24B Jun 20  2024 .
drwxr-xr-x  13 root wheel   13B Jun 20  2024 ..
-rw-r--r--   1 root wheel  1.0K May 31  2024 .cshrc
-rw-r--r--   1 root wheel  495B May 31  2024 .profile
-r--r--r--   1 root wheel  6.0K May 31  2024 COPYRIGHT
drwxr-xr-x   2 root wheel   49B Jun 20  2024 bin
drwxr-xr-x  15 root wheel   69B Jun 20  2024 boot
dr-xr-xr-x   2 root wheel    2B May 31  2024 dev
lrwxr-xr-x   1 root wheel   12B Jun 20  2024 etc -> skeleton/etc
lrwxr-xr-x   1 root wheel   13B Jun 20  2024 home -> skeleton/home
drwxr-xr-x   4 root wheel   78B Jun 20  2024 lib
drwxr-xr-x   3 root wheel    5B May 31  2024 libexec
drwxr-xr-x   2 root wheel    2B May 31  2024 media
drwxr-xr-x   2 root wheel    2B May 31  2024 mnt
drwxr-xr-x   2 root wheel    2B May 31  2024 net
dr-xr-xr-x   2 root wheel    2B May 31  2024 proc
drwxr-xr-x   2 root wheel  150B Jun 20  2024 rescue
lrwxr-xr-x   1 root wheel   13B Jun 20  2024 root -> skeleton/root
drwxr-xr-x   2 root wheel  150B Jun 20  2024 sbin
drwxr-xr-x   2 root wheel    2B Jun 20  2024 skeleton
lrwxr-xr-x   1 root wheel   11B May 31  2024 sys -> usr/src/sys
lrwxr-xr-x   1 root wheel   12B Jun 20  2024 tmp -> skeleton/tmp
drwxr-xr-x  13 root wheel   14B Jun 20  2024 usr
lrwxr-xr-x   1 root wheel   12B Jun 20  2024 var -> skeleton/var
ls -lah /usr/local/jails/templates/skeleton-14.1-RELEASE/
total 37
drwxr-xr-x   9 root wheel    9B Jun 20  2024 .
drwxr-xr-x  13 root wheel   13B Jun 20  2024 ..
drwxr-xr-x  30 root wheel  106B Jun 20  2024 etc
drwxr-xr-x   2 root wheel    2B Jun 20  2024 home
drwxr-xr-x   2 root wheel    2B Jun 20  2024 portsbuild
drwxr-x---   2 root wheel    7B May 31  2024 root
drwxrwxrwt   2 root wheel    2B May 31  2024 tmp
drwxr-xr-x   4 root wheel    4B Jun 20  2024 usr
drwxr-xr-x  24 root wheel   24B May 31  2024 var

Jails

Cuando se crea una jail se clonan el base / skeleton del release correspondiente con el nombre de la jail y se establece su fstab y su configuracion.

## Configuración host

Archivo /etc/rc.conf

## Jails
jail_enable="YES"
jail_set_hostname_allow="NO"
jail_list=""
jailsffss_enable="YES"
jail_sysvipc_allow="YES"

Archivo /etc/jail.conf

# Networking
interface = "lagg0";
ip4.addr = 192.168.50.$ip;
# Config
host.hostname = "$name.local";
path = "/usr/local/jails/services/$name";
mount.devfs;
mount.fstab = "/usr/local/jails/jail.fstab.d/$name.fstab";
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.poststop = "/sbin/umount /usr/local/jails/$name/skeleton; /sbin/umount /usr/local/jails/$name";
exec.clean;
Description
Una implementación de jails en FreeBSD
Readme 34 KiB
Languages
Shell 100%