Entornos chroot con cdebootstrap en Debian

DebianArco

Si utilizas varias aplicaciones que tienen librerías que entran en conflicto entre sí, una solución puede ser "enjaularla" para que no entre en conflicto con tu sistema. Aquí explico cómo crear una jaula en pocos pasos, que permitirá entre otras cosas aislar aplicaciones.

Además, el uso de jaulas también puede resultar útil si tienes ciertos servicios como servidores web o ftp y quieres aumentar un poco mas la seguridad del sistema, ya que hace, al menos algo mas difícil, el acceso al sistema, debido a que éste queda, en teoría, fuera del alcance del sistema enjaulado.

En mi caso, yo he utilizado la jaula para aislar dos compiladores cruzados para microcontroladores AVR, debido a que utilizo tinyos y necesita una versión muy concreta de avr-libc que entra en conflicto con ya que yo tengo instalada.

Empezando

Bueno, para poder empezar, necesitas tener instalado cdebootstrap, si usas Debian ya sabes, apt-get (o aptutude, que esto parece como ser del Bétis o del Sevilla Eye-wink).

Una vez con cdebootstrap instalado, creas un directorio en el lugar en el que quieras tener tu jaula instalada. Yo por ejemplo, la he creado en /usr/local/tinyos por ésto de tener las cosas un poco mas ordenaditas. Cuando ya tengas el directorio creado invocas a cdebootstrap con un comando tal que éste:

javieralso@rigoberto:~$ sudo cdebootstrap unstable /usr/local/tinyos/ http://babel.esi.uclm.es/debian

Esto crea, dentro de /usr/local/tinyos/ un sistema unstable totalmente desnudo (con lo mas básico) partiendo del repositorio que le hemos pasado.

Ahora, para poderlo utilizar, necesitas montar /proc y /dev. Éste último no es que sea especialmente necesario a menos que vayas a utilizar algún dispositivo de entrada/salida. En mi caso, como necesito un puerto serie para poder programar las motas, he de montarlo dentro de la jaula.
Para montar las unidades y acceder a la jaula, se puede utilizar un script como el siguiente, que lo hace todo de forma automática:

#!/bin/bash
 
sudo mount -t proc none /usr/local/tinyos/proc
sudo mount -t sysfs none /usr/local/tinyos/sys
sudo mount --bind /dev /usr/local/tinyos/dev
sudo chroot /usr/local/tinyos
sudo umount /usr/local/tinyos/dev
sudo umount /usr/local//tinyos/sys
sudo umount /usr/local/tinyos/proc

Este script monta /proc, /sys y /dev dentro de la jaula y ejecuta chroot para cambiar el raíz. Cuando sale del chroot, desmonta todo otra vez.

Referencias