¿Qué es chroot en Linux y cómo se usa?

Contenidos

La utilidad chroot Linux puede modificar el directorio raíz de trabajo de un procedimiento, limitando el acceso al resto del sistema de archivos. Esto de forma general se hace por razones de seguridad, contenedorización o pruebas, y a menudo se denomina «cárcel chroot».

¿Qué hace chroot?

Chroot hace una cosa: ejecutar un comando con un directorio raíz distinto. El comando que se está ejecutando no tiene idea de que existe algo fuera de su cárcel, puesto que no tiene ningún vínculo con él y, por lo que sabe, se está ejecutando en el sistema de archivos raíz de todos modos. No hay nada encima root, por lo que el comando no puede entrar a nada más.

Chroot no realiza ninguna modificación en su disco, pero puede hacer que parezca así desde el punto de vista de los procesos que se ejecutan debajo de él. Hacer un chroot de un procedimiento logra lo mismo que cambiar el espacio de nombres de montaje para un procedimiento, pero lo hace a un nivel más alto que la modificación del espacio de nombres.

¿Para qué se utiliza chroot?

Lo principal chroot se utiliza para bloquear demonios del sistema para que cualquier vulnerabilidad de seguridad en esos demonios no afecte al resto del sistema. A modo de ejemplo, Postfix, un agente de correo, se puede configurar para ejecutarse dentro de un entorno chrooted con acceso limitado a los directorios que utiliza para comunicarse con el sistema. De esta forma, si se encuentra un error en Postfix, afectará a Postfix y no a nada más.

Esto es bastante útil para un servicio como FTP. Si desea ofrecer a los usuarios remotos acceso a partes de su sistema, chrootear el procedimiento es una manera fácil de bloquear el acceso.

Además es útil como un «contenedor de presupuesto» para crear un subconjunto de su sistema operativo y ejecutar aplicaciones en un entorno aislado, ya sea para pruebas, seguridad o facilidad de desarrollo. Pero desde chroot necesita que copie manualmente las dependencias de la aplicación en la cárcel, no es adecuado para todo. Un procedimiento que necesita entrar e interactuar con recursos a nivel de usuario no funcionaría bien dentro de una cárcel chroot, o requeriría una configuración adicional que puede hacer que toda la configuración sea más insegura. Pero, inclusive las aplicaciones complicadas como Apache y MySQL se puede ejecutar dentro de un entorno chrooted con todas las dependencias contabilizadas.

Mientras que un chroot la cárcel es una capa adicional de seguridad, chroot no debería ser su única herramienta de seguridad. Salir de una cárcel puede ser relativamente trivial si no se configura correctamente, y una cárcel chroot solo cambia la ubicación de montaje y no afecta los otros espacios de nombres. Si desea una mayor seguridad, use espacios de nombres o un motor de contenedorización como Estibador.

Envío de procesos a la cárcel

Para abrir un shell dentro de un directorio encarcelado, puede ejecutar:

sudo chroot /jail

A pesar de esto, este comando fallará con una nueva /jail directorio, puesto que chroot intentará cargar bash desde /jail/bin/bash. Este archivo no existe, que es el primer problema con chroot—Debes de construir la cárcel tú mismo.

Para algunas cosas, copiarlas con cp es suficiente:

cp -a /bin/bash /jail/bin/bash

Pero esto solo copia el ejecutable bash, y no todas sus dependencias, que aún no existen en nuestra cárcel. Puede enumerar las dependencias para bash con el ldd mando:

ldd $(which bash)
	linux-vdso.so.1 (0x00007ffd079a1000)
	libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f339096f000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f339076b000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f339037a000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f3390eb3000)

Puede copiarlos manualmente:

cp /lib/x86_64-linux-gnu/libtinfo.so.5 /jail/lib/x86_64-linux-gnu/
cp /lib/x86_64-linux-gnu/libdl.so.2 /jail/lib/x86_64-linux-gnu/
cp /lib/x86_64-linux-gnu/libc.so.6 /jail/lib/x86_64-linux-gnu/
cp /lib64/ld-linux-x86-64.so.2 /jail/lib64/

Pero esto se convierte en una gran molestia para cada comando que desee ejecutar bajo chroot. Si no te preocupas por tu chroot entrar a su actual lib y bin directorios (sin acceso al resto del sistema), entonces puede utilizar mount --bind para proporcionar un link en su cárcel:

mount --bind /bin /jail/bin
mount --bind /lib /jail/lib
mount --bind /lib64 /jail/lib64

Además puede copiar todo el /bin y /lib directorios, que utiliza más espacio, pero puede ser un poco mejor para la seguridad, especialmente si está usando chroot para ejecutar procesos inseguros que no querría que interfieran con las carpetas de su sistema.

Ahora que todo está copiado, debería poder ejecutar una vez más sudo chroot /jail para abrir bash. Alternativamente, puede ejecutar cualquier otro comando ejecutando:

sudo chroot /jail command

Si está ejecutando procesos a través de chroot bash, puede salir del shell con exit o Control + D, que detendrá el procedimiento en ejecución. Los procesos que se ejecutan en la cárcel se ejecutan en su propio entorno y no disponen acceso a otros procesos en el sistema.

¿Puede el procedimiento escapar de la cárcel?

No es fácil, a menos que se estén ejecutando como root. Chroot no bloquea el acceso a los recursos del sistema de bajo nivel (que requerirían acceso de root) y, como tal, un procedimiento privilegiado podría escapar fácilmente una cárcel.

Es factible que los procesos sin privilegios se rompan por completo con el método chdir("..") y otra llamada a chroot. Si está verdaderamente centrado en la seguridad, debería dejar el acceso a los chroot(2) llamada al sistema, o usa el tenedor jchroot, que automatiza esta función de seguridad adicional.

chroot no es una herramienta de seguridad a prueba de balas, puesto que no está absolutamente en contenedores y no debe considerarse como un firewall que salvará su sistema de los atacantes. A pesar de esto, a menos que un procedimiento esté tratando específicamente de salir de una cárcel chroot, chroot logra su trabajo de seccionar su sistema de archivos para la mayoría de los procesos y se puede configurar con medidas de seguridad adicionales para bloquear los principales métodos de escape.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.