Un chroot en los sistemas operativos Unix es una operación que cambia el directorio raíz aparente del proceso en ejecución actual y sus hijos . Un programa que se ejecuta en un entorno modificado de este tipo no puede nombrar (y, por lo tanto, normalmente no puede acceder) a archivos fuera del árbol de directorios designado. El término "chroot" puede referirse a la llamada al sistema chroot (2) o al programa contenedor chroot (8) . El entorno modificado se llama cárcel chroot .
Historia
La llamada al sistema chroot se introdujo durante el desarrollo de la versión 7 de Unix en 1979. Una fuente sugiere que Bill Joy la añadió el 18 de marzo de 1982, 17 meses antes de que se lanzara 4.2BSD , para probar su instalación y compilación del sistema. [1] Todas las versiones de BSD que tenían un núcleo tienen chroot (2). [2] [3] Un uso temprano del término "cárcel" aplicado a chroot proviene de Bill Cheswick que creó un honeypot para monitorear un cracker en 1991. [4]
El primer artículo sobre un jailbreak se ha discutido en la columna de seguridad de SunWorld Online, escrito por Carole Fennelly; las ediciones de agosto de 1999 y enero de 1999 cubren la mayoría de los temas de chroot (). [5]
Para hacerlo útil para la virtualización , FreeBSD expandió el concepto y en su versión 4.0 en 2000 introdujo el comando jail . [6]
En 2002, un artículo escrito por Nicolas Boiteux describía cómo crear una cárcel en Linux [7]
En 2003, los primeros proveedores de microservicios de Internet con cárceles de Linux proporcionan servicios SAAS / PAAS (contenedores de shell, proxy, ircd, bots, ...) facturados para el consumo en la cárcel por uso [8]
En 2005, Sun lanzó Solaris Containers (también conocidos como Solaris Zones), descritos como "chroot con esteroides". [9]
En 2008, LXC (sobre la que se construyó Docker más tarde) adoptó la terminología de "contenedor" [10] y ganó popularidad en 2013 debido a la inclusión en el kernel de Linux 3.8 de los espacios de nombres de usuario . [11]
Usos
Se puede utilizar un entorno chroot para crear y alojar una copia virtualizada separada del sistema de software. Esto puede resultar útil para:
- Pruebas y desarrollo
- Se puede configurar un entorno de prueba en el chroot para software que, de otro modo, sería demasiado riesgoso para implementar en un sistema de producción.
- Control de dependencia
- El software se puede desarrollar, construir y probar en un chroot poblado solo con sus dependencias esperadas. Esto puede evitar algunos tipos de distorsión de vínculos que pueden resultar de los desarrolladores que crean proyectos con diferentes conjuntos de bibliotecas de programas instalados.
- Compatibilidad
- El software heredado o el software que usa una ABI diferente a veces debe ejecutarse en un chroot porque sus bibliotecas de soporte o archivos de datos pueden chocar en nombre o vinculación con los del sistema host.
- Recuperación
- Si un sistema no se puede arrancar, se puede usar un chroot para regresar al entorno dañado después de arrancar desde un sistema de archivos raíz alternativo (como un medio de instalación o un Live CD ).
- Separación de privilegios
- Los programas pueden llevar descriptores de archivos abiertos (para archivos, canalizaciones y conexiones de red) al chroot, lo que puede simplificar el diseño de la cárcel al hacer innecesario dejar archivos de trabajo dentro del directorio chroot. Esto también simplifica el arreglo común de ejecutar las partes potencialmente vulnerables de un programa privilegiado en una caja de arena, con el fin de contener preventivamente una brecha de seguridad. Tenga en cuenta que chroot no es necesariamente suficiente para contener un proceso con privilegios de root.
Limitaciones
El mecanismo chroot no está diseñado para defenderse de la manipulación intencional por parte de usuarios privilegiados (root). En la mayoría de los sistemas, los contextos chroot no se apilan correctamente y los programas chroot con suficientes privilegios pueden realizar un segundo chroot para salir. Para mitigar el riesgo de esta debilidad de seguridad, los programas chroot deben renunciar a los privilegios de root tan pronto como sea posible después del chrooting, u otros mecanismos, como las jaulas de FreeBSD , deberían usarse en su lugar. Tenga en cuenta que algunos sistemas, como FreeBSD , toman precauciones para evitar el segundo ataque chroot. [12]
En sistemas que admiten nodos de dispositivo en sistemas de archivos ordinarios, un usuario root con chroot puede crear nodos de dispositivo y montar los sistemas de archivos en ellos; por lo tanto, el mecanismo chroot no está diseñado por sí mismo para bloquear el acceso de bajo nivel a los dispositivos del sistema por parte de usuarios privilegiados. No tiene la intención de restringir el uso de recursos como E / S , ancho de banda, espacio en disco o tiempo de CPU. La mayoría de los Unix no están completamente orientados al sistema de archivos y dejan una funcionalidad potencialmente disruptiva, como el control de redes y procesos, disponible a través de la interfaz de llamada del sistema a un programa chroot.
Al inicio, los programas esperan encontrar espacio temporal , archivos de configuración, nodos de dispositivos y bibliotecas compartidas en determinadas ubicaciones preestablecidas. Para que un programa chroot se inicie correctamente, el directorio chroot debe llenarse con un conjunto mínimo de estos archivos. Esto puede dificultar el uso de chroot como mecanismo general de espacio aislado. Herramientas como Jailkit pueden ayudar a facilitar y automatizar este proceso.
Solo el usuario root puede realizar un chroot. Esto está destinado a evitar que los usuarios coloquen un programa setuid dentro de una cárcel chroot especialmente diseñada (por ejemplo, con una / etc / passwd y / etc / shadow file) que lo engañaría en una escalada de privilegios .
Algunos Unix ofrecen extensiones del mecanismo chroot para abordar al menos algunas de estas limitaciones (consulte Implementaciones de tecnología de virtualización a nivel de sistema operativo ).
Aplicaciones gráficas en chroot
Es posible ejecutar aplicaciones gráficas en un entorno chrooted, utilizando métodos como: [13] [14]
- Utilice xhost (o copie el secreto de .Xauthority)
- Servidores X anidados como Xnest o el Xephyr más moderno (o iniciar un servidor X real desde dentro de la cárcel)
- Acceder al chroot a través de SSH usando la función de reenvío X11 (ssh -X)
- xchroot una versión extendida de chroot para usuarios y reenvío Xorg / X11 (socat / mount)
- Un servidor VNC X11 y la conexión de un cliente VNC fuera del entorno.
Aplicaciones notables
El agente de transferencia de correo de Postfix funciona como un canal de programas de ayuda con chroot individual.
Al igual que 4.2BSD antes, las granjas de construcción de paquetes internas de Debian y Ubuntu usan chroots ampliamente para detectar dependencias de compilación no intencionales entre paquetes. SUSE utiliza un método similar con su programa de compilación . Fedora, Red Hat y varias distribuciones basadas en RPM crean todos los RPM utilizando una herramienta chroot como mock .
Muchos servidores FTP para sistemas POSIX utilizan el mecanismo chroot para aislar a los clientes FTP que no son de confianza. Esto se puede hacer bifurcando un proceso para manejar una conexión entrante, luego chrooteando al niño (para evitar tener que poblar el chroot con las bibliotecas requeridas para el inicio del programa).
Si la separación de privilegios está habilitada, el demonio OpenSSH creará un proceso auxiliar sin privilegios en un directorio vacío para manejar el tráfico de red de autenticación previa para cada cliente. El demonio también puede aislar sesiones SFTP y shell en un chroot (desde la versión 4.9p1 en adelante). [15]
Chrome OS puede usar un chroot para ejecutar una instancia de Linux usando Crouton , [16] proporcionando un SO delgado con acceso a recursos de hardware. Las implicaciones de seguridad relacionadas en este artículo se aplican aquí.
Sistemas de archivos virtuales y archivos de configuración del kernel del host Linux
Para tener un entorno chroot funcional en Linux, los sistemas de archivos virtuales del kernel y los archivos de configuración también deben montarse / copiarse desde el host al chroot.
# Montar sistemas de archivos virtuales del núcleo TARGETDIR = "/ mnt / chroot"
mount -t proc proc $ TARGETDIR / procmontar -t sysfs sysfs $ TARGETDIR / sysmount -t devtmpfs devtmpfs $ TARGETDIR / devmontar -t tmpfs tmpfs $ TARGETDIR / dev / shmmount -t devpts devpts $ TARGETDIR / dev / pts# Copie / etc / hosts
/ bin / cp -f / etc / hosts $ TARGETDIR / etc /# Copie /etc/resolv.conf
/ bin / cp -f /etc/resolv.conf $ TARGETDIR /etc/resolv.conf# Enlace / etc / mtab
chroot $ TARGETDIR rm / etc / mtab 2 > / dev / nullchroot $ TARGETDIR ln -s / proc / mounts / etc / mtab
Ver también
- Lista de comandos de Unix
- Virtualización a nivel de sistema operativo
- Sandbox (seguridad informática)
- sudo
Referencias
- ^ "cárcel, sección 9" . docs.freebsd.org .
- ^ Losh, Warner (2 de febrero de 2000). "Blog de hackeo aleatorio de Warner: ¿Adónde chroot?" .
- ^ "Infraestructuras de datos para el resto de nosotros - III - software" .
- ^ Cheswick, Bill (1991). "Una velada con Berferd: en la que un Cracker es atraído, soportado y estudiado" (PDF) . Actas de la conferencia de verano de USENIX, volumen 1 . USENIX . San Francisco, California: La Asociación. pag. 163.
- ^ Carole, Fennelly. "Escap Chroot" . SunWorld en línea . Carole Fennelly. Archivado desde el original el 9 de enero de 2000.
- ^ Riondato, Matteo. "Manual de FreeBSD" Capítulo "Cárceles" . freebsd.org . El Proyecto FreeBSD . Consultado el 30 de octubre de 2018 .
- ^ Nicolás, Boiteux. "cáscara de chroot" . lycos.fr . Nicolas Boiteux. Archivado desde el original el 14 de octubre de 2002 . Consultado el 24 de marzo de 2018 .
- ^ "Girafon" . girafon.org . girafon. Archivado desde el original el 12 de junio de 2004 . Consultado el 24 de marzo de 2018 .
- ^ Schmidt, Klaus (2 de septiembre de 2006). Alta disponibilidad y recuperación ante desastres: conceptos, diseño, implementación . Springer Science & Business Media. pag. 186. ISBN 9783540345824. Consultado el 21 de agosto de 2014 .
- ^ "Archivos de descarga de SourceForge LXC" . sourceforge.net . Consultado el 21 de agosto de 2014 .
- ^ Rosen, Rami (26 de marzo de 2014). "Contenedores de Linux y la nube del futuro" (PDF) . Consultado el 21 de agosto de 2014 .
- ^ "chroot (2)" . www.freebsd.org .
- ^ "Desarrollo / Howto / Chroot" . Wiki de Mandriva . 25 de julio de 2011. Archivado desde el original el 26 de marzo de 2014.
- ^ "Copia archivada" . Archivado desde el original el 31 de agosto de 2011 . Consultado el 13 de octubre de 2011 .CS1 maint: copia archivada como título ( enlace )
- ^ "Página de manual de sshd_config (5)" . 2017-10-26 . Consultado el 4 de febrero de 2018 .
- ^ "Entorno Chroot universal de Chromium OS (en github)" . Consultado el 17 de diciembre de 2016 .
enlaces externos
- : cambiar el directorio raíz - FreeBSD System Calls Manual
- : cambiar el directorio raíz - FreeBSD System Manager's Manual
- : cambiar el directorio raíz - Manual del programador de Linux - Llamadas al sistema
- Integrando GNU / Linux con Android usando chroot