chroot(2)

NOMBRE
chroot - cambia el directorio raíz

BIBLIOTECA
Biblioteca Estándar C (libc, -lc)

SINOPSIS
#include <unistd.h>

int chroot(const char *ruta);

    Requisitos de Macros de Prueba de Características para glibc (véase feature_test_macros(7)):

chroot():
    A partir de glibc 2.2.2:
        _XOPEN_SOURCE && ! (_POSIX_C_SOURCE >= 200112L)
            || /* A partir de glibc 2.20: */ _DEFAULT_SOURCE
            || /* glibc <= 2.19: */ _BSD_SOURCE
    Antes de glibc 2.2.2:
        ninguno

DESCRIPCIÓN
chroot() cambia el directorio raíz al definido en ruta. Este directorio será usado como raíz para aquellos nombres de ruta que comiencen por /. El directorio raíz es heredado por todos los descendientes del proceso actual.

Sólo los procesos privilegiados (en Linux serán aquello con la capacidad CAP_SYS_CHROOT en su espacio de nombre de usuario) puede invocar chroot().

Esta llamada modifica un componente del proceso de resolución de rutas de acceso y no realiza ninguna otra acción. En particular, no está diseñada para fines de seguridad, ni para aislar completamente un proceso ni para restringir las llamadas al sistema de archivos. Anteriormente, los «demonios» utilizaban chroot() para restringirse antes de pasar las rutas proporcionadas por usuarios no confiables a llamadas del sistema como open(2). Sin embargo, si una carpeta se mueve fuera del directorio chroot, un atacante puede aprovechar esta situación para salir también de él. La forma más sencilla de hacerlo es usar chdir(2) para ir al directorio que se va a mover, esperar a que se mueva y abrir una ruta como ../../../etc/passwd.

Una variante algo más compleja también funciona en ciertas circunstancias si no se permite chdir(2). Si un demonio permite indicar un directorio raíz, esto generalmente significa que, si desea evitar que usuarios remotos accedan a archivos fuera del directorio raíz, deberá asegurarse de que las carpetas nunca se muevan fuera de él.

Esta llamada no cambia el directorio de trabajo actual, por lo que el directorio '.' puede estar fuera del árbol enraizado en '/'. En particular, el administrador puede escapar de una "prisión chroot" ejecutando:

    mkdir foo; chroot foo; cd ..

Esta llamada no cierra los descriptores de archivo abiertos, y dichos descriptores podrán permitir el acceso a archivos fuera del árbol raíz.

VALOR DEVUELTO
En caso de éxito se devuelve cero. En caso de error se devuelve -1, y errno se configura para indicar el error.

ERRORES
Según el sistema de ficheros, se pueden obtener otros errores. Los errores más comunes se listan a continuación:

EACCES
    Se deniega el permiso de búsqueda en un componente del prefijo de ruta. (Véase también path_resolution(7).)

EFAULT
    path apunta fuera de su espacio de direcciones accesibles.

EIO Ocurrió un error de E/S.

ELOOP
    Se encontraron demasiados enlaces simbólicos al resolver path.

ENAMETOOLONG
    path es demasiado largo.

ENOENT
    El fichero no existe.

ENOMEM
    No hay disponible suficiente memoria del núcleo.

ENOTDIR
    Un componente del camino path no es un directorio.

EPERM
    El invocador no tiene suficientes privilegios.

ESTÁNDARES
Ninguno.

HISTORIAL
SVr4, 4.4BSD, SUSv2 (marcado como LEGADO). Esta función no forma parte de POSIX.1-2001.

NOTAS
Un proceso hijo creado mediante fork(2) hereda el directorio raíz de su progenitor. execve(2) no modifica el directorio raíz.

El enlace simbólico mágico, /proc/pid/root, puede utilizarse para descubrir el directorio raíz de un proceso. Consulte proc(5) para obtener más información.

FreeBSD cuenta con la llamada jail() más robusta.

VÉASE TAMBIÉN
chroot(1), chdir(2), pivot_root(2), path_resolution(7), switch_root(8)

TRADUCCIÓN
La traducción al español de esta página del manual fue creada por Miguel Angel Sepulveda <angel@vivaldi.princeton.edu>, Juan Piernas <piernas@ditec.um.es>, Miguel Pérez Ibars <mpi79470@alu.um.es> y Marcos Fouces <marcos@debian.org>

Esta traducción es documentación libre; lea la GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.

Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a debian-l10n-spanish@lists.debian.org.