De chroot-systeemaanroep verandert de hoofdmap voor het aanroepproces en zijn onderliggende bestanden. Dit betekent dat het proces en zijn kinderen de opgegeven map als de hoofdmap van het bestandssysteem zullen zien. Alle padnamen worden geïnterpreteerd ten opzichte van deze nieuwe root, in plaats van de feitelijke root van het bestandssysteem.
Chroot wordt vaak gebruikt om een beperkte omgeving te creëren voor een proces of een groep processen. Een webserverproces kan bijvoorbeeld in zijn eigen map worden gechroot, zodat het geen toegang heeft tot andere bestanden op de server. Dit kan helpen de beveiliging te verbeteren door te voorkomen dat de webserver wordt aangetast door een kwaadwillende gebruiker.
Chroot kan ook worden gebruikt om een sandbox voor niet-vertrouwde code te creëren. Een gebruiker wil bijvoorbeeld een programma dat van internet is gedownload in een chroot-omgeving uitvoeren om te voorkomen dat het zijn systeem schaadt.
Om chroot te gebruiken, moet het proces de mogelijkheid CAP_SYS_CHROOT hebben. Deze mogelijkheid wordt normaal gesproken verleend aan processen die als root worden uitgevoerd.
De syntaxis van de chroot-systeemaanroep is:
`int chroot(const char *padnaam);`
Waar:
padnaam:Het pad naar de nieuwe hoofdmap.
Hier is een voorbeeld van hoe je chroot gebruikt:
```
#include
#include
#include
int hoofd()
{
// Wijzig de hoofdmap naar /tmp
als (chroot("/tmp") ==-1) {
fout("chroot");
afsluiten(EXIT_FAILURE);
}
// Druk de huidige werkmap af
char cwd[1024];
if (getcwd(cwd, groottevan(cwd)) ==NULL) {
perror("getcwd");
afsluiten(EXIT_FAILURE);
}
printf("Huidige werkmap:%s\n", cwd);
retourneer EXIT_SUCCESS;
}
```
Wanneer dit programma wordt uitgevoerd, wordt de volgende uitvoer afgedrukt:
```
Huidige werkmap:/tmp
```
Dit geeft aan dat de huidige werkmap is gewijzigd in /tmp. |