GeeksforGeeks

¿Qué es una cárcel de chroot?

Un chroot en sistemas operativos Unix es una operación que cambia el directorio raíz aparente para el proceso en ejecución actual y sus hijos. Los programas que se ejecutan en este entorno modificado no pueden acceder a los archivos fuera del árbol de directorios designado. Esto esencialmente limita su acceso a un árbol de directorios y, por lo tanto, obtienen el nombre «chroot jail».

La idea es que cree un árbol de directorios donde copie o vincule todos los archivos del sistema necesarios para que se ejecute un proceso. A continuación, utilice la llamada al sistema chroot para cambiar el directorio raíz para que esté en la base de este nuevo árbol e iniciar el proceso que se ejecuta en ese entorno chroot. Dado que en realidad no puede hacer referencia a rutas fuera de la raíz modificada, no puede leer o escribir maliciosamente en esas ubicaciones.

¿Por qué se requiere y en qué se diferencia de las máquinas virtuales?
Esta es una virtualización a nivel de sistema operativo y a menudo se usa en lugar de máquinas virtuales para crear varias instancias aisladas del sistema operativo host. Esta es una virtualización a nivel de núcleo y prácticamente no tiene sobrecarga en comparación con las Máquinas Virtuales, que son una virtualización de capa de aplicación, como resultado, proporciona un método muy bueno para crear varias instancias aisladas en el mismo hardware. Una máquina virtual (VM) es una implementación de software de una máquina y a menudo explotan lo que se conoce como Virtualización de hardware para renderizar imágenes virtuales de un sistema operativo en funcionamiento.

¿Cómo lo uso?
El comando básico para crear una jaula de chroot es el siguiente:

 chroot /path/to/new/root command OR chroot /path/to/new/root /path/to/server OR chroot /path/to/new/root /path/to/server

Nota: Solo un usuario root / con privilegios puede usar la llamada al sistema chroot. Un usuario sin privilegios con acceso al comando puede eludir la cárcel de chroot.

Pasos para crear una mini cárcel para el comando’ bash ‘y el comando’ ls ‘

1. Cree un directorio que actuará como la raíz del comando.

 $ mkdir jailed $ cd jailed

2. Cree todos los directorios esenciales para que el comando se ejecute: Dependiendo de su sistema operativo, los directorios requeridos pueden cambiar. Lógicamente, creamos todos estos directorios para mantener una copia de las bibliotecas requeridas. Para ver qué directorios son necesarios, consulte el paso 4.

 $ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu

3.Ejecute el comando’ which’: Ejecute el comando’ which ‘ para encontrar la ubicación de los comandos ls y bash. Después de ejecutar el comando, copie esos binarios en el directorio ‘ bin ‘ de nuestra cárcel. Asegúrese de no tener ninguno de estos comandos con alias. A partir de ahora, nos referiremos a nuestro directorio como directorio ‘Encarcelado’ por conveniencia.

 $ unalias ls # Required only if you have aliased ls command $ unalias bash # Required only if you have aliased bash command $ cp $(which ls) ./bin/ $ cp $(which bash) ./bin/

4. Copiar bibliotecas/objetos apropiados : Para que los ejecutables en nuestro directorio encarcelado funcionen, necesitamos copiar las bibliotecas/objetos apropiados en el directorio ENCARCELADO. De forma predeterminada, el ejecutable mira las ubicaciones que comienzan con’/’. Para encontrar las dependencias utilizamos el comando ‘ldd’

$ ldd $(which bash) linux-vdso.so.1 => (0x00007ffc75dd4000) libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f6577768000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6577564000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f657719a000) /lib64/ld-linux-x86-64.so.2 (0x000055979f3fd000)

Ejecute los siguientes comandos para crear los directorios apropiados.

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

Del mismo modo para los valores mínimos,

$ ldd $(which ls) linux-vdso.so.1 => (0x00007fff4f05d000) libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f9a2fd07000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9a2f93e000) libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f9a2f6cd000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9a2f4c9000) /lib64/ld-liux-x86-64.so.2 (0x000055e836c69000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9a2f2ac000)
$ cp /lib/x86_64-linux-gnu/libselinux.so.1 lib/x86_64-linux-gnu/$ cp /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu/$ cp /lib/x86_64-linux-gnu/libpcre.so.3 lib/x86_64-linux-gnu/$ cp /lib/x86_64-linux-gnu/libdl.so.2 lib/x86_64-linux-gnu/$ cp /lib64/ld-linux-x86-64.so.2 lib64/$ cp /lib/x86_64-linux-gnu/libpthread.so.0 lib/x86_64-linux-gnu/

La estructura de directorios final debe ser similar a esta,

 Chroot Jail

5. Sudo chroot: Ejecute este comando para cambiar la raíz al directorio ENCARCELADO, junto con la ruta al shell. Por defecto intentará cargar el shell ‘/ bin / sh’.

 $ cd .. $ sudo chroot jailed /bin/bash

Es posible que se encuentre con este error al ejecutar el comando chroot,

chroot: failed to run command `/bin/bash': No such file or directory

Esto puede deberse a 2 razones, ya sea que el archivo no existe (lo cual es obvio), o cuando la biblioteca de carga falla o no está disponible. Doble Comprobación de si las bibliotecas son en la ubicación correcta.

6. Debe aparecer un nuevo proyectil: Es nuestra fiesta en la cárcel. Actualmente solo tenemos instalados 2 comandos, bash y ls. Afortunadamente, cd y pwd son comandos incorporados en el shell de bash, por lo que también puede usarlos.

Deambule por el directorio, intente acceder a ‘ cd/..o algo similar. Intenta romper la cárcel, probablemente no podrás. 🙂

Salir de la cárcel,

 $ exit

La parte más importante e interesante es que, cuando corres,

 $ ps aux

y encuentre el proceso, encontrará que solo hay un proceso,

root 24958 … 03:21 0:00 /usr/bin/sudo -E chroot jailed/ /bin/bash

Curiosamente, los procesos en el shell encarcelado se ejecutan como un proceso hijo simple de este shell. Todos los procesos dentro del entorno ENCARCELADO, son simples procesos a nivel de usuario en el sistema operativo host y están aislados por los espacios de nombres proporcionados por el núcleo, por lo que hay una sobrecarga mínima y, como beneficio adicional, obtenemos aislamiento.

Una copia del directorio jailed-bash explicado aquí se puede descargar desde aquí.

Del mismo modo, puede agregar más comandos a su entorno virtual encarcelado. Para agregar programas más complejos, es posible que necesite crear más directorios, como ‘/ proc’y’ /dev’. Esto aumenta la complejidad del proceso. Esperemos que no lo necesitemos para nuestro propósito.

Esto es todo lo que necesita saber sobre chroot y el encarcelamiento de directorios. Nuestro objetivo final es comprender qué son los contenedores y cómo servicios como AWS (Amazon Web Services), Google Cloud y Docker son capaces de proporcionar tantas instancias virtuales de sistemas operativos bajo demanda. Además, cómo ejecuta sys-admin varios servidores web para varios dominios en una sola máquina física. Este fue solo un paso para entenderlo 🙂

  • https://help.ubuntu.com/community/DebootstrapChroot
  • https://wiki.archlinux.org/index.php/Install_from_existing_Linux
  • http://serverfault.com/questions/162362/chroot-fails-cannot-run-command-bin-bash-no-such-file-or-directory
  • https://wiki.archlinux.org/index.php/change_root

Sobre el autor:
Pinkesh Badjatiya proviene de IIIT Hyderabad. Es un geek de corazón con amplios proyectos que vale la pena buscar. Su trabajo de proyecto se puede ver aquí.

Si también desea mostrar su blog aquí, consulte GBlog para escribir blogs de invitados en GeeksforGeeks.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.