Viernes Tecnicos Virtualizacion Ldom Xen Zonas Brandz

Post on 27-Jun-2015

1.616 views 2 download

Transcript of Viernes Tecnicos Virtualizacion Ldom Xen Zonas Brandz

USE IMPROVE EVANGELIZE

David Galán OrtizJosé Juan Mora Pérez

Roger Jordan

http://es.opensolaris.org

OpenSolaris Virtualización

Bienvenidos a los viernes técnicos!!

http://es.opensolaris.org/ViernesTec/

Virtualización

Introducción

• Particiones físicas.La máquina se puede dividir en distintos dominios.

• Máquinas virtuales.En una máquina podemos tener corriendo varias máquinas virtuales con distintos SO.

• Virtualización de SO.Un SO genera varias imágenes de el mismo para dar la impresión de tener varios SO distintos.

• Control de recursos.Solaris dispone de una serie de herramientas para controlar los recursos del sistema. CPU, memoria, tiempo de CPU

Introducción

• Consolidación de servidores.

• Entornos de pruebas.

• Despliegue rápido de entornos de desarrollo.

• Aprovechar los recursos disponibles.

• Seguridad

Objetivos

OpenSolaris LDom

Logical Domain consiste en una solución intermedia, entre la zonas y los dominios hardware. Podemos asignar una serie de recursos HW de la máquina, para que sean compartidos o no, entre varios dominios, cada uno de estos dominios con su propio SO. LDoms se basa una capa intermedia entre el HW y el SO, dicha capa es conocida por el nombre de Hypervisor. El Hypervisor permite que se pueda crear varias máquinas virtuales, compartiendo el HW disponible en el sistema. Con esta nueva capa, el SO no necesita conocer qué HW está disponible en la máquina, siendo el Hypervisor el que realiza todo el trabajo.

LDoms, actualmente solo está soportado en las siguiente plataformas:

•Sun Fire T1000 / T2000 Server. •Netra T2000 Server. •Netra CP3060 Blade. •Sun Blade T6300 Server Module.

Logical Domains

ArquitecturaNo vamos a emplear mucho tiempo para describir la arquitectura de la tecnología de LDoms, ya que existen varios documentos que la explican perfectamente:

•The Beginner’s Guide to Logical Domains. •Logical Domains Administration Guide

Pero aunque no vamos a entrar en profundidad, vamos a dar una serie de pinceladas, que nos permitirán ejecutar los ejemplos del artículo. Existen 4 componentes principales:

•Control Domain, es el encargado de gestionar los distintos dominios lógicos. •Service Domain, se encarga de gestionar los dispositivos virtuales, tales como los discos. •I/O Domain, se encarga de gestionar la entrada/salida de los dispositivos. •Guest Domain, es cada uno de los dominios lógicos que creemos.

ArquitecturaUna vez que configuremos el Control Domain, podremos crear distintos dominios lógicos (Guest Domain), a cada uno de estos dominios, podemos asignarles distintos tipos de dispositivos como son:

•vcpu. •mem. •vnet, virtual network devide. •vsw, virtual network switch. •vdc, virtual disk client. •vds, virtual disk server.

Por lo tanto, un dominio lógico podrá disponer de un número de CPUs virtuales, una cantidad de memoria, una o varias interfaces virtuales de red y uno o varios discos virtuales.

InstalaciónAhora podemos continuar con la instalación de LDoms. Hemos descomprimido el paquete con la última versión, actualmente es la 1.0.

root@t1000 # pwd /export/home/jjmora/LDOM/LDoms_Manager-1_0-RR root@t1000 # ls Install Legal Product README root@t1000 # ./Install/install-ldm Welcome to the LDoms installer.

You are about to install the domain manager package that will enable you to create, destroy and control other domains on your system. Given the capabilities of the domain manager, you can now change the security configuration of this

Solaris instance using the Solaris Security Toolkit.

Select a security profile from this list: l) Hardened Solaris configuration for LDoms (recommended)m) Standard Solaris configurationn) Your custom-defined Solaris security configuration profile

InstalaciónUna vez terminado el proceso de instalación, reiniciamos la máquina. Cuando la máquina haya terminado de arrancar, comprobamos que LDoms está levantado.

root@t1000 # svcs | grep ldm online 20:42:42 svc:/ldoms/ldmd:default root@t1000 # root@t1000 # svcs -l svc:/ldoms/ldmd:default fmri svc:/ldoms/ldmd:default nombre Logical Domain Manager habilitada Verdadero estado online next_state none state_time Sat Aug 18 20:42:42 2007 logfile /var/svc/log/ldoms-ldmd:default.log reiniciador svc:/system/svc/restarter:default contract_id 40 dependency require_all/none svc:/system/filesystem/local (online) root@t1000 #

Controlador de dominioUna vez que hemos instalado el paquete de LDoms, vamos a crear los servicios que gestionará el controlador de dominio. Lo primero es crear un vds, el servicio para la gestión de los discos virtuales y se asignará al controlador primary.

root@t1000 # /opt/SUNWldm/bin/ldm add-vds primary-vds0 primary

Creamos las consolas virtuales que el controlador de dominio asignará a los distintos dominios lógicos.

root@t1000 # /opt/SUNWldm/bin/ldm add-vcc port-range=5000-5100 primary-vcc0 primary

Añadimos un virtual switch, para los distintos interfaces virtuales tengan acceso a la red.

root@t1000 # /opt/SUNWldm/bin/ldm add-vsw net-dev=bge0 primary-vsw0 primary

Asignamos una MAU (Modular Arithmetic Units) al controlador de dominios.

root@t1000 # /opt/SUNWldm/bin/ldm set-mau 1 primary

Controlador de dominioDe todas las CPUs del sistema, dedicaremos 4 al dominio primary.

root@t1000 # /opt/SUNWldm/bin/ldm set-vcpu 4 primary

Asignamos 1024MB de memoria al dominio primary. root@t1000 # /opt/SUNWldm/bin/ldm set-memory 1024m primary Ahora debemos guardar los cambios en un fichero de configuración. Para ver los ficheros disponibles podemos ejecutar el comando: root@t1000 # ldm list-spconfig factory-default [current]root@t1000 # ldm add-spconfig config_01 root@t1000 # root@t1000 # ldm list-spconfig factory-default [current] config_01 [next] root@t1000 #

Controlador de dominioRebotamos la máquina para que el controlador de dominios acepte los nuevos cambios que hemos introducido.

root@t1000 # init 6

Una vez que la máquina haya arrancado, podemos comprobar los nuevos parámetros que hemos añadido al controlador de dominios primary.

root@t1000 # ldm list-domain Name State Flags Cons VCPU Memory Util Uptime primary active -t-cv SP 4 1G 0.1% 4m root@t1000 #

Dominio LógicoLa creación de un dominio lógico (Guest Domain) es bastante sencilla, tendremos que añadir el nuevo dominio, asignarle los recursos que deseemos y realizar un bind.

root@t1000 # ldm add-domain t1000-01 root@t1000 # ldm add-vcpu 4 t1000-01 root@t1000 # ldm add-memory 312M t1000-01 root@t1000 # ldm add-vnet vnet1 primary-vsw0 t1000-01

Con los comandos anteriores, hemos creado el dominio t1000-01, le hemos asignado 4 CPUs, 312MB de memoria y vamos a utilizar la interfaz de red definida, en el controlador de dominios primario, con el identificador primary-vsw0. El siguiente paso será crear el fichero de 500MB que asignaremos al dominio lógico para que lo utilice como disco de sistema.

root@t1000 # mkfile 500M /var/LDOM/ldom_bootdisk.img root@t1000 # root@t1000 # ldm add-vdsdev /var/LDOM/ldom_bootdisk.img vol1@primary-vds0 root@t1000 # ldm add-vdisk vdisk1 vol1@primary-vds0 t1000-01

Dominio LógicoYa hemos asignado CPUs, memoria, un disco y una interfaz de red al dominio lógico t1000-01, ahora solo tenemos que arrancar el nuevo dominio.

root@t1000 # ldm bind-domain t1000-01 root@t1000 # ldm list-domain Name State Flags Cons VCPU Memory Util Uptime primary active -t-cv SP 4 1G 0.3% 1h 4m t1000-01 bound ----- 5000 4 312M

root@t1000 # ldm start-domain t1000-01 LDom t1000-01 started root@t1000 # ldm list Name State Flags Cons VCPU Memory Util Uptime primary active -t-cv SP 4 1G 0.2% 1h 5m t1000-01 active -t--- 5000 4 312M 100% 6s

Con el parámetro start podemos arrancar el nuevo dominio lógico.

Dominio LógicoEl nuevo dominio lógico t1000-01 tiene asignado el puerto de consola 5000, podemos acceder a la consola del dominio t1000-01, utilizando el comando telnet.

root@t1000 # telnet localhost 5000 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'.

Connecting to console "t1000-01" in group "t1000-01" .... Press ~? for control options ..

{0} ok {0} ok show-devs /cpu@3 /cpu@2

Dominio LógicoVamos a ver de forma rápida cómo podemos añadir más CPUs a un dominio lógico. El dominio t1000-01 actualmente tiene 4 CPUs, con el comando ldm add-vcpu añadiremos 6 CPUs más.

root@t1000 # ldm stop-domain t1000-01 LDom t1000-01 stopped root@t1000 # ldm add-vcpu 6 t1000-01 root@t1000 # ldm list Name State Flags Cons VCPU Memory Util Uptime primary active -t-cv SP 4 1G 0.5% 1d 21h 4m t1000-01 bound ----- 5001 10 312M

Dominio LógicoConectamos a la consola del LDom t1000-01

root@t1000 # telnet localhost 5001 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'.

# prtdiag System Configuration: Sun Microsystems sun4v Sun Fire(TM) T1000 Memory size:

312 Megabytes CPU CPU Location CPU Freq Implementation Mask ------------ ----- -------- ------------------- ----- MB/CMP0/P0 0 1000 MHz SUNW,UltraSPARC-T1 MB/CMP0/P1 1 1000 MHz SUNW,UltraSPARC-T1 MB/CMP0/P2 2 1000 MHz SUNW,UltraSPARC-T1 MB/CMP0/P3 3 1000 MHz SUNW,UltraSPARC-T1 MB/CMP0/P4 4 1000 MHz SUNW,UltraSPARC-T1 MB/CMP0/P5 5 1000 MHz SUNW,UltraSPARC-T1 MB/CMP0/P6 6 1000 MHz SUNW,UltraSPARC-T1 MB/CMP0/P7 7 1000 MHz SUNW,UltraSPARC-T1 MB/CMP0/P8 8 1000 MHz SUNW,UltraSPARC-T1 MB/CMP0/P9 9 1000 MHz SUNW,UltraSPARC-T1

OpenSolaris xVM

Introducción

• Qué es xVM

• Arquitectura

• Usando xVM

Qué es xVM•Consiste en un port de OpenSolaris para que pueda correr en Xen• Permite ejecutar Windows, Linux y Solaris como SO invitados.• Solo corre en sistemas x86/x64.• HVM y PVM.• Migración de “invitados” en caliente.• Disponible a partir de build 75 SXCE• Soporte para Intel VT-x.

Arquitectura

• Hypervisor

• dom0

• domU

• Network

• Disco

Arquitectura

Arquitectura: Hypervisor

• Es la capa encargada de controlar el HW.• Xen utiliza una VM (dom0) para que controle el acceso al HW.• Los invitados (domU) realizan todas sus peticiones a dom0• Los domU pueden estar virtualizados:

• HVM.• PVM (Paravirtualización)

Arquitectura: dom0

• Este es el dominio de control.• Podemos gestionar el resto de dominios de usuarios domU.• Gestiona el acceso al HW.• Permite exportar a los domU tanto discos físicos como ficheros• Si este dominio tiene algún problema afecta a todos los invitados.

Arquitectura: domU

• Son los dominios invitados.

• Son máquinas virtuales que ejecutan su propio SO.

• Existen dos tipos de domU:

• HVM, en SO invitado no sabe que está siendo virtualizado y por lo tanto no necesita de ninguna modificación, este tipo lo usaremos para Windows.•PVM, el SO invitado sabe que está siendo virtualizado. No todos los SO pueden ejecutar en esta modalidad.

Arquitectura: Network

Arquitectura: Disco

El dom0 puede exportar almacenamiento a los domU:

• Dispositivos físicos.disk = [‘phy:dispositivo_dom0, disp_domU, rw’]

• Ficheros

disk = [‘file:file_dom0, disp_domU, rw’]

• NFS

Usando xVM

• ¿ Disponemos de xVM ?

• Herramientas• virt-install• xm• virsh• virt-manager

• HVM

• Paravirtualización

¿ Disponemos de xVM ?• xVM está disponible desde la build 75 de Solaris Express

• Existen servicios en SMF asociados a xVMbash-3.2# svcs | grep xvmonline 21:33:49 svc:/system/xvm/store:defaultonline 21:33:53 svc:/system/xvm/xend:defaultonline 21:33:53 svc:/system/xvm/console:defaultonline 21:33:55 svc:/system/xvm/domains:default

•Podemos comprobar que existe un kernel con soporte para Xen

bash-3.2# cd /boot/bash-3.2# lsacpi grub solaris x86.miniroot-safe xen.gzamd64 platform solaris.xpm xen-syms

GRUB para xVM Ejemplo del fichero /boot/grub/menu.lst

#---------- ADDED BY BOOTADM - DO NOT EDIT ----------title Solaris Express Community Edition snv_78 X86kernel$ /platform/i86pc/kernel/$ISADIR/unix module$ /platform/i86pc/$ISADIR/boot_archive#---------------------END BOOTADM--------------------#--------------------- xVM 64bits--------------------title Solaris xVMkernel$ /boot/$ISADIR/xen.gzmodule$ /platform/i86xpv/kernel/$ISADIR/unix /platform/i86xpv/kernel/$ISADIR/unixmodule$ /platform/i86pc/$ISADIR/boot_archive#--------------------- xVM 32bits--------------------title Solaris xVM 32bitskernel$ /boot/xen.gzmodule$ /platform/i86xpv/kernel/unix /platform/i86xpv/kernel/unixmodule$ /platform/i86pc/boot_archive

HerramientasLa gestión de los domU la podemos realizar con 4 herramientas:

• virt-installEste script que nos permite instalar nuevos domUs

• virshEs una shell para la gestión del domU

• xmNos permite ciertas operaciones desde línea de comando

• virt-managerEs un entorno gráfico.

Directorios• /var/log/xen

Se almacenan los logs

•/var/lib/xend/domainsExiste un directorio por cada dominio.

•/var/xen/dumpAlmacena los coredump de los dominios.

Creando un domUPara la creación de un nuevo domU, podemos emplear el script virt-install

bash-3.2# virt-install -n centos_x64 -r 512 \ -f /export/home/xen/CentOS-5.1/centos_51_x64_2.img -s 5 \--nographics --paravirt --os-type=linux \-l /export/home/root/Desktop/CentOS-5.1-x86_64-bin-DVD.iso

-n nombre_domU-r memoria-f fichero de destino-s tamaño del fichero de destino--paravirt el nuevo domU será paravirtualizado-l ISO que vamos a utilizar para instalar

Arrancando un domUUna vez creado el nuevo domU, podemos arrancarlo con los comandos vxm o virtshbash-3.2# xm start centos_x64bash-3.2# xm listName ID Mem VCPUs State Time(s)Domain-0 0 774 2 r----- 389.4centos_x64 30 512 1 -b---- 39.0

Parando un domUPodemos parar el domU de varias formas:• pause• destroyEjemplo de cómo parar un domU:

bash-3.2# xm listName ID Mem VCPUs State Time(s)Domain-0 0 774 2 r----- 389.4centos_x64 30 720 2 -b---- 39.0bash-3.2# xm destroy centos_x64bash-3.2# xm listName ID Mem VCPUs State Time(s)Domain-0 0 774 2 r----- 391.7centos_x64 512 1 0.0

Borrando un domUPara borrar un domU, necesitamos que primero esté parado, posteriormente podemos utilizar el subcomando delete :

Ejemplo de cómo eliminar un domU:bash-3.2# xm listName ID Mem VCPUs State Time(s)Domain-0 0 774 2 r----- 391.7centos_x64 512 1 0.0bash-3.2#bash-3.2# xm delete centos_x64bash-3.2# xm listName ID Mem VCPUs State Time(s)Domain-0 0 774 2 r----- 392.6bash-3.2#

Asignando CPU a un domUAl crear el domU se le asigna un número de CPUs, con el comando xm podemos cambiar posteriormente el número de CPUs.bash-3.2# xm listName ID Mem VCPUs State Time(s)Domain-0 0 774 2 r----- 389.4centos_x64 30 512 1 -b---- 39.0bash-3.2# xm vcpu-set centos_x64 2bash-3.2# xm listName ID Mem VCPUs State Time(s)Domain-0 0 774 2 r----- 389.4centos_x64 30 512 2 -b---- 39.0

Necesitamos reiniciar el domU para que los cambios tengan efecto.

Asignando memoria a un domUAl crear el domU se le asigna una cantidad de memoria, con el comando xm podemos cambiar la cantidad de memoria asignada a un domU.bash-3.2# xm listName ID Mem VCPUs State Time(s)Domain-0 0 774 2 r----- 389.4centos_x64 30 512 1 -b---- 39.0bash-3.2# xm mem-set centos_x64 720bash-3.2# xm mem-max centos_x64 720bash-3.2# xm listName ID Mem VCPUs State Time(s)Domain-0 0 774 2 r----- 389.4centos_x64 30 720 2 -b---- 39.0

Necesitamos reiniciar el domU para que los cambios tengan efecto.

Asignando interfaz de red un domUAl crear el domU se le asigna una o varias interfaces de red, esto podemos cambiarlo con el xm :bash-3.2# xm network-attach centos_x64

Si vemos el messages del domU:

[root@trantor log]# tail -f /var/log/messages | grep devicetrantor kernel: netfront: device eth1 has flipping receive path.

No neceesitamos reiniciar el domU para que los cambios tengan efecto.

Asignando disco a un domUCreamos un fichero para la imagen en dom0.bash-3.2# dd if=/dev/zero of=discos1.dd count=100000100000+0 records in100000+0 records out

Asignamos el fichero al domU.bash-3.2# xm block-attach centos_x64 \ /export/home/xen/CentOS-5.1/discos1.dd xvdb w

Comprobamos en el domU el nuevo disco.[root@trantor log]# fdisk /dev/xvdb

Command (m for help): pDisk /dev/xvda2: 5255 MB, 5255953920 bytes255 heads, 63 sectors/track, 639 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes

Configuración de un domUPara ver la configuración de un domU, utilizamos el subcomando list del comando xm .bash-3.2# xm list centos_x64 -l(domain (domid 27) (uuid 0139bf22-829b-c825-6871-cb52ea3a9620) (name centos_x64) (bootloader /usr/lib/xen/bin/pygrub) (device (vif (mac 00:16:3e:17:b5:8b) (uuid 5dc5d8d1-3b2f-d182-8557-ef16d527d14f) ) ) (device (vbd (uname file:/export/home/xen/CentOS-5.1/centos_51_x64_1.img) (driver paravirtualised) (mode w) (dev xvda) (uuid 758bb505-3590-a507-9dd0-fc9a27e95b2c) )….

Configuración de un domUPara cambiar la configuración de un domU, de una forma rápida.

Volcamos la salida del comando:

bash-3.2# xm list centos_x64 –l > file_centos_x64.xen

Modificamos el fichero centos_config.sxp y creamos el domU.

bash-3.2# xm new -F ./file_centos_x64.xen

Pause, unpause, suspend y resumeEntre las operaciones que podemos realizar con un domU:Pausamos el domU

bash-3.2# xm pause centos_x64

Suspendemos un domUbash-3.2# xm suspend centos_x64

La diferencia es que suspend almacena en disco el estado del domU

Con el subcomando unpause y resume podemos continuar los domU pausados

bash-3.2# xm resume centos_x64

Save y restoreUn domU podemos salvarlo a disco para recuperarlo posteriormente:Salvar a disco el domU.

bash-3.2# xm save centos_x64 file_saved_domU

Cuando deseemos arrancar la imagen guardada del domU, utilizaremos restore.

bash-3.2# xm restore centos_x64 file_saved_domU

virt-managerEs una interfaz gráfica para la gestión de los dominios.

HVMCuando creamos un domU, podemos hacerlo del tipo HVM, lo que significa que SO no sabe que está siendo virtualizado.

Para poder utilizar el HVM, debemos disponer de un procesador con soporte de virtualización.

Ejemplo: Intel dispone del VT-xAMD dispone de AMD-V

ParavirtualizaciónEl kernel del SO debe ser modificado para que pueda ser virtualizado. Casi todas las versiones de Linux tienen disponen de un kernel con soporte para Xen.

[root@trantor ~]# uname –aLinux trantor 2.6.18-53.el5xen #1 SMP x86_64 x86_64 x86_64 GNU/Linux[root@trantor ~]#

OpenSolaris Zonas

USE IMPROVE EVANGELIZE

● Es una tecnología de virtualización.● Permite ejecutar varias “instancias” del sistema

operativo a la vez.● Todas las instancias se ejecutan en un único

kernel.● No existe una capa intermedia de virtualización de

hardware. Aunque algunos dispositivos si son virtuales.

● Cada una de ellas es independiente de las demás.

Introduccion a las Zonas

USE IMPROVE EVANGELIZE

Características de una Zona

La zona está identificada por un nombre y un id numérico.

Dispone de sus propios procesos init, (z)sched, etc. Cada zona dispone de los servicios necesarios

para su funcionamiento ( /proc, /dev/console, etc.) Los procesos de una zona ignoran la existencia de

los demás. La seguridad de las zonas impide que sus

procesos interactúen.

USE IMPROVE EVANGELIZE

La Zona global

Se crea cuando el sistema arranca. Su id es el 0 y su nombre es global Tiene acceso a los procesos de las demás zonas. Idealmente debería usarse solo para

administración.

Zona Global

Zona 1

Zona 2

Zona 3

USE IMPROVE EVANGELIZE

Commandos habitualeszonecfg -z zonename Crear, eliminar, reconfigurar.

zoneadm list -cv listar zonas en el sistema.Zoneadm -z zonename install Empezar la instalación de una

zona.zoneadm -z zonename boot arrancar zona.zoneadm -z zonename halt parar zona.zoneadm -z zonename reboot reiniciar zona.

zlogin zonename logearse al sistema.zlogin -C zonename Acceder a la consola de la

zona.

Consultar las páginas man respectivas para los detalles

USE IMPROVE EVANGELIZE

Pasos para la creación de una zona.• Crear la zona con el comando cfgadm.• Definir el zonepath.• Añadir la configuración adicional que

deseemos. (interfaces de red, containers, privilegios, ...)

• Crear el directorio que contendrá la zona y darle permisos 700.

• Iniciar la copia de los binarios con zoneadm.

• Logearnos a la consola y seguir el asistente para terminar la configuración.

USE IMPROVE EVANGELIZE

Ejercicio 1: Ver procesos entre zonas

Guión:1.- Arrancamos el sistema y dos zonas

adicionales.2.- Lanzamos un proceso ksh en cada una de las

zonas.3.- Comprobamos que desde cada una de las

zonas no vemos el proceso ksh de la otra.

USE IMPROVE EVANGELIZE

Ejercicio 2: Usando la Zona Global para administración.

Guión:

Ejecutamos un #pkill -9 ksh, comprobamos como los procesos de las zonas no global mueren.

USE IMPROVE EVANGELIZE

Tipos de Zonas.

Small Zone. Big Zone. BrandZ.

USE IMPROVE EVANGELIZE

Características una Small Zone.

Comparten los directorios de sistema con la zona global. (no tiene permisos para modificarlo.)

Tiene su propio /var y /etc Ocupa muy poco espacio en el disco (300MB

aprox.).

Ventajas:- Optimización de recursos

Inconvenientes:- Poca flexibilidad

USE IMPROVE EVANGELIZE

Ejercicio 3: Instalación de una Small Zone

bash-3.2# zonecfg -z viernes13viernes13: No such zone configuredUse 'create' to begin configuring a new zone.zonecfg:viernes13> createzonecfg:viernes13> set zonepath=/viernes13zonecfg:viernes13> commitzonecfg:viernes13> exitbash-3.2# mkdir /viernes13bash-3.2# chmod 700 /viernes13bash-3.2# zoneadm -z viernes13 installPreparing to install zone <viernes13>.Creating list of files to copy from the global zone.

USE IMPROVE EVANGELIZE

Características una Big Zone

Tiene sus propios directorios de sistema. No comparte ningún directorio con la global zone.

Ventajas:- Flexibilidad.

Inconvenientes:- No es tan optimo desde el punto de vista de recursos

USE IMPROVE EVANGELIZE

Ejercicio 4: Instalación de una Big Zonebash-3.2# zonecfg -z bigzonebigzone: No such zone configuredUse 'create' to begin configuring a new zone.zonecfg:bigzone> createzonecfg:bigzone> set zoneset zonename= set zonepath=zonecfg:bigzone> set zonepath=/bigzonezonecfg:bigzone> remove inherit-pkg-dir dir=/sbinzonecfg:bigzone> remove inherit-pkg-dir dir=/usrzonecfg:bigzone> remove inherit-pkg-dir dir=/platformzonecfg:bigzone> remove inherit-pkg-dir dir=/libzonecfg:bigzone> commitzonecfg:bigzone> end

USE IMPROVE EVANGELIZE

Configurando una zona

Variables de configuración #zonecfg:bigzone> set autoboot=true

Atributos #zonecfg:bigzone> add attr

Interfaces de red #zonecfg:bigzone> add net

Filesystems #zonecfg:bigzone> add fs

Control de recursos #zonecfg:bigzone> add rctl

Dispositivos #zonecfg:bigzone> add device

Dataset #zonecfg:bigzone> add dataset

USE IMPROVE EVANGELIZE

Ejercicio 5: Modificando la configuración

Guión:

Añadir red Añadir filesystem Añadir control de recursos

USE IMPROVE EVANGELIZE

Contenedores I

• Permiten limitar el consumo de recursos de cada una de las zonas.

• Se configuran usando la herramienta zonecfg.

• Permiten aumentar el nivel de seguridad, prevención DOS.

USE IMPROVE EVANGELIZE

Contenedores II

• Set max-lwps, max-sem-ids, max-shm-memory, limitpriv, etc

• Capped-cpu (ncpus, podemos asignar fracciones de cpu)

• Capped-memory (locked, swap, physical)

• Dedicated-cpu (ncpus)

USE IMPROVE EVANGELIZE

Ejercicio 6: Limitando los recursos

Guión:

Probar fork-bomb (perl -e 'fork while 1;') Agotar la memoria Llenar tmp etc.

USE IMPROVE EVANGELIZE

Seguridad I

Hay tareas que no está permitido realizar dentro de una zona:

Modificar interfaces de red o tablas de rutas. Acceder al dispositivo /dev/kmem. Rebotar o apagar todo el sistema. Cargar módulos personalizados del kernel.

USE IMPROVE EVANGELIZE

Seguridad II

• La seguridad en OpenSolaris es granular basado en privilegios, en contra del todo o nada del unix tradicional.

• Los procesos dentro de una zona no disponen de todos los privilegios, para evitar que puedan interactuar con los de otras.

• Ni siquiera el usuario root de una zona (id=0) tiene todos los privilegios

USE IMPROVE EVANGELIZE

Seguridad III

• La suma de privilegios más la configuración de la zona permitiendo el acceso solo a los recursos necesarios es la que garantiza la seguridad de esta.

• El objetivo no es engañar al usuario humano, sino impedir que los procesos de distintas zonas interactúen.

USE IMPROVE EVANGELIZE

Ejercicio 7: Seguridad

Guión:

Ejecutar ppriv en la zona global y en la zona1. Añadir privilegios para permitir el uso de

dtrace (set limitpriv="default,dtrace_proc,dtrace_user") Tratar de asignarnos el privilegios para ver

procesos de otras zonas (set limitpriv="default,priv_proc_zone")

Cualquier trastada que se le ocurra a la audiencia.

USE IMPROVE EVANGELIZE

Performance• Las distintas zonas comparten kernel,

no hay tareas duplicadas (callout table).

• Las páginas de memoria de texto (binario y librerías) son compartidas por todas las zonas.

• La cache de nombres de directorio, DNCL, es compartida entre todas las zonas.

USE IMPROVE EVANGELIZE

Ejercicio 8: Performance

Guión:

Comprobar el estado de la memoria tras sucesivos arranques de zonas.

USE IMPROVE EVANGELIZE

Procesos de una Zona I

Zoneadmd Crear las estructuras del kernel necesarias y iniciar un proceso

zsched. Configurar el control a los recursos de dicha zona (como pools

de CPU, memoria o privilegios). Configurar los dispositivos de la zona con el comando

devfsadmd. Crear y destruir las interfaces de red virtuales. Montar los filesystems. Proporcionar un servidor de consola para el comando

zconsole. Ejecutar el proceso init de la zona. Proporcionar un Door Server, los clientes como el zoneadm o

el propio kernel se conectan a el para enviar mensajes de cambio de estado a la zona como halt, reboot, ...

USE IMPROVE EVANGELIZE

Procesos de una Zona II

Zsched

Es el padre de todos los threads del kernel de su zona. Lanza el proceso init de la zona cuando arranca.

USE IMPROVE EVANGELIZE

Ejercicio 9: Verificando procesos

Guión:

Lanzamos un ps para comprobar los procesos ejecutándose en el sistema.

OpenSolaris BrandZ

USE IMPROVE EVANGELIZE

BrandZ I

Permite ejecutar binarios no nativos en un kernel OpenSolaris.

Los binarios deben tener formato ELF El proyecto está aun en desarrollo Actualmente funciona de forma estable

RHEL 3, y CentOS 3.

USE IMPROVE EVANGELIZE

BrandZ II

Dado que el formato de los ejecutables de Linux y OpenSolaris es el mismo (ELF) idealmente deberíamos poder procesarlos sin más, sin embargo estos esperan unos servicios por parte del kernel, a los que suelen acceder mediante llamadas al sistema que, lógicamente, son distintas en ambos S.O.. En el caso de Linux el problema va incluso un paso más allá, ya que existen diferencias entre las distintas distribuciones dependiendo del nivel de kernel y de la versión de glibc.

USE IMPROVE EVANGELIZE

BrandZ III: Técnica de interposición

Se crea una macro que captura los puntos de entrada de un proceso en el kernel ( system calls, tratamiento de señales, etc)

Antes de ser ejecutados por el kernel son tratados por un módulo específico que hace de traductor.

Una vez procesados se entregan de nuevo a dicho módulo que reformatea la salida a lo que espera el proceso.

USE IMPROVE EVANGELIZE

BrandZ IV: Ciclo de vida de un proceso

λ El proceso Linux ejecuta la interrupción 80. La macro BRAND_CALLBACK() comprueba si la

interrupción tiene origen en un Brandz. Opensolaris pasa el control del thread al módulo específico

para brandz. El módulo lx lanza la librería de emulación. Dicha librería modifica la llamada al sistema para que sea

compatible con OpenSolaris. El kernel de OpenSolaris procesa la llamada y devuelve la

salida a la librería. Otra vez se realizan las operaciones oportunas, ahora para

adaptar la salida a lo que espera el proceso Linux. La librería devuelve el resultado al proceso.

USE IMPROVE EVANGELIZE

Ejercicio 10: Instalación Brandz

Guión:

# zonecfg -z linuxlinux: No such zone configuredUse 'create' to begin configuring a new zone.zonecfg:linux> create -t SUNWlxzonecfg:linux> set zonepath=/linux-zonezonecfg:linux> commitzonecfg:linux> exit# mkdir /linux-zone# chmod 700 /linux-zonebash-3.2# zoneadm -z linux install -d /centos_fs_image.tarInstalling zone 'linux' at root directory '/linux-zone'

USE IMPROVE EVANGELIZE

<OpenSolaris Hispano>http://es.opensolaris.org

Lista de distribuciónhttp://mail.opensolaris.org/mailman/listinfo/ug-sposug