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.