Chroot-systemkallet endrer rotkatalogen for anropsprosessen og dens underordnede. Dette betyr at prosessen og dens barn vil se den angitte katalogen som roten til filsystemet. Alle stinavn vil bli tolket i forhold til denne nye roten, i stedet for selve roten til filsystemet.
Chroot brukes ofte til å lage et begrenset miljø for en prosess eller gruppe av prosesser. For eksempel kan en webserverprosess være chrootet til sin egen katalog, slik at den ikke får tilgang til andre filer på serveren. Dette kan bidra til å forbedre sikkerheten ved å forhindre at webserveren blir kompromittert av en ondsinnet bruker.
Chroot kan også brukes til å lage en sandkasse for uklarert kode. For eksempel kan en bruker ønske å kjøre et program lastet ned fra internett i et chrooted miljø for å forhindre at det skader systemet deres.
For å bruke chroot må prosessen ha CAP_SYS_CHROOT-funksjonen. Denne funksjonen gis vanligvis til prosesser som kjører som root.
Syntaksen til chroot-systemkallet er:
`int chroot(const char *banenavn);`
Hvor:
pathname:Banen til den nye rotkatalogen.
Her er et eksempel på hvordan du bruker chroot:
```
#include
#include
#include
int main()
{
// Endre rotkatalogen til /tmp
if (chroot("/tmp") ==-1) {
perror("chroot");
exit(EXIT_FAILURE);
}
// Skriv ut gjeldende arbeidskatalog
char cwd[1024];
if (getcwd(cwd, sizeof(cwd)) ==NULL) {
perror("getcwd");
exit(EXIT_FAILURE);
}
printf("Gjeldende arbeidskatalog:%s\n", cwd);
returner EXIT_SUCCESS;
}
```
Når dette programmet kjøres, vil det skrive ut følgende utdata:
```
Gjeldende arbeidskatalog:/tmp
```
Dette viser at gjeldende arbeidskatalog er endret til /tmp.