table of contents
chroot(2) | System Calls Manual | 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);
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 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.
2 Mayo 2024 | Páginas de Manual de Linux 6.9.1 |