stringtranslate.com

chroot

chrootes una operación en Unix y sistemas operativos similares a Unix que cambia el directorio raíz aparente para el 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 su sistema de compilación. [1] Todas las versiones de BSD que tenían kernel 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 a un hacker en 1991. [4]

El primer artículo sobre jailbreak se analizó en la columna de seguridad de SunWorld Online, escrita 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 amplió 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 proporcionaron servicios SAAS/PAAS (contenedores shell, proxy, ircd, bots, ...) facturados por 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 el cual 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 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 ser útil para:

Pruebas y desarrollo
Se puede configurar un entorno de prueba en el chroot para software que, de otro modo, sería demasiado arriesgado 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 las dependencias esperadas. Esto puede evitar algunos tipos de vínculos sesgados que pueden resultar de que los desarrolladores creen proyectos con diferentes conjuntos de bibliotecas de programas instaladas.
Compatibilidad
El software heredado o el software que utiliza una ABI diferente a veces debe ejecutarse en un chroot porque, de lo contrario, sus bibliotecas o archivos de datos de soporte pueden chocar en nombre o vínculo con los del sistema host.
Recuperación
Si un sistema no se puede arrancar, se puede utilizar un chroot para volver al entorno dañado después de arrancar desde un sistema de archivos raíz alternativo (como desde 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 la disposición común de ejecutar las partes potencialmente vulnerables de un programa privilegiado en un sandbox, con el fin de contener de forma preventiva 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 pretende defenderse contra la manipulación intencional por parte de usuarios privilegiados (root). Una excepción notable es NetBSD , en el que chroot se considera un mecanismo de seguridad y no se conocen escapes. En la mayoría de los sistemas, los contextos chroot no se acumulan correctamente y los programas chroot con privilegios suficientes pueden realizar un segundo chroot para salir. Para mitigar el riesgo de estas debilidades de seguridad, los programas chroot deben renunciar a los privilegios de root tan pronto como sea posible después del chroot, o se deben utilizar otros mecanismos, como las cárceles de FreeBSD , en su lugar. Tenga en cuenta que algunos sistemas, como FreeBSD , toman precauciones para evitar un segundo ataque chroot. [12]

En sistemas que admiten nodos de dispositivos en sistemas de archivos normales, un usuario root con chroot aún puede crear nodos de dispositivos y montar los sistemas de archivos en ellos; por lo tanto, el mecanismo chroot no está diseñado por sí solo para bloquear el acceso de bajo nivel a dispositivos del sistema por parte de usuarios privilegiados. No pretende restringir el uso de recursos como E/S , ancho de banda, espacio en disco o tiempo de CPU. La mayoría de Unixes no están completamente orientados al sistema de archivos y dejan funcionalidades potencialmente disruptivas, como redes y control de procesos, disponibles a través de la interfaz de llamada del sistema para un programa chroot.

Al inicio, los programas esperan encontrar espacio temporal , archivos de configuración, nodos de dispositivos y bibliotecas compartidas en ciertas ubicaciones preestablecidas. Para que un programa chroot se inicie correctamente, el directorio chroot debe estar poblado con un conjunto mínimo de estos archivos. Esto puede hacer que chroot sea difícil de usar como mecanismo general de espacio aislado. Herramientas como Jailkit pueden ayudar a facilitar y automatizar este proceso.

Sólo el usuario root puede realizar un chroot. Esto tiene como objetivo evitar que los usuarios coloquen un programa setuid dentro de una cárcel chroot especialmente diseñada (por ejemplo, con un archivo /etc/passwd y /etc/shadow falso ) que lo engañaría y provocaría 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 chroot, utilizando métodos como: [13] [14]

Aplicaciones notables

El agente de transferencia de correo Postfix opera como una canalización de programas auxiliares con chroot individual.

Al igual que 4.2BSD antes, las granjas de creación de paquetes internas de Debian y Ubuntu utilizan 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 otras 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 proteger a clientes FTP que no son de confianza. Esto se puede hacer bifurcando un proceso para manejar una conexión entrante y luego haciendo chroot al niño (para evitar tener que llenar el chroot con las bibliotecas necesarias para el inicio del programa).

Si la separación de privilegios está habilitada, el demonio OpenSSH direccionará un proceso auxiliar sin privilegios a un directorio vacío para manejar el tráfico de red de autenticación previa para cada cliente. El demonio también puede proteger sesiones SFTP y shell en un chroot (desde la versión 4.9p1 en adelante). [dieciséis]

ChromeOS puede usar un chroot para ejecutar una instancia de Linux usando Crouton , [17] proporcionando a un sistema operativo delgado 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 de 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 del host al chroot.

# Montar sistemas de archivos virtuales del kernel TARGETDIR = "/mnt/chroot"
mount  -t  proc  proc $TARGETDIR /proc montar  -t  sysfs  sysfs $TARGETDIR /sys montar  -t  devtmpfs  devtmpfs $TARGETDIR /dev montaje  -t  tmpfs  tmpfs $TARGETDIR /dev/shm montar  -t  devpts  devpts $TARGETDIR /dev/pts # Copiar /etc/hosts
/bin/cp  -f  /etc/hosts $TARGETDIR /etc/ # Copiar /etc/resolv.conf
/bin/cp  -f  /etc/resolv.conf $TARGETDIR /etc/resolv.conf # Enlace /etc/mtab
chroot $TARGETDIR rm /etc/mtab 2 > /dev/null
chroot $TARGETDIR ln -s /proc/mounts /etc/mtab           

Ver también

Referencias

  1. ^ "cárcel, sección 9". docs.freebsd.org . Archivado desde el original el 5 de enero de 2017 . Consultado el 14 de marzo de 2016 .
  2. ^ Losh, Warner (2 de febrero de 2000). "Blog de piratería aleatoria de Warner: ¿Adónde va chroot?". Archivado desde el original el 28 de junio de 2020 . Consultado el 28 de junio de 2020 .
  3. ^ "Infraestructuras de datos para el resto de nosotros - III - software". Archivado desde el original el 30 de junio de 2020 . Consultado el 28 de junio de 2020 .
  4. ^ Cheswick, Bill (1991). "Una velada con Berferd: en la que se atrae, se soporta y se estudia una galleta" (PDF) . Actas de la conferencia de verano de USENIX, volumen 1 . USENIX . San Francisco, California: La Asociación. pag. 163. Archivado (PDF) desde el original el 5 de noviembre de 2018 . Consultado el 9 de junio de 2018 .
  5. ^ Carole, Fennelly. "Comida compartida de verano". SunWorld en línea . Carole Fennelly. Archivado desde el original el 28 de septiembre de 2021.
  6. ^ Riondato, Matteo. Capítulo "Cárceles" del "Manual de FreeBSD". freebsd.org . El proyecto FreeBSD. Archivado desde el original el 15 de agosto de 2014 . Consultado el 30 de octubre de 2018 .
  7. ^ Nicolás, Boiteux. "shell chroot". lycos.fr . Nicolás Boiteux. Archivado desde el original el 14 de octubre de 2002 . Consultado el 24 de marzo de 2018 .
  8. ^ "Girafón". girafon.org . girafón. Archivado desde el original el 12 de junio de 2004 . Consultado el 24 de marzo de 2018 .
  9. ^ Schmidt, Klaus (2 de septiembre de 2006). Alta disponibilidad y recuperación ante desastres: conceptos, diseño, implementación. Medios de ciencia y negocios de Springer. pag. 186.ISBN _ 9783540345824. Archivado desde el original el 2023-02-20 . Consultado el 21 de agosto de 2014 .
  10. ^ "Descargar archivos de SourceForge LXC". fuenteforge.net . Archivado desde el original el 19 de agosto de 2014 . Consultado el 21 de agosto de 2014 .
  11. ^ Rosen, Rami (26 de marzo de 2014). "Los contenedores Linux y la nube del futuro" (PDF) . Archivado (PDF) desde el original el 18 de abril de 2016 . Consultado el 21 de agosto de 2014 .
  12. ^ "chroot(2)". www.freebsd.org . Archivado desde el original el 18 de septiembre de 2020 . Consultado el 2 de diciembre de 2020 .
  13. ^ "Desarrollo/Cómo/Chroot". MandrivaWiki . 25 de julio de 2011. Archivado desde el original el 26 de marzo de 2014.
  14. ^ "CÓMO iniciarx en un chroot". Wiki Gentoo . Archivado desde el original el 31 de agosto de 2011 . Consultado el 13 de octubre de 2011 .
  15. ^ David, Redfield (10 de octubre de 2023). "Atoms es una herramienta de administración de Chroot de Linux con una GUI fácil de usar".
  16. ^ "página de manual sshd_config(5)". 2017-10-26. Archivado desde el original el 5 de febrero de 2018 . Consultado el 4 de febrero de 2018 .
  17. ^ "Entorno Chroot universal de Chromium OS (en github)". GitHub . Archivado desde el original el 25 de noviembre de 2016 . Consultado el 17 de diciembre de 2016 .

enlaces externos