Chroot

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

NAMN

chroot - ändra rotkatalog

BIBLIOTEK

Standard C-biblioteket (libc, -lc)

SYNOPSIS

#include <unistd.h>
int chroot(const char *path);

BESKRIVNING

chroot() ändrar rotkatalogen för den anropande processen till den som specificeras i path. Denna katalog kommer att användas för sökvägar som börjar med /. Rotkatalogen ärvs av alla barnprocesser till den anropande processen.

Endast en privilegierad process (Linux: en med CAP_SYS_CHROOT-kapabiliteten i sitt användarutrymme) kan anropa chroot().

Detta anrop ändrar en ingrediens i sökvägsupplösningsprocessen och gör inget annat. Det är särskilt inte avsett att användas för någon form av säkerhetsändamål, varken för att fullt ut sandboxa en process eller för att begränsa filsystemsanrop. Tidigare har chroot() använts av demoner för att begränsa sig själva innan de skickar vägar som tillhandahålls av opålitliga användare till systemanrop som open(2). Om en mapp flyttas ut ur chroot-katalogen kan en angripare utnyttja detta för att komma ut ur chroot-katalogen. Ett enkelt sätt att göra detta är att chdir(2) till mappen som ska flyttas, vänta på att den flyttas ut och sedan öppna en sökväg som ../../../etc/passwd.

En något svårare variation fungerar också under vissa omständigheter om chdir(2) inte är tillåtet. Om en demon tillåter att en "chroot-katalog" specificeras, innebär det vanligtvis att om du vill förhindra fjärranvändare från att komma åt filer utanför chroot-katalogen måste du säkerställa att mappar aldrig flyttas ut ur den.

Detta anrop ändrar inte den aktuella arbetskatalogen, så att efter anropet kan '.' vara utanför trädet rotat vid '/'. Särskilt kan superanvändaren undkomma från ett "chroot-fängelse" genom att göra:

mkdir foo; chroot foo; cd ..

Detta anrop stänger inte öppna filbeskrivare, och sådana filbeskrivare kan tillåta åtkomst till filer utanför chroot-trädet.

RETURVÄRDE

Vid framgång returneras noll. Vid fel returneras -1, och errno ställs in för att indikera felet.

FEL

Beroende på filsystemet kan andra fel returneras. De mer allmänna felen listas nedan:

EACCES Sökåtkomst nekas på en komponent i sökvägsprefixet. (Se även path_resolution(7).)
EFAULT sökvägen pekar utanför ditt åtkomliga adressutrymme.
EIO Ett I/O-fel uppstod.
ELOOP För många symboliska länkar påträffades vid upplösning av sökvägen.
ENAMETOOLONG Sökvägen är för lång.
ENOENT Filen existerar inte.
ENOMEM Otillräckligt kärnminne var tillgängligt.
ENOTDIR En komponent av sökvägen är inte en katalog.
EPERM Den anropande processen har otillräckliga privilegier.

STANDARDER

Inga.

HISTORIK

SVr4, 4.4BSD, SUSv2 (markerad LEGACY). Denna funktion är inte en del av POSIX.1-2001.

ANMÄRKNINGAR

En barnprocess som skapats via fork(2) ärver sin förälders rotkatalog. Rotkatalogen lämnas oförändrad av execve(2).

Den magiska symboliska länken, /proc/pid/root, kan användas för att upptäcka en process rotkatalog; se proc(5) för detaljer.

FreeBSD har ett starkare jail() systemanrop.

SE ÄVEN

chroot(1), chdir(2), pivot_root(2), path_resolution(7), switch_root(8)


Orginal texten på Engelska

https://man7.org/linux/man-pages/man2/chroot.2.html