Chroot-systemkaldet ændrer rodmappen for opkaldsprocessen og dens børn. Dette betyder, at processen og dens børn vil se den angivne mappe som roden af filsystemet. Alle stinavne vil blive fortolket i forhold til denne nye rod, i stedet for den faktiske rod af filsystemet.
Chroot bruges ofte til at skabe et begrænset miljø for en proces eller gruppe af processer. For eksempel kan en webserverproces være chrootet til sin egen mappe, så den ikke kan få adgang til andre filer på serveren. Dette kan hjælpe med at forbedre sikkerheden ved at forhindre webserveren i at blive kompromitteret af en ondsindet bruger.
Chroot kan også bruges til at oprette en sandkasse til kode, der ikke er tillid til. For eksempel vil en bruger måske køre et program downloadet fra internettet i et chrooted miljø for at forhindre det i at skade deres system.
For at bruge chroot skal processen have CAP_SYS_CHROOT-kapaciteten. Denne funktion gives normalt til processer, der kører som root.
Syntaksen for chroot-systemkaldet er:
`int chroot(const char *stinavn);`
Hvor:
stinavn:Stien til den nye rodmappe.
Her er et eksempel på, hvordan man bruger chroot:
```
#include
#include
#include
int main()
{
// Skift rodmappen til /tmp
if (chroot("/tmp") ==-1) {
perror("chroot");
exit(EXIT_FAILURE);
}
// Udskriv den aktuelle arbejdsmappe
char cwd[1024];
if (getcwd(cwd, sizeof(cwd)) ==NULL) {
perror("getcwd");
exit(EXIT_FAILURE);
}
printf("Aktuel arbejdsmappe:%s\n", cwd);
returner EXIT_SUCCESS;
}
```
Når dette program køres, udskriver det følgende output:
```
Aktuel arbejdsmappe:/tmp
```
Dette viser, at den aktuelle arbejdsmappe er blevet ændret til /tmp.