Etiquetadebian

Tip: Migración de servidores a Xen

xen_tipsEste es el segundo post del día relacionado con Xen ya que he estado jugando con Xen, hace tiempo que no probaba cosas. Este post se trata de un tip para poder mgirar cualquier servidor hacia Xen, no importa si está virtualizado con VMWare, si es una máquina fisica, Xen, etc etc, es una forma bastante sencilla que no tiene ninguna ciencia.

La teoría
Copiar todos los archivos (por red) de una máquina a otra manteniendo los permisos e integridad de cada fichero.

La práctica
Lo haremos en 4 sencillos pasos y haciendo uso de la herramienta rsync

Seguir leyendo

Instalar CentOS con Xen en Debian

Luego de intentar varias maneras de instalar CentOS sobre Xen y luego de varios intentos fallidos, puedo resumir todo en 5 sensillos pasos para no morir en el intento.

  1. Descargar las imágenes
  2. Descargar las siguientes imágenes (checkear si existen más nuevas):
    * https://mirror.centos.org/centos/5.3/os/i386/images/xen/vmlinuz
    * https://mirror.centos.org/centos/5.3/os/i386/images/xen/initrd.img

    Por ejemplo, dejemoslo en /tmp/

    wget https://mirror.centos.org/centos/5.3/os/i386/images/xen/vmlinuz -O /tmp/
    wget https://mirror.centos.org/centos/5.3/os/i386/images/xen/initrd.img -O /tmp/

  3. Configuración de la máquina virtual
  4. El fichero de configuración de la máquina debe ser algo como: (//modificar según requerimientos//)

    kernel=’/tmp/vmlinuz’
    ramdisk=’/tmp/initrd.img’
    extra=’text’
    maxmem=’3072′
    memory=’2048′
    vcpus=2

    disk=[
    ‘file:/vm/cpanel/root.img,hda,w’,
    ‘file:/vm/cpanel/home.img,hdb,w’,
    ‘file:/vm/cpanel/tmp_swap.img,hdc,w’,
    ]

    name=’cpanel’
    vif=[ ‘ip=200.55.200.126,mac=00:1B:CC:C3:B3:33,bridge=xenbr1’ ]

    on_poweroff = ‘destroy’
    on_reboot = ‘restart’
    on_crash = ‘restart’

  5. Preparación de discos
  6. root será nuestra partición que montaremos en /
    en home vamos a montar nuestro /home y
    tmp_swap la usaremos para montar /tmp y la swap del sistema.

    Creamos los discos:
    dd if=/dev/zero of=root.img bs=1M count=10240 #10Gb
    dd if=/dev/zero of=home.img bs=1M count=40960 #40Gb
    dd if=/dev/zero of=tmp_swap.img bs=1M count=2048 #2Gb

  7. Instalación
  8. Iniciamos la máquina virtual:
    xm create -c configuration.cfg

    Seguimos paso a paso la instalación y finalizamos.

  9. Booteo
  10. Para bootear debemos hacer una modificacion en el fichero de configuración de la máquina, la dejamos así:

    bootloader = ‘/usr/lib/xen-3.2-1/bin/pygrub’ #El path depende de la version
    extra=’text’
    maxmem=’3072′
    memory=’2048′
    vcpus=2

    disk=[
    ‘file:/vm/cpanel/root.img,hda,w’,
    ‘file:/vm/cpanel/home.img,hdb,w’,
    ‘file:/vm/cpanel/tmp_swap.img,hdc,w’,
    ]

    name=’cpanel’
    vif=[ ‘ip=200.55.200.126,mac=00:1B:CC:C3:B3:33,bridge=xenbr1’ ]

    on_poweroff = ‘destroy’
    on_reboot = ‘restart’
    on_crash = ‘restart’

    Luego iniciamos la maquina:
    xm create configuration.cfg -c

Xen: Creación y configuración de una máquina virtual (pt2)

Si la instalación y configuración de Xen resultó ser fácil, lo que mostraré a continuación es mucho más sencillo. Para instalar una máquina nueva (con Debian) debemos ejecutar el siguiente comando:

xen-create-image --hostname=xen1 --size=5Gb --swap=256Mb --ide \
--ip=192.168.0.101 --netmask=255.255.255.0 --gateway=192.168.0.1 --force \
--dir=/vm --memory=128Mb --arch=i386 --kernel=/boot/vmlinuz-2.6.26-2-xen-686 \
--debootstrap --dist=lenny --mirror=https://ftp.cl.debian.org/debian/ --passwd

Si destripamos los parámetros nos damos cuenta que le estamos asignando (en orden) el hostname, tamaño de disco duro, cantidad de swap, tipo de disco, dirección ip, netmask, gateway, el directorio donde instalarla, ram, arquitectura, kernel para usar, metodo de instalación, distribución, mirror para descargar y por último, que nos pregunte la pass de root cuando termine de instalar. Estos parametros se pueden cambiar según los requerimientos.

El archivo de configuración de las máquinas virtuales es algo como:

kernel = '/boot/vmlinuz-2.6.26-2-xen-686'
ramdisk = '/boot/initrd.img-2.6.26-2-xen-686'
maxmem = '256'
memory = '64'
root = '/dev/hda2 ro'
disk = [
'file:/vm/domains/xen01/swap.img,hda1,w',
'file:/vm/domains/xen01/disk.img,hda2,w',
]
name = 'xen01'
# Red
vif = [ 'ip=192.168.20.202,mac=00:16:3E:6F:E3:3B' ]
# Comportamiento
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'

Podemos modificar arbitrariamente las opciones segun lo que nosotros necesitemos, tambien existen más opciones que le podemos agregar, como la asignacion de X cpus, decirles que cpu usen, por ejemplo si tenemos 4 núcleos, asignarle el 1 y el 4.

vcpus = 2;
cpus = '0,3'

De esta forma le estamos asignando 2 núcleos virtuales y le estamos diciendo que use los nucleos 0 y 3.

Xen: Instalación y configuración (pt1)

Esta es la primera parte de una serie de artículos que escribiré sobre cómo configurar y usar Xen, crear y administrar máquinas virtuales, clonación y migración, asignación de procesadores, memoria y configuración de la red entre otras cosas.
Aunque soy usuario de Archlinux, los servidores que administro están bajo Debian, por lo que estos tutoriales los haré en base a esa distribución.

A continuación, una serie de instrucciones de cómo instalar y dejar corriendo Xen en la máquina servidor en sencillos pasos:

Debemos instalar el kernel correspondiente y las utilidades de xen. Lo hacemos todo con el siguiente comando:

apt-get install xm-utils-common xen-linux-system-2.6.26-2-xen-686 linux-image-2.6.26-2-xen-686

Se van a instalar automáticamente las dependencias y otras utilidades que se necesiten.
Reiniciamos y booteamos con el kernel correspondiente: Xen 3.2-1-i386 / Debian GNU/Linux, kernel 2.6.26-2-xen-686

Hay que fijarse que se instalaron dos: linux-image y xen-linux-system. El primero se usará para que las máquinas guest booteen y el segundo para el domU.

Cuando ya hayamos iniciado con xen-linux-system, debemos editar el fichero /etc/xen/xend-config.sxp. Vamos a la linea donde configuramos la red, debe aparecer algo como “(network-script network-dummy)” y debemos cambiarlo por “(network-script network-bridge)“. Cuando intentemos crear nuestra primera máquina virtual, xen nos enviará un mensaje advirtiendo que debemos configurar esa linea en el fichero de configuración.

Eso es todo.

Local root exploit en kernel 2.6.x (hasta la 2.6.29)

El Viernes pasado se anunciaron, en la lista de seguridad de debian, actualizaciones para el kernel, que solucionaba varias vulnerabilidades.

CVE-2009-0028

    Chris Evans discovered a situation in which a child process can
    send an arbitrary signal to its parent.

CVE-2009-0834

    Roland McGrath discovered an issue on amd64 kernels that allows
    local users to circumvent system call audit configurations which
    filter based on the syscall numbers or argument details.

CVE-2009-0835

    Roland McGrath discovered an issue on amd64 kernels with
    CONFIG_SECCOMP enabled. By making a specially crafted syscall,
    local users can bypass access restrictions.

CVE-2009-0859

    Jiri Olsa discovered that a local user can cause a denial of
    service (system hang) using a SHM_INFO shmctl call on kernels
    compiled with CONFIG_SHMEM disabled. This issue does not affect
    prebuilt Debian kernels.

CVE-2009-1046

    Mikulas Patocka reported an issue in the console subsystem that
    allows a local user to cause memory corruption by selecting a
    small number of 3-byte UTF-8 characters.

CVE-2009-1072

    Igor Zhbanov reported that nfsd was not properly dropping
    CAP_MKNOD, allowing users to create device nodes on file systems
    exported with root_squash.

CVE-2009-1184

    Dan Carpenter reported a coding issue in the selinux subsystem
    that allows local users to bypass certain networking checks when
    running with compat_net=1.

CVE-2009-1192

    Shaohua Li reported an issue in the AGP subsystem they may allow
    local users to read sensitive kernel memory due to a leak of
    uninitialized memory.

CVE-2009-1242

    Benjamin Gilbert reported a local denial of service vulnerability
    in the KVM VMX implementation that allows local users to trigger
    an oops.

CVE-2009-1265

    Thomas Pollet reported an overflow in the af_rose implementation
    that allows remote attackers to retrieve uninitialized kernel
    memory that may contain sensitive data.

CVE-2009-1337

    Oleg Nesterov discovered an issue in the exit_notify function that
    allows local users to send an arbitrary signal to a process by
    running a program that modifies the exit_signal field and then
    uses an exec system call to launch a setuid application.

CVE-2009-1338

    Daniel Hokka Zakrisson discovered that a kill(-1) is permitted to
    reach processes outside of the current process namespace.

CVE-2009-1439

    Pavan Naregundi reported an issue in the CIFS filesystem code that
    allows remote users to overwrite memory via a long
    nativeFileSystem field in a Tree Connect response during mount.

Se publicaron dos exploits para explotar vulnerabildades de escalacion de provilegios local. Estos exploits se aprovechan de la funcion ptrace_attach() para ejecutar un codigo arbitrario que nos permita ejecutar una shell del tipo /bin/sh como root.
El primer exploit es el shoryuken, lo probé en distintas versiones del kernel de debian y archlinux, pudiendo ser explotada solo la version 2.6.26-1-686 de Debian 5.0, de forma aleatoria, es decir, hay veces que ejecuto el exploit y funciona y otras veces no. El segundo script fue probado por su autor en la version del kernel 2.6.29rc1 de Gentoo.
Estos exploits funcionan bajo situaciones especificas y no todos los sistemas son vulnerables.