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

99

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?


fuente
Las respuestas aquí parecen ser cortas en la categoría "¿Cómo lo uso?" :(
Alexander Mills

Respuestas:

88

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 crear un árbol de directorios donde copie o vincule todos los archivos del sistema necesarios para que se ejecute un proceso. Luego usa la chroot()llamada del sistema para cambiar el directorio raíz para estar en la base de este nuevo árbol e iniciar el proceso que se ejecuta en ese entorno chroot. 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 tirar carpetas como /liby /usr/libsin tirar /usr, por ejemplo. Simplemente vincule los árboles de directorios que desea a los directorios que cree en el directorio de la cárcel.

Ben Combee
fuente
10
Tu respuesta es genial. Sin embargo, una cosa para mencionar es que chroot no es un mecanismo seguro (un proceso puede salir de la cárcel si se convierte en root y, a veces, incluso si no). Las cárceles reales pueden imponerse con cárceles freebsd y similares. Vea esto en.wikipedia.org/wiki/FreeBSD_jail#Similar_technologies
nc3b
3
El proceso de instalación de Gentoo utiliza un chroot para que pueda configurar su nuevo sistema operativo antes de instalar GRUB y el kernel de Linux, etc.
Chris Huang-Leaver
3
Eche un vistazo a firejail para obtener un shell encarcelado completo con todos los espacios de nombres de Linux. Hay paquetes deb y rpm disponibles. En general, recomendaría el kernel 3.18 o posterior, sin embargo, debido a un problema conocido con la imposibilidad de instalar un nuevo software o de administrar usuarios cuando se firejailestá ejecutando.
CivFan
¡Gran respuesta! - aunque sería bueno ver algunos ejemplos básicos.
Gabriel Staples
¿Puede un usuario bajo chroot jail llamar a archivos binarios ubicados debajo de los /binque instala el usuario root? @Ben Combee
Alper
50

"chroot jail" es un nombre inapropiado que realmente debería desaparecer, pero la gente sigue usándolo. chrootes 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 usted chroot fooy lo hace ls /, verá:

-- 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 chrootno tiene la intención de obligar a un programa a permanecer en ese sistema de archivos simulado; un programa que sabe que está en una "cárcel" chroot puede escapar fácilmente, por lo que no debe usarlo chrootcomo medida de seguridad para evitar que un programa modifique archivos fuera de su sistema de archivos simulado

Michael Mrozek
fuente
16
Sería útil tener un ejemplo de cómo escapar de una chroot"cárcel". El caso que he visto requiere escalar a privilegios de root. ¿Es difícil evitar que un proceso se convierta en privilegios de root?
CivFan
44
Todavía es "encierro", por lo que "cárcel" es una buena taquigrafía. ¿Sería mejor el "campo de contención de nivel 3"?
MikeW
44
El término proviene de las cárceles de FreeBSD. Las cárceles están construidas sobre chroot. Las cárceles estaban destinadas a resolver los problemas de seguridad chrootno. Por esta razón, las personas a menudo se mezclan chrooty jailssignifican lo mismo. Ellos no. Se dice que el término "cárcel" fue acuñado por Bill Cheswick cuando creó un honeypot para atrapar una galleta: csrc.nist.gov/publications/secpubs/berferd.pdf
BugHunterUK
Entonces, ¿no crees que usar chroot jailuna buena idea en mi caso ?
Shafizadeh
10

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.

jacksonh
fuente
6

"¿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, puedes ejecutar QEMU o Docker, o una VM, pero eso implicaría crear una imagen de VM, etc., mucho más trabajo)

MikeW
fuente