it-swarm-es.tech

chroot "jail": ¿qué es y cómo lo uso?

He escuchado/leído mucho sobre la cárcel de Chroot en Linux pero nunca la he usado (uso Fedora día a día), entonces, ¿qué es una "cárcel" de Chroot? ¿Cuándo y por qué podría usarlo/no usarlo? ¿Hay algo más que deba saber? ¿Cómo haría para crear uno?

107
user119

Una cárcel chroot es una forma de aislar un proceso y sus hijos del resto del sistema. Solo debe usarse para procesos que no se ejecutan como root, ya que los usuarios root pueden salir de la cárcel muy fácilmente.

La idea es que cree un árbol de directorios donde copie o vincule todos los archivos del sistema necesarios para que se ejecute un proceso. Luego utiliza la llamada al sistema chroot() para cambiar el directorio raíz para que esté en la base de este nuevo árbol e iniciar el proceso que se ejecuta en ese entorno chroot'd. Dado que en realidad no puede hacer referencia a rutas fuera de la raíz modificada, no puede realizar operaciones (lectura/escritura, etc.) maliciosamente en esas ubicaciones.

En Linux, usar un montaje de enlace es una excelente manera de poblar el árbol chroot. Usando eso, puede extraer carpetas como /lib y /usr/lib sin tirar /usr, por ejemplo. Simplemente vincule los árboles de directorios que desea a los directorios que cree en el directorio de la cárcel.

97
Ben Combee

"chroot jail" es un nombre inapropiado que realmente debería desaparecer, pero la gente sigue usándolo. chroot es una herramienta que le permite simular un directorio en su sistema de archivos como la raíz del sistema de archivos. Eso significa que puede tener una estructura de carpetas como:

-- foo
    -- bar
    -- baz
-- bazz

Si tu chroot foo y hacer ls /, verás:

-- bar
-- baz

En lo que respecta a ls (y cualquier otra herramienta que ejecute), esos son los únicos directorios en el sistema de archivos. La razón por la cual "cárcel" es un nombre inapropiado es que chroot no está destinado a forzar un programa a permanecer en ese sistema de archivos simulado; un programa que sabe que está en una "cárcel" chroot puede escapar con bastante facilidad, por lo que no debe usar chroot como medida de seguridad para evitar que un programa modifique archivos fuera de su sistema de archivos simulado

53
Michael Mrozek

Básicamente solo está cambiando el directorio raíz de su entorno. Entonces

/

se convierte

/some-jail/ (or whatever directory you want)

Cuando una aplicación accede/obtendrán/some-jail /. Además, la aplicación no puede salir de/some-jail/para que sepa que no accederá a nada más en su máquina. Es una forma muy simple de decir 'oye, solo puedes acceder a estas cosas que te estoy dando, y no puedes acceder a nada más en el sistema.

12
jacksonh

"¿Cuándo y por qué podría usarlo?"

Un uso es probar scripts (tiempo de arranque y otros) que hacen referencias de ruta absolutas, o que ejecutan comandos que quizás desee interceptar y registrar (y tal vez no optar por ellos), en un entorno en el que no desea que esos comandos en realidad opere en su entorno de ejecución.

Por ejemplo, tengo un dispositivo integrado que ejecuta Linux, me gustaría verificar el funcionamiento de algún bash sin a) ejecutarlo en el dispositivo real (ya que tengo mejores herramientas en mi escritorio y no quiero bloquear el dispositivo) b) ejecutar de verdad en mi escritorio (ya que no quiero que mi sistema de escritorio se estropee)

Además, puede descubrir qué comandos u otros archivos de script se utilizan, ya que la ejecución se cerrará con un error cada vez que intente ejecutar un comando o script de Shell que no esté presente en la "cárcel chroot".

(Por supuesto, para ir por completo, podría ejecutar dentro de QEMU o Docker, o una VM, pero eso implicaría crear una VM imagen, etc. - mucho más trabajo)

6
MikeW