El chroot
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.
Si intenta medir la utilidad de un comando, debe tener en cuenta la funcionalidad que brinda y su facilidad de uso. Si es demasiado complicado para que la gente lo use o demasiado largo para que quieran intentar usarlo, la funcionalidad también podría ser cero. Si nadie lo usa, no proporciona ninguna funcionalidad.
En las discusiones con usuarios de Linux, en persona y en foros, parece que el chroot
comando es uno que se considera difícil de usar o demasiado exigente y tedioso de configurar. Parece que esta fantástica utilidad no se usa tanto como debería.
Con chroot
puede configurar y ejecutar programas o shells interactivos como Bash en un sistema de archivos encapsulado que no puede interactuar con su sistema de archivos habitual. Todo lo que hay en el chroot
entorno está encerrado y contenido. Nada en el chroot
entorno puede ver más allá de su propio directorio raíz especial sin escalar a privilegios de root. Eso le ha valido a este tipo de entornos el sobrenombre de chroot
cárcel. El término «cárcel» no debe confundirse con el jail
comando de FreeBSD , que crea un chroot
entorno que es más seguro que el chroot
entorno habitual .
Pero en realidad, hay una forma muy sencilla de usar chroot
, que vamos a analizar. Estamos usando comandos regulares de Linux que funcionarán en todas las distribuciones. Algunas distribuciones de Linux tienen herramientas dedicadas para configurar chroot
entornos, como debootstrap para Ubuntu, pero aquí estamos siendo independientes de la distribución.
Un chroot
entorno proporciona una funcionalidad similar 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 Virtual Machine Manager . Tampoco necesita tener un kernel instalado en el sistema cautivo. El sistema cautivo comparte su núcleo existente.
En algunos sentidos, los chroot
entornos están más cerca de contenedores como LXC que de máquinas virtuales. Son livianos, rápidos de implementar y la creación y activación de uno se puede automatizar. Al igual que los contenedores, una forma conveniente de configurarlos es instalar lo suficiente del sistema operativo para que pueda lograr lo que se requiere. La pregunta de “qué se requiere” se responde observando cómo va a utilizar su chroot
entorno.
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
permite 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 requiere 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 tienes que tener una versión antigua de algo en ejecución. Si el software antiguo tiene requisitos que entrarían en conflicto o serían incompatibles con su versión de Linux, puede crear chroot
un entorno para el software problemático.
Recuperación y actualizaciones del sistema de archivos : si una instalación de Linux deja de funcionar, puede utilizar chroot
para montar el sistema de archivos dañado en un punto de montaje en un Live CD. Esto le permite trabajar en el sistema dañado e intentar arreglarlo como si estuviera montado normalmente 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 similar en el artículo que describe cómo migrar el sistema de archivos de Linux de ext2 o ext3 a ext4.
Aplicaciones de Ringfencing . La ejecución de un servidor FTP u otro dispositivo conectado a Internet dentro de un chroot
entorno limita el daño que puede causar un atacante externo. Este puede ser un paso valioso para fortalecer la seguridad de su sistema.
Necesitamos un directorio que actúe como directorio raíz del chroot
entorno. 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 almacenar 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 = / inicio / dave / testroot
Si el directorio no existe, debemos crearlo. Podemos hacer eso con este comando. La -p
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
que requerirá nuestro entorno. Vamos a configurar un entorno Linux minimalista que utiliza Bash como shell interactivo. También incluiremos los touch
, rm
y ls
los comandos. Eso nos permitirá utilizar todas de golpe integrado en los comandos y touch
, rm
y ls
. Podremos crear, enumerar y eliminar archivos y usar Bash. Y, en este sencillo ejemplo, eso es todo.
Enumere los directorios que necesita crear dentro de la {}
expansión de llaves .
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 desde su directorio chroot
“/ bin” habitual en nuestro directorio “/ bin”. La -v
opción (detallada) hace cp
que nos diga lo que está haciendo mientras realiza cada acción de copia.
cp -v / bin / {bash, touch, ls, rm} $ chr
Los archivos se copian para nosotros:
Estos binarios tendrán dependencias. Necesitamos descubrir lo que son y copiar los archivos en nuestro entorno, así, de lo contrario bash
, touch
, rm
, y ls
no será capaz de funcionar. Necesitamos hacer esto a su vez para cada uno de nuestros comandos elegidos. Primero haremos Bash. El ldd
comando enumerará las dependencias por nosotros.
ldd / bin / bash
Las dependencias se identifican y enumeran en la ventana de la terminal:
Necesitamos copiar esos archivos en nuestro nuevo entorno. Seleccionar los detalles de esa lista y copiarlos uno a la vez llevará mucho tiempo y será propenso a errores.
Afortunadamente, podemos semiautomatizarlo. Enumeraremos las dependencias nuevamente, y esta vez formaremos una lista. Luego 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
. Usar egrep
es lo mismo que usar grep
con la -E
opción (expresiones regulares extendidas). La -o
opción (única 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 uno por 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 $chr
.
La -v
opción (detallada) hace cp
que se anuncie cada copia a medida que la realiza. La --parents
opción garantiza que los directorios principales que falten se creen en el chroot
entorno.
para i en $ list; hacer cp -v --parents "$ i" "$ {chr}"; hecho
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 Up Arrow
presionando la tecla varias veces y luego hacer la edición. El comando de copia en bucle no necesita cambiar en absoluto.
Aquí hemos usado la Up Arrow
clave para encontrar el comando y lo hemos editado para decir en touch
lugar de bash
.
list = "$ (ldd / bin / touch | egrep -o '/lib.*\.[0-9]')"
Ahora podemos repetir exactamente el mismo comando de bucle que antes:
para i en $ list; hacer cp -v --parents "$ i" "$ {chr}"; hecho
Y nuestros archivos se copian para nosotros:
Ahora podemos editar la list
línea de comando para ls
:
lista = "$ (ldd / bin / ls | egrep -o '/lib.*\.[0-9]')"
Nuevamente, usaremos el mismo comando de bucle. No le importa qué archivos estén en la lista. Trabaja a ciegas a través de la lista copiando los archivos por nosotros.
para i en $ list; hacer cp -v --parents "$ i" "$ {chr}"; hecho
Y las dependencias de ls
se copian para nosotros:
Editamos la list
línea de comando por última vez, haciéndola funcionar para rm
:
lista = "$ (ldd / bin / ls | egrep -o '/lib.*\.[0-9]')"
Usamos el comando de copia en bucle una última vez:
para i en $ list; hacer cp -v --parents "$ i" "$ {chr}"; hecho
Las últimas de nuestras dependencias se copian en nuestro chroot
entorno. Finalmente estamos listos para usar el chroot
comando. Este comando establece la raíz del chroot
entorno y especifica qué aplicación ejecutar como shell.
sudo chroot $ chr / bin / bash
Nuestro chroot
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 / Documentos
El ls
comando funciona como esperaríamos cuando lo usamos dentro del entorno. Cuando intentamos acceder a un directorio fuera del entorno, el comando falla.
Podemos usar touch
para crear un archivo, ls
listarlo y rm
eliminarlo.
toque sample_file.txt
ls
rm sample_file.txt
ls
Por supuesto, también podemos usar los comandos integrados que proporciona el shell Bash. Si escribe help
en la línea de comando, Bash los listará por usted.
ayuda
Utilice exit para salir del chroot
entorno:
salida
Si desea eliminar el chroot
entorno, simplemente puede eliminarlo:
rm -r testroot /
Esto eliminará de forma recursiva los archivos y directorios del chroot
entorno.
Si está pensando que los chroot
entornos pueden ser útiles para usted, pero son un poco complicados de configurar, recuerde que siempre puede eliminar la tensión y el riesgo de las tareas repetitivas utilizando alias, funciones y scripts.
El mundo del gaming ha experimentado un crecimiento exponencial en los últimos años. La…
Stokkete/Shutterstock.com ¿Sigue utilizando una unidad flash USB obsoleta para almacenar sus archivos? ¿Por qué no…
LG Los fabricantes siempre intentan mejorar el rendimiento de imagen de los monitores. Como resultado,…
Patty Chan/Shutterstock.com Si cree en lo que ve en las redes sociales, puede pensar en…
Seksan.TH/Shutterstock.com Los servicios de suscripción como Netflix, Game Pass y Spotify nos permiten consumir tantas…
fatmawati achmad zaenuri/Shutterstock El acceso a Internet, oa cualquier otra red, se rige por la…