jueves, 5 de septiembre de 2013

Seguiridad en Linux: Grsecurity

Hoy vamos a ver como aplicar el parche Grsecurity a nuestro kernel para aumentar la seguridad de nuestro servidor. Cuando sepa que hace ya hare una entrada explicando más, pero por ahora a instalarlo.

Lo primero que hay que tener en cuenta es que hay que compilar el kernel, cosa que puede llegar a ser un coñazo por las múltiples configuraciones que hay. Lo que voy a hacer es instalar en una Debian 7 el kernel 3.10.10, el ultimo del que hay parche pero hasta donde he visto el proceso es el mismo. Lo primero es descargarse los paquetes del kernel e instalarlos:

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.10.10-saucy/linux-headers-3.10.10-031010-generic_3.10.10-031010.201308291422_amd64.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.10.10-saucy/linux-image-3.10.10-031010-generic_3.10.10-031010.201308291422_amd64.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.10.10-saucy/linux-headers-3.10.10-031010_3.10.10-031010.201308291422_all.deb
dpkg -i *.deb


Una vez reiniciado, ya tenemos el kernel (sin parchear) actualizado. Realmente no hace falta esto, pero ahora veréis el porque.

Lo siguiente que necesitamos es descargar el parche y el código del kernel:

wget http://grsecurity.net/test/grsecurity-2.9.1-3.10.10-201309011630.patch
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.10.tar.gz
tar xzvf linux-3.10.10.tar.gz


Antes de seguir, vamos a instalar las dependencias:

apt-get install gcc-4.7-plugin-dev buil-essential paxctl


Ahora que ya tenemos todo preparado, aplicamos el parche y lanzamos el make para preparar el kernel:

cd linux-3.10.10.tar.gz/
Patch -p1 < ../grsecurity-2.9.1-3.10.10-201309011630.patch


Con el parche aplicado, queda compilar:

Make menuconfig


-"Espera ¿me estas diciendo que tengo que revisar TODAS las opciones y poner las que necesite? Que son un huevo..." Pues...

La verdad es que se puede hacer trampas. ¿Recordáis que hemos instalado previamente el kernel con la misma versión que el que queríamos parchear en un paquete con todo configurado? Con el comando make oldconfig lo que hará sera coger las opciones que tenia el kernel instalado y preguntar por las nuevas (buena opción si queremos ir actualizando los kernels a mano cada vez que sale una nueva versión). En este caso como las versiones son las mismas, lo que nos preguntara sera por las opciones del parche :D eso si, no es con menú "bonito" como el anterior. En mi caso, escogí las reglas automáticas para servidores y poco mas. Leer que es cada cosa y elegir.

Una vez hecho el make solo queda instalar el kernel. Hasta aquí los pasos son validos para cualquier distro, pero como estoy usando Debian, voy a crear un .deb para instalar el kernel.

fakeroot make deb-pkg
dpkg -i kernel-gr.deb *


Y listo, solo queda reiniciar y ver que esta todo correcto. En mi caso el único problema que hubo fue que por defecto el grub no cargaba el kernel con el Grsecurity. Simplemente modificamos el /etc/default/grub y recargamos el grub update-grub. En mi caso aparecía como salida al comando un "killed", dado que ya estaba trabajando con el kernel modificado (seleccionándolo manualmente en la carga del sistema). Tuve que permitir la ejecución de algunos programas para que funcionase:

paxctl -Cpemrxs /usr/sbin/grub-probe
paxctl -Cpemrxs /usr/sbin/grub-mkdevicemap
paxctl -Cpemrxs /usr/sbin/grub-setup
update-grub


Y listo. Ya esta configurado y funcionando el kernel con el Grsecutiry. Toca aprender a usarlo y ver para que sirve ;)

Fuentes:
Kernels Ubuntu/Debian/Mint
GrSecutiry
Kernels Linux
HowToForge
Error Grub + GrSecurity

* El nombre del kernel no es ese, pero no tengo ahora la máquina con la que hice las pruebas y no se como lo renombra, pero vamos algo parecido.

miércoles, 4 de septiembre de 2013

GUI Web para VirtualBox

Investigando el tema de poner un virtualbox sin interfaz gráfica, descubrí una GUI Web para controlarlo todo. Básicamente han llevado la interfaz del programa a la web, con casi todas las opciones. Para instalarlo, tendremos que tener un apache corriendo con php:

apt-get install apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common apache2 apache2-doc apache2-suexec libapache2-mod-php5 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libapr1 php5-common php5-mysql php5-suhosin php-pear wget

En el caso del paquete de php-suhosin, en Debian 7 no está pero no es necesario (más allá de la seguridad).

Para hacer funcionar la web, necesitaremos crear un usuario que será el encargado de crear las maquinas virtuales:

useradd -m vbox -G vboxusers -s /bin/bash
passwd vbox


Luego editamos la configuración del demonio:

nano /etc/default/virtualbox


Y tendrá que tener este contenido "VBOXWEB_USER=vbox". Luego tendremos que crear los scripts para el arranque del servicio e iniciarlo:

update-rc.d vboxweb-service defaults
/etc/init.d/vboxweb-service start


Luego nos quedará descargar los archivos de la web y ponerlos en la carpeta que tengamos configurada. Por defecto suele ser /var/www y si no es el caso o queremos modificarlo, no habría ningún problema.

Descargamos los archivos desde la web http://sourceforge.net/projects/phpvirtualbox/ y los descomprimimos en la raíz de la web que usemos. Tenemos que tener en cuenta que tendremos que bajar la versión correspondiente al VirtualBox que tengamos instalado, en mi caso la 4.1.

Una vez hecho, tendremos que crear y editar el archivo config.php:

cp config.php-example config.php
nano config.php


Y en la variable $password poner la contraseña del usuario que hemos creado para ejecutar todo. Ya sólo nos quedaría entrar a través del navegador en http://www.miweb.tld/phpvirtualbox o en la ruta que lo hayamos instalado (evidentemiente). El usuario será admin y la contraseña admin que podemos cambiar luego desde la web en file > Change password.

Et voilá! Ya está instalado y funcionando sin problemas.

¡Saludos!

Fuente:
HowToForge

 

martes, 3 de septiembre de 2013

Migrar máquina física a un virtual bajo VirtualBox

Voy a intentar migrar el servidor en el que corre el blog a una maquina virtual para intentar aprovechar más el equipo para otros menesteres, pero claro, me da una pereza enorme instalar y configurar todo desde cero y se me ha ocurrido buscar una forma para pasarlo todo a pelo a una maquina virtual.

Para ello he elegido VirtualBox, una herramienta fácil de usar y aunque no sea tan potente (en principio, que no he comparado) como KVM o Xen para lo que quiero bastaría.

Una vez con el vbox instalado y funcionando en otro servidor, tenemos que crear una imagen del disco duro de servidor que queremos migrar. Para ello o bien usamos una live y otro disco duro,  o pinchamos el disco del server viejo cómo secundario, al gusto. La cosa es que no este en uso el disco viejo.

Para hacer la imagen,  usamos a nuestro amigo el dd:

dd if=/dev/sdb of=/tmp/imagen.raw

Cuando acabe,  vamos a necesitar usar el VirtualBox, por lo que necesitaremos pasar la imagen creada al servidor que lo tenga instalado (en caso de que hayamos usando una live). Una vez en el server con vbox:

VBoxManage convertfromraw imagen.raw --format vdi imagen.vdi

Cuando finalice, en teoría debería arrancar sin problemas en el vbox. Si queremos compactar la imagen para que ocupe menos habría que hacer despues:

VBoxManage modifyhd --compact imagen.vdi

Cuando me de tiempo a probarlo, confirmaré si funciona y que problemas dio (si los da, que lo hará).

Ya he probado a importar una máquina (no la del servidor) y no ha dado ningún tipo de problema, lo único si es una máquina de 64 bits recordar que hay que habilitar la virtualización por hardware desde las opciones de la máquina virtual.

¡Saludos!