Jails: virtualización light Gabriel Astudi!o Muñoz Encuentro Linux 2009 1
Resumen Contexto de la charla. Descripción del problema. Soluciones existentes. Jails. Descripción, uso y configuración. Demostración práctica. 2
Contexto... Sistema Operativo 3
Contexto... Sistema Operativo 4
5
Mi motivación: Toda herramienta existe porque soluciona un problema 6
Cuál es el problema? Un posible escenario es el siguiente: IP_1 HW "1" + Conjuntos de Paquetes A IP_2 HW "2" + Conjuntos de Paquetes B IP_N HW "N" + Conjuntos de Paquetes N Obviamente, los conjuntos de paquetes son incompatibles entre sí 7
Cuál es el problema? Un posible escenario es el siguiente: IP_1 HW "1" + Conjuntos de Paquetes A IP_2 HW "2" + Conjuntos de Paquetes B IP_N HW "N" + Conjuntos de Paquetes N Cada máquina tiene un costo asociado 8
Cuál es el problema? Un posible escenario es el siguiente: IP_1 HW "1" + Conjuntos de Paquetes A Y el dinero no cae del cielo IP_2 HW "2" + Conjuntos de Paquetes B IP_N HW "N" + Conjuntos de Paquetes N 9
Cómo solucionarlo? Una solución podría ser: IP_1 HW "1" + Conjuntos de Paquetes A Hardware IP_2 HW "2" + Conjuntos de Paquetes B Virtualización Máq. 1 Máq. N IP_N HW "N" + Conjuntos de Paquetes N Red LAN 10
Cómo solucionarlo? IP_1 HW "1" + Conjuntos de Paquetes A Hardware IP_2 HW "2" + Conjuntos de Paquetes B Virtualización Máq. 1 Máq. N IP_N HW "N" + Conjuntos de Paquetes N Red LAN Nivel de SO Paravirtualización Emulación HW Solaris Containers Virtuozzo Linux-Vserver Jails FreeBSD Xen User Mode Linux VMware QEMU VirtualBox 11
Jails (FreeBSD) 12
Jails Herramiento nativa de FreeBSD Virtualización a nivel de SO Desde FreeBSD 4.0 (año 2000) Son réplicas del sistema principal: Independientes entre sí (Memoria, FS y Red) Cada jaula se identifica por su: Jail ID (JID) IP nombre Ubicación dentro del FS del host 13
Estructura: Acceso a la red Cada jaula tiene asignada una IP. Servidor FreeBSD Son IP virtuales de la interfaz de red del Servidor. Jail 1 Jail N Red LAN 14
Estructura: Acceso a la red Cada jaula tiene asignada una IP. Servidor FreeBSD Son IP virtuales de la interfaz de red del Servidor. Jail 1 Jail N También se pueden asociar a interfaces reales. Red LAN 15
Estructura: Sistema de archivos Las jaulas son copias en miniatura del sistema etc/ etc/ base. dev/ dev/ usr/ usr/ El procedimiento de creación es similar a jails/ jail1/ 10.0.2.20/24 actualizar el sistema operativo. Parecido a realizar un jailn/ etc/ dev/ usr/ R e d L A N chroot a cada jaula. 10.0.2.21/24 10.0.2.10/24 16
Limitaciones jail 1 jail 2 Procesos Procesos jail jail # ifconfig em0... # route add -net... make buildkernel jail jail # mount... # tcpdump... jail # hostname... 17
y cómo se usan? Por omisión, están los siguientes comandos: jail jls jexec enjaula un proceso y todos sus hijos. # jail <ruta_jail> <nombre> <ip> <cmds> 18
y cómo se usan? Por omisión, están los siguientes comandos: jail jls Muestra un lista de las jaulas activas jexec 19
y cómo se usan? Por omisión, están los siguientes comandos: jail jls jexec Permite ejecutar un comando dentro de una determinada jaula #jexec [-u user -U user] jid cmd Servidor FreeBSD Jail 1 Jail N 20 Red LAN
Creación Inicialización Configuración 21
Método de creación Manual de FreeBSD: mkdir /usr/jails/jaula1 cd /usr/src make buildworld make installworld DESTDIR=/usr/jails/jaula1 make distribution DESTDIR=/usr/jails/jaula1 22
Método de creación Manual de FreeBSD: mkdir /usr/jails/jaula1 cd /usr/src Directorio de la Jaula make buildworld make installworld DESTDIR=/usr/jails/jaula1 make distribution DESTDIR=/usr/jails/jaula1 23
Método de creación Manual de FreeBSD: Es necesario tener instalada las fuentes del sistema (~500[MiB]) mkdir /usr/jails/jaula1 cd /usr/src make buildworld make installworld DESTDIR=/usr/jails/jaula1 make distribution DESTDIR=/usr/jails/jaula1 24
Método de creación Manual de FreeBSD: mkdir /usr/jails/jail1 cd /usr/src make buildworld Aprox. 2[horas] Aprox. 5[min] make installworld DESTDIR=/usr/jails/jail1 make distribution DESTDIR=/usr/jails/jail1 25 Aprox. 30[seg]
Método de creación etc/ / dev/ dev/ Manual de FreeBSD: usr/ jails/ mkdir /usr/jails/jail1 cd /usr/src jail1/ Jaula 1 etc/ proc/ IP Alias make buildworld make installworld DESTDIR=/usr/jails/jail1 make distribution DESTDIR=/usr/jails/jail1 26
Iniciar una jaula: pasos previos Antes de iniciar una jaula, es necesario: 1) configurar una IP adicional ifconfig em0 alias 192.168.56.20/24 2) Verificar que los servicios del host escuchen en la IP principal. 27
Iniciar una jaula: pasos previos Antes de iniciar una jaula, es necesario: 3) montar el FS dev y proc en el / etc/ Jaula 1 etc/ directorio respectivo dentro de la jaula mount -t devfs devfs /usr/jails/jail1/dev dev/ usr/ jails/ jail1/ dev/ proc/ usr/ mount -t procfs procfs /usr/jails/jail1/proc IP Alias 28
Iniciar una jaula Iniciar por primera vez la jaula, según la sintaxis: jail <ruta_jaula> <nombre_jaula> <ip_alias> <cmd> jail /usr/jails/jail1 jaula_1 192.168.56.20 /csh / Jaula 1 etc/ etc/ dev/ usr/ jails/ dev/ usr/ IP Alias jail1/ 29
Iniciar una jaula Una vez iniciada, jugar un rato. Después, hacer algo más o menos importante, como cambiar la contraseña de root y crear una cuenta de administración. Finalizar la jaula (logout, CTRL+D, etc) 30
Funcionará???? 31
Antes de seguir Qué es lo que se ha hecho? Crear el sistema de arhivos para la jaula, el cual va estar bajo chroot. Crear una conexión desde la jaula hacia la red. Modificar y crear las cuentas de administración del nuevo sistema. 32
Antes de seguir Qué es lo que se ha hecho? El devfs debe tener ciertas restricciones para las jaulas. Si son muchas jaulas, el método de inicio mostrado no escala. Lo relativo al devfs y al inicio de la jaula (vía jail(8)) se puede delegar al SO vía script de inicio. 33
Antes de seguir Qué falta? Tener un sistema independiente Que se inicie en tiempo de boot, con las herramientas del SO. Que tenga los servicios básicos de conectividad. Aplicar reglas de seguridad al devfs. 34
Pasos finales: Modificación de /etc/rc.conf Permitir inicio de las jaulas en el boot del sistema: jail_enable="yes" jail_list="jaula1 jail_devfs_ruleset= reglas_jaulas ifconfig_em0_alias0="inet 192.168.56.20 netmask 255.255.255.0" jail_jaula1_rootdir="/user/jails/jaula1" jail_jaula1_hostname="proteus" jail_jaula1_ip="192.168.56.20" / Jaula 1 jail_jaula1_devfs_enable="yes" jail_jaula1_procfs_enable="yes" etc/ etc/ dev/ usr/ jails/ dev/ usr/ IP Alias jail1/ 35
Pasos finales: Modificación de /etc/rc.conf Permitir inicio de las jaulas en el boot del sistema: jail_enable="yes" jail_list="jaula1 jail_devfs_ruleset= reglas_jaulas Identificadores de las Jaulas que se inician en el boot. ifconfig_em0_alias0="inet 192.168.56.20 netmask 255.255.255.0" jail_jaula1_rootdir="/user/jails/jaula1" jail_jaula1_hostname="proteus" jail_jaula1_ip="10.0.2.20" jail_jaula1_devfs_enable="yes" jail_jaula1_procfs_enable="yes" 36
Pasos finales: Modificación de /etc/rc.conf Permitir inicio de las jaulas en el boot del sistema: jail_enable="yes" jail_list="jaula1 jail_devfs_ruleset= reglas_jaulas ifconfig_em0_alias0="inet 192.168.56.20 netmask 255.255.255.0" jail_jaula1_rootdir="/user/jails/jaula1" jail_jaula1_hostname="proteus" jail_jaula1_ip="10.0.2.20" jail_jaula1_devfs_enable="yes" jail_jaula1_procfs_enable="yes" Configuración de una jaula 37
Pasos finales: Modificación de /etc/rc.conf Iniciar SSHD cuando la jaula se inicie: sshd_enable="yes" / Jaula 1 etc/ etc/ dev/ usr/ jails/ dev/ usr/ IP Alias jail1/ 38
Por último, iniciar la jaula Finalmente, iniciar la(s) jaula(s) vía script de inicio /etc/rc.d/jail start stop [id1 id2...] Comprobar que efectivamente la jaula esté arriba : 39
Funcionará???? 40
Tareas posteriores Hacer más jaulas... Opción 1 make installworld DESTDIR=/usr/jails/otra_jaula make distribution DESTDIR=/usr/jails/otra_jaula Jaula totalmente nueva, tiempo aprox ~5[min] Opción 2: Clonar otra existente. tiempo aprox: DEPENDE mkdir /jaula/destino cd /jaula/origen && tar -cpf -. tar -C /jaula/destino -xpf - 41
Tareas posteriores Demostración práctica clonación Copiar la estructura de una jaula. Crear otro IP alias. Modificar archivo /etc/rc.conf en el host principal. Iniciar la nueva jaula. 42
Conclusiones Jails es otra opción de virtualización. Beneficios: No requiere instalar softwares adicionales Si sabe como administrar FreeBSD, sabe administrar jaulas. Es simple y rápido. Facilita la delegación de administración. Contras: todo lo demás :) 43
Dónde buscar http://www.freebsd.org Ejemplos de uso: ACM SIGCOMM Computer Communications Review, Volume 33, Nº 3, Julio 2003 Departamento de Computación, UV. Contacto: Marco Aravena (marco.aravena@uv.cl) Departamento de Electrónica, USM. Contacto: Yo (gabriel.astudillo@usm.cl) 44
Gracias por su atención. 45