los chroot
El comando puede enviarlo a la cárcel, mantener aislados sus entornos de desarrollo o prueba, o simplemente mejorar la seguridad de su sistema. Te mostramos la forma más sencilla de utilizarlo.
¿Qué es un chroot?
Si intenta medir la utilidad de un comando, debe prestar atención la funcionalidad que brinda y su facilidad de uso. Si es demasiado complicado de utilizar para las personas o demasiado largo para que quieran intentar usarlo, la funcionalidad además podría ser cero. Si nadie lo utiliza, no proporciona ninguna funcionalidad.
En discusiones con usuarios de Linux, en persona y en foros, parece que el chroot
El comando es uno que se considera difícil de utilizar o demasiado exigente y tedioso de configurar. Parece que esta fantástica utilidad no se utiliza tanto como debería.
Con chroot
puedes configurar y ejecutar programas o shells interactivos como Bash en un sistema de archivos encapsulado que no puede interactuar con su sistema de archivos frecuente. Todo dentro del chroot
el medio ambiente está encerrado y contenido. Nada en el chroot
El entorno puede ver más allá de su propio directorio raíz especial sin escalar a los privilegios de root. Eso le ha valido a este tipo de ambiente el apodo de un chroot
celda. El término «cárcel» no debe confundirse con FreeBSD’s jail
comando, que crea un chroot
medio ambiente eso es mas seguro de lo frecuente chroot
medio ambiente.
Pero, en realidad, hay una forma muy sencilla de usar chroot
, que vamos a estudiar. Estamos usando comandos regulares de Linux que funcionarán en todas las distribuciones. Algunas distribuciones de Linux disponen herramientas dedicadas para configurar chroot
entornos, como debootstrap para Ubuntu, pero aquí estamos siendo independientes de la distribución.
¿Cuándo debería utilizar un chroot?
A chroot
El entorno proporciona una funcionalidad equivalente a la de una máquina virtual, pero es una solución más ligera. El sistema cautivo no necesita un hipervisor para ser instalado y configurado, como VirtualBox o Administrador de máquinas virtuales. Tampoco necesita tener un kernel instalado en el sistema cautivo. El sistema cautivo comparte su kernel existente.
En algunos sentidos, chroot
entornos están más cerca de contenedores como LXC que a las máquinas virtuales. Son livianos, rápidos de poner en práctica y la creación y activación de uno se puede automatizar. Del mismo modo que los contenedores, una forma conveniente de configurarlos es instalar lo suficiente del sistema operativo para que pueda lograr lo que se necesita. La pregunta «qué se necesita» se responde observando cómo va a usar su chroot
medio ambiente.
Algunos usos comunes son:
Desarrollo de software y verificación de productos. Los desarrolladores escriben software y el equipo de verificación del producto (PV) lo prueba. A veces, PV detecta problemas que no se pueden replicar en la computadora del desarrollador. El desarrollador tiene todo tipo de herramientas y bibliotecas instaladas en su computadora de desarrollo que el usuario promedio (y PV) no tendrá. A menudo, el software nuevo que funciona para el desarrollador pero no para otros resulta estar usando un recurso en la PC del desarrollador que no se ha incluido en la versión de prueba del software. chroot
posibilita a los desarrolladores tener un entorno cautivo simple en su computadora en el que pueden sumergir el software antes de dárselo a PV. El entorno cautivo se puede configurar con las dependencias mínimas que necesita el software.
Reducir el riesgo de desarrollo. El desarrollador puede crear un entorno de desarrollo dedicado para que nada de lo que suceda en él pueda estropear su PC real.
Ejecución de software obsoleto. A veces solo debes de tener una versión antigua de algo en ejecución. Si el software antiguo tiene requerimientos que entrarían en conflicto o serían incompatibles con su versión de Linux, puede chroot
un entorno para el software problemático.
Actualizaciones de recuperación y sistema de archivos: Si una instalación de Linux deja de funcionar, puede usar chroot
para montar el sistema de archivos dañado en un punto de montaje en un Live CD. Esto le posibilita trabajar en el sistema dañado e intentar arreglarlo como si estuviera montado regularmente en root /. Esto significa que las rutas de archivo esperadas dentro del sistema dañado serán referenciadas correctamente desde el directorio raíz y no desde el punto de montaje del Live CD. Se utilizó una técnica equivalente en el post que describe cómo migrar el sistema de archivos de Linux de ext2 o ext3 a ext4.
Aplicaciones de Ringfencing. Ejecutar un servidor FTP u otro dispositivo conectado a Internet dentro de un chroot
El entorno limita el daño que puede hacer un atacante externo. Este puede ser un paso valioso para fortalecer la seguridad de su sistema.
RELACIONADO: Cómo migrar sistemas de archivos Ext2 o Ext3 a Ext4 en Linux
Crear un entorno chroot
Necesitamos un directorio que actúe como directorio raíz del chroot
medio ambiente. Para que tengamos una forma abreviada de referirnos a ese directorio, crearemos una variable y almacenaremos el nombre del directorio en ella. Aquí estamos configurando una variable para guardar una ruta al directorio «testroot». No importa si este directorio aún no existe, lo crearemos pronto. Si el directorio existe, debería estar vacío.
chr=/home/dave/testroot
Si el directorio no existe, debemos crearlo. Podemos hacer eso con este comando. los -p
La opción (padres) garantiza que los directorios principales que falten se creen al mismo tiempo:
mkdir -p $chr
Necesitamos crear directorios para contener las partes del sistema operativo chroot
el medio ambiente lo requerirá. Vamos a configurar un entorno Linux minimalista que utiliza Bash como shell interactivo. Además incluiremos el touch
, rm
, y ls
comandos. Eso nos permitirá utilizar todos los comandos integrados de Bash y touch
, rm
, y ls
. Lograremos crear, enumerar y quitar archivos y utilizar Bash. Y, en este sencillo ejemplo, eso es todo.
Enumere los directorios que necesita crear dentro del {}
expansión del corsé.
mkdir -p $chr/{bin,lib,lib64}
Ahora cambiaremos el directorio a nuestro nuevo directorio raíz.
cd $chr
Copiemos los binarios que necesitamos en nuestro entorno Linux minimalista de su directorio «/ bin» frecuente en nuestro chroot
Directorio «/ bin». los -v
La opción (detallada) hace cp
díganos qué está haciendo mientras realiza cada acción de copia.
cp -v /bin/{bash,touch,ls,rm} $chr/bin
Los archivos se copian para nosotros:
Estos binarios tendrán dependencias. Necesitamos descubrir cuáles son y copiar aquellos archivos en nuestro entorno además, caso contrario bash
, touch
, rm
, y ls
no podrá funcionar. Necesitamos hacer esto a su vez para cada uno de nuestros comandos elegidos. Primero haremos Bash. los ldd
el comando será enumerar las dependencias para nosotros.
ldd /bin/bash
Las dependencias se identifican y enumeran en la ventana de la terminal:
Necesitamos copiar esos archivos en nuestro nuevo entorno. Elegir los detalles de esa lista y copiarlos uno al mismo tiempo llevará mucho tiempo y será propenso a errores.
Por suerte, podemos semiautomatizarlo. Enumeraremos las dependencias nuevamente, y esta vez formaremos una lista. Después recorreremos la lista copiando los archivos.
Aquí estamos usando ldd
para enumerar las dependencias y alimentar los resultados a través de una tubería en egrep
. Usando egrep
es lo mismo que utilizar grep
con el -E
(expresiones regulares extendidas). los -o
La opción (solo coincidencia) restringe la salida a las partes coincidentes de las líneas. Estamos buscando archivos de biblioteca coincidentes que terminen en un número [0-9]
.
list="$(ldd /bin/bash | egrep -o '/lib.*.[0-9]')"
Podemos verificar el contenido de la lista usando echo
:
echo $list
Ahora que tenemos la lista, podemos recorrerla con el siguiente ciclo, copiando los archivos de uno en uno. Estamos usando la variable i
para recorrer la lista. Para cada miembro de la lista, copiamos el archivo a nuestro chroot
directorio raíz que es el valor contenido en $chr
.
los -v
(detallado) opción causas cp
para anunciar cada copia a medida que la realiza. los --parents
La opción garantiza que los directorios principales que falten se creen en la chroot
medio ambiente.
for i in $list; do cp -v --parents "$i" "${chr}"; done
Y esta es la salida:
Usaremos esa técnica para capturar las dependencias de cada uno de los otros comandos. Y usaremos la técnica de bucle para realizar la copia real. La buena noticia es que solo necesitamos hacer una pequeña edición en el comando que reúne las dependencias.
Podemos recuperar el comando de nuestro historial de comandos presionando el botón Up Arrow
clave unas cuantas veces y posteriormente haga la edición. El comando de copia en bucle no necesita cambiar en absoluto.
Aquí hemos usado el Up Arrow
para hallar el comando, y lo hemos editado para que diga touch
en lugar de bash
.
list="$(ldd /bin/touch | egrep -o '/lib.*.[0-9]')"
Ahora podemos repetir exactamente el mismo comando de bucle que antes:
for i in $list; do cp -v --parents "$i" "${chr}"; done
Y nuestros archivos se copian para nosotros:
Ahora podemos editar el list
línea de comando para ls
:
list="$(ldd /bin/ls | egrep -o '/lib.*.[0-9]')"
Nuevamente, usaremos el mismo comando de bucle. No le importa qué archivos hay en el listado. Trabaja a ciegas a través de la lista copiando los archivos por nosotros.
for i in $list; do cp -v --parents "$i" "${chr}"; done
Y las dependencias para ls
se copian para nosotros:
Editamos el list
línea de comandos por última vez, lo que lo hace funcionar para rm
:
list="$(ldd /bin/ls | egrep -o '/lib.*.[0-9]')"
Usamos el comando de copia en bucle una última vez:
for i in $list; do cp -v --parents "$i" "${chr}"; done
La última de nuestras dependencias se copia en nuestro chroot
medio ambiente. Por último estamos listos para utilizar el chroot
mando. Este comando establece la raíz del chroot
entorno y especifica qué aplicación ejecutar como shell.
sudo chroot $chr /bin/bash
Nuestro chroot
el entorno ahora está activo. El indicador de la ventana de terminal ha cambiado y el shell interactivo está siendo manejado por el bash
shell en nuestro entorno.
Podemos probar los comandos que hemos traído al entorno.
ls
ls /home/dave/Documents
los ls
El comando funciona como esperaríamos cuando lo usamos dentro del entorno. Cuando intentamos entrar a un directorio fuera del entorno, el comando falla.
Nosotros podemos utilizar touch
para crear un archivo, ls
para enumerarlo, y rm
para eliminarlo.
touch sample_file.txt
ls
rm sample_file.txt
ls
De todos modos, además podemos utilizar los comandos integrados que proporciona el shell Bash. Si escribe help
en la línea de comando, Bash los listará por usted.
help
Use exit para salir del chroot
medio ambiente:
exit
Si desea quitar el chroot
entorno, simplemente puede eliminarlo:
rm -r testroot/
Esto eliminará de forma recursiva los archivos y directorios en el chroot
medio ambiente.
Automatizar para mayor comodidad
Si estas pensando eso chroot
Los entornos pueden ser útiles para usted, pero son un poco complicados de configurar, recuerde que siempre puede quitar la tensión y el riesgo de las tareas repetitivas a través de el uso de alias, funciones y scripts.
RELACIONADO: Cómo crear alias y funciones de shell en Linux