miércoles, 13 de febrero de 2013

Migrar máquina virtual de Virtualbox a VMware

Dos de las herramientas más comunes de virtualización son VirtualBox y Vmware. No es muy habitual querer pasar una máquina virtual de un sistema a otro pero si queremos unificar plataformas o tenemos este dilema, podemos realizarlo.
En primer lugar procederemos a instalar  quemu y virtualbox-ose-qt de la siguiente manera:


root@OPT360:~# sudo apt-get install qemu
root@OPT360:~# sudo apt-get install virtualbox-ose-qt


Una vez instalado, procederemos al cambio de formato de las máquinas virtuales. Localizaremos donde tenemos el archivo .vdi y lo convertiremos a .raw. En mi caso se llama NAGIOS_CENTOS6.vdi


root@OPT360:~# vboxmanage internalcommands converttoraw /home/rencinar/Descargas/NAGIOS_CENTOS6.vdi /home/rencinar/Descargas/NAGIOS_CENTOS6.raw
Oracle VM VirtualBox Command Line Management Interface Version 3.2.10_OSE
(C) 2005-2010 Oracle Corporation
All rights reserved.
Converting image "/home/rencinar/Descargas/NAGIOS_CENTOS6.vdi" with size 8589934592 bytes (8192MB) to raw...

 

Tras esto tendremos un archivo .raw que deberemos convertir en vmdk de la siguiente manera:

root@OPT360:~# qemu-img convert -O vmdk /home/rencinar/Descargas/NAGIOS_CENTOS6.raw /home/rencinar/Descargas/NAGIOS_CENTOS6.vmdk


Una vez que tengamos el archivo NAGIOS_CENTOS6.vmdk solo tendremos que crear una máquina virtual cuyo disco duro apunte a él.


Para realizar el paso contrario, pasar de Vmware a VirtualBox tendríamos que generar del .vmdk un .bin y del .bin un .vdi utilizando VBoxManage  de la siguiente manera:

$qemu-img convert NAGIOS_CENTOS6.vmdk /home/rencinar/Descargas/NAGIOS_CENTOS6.bin


$VBoxManage convertdd /home/rencinar/Descargas/NAGIOS_CENTOS6.bin debian.vdi


Enjaular usuarios SFTP

Cuando un usuario se conecta a una máquina por sftp, si no le marcamos límites podrá navegar por nuestro árbol de directorios pudiendo provocarnos problemas de seguridad.
Para evitar esto, lo más común es darle al usuario un directorio raíz controlado a partir del cual pueda trabajar (generar ficheros, directorios, ..etc) pero del cual no se pueda salir. Pongo un ejemplo que esclarezca esto.
Si yo genero un usuario que sea usu1 en un sistema Linux (por ejemplo una Debian), podrá desde este momento tener acceso por sftp, ya que el sftp corre sobre protocolo ssh, siempre que el demonio esté levantado. El problema es que este usuario, cuando se conecte, entrará por defecto en su /home/usu1 pero podrá moverse y ver el contenido de otros directorios como el /etc/, ..etc. Lo ideal es que este usuario cuando se conecte por sftp entre en un directorio que sea sftpusu1 por ejemplo y del cual no pueda salir.

Para esto tendremos que tener instalado el ssh y el openssh-server:
root@OPT360: apt-get install ssh openssh-server
Como root generamos el usuario:
root@OPT360: adduser usu1
Le cambiamos la contraseña:
root@OPT360: passwd usu1
Tras esto tendremos un usuario completamente operativo en nuestro sistema Linux. Para probar que tanto la instalación del openssh-server como la generación del usuario a sido correcta realizamos una conexión por ssh al servidor (si estamos en un linux desde consola podemos hacer ssh usu1@10.0.10.41 y si estamos en un windows con el PuTTY).
Ahora que hemos verificado que nuestro usuario está funcionando correctamente, procedemos a editar el fichero sshd_config que alberga la configuración de el servidor de ssh.
root@file-server:~# vi /etc/ssh/sshd_config

Tendremos que verificar que nuestro Subsystem utiliza el internal-sftp, por lo que tendremos que comentar la linea y generar una nueva con el internal-sftp, quedando de la siguiente manera:
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp


Además de lo anterior, al final del fichero añadiremos lo siguiente:
Match user usu1
                ChrootDirectory /home/usuariossftp/usu1/
                ForceCommand internal-sftp


El ChrootDirectory es el directorio al que nos llevara cuando entremos con ese usuario.

Para finalizar generaremos la carpeta usu1 en la ruta indicada con un mkdir y le aplicaremos los siguientes permisos:
root@file-server:/home/usuariossftp# ls -ltr
total 8
drwxr-xr-x 3 root root 4096 feb 23  2011 usu1

Y dentro de la anterior carpeta  generaremos otra en la  que si que tenga todos los permisos el usuario usu1 para que pueda trabajar.
root@file-server:/home/usuariossftp/usu1# ls -ltr
total 4
drwxr-xr-x 2 usu1 usu1 4096 feb 13 06:31 carpeta2


Quedando al final la ruta completa de trabajo para el usuario usu1:
/home/usuariossftp/usu1/carpeta2
Tras reiniciar el servicio sshd tendremos disponible esta configuración, y en el momento que el usuario usu1 se conecte, directamente entrará en /home/usuariossftp/usu1/.
Para reiniciar el servicio realizamos como root lo siguiente:
root@file-server:/home/usuariossftp/usu1# /etc/init.d/ssh stop
root@file-server:/home/usuariossftp/usu1# /etc/init.d/ssh start