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.