Creando una jaula en Linux con chroot
Es una técnica utilizada para aislar procesos del sistema principal del equipo, en la práctica se utiliza en los siguientes casos:
- Como “sandbox” para probar programas sospechosos o peligrosos en un entorno aislado y que no afecte a otros procesos o al sistema operativo.
- Para aislar servicios de red, enjaulando a los usuarios que los usan, como puede ser el servicio FTP o incluso un servidor web.
- Para dispositivos donde el sistema es Linux pero el usuario sólo tiene acceso a unas determinadas funciones.
- Recuperación o reparación de sistemas, se inicia el equipo con un LiveCD y se crea una jaula del sistema operativo dañado para poder repararlo.
Lo primero que tenemos que tener en cuenta es que al crear una jaula deberemos incluir en ella todos los programas, librerías y directorios que se vayan a utilizar, así como sus dependencias.
El comando para crear una jaula es chroot. Cuando se ejecuta, el directorio raíz del sistema pasa directamente a ser el directorio enjaulado.
Como ejemplo, a continuación crearemos una jaula bajo el directorio “/opt/chroot_dir” para poder ejecutar el comando “ls”, como hemos comentado anteriormente tendremos que incluir en el directorio de la jaula todo lo que necesita el comando para ejecutarse, incluidas librerías.
A través del comando ldd buscaremos las librerías necesarias para la ejecución del comando “ls”:
# ldd /bin/bash /bin/ls
Ahora procederemos a crear toda la estructura de directorios que necesiten los programas y sus librerías, copiando todo lo necesario para la ejecución dentro de nuestra jaula, el resultado final será el siguiente:
No es necesario, pero podemos crear nuestro propio script de login:
# echo "PS1='JAULA $ '" | sudo tee /opt/chroot_dir/etc/bash.bashrc
Finalmente ejecutaremos chroot para entrar en la jaula que hemos creado:
# chroot /opt/chroot_dir /bin/bash
Una vez dentro de la jaula todo lo que se ejecute en la jaula será totalmente independiente del sistema y no podrá afectar a cualquier otro proceso que esté en marcha.
No todos los programas o demonios funcionan con chroot ya que la complejidad y el programa por sí mismo no está preparado para funcionar en este modo, un ejemplo sería sendmail.
Hemos realizado un ejemplo simple de jaula, pero en Debian y con el programa debootstrap podríamos enjaular un sistema operativo completo que funcionaría como una máquina virtual dentro de nuestro sistema.