Un indicador de terminal en la pantalla de una computadora portátil con Linux.

Cómo usar el comando chroot en Linux

Fatmawati Achmad Zaenuri / Shutterstock.com

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 está tratando de medir la utilidad de un comando, debe considerar la funcionalidad que ofrece y lo fácil que es de usar. Si es demasiado complicado para que las personas lo usen o demasiado largo para que quieran intentar usarlo, la funcionalidad también podría ser una mierda. Si nadie lo está usando, no proporciona ninguna funcionalidad.

En discusiones con usuarios de Linux, en persona y en foros, parece que el chroot El comando se considera difícil de usar o demasiado complicado y tedioso de configurar. Parece que esta gran utilidad no se está utilizando tanto como debería.

Con chroot puedes configurar y ejecutar programas interactivos o shells como Bash en un sistema de archivos encapsulado que no puede interactuar con su sistema de archivos normal. Todo en el chroot El ambiente está estacionado y contenido. Nada en el chroot El entorno puede ver más allá de su propio directorio raíz especial sin tener que acceder a los privilegios de root. Esto le ha valido a este tipo de entorno el apodo chroot prisión. El término «prisión» no debe confundirse con FreeBSD jail comando, que crea un chroot medio ambiente es más seguro que de costumbre chroot medio ambiente.

Pero, de hecho, hay una forma muy fácil de usar. chroot, que atravesaremos. Usamos 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í somos independientes de la distribución.

¿Cuándo deberías usar un chroot?

A chroot El 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 Dónde Administrador de máquinas virtuales. Tampoco necesita tener un kernel instalado en el sistema cautivo. El sistema cautivo comparte su kernel existente.

En algún sentido chroot entornos están más cerca de contenedores como LXC que las máquinas virtuales. Son livianos, rápidos de implementar y la creación y el lanzamiento de herramientas se pueden automatizar. Al igual que los contenedores, una forma conveniente de configurarlos es instalar el sistema operativo suficiente para que pueda lograr lo que se requiere. La pregunta «qué se requiere» se responde observando cómo va a utilizar 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 de productos (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 estaba 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 empapar el software antes de dárselo a PV. El entorno cautivo se puede configurar con el mínimo de dependencias requeridas por el software.

Reducir el riesgo de desarrollo. El desarrollador puede crear un entorno de desarrollo dedicado para que nada de lo que suceda allí pueda estropear su PC real.

Ejecutando software obsoleto. A veces es suficiente tener una versión antigua de algo en ejecución. Si el software antiguo tiene requisitos que entran en conflicto o son incompatibles con su versión de Linux, puede chroot un entorno para el software problemático.

Recuperación y actualizaciones del sistema de archivos: Si una instalación de Linux se vuelve inutilizable, puede usar 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 en el 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 acantonamiento. Ejecutar un servidor FTP u otro dispositivo conectado a Internet en un chroot El entorno limita el daño que puede hacer un atacante externo. Este puede ser un paso valioso para hacer que su sistema sea más seguro.

Crea un entorno chroot

Necesitamos un directorio que actúe como directorio raíz del chroot medio ambiente. Para que tengamos un atajo para referirnos a este 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, debe estar vacío.

chr=/home/dave/testroot

Si el directorio no existe, debemos crearlo. Podemos hacerlo con este comando. los -p (padres) garantiza que todos los directorios principales que faltan se creen al mismo tiempo:

mkdir -p $chr

Necesitamos crear directorios que contengan las partes del sistema operativo que chroot el medio ambiente lo demandará. Vamos a configurar un entorno Linux minimalista que utiliza Bash como shell interactivo. También incluiremos el touch, rm, y ls pedidos. Esto nos permitirá usar todos los comandos integrados de Bash y touch, rm, y ls. Podremos crear, listar y eliminar archivos y usar Bash. Y, en este simple ejemplo, eso es todo.

Enumere los directorios que necesita crear en el {} extensión de la abrazadera.

mkdir -p $chr/{bin,lib,lib64}

Ahora vamos a cambiar de directorio a nuestro nuevo directorio raíz.

cd $chr

Copiemos los binarios que necesitamos en nuestro entorno Linux minimalista de su directorio habitual «/ bin» en nuestro chroot Directorio «/ bin». los -v La opción (detallada) no cp díganos qué hace 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 averiguar cuáles son y copiar estos archivos en nuestro entorno también, de lo contrario bash, touch, rm, y ls no podrá trabajar. Tenemos que hacer esto a su vez para cada uno de nuestros comandos elegidos. Primero haremos Bash. los ldd la orden será listar dependencias para nosotros.

ldd /bin/bash

Las dependencias se identifican y enumeran en la ventana de la terminal:

Necesitamos copiar estos archivos a nuestro nuevo entorno. Elegir los detalles de esta lista y copiarlos uno por uno llevará mucho tiempo y será propenso a errores.

Afortunadamente, podemos semiautomatizarlo. Vamos a enumerar las dependencias nuevamente, y esta vez vamos a formar una lista. A continuación, revisaremos la lista copiando los archivos.

Aquí usamos ldd para enumerar las dependencias y alimentar los resultados a través de una tubería en egrep. En ayuda de egrep es lo mismo que usar grep con el -E (expresiones regulares extendidas). los -o (solo coincidencia) restringe la salida a las partes coincidentes de las líneas. Buscamos archivos de biblioteca coincidentes que terminen con 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. Usamos la variable i para navegar por 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) debido a la opción cp anunciar cada copia a medida que la realiza. los --parents La opción asegura que todos los directorios principales que faltan se creen en el chroot medio ambiente.

for i in $list; do cp -v --parents "$i" "${chr}"; done

Y aquí está la salida:

Usaremos esta técnica para capturar las dependencias de cada uno de los otros comandos. Y usaremos la técnica de bucle para hacer la copia real. La buena noticia es que solo tenemos que hacer un pequeño cambio en el comando que reúne las dependencias.

Podemos recuperar el pedido de nuestro historial de pedidos presionando el botón Up Arrow toca varias veces y luego edita. El comando de copia de bucle no necesita cambiar en absoluto.

Aquí hemos utilizado el Up Arrow para encontrar el comando, y lo modificamos para decir 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 importa qué archivos estén en la lista. Está trabajando ciegamente en la lista copiando los archivos para 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 de bucle una última vez:

for i in $list; do cp -v --parents "$i" "${chr}"; done

La última de nuestras dependencias se copia a nuestro chroot medio ambiente. Finalmente estamos listos para usar el chroot pedido. 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 medio ambiente ahora está activo. El indicador de la ventana de terminal ha cambiado y el shell interactivo es manejado por el bash shell en nuestro entorno.

Podemos probar los comandos que le hemos hecho al entorno.

ls
ls /home/dave/Documents

los ls El comando funciona como se esperaba cuando lo usamos en el entorno. Cuando intentamos acceder a un directorio fuera del entorno, el comando falla.

Nosotros podemos usar touch para crear un archivo, ls para enumerarlo, y rm para eliminarlo.

touch sample_file.txt
ls
rm sample_file.txt
ls

Por supuesto, también podemos usar los comandos integrados proporcionados por el shell Bash. Si escribe help en la línea de comando, Bash los listará por usted.

help

Utilice la salida para salir del chroot medio ambiente:

exit

Si desea eliminar 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 lo crees chroot Los entornos pueden ser útiles para ti, pero son un poco complicados de configurar, recuerda que siempre puedes reducir el estrés y el riesgo de tareas repetitivas usando alias, funciones y scripts.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Experto Geek - Tu Guía en Tendencias Tecnológicas