Der Chroot-Systemaufruf ändert das Stammverzeichnis für den aufrufenden Prozess und seine untergeordneten Prozesse. Dies bedeutet, dass der Prozess und seine untergeordneten Elemente das angegebene Verzeichnis als Stammverzeichnis des Dateisystems betrachten. Alle Pfadnamen werden relativ zu diesem neuen Stammverzeichnis und nicht zum tatsächlichen Stammverzeichnis des Dateisystems interpretiert.
Chroot wird häufig verwendet, um eine eingeschränkte Umgebung für einen Prozess oder eine Gruppe von Prozessen zu erstellen. Beispielsweise könnte ein Webserverprozess in sein eigenes Verzeichnis gechrootet werden, sodass er nicht auf andere Dateien auf dem Server zugreifen kann. Dies kann zur Verbesserung der Sicherheit beitragen, indem verhindert wird, dass der Webserver durch einen böswilligen Benutzer kompromittiert wird.
Chroot kann auch zum Erstellen einer Sandbox für nicht vertrauenswürdigen Code verwendet werden. Beispielsweise möchte ein Benutzer möglicherweise ein aus dem Internet heruntergeladenes Programm in einer Chroot-Umgebung ausführen, um zu verhindern, dass es seinem System schadet.
Um Chroot verwenden zu können, muss der Prozess über die CAP_SYS_CHROOT-Fähigkeit verfügen. Diese Fähigkeit wird normalerweise Prozessen gewährt, die als Root ausgeführt werden.
Die Syntax des Chroot-Systemaufrufs lautet:
`int chroot(const char *pathname);`
Wo:
Pfadname:Der Pfad zum neuen Stammverzeichnis.
Hier ist ein Beispiel für die Verwendung von Chroot:
„
#include
#include
#include
int main()
{
// Ändern Sie das Stammverzeichnis in /tmp
if (chroot("/tmp") ==-1) {
perror("chroot");
Exit(EXIT_FAILURE);
}
// Aktuelles Arbeitsverzeichnis drucken
char cwd[1024];
if (getcwd(cwd, sizeof(cwd)) ==NULL) {
perror("getcwd");
Exit(EXIT_FAILURE);
}
printf("Aktuelles Arbeitsverzeichnis:%s\n", cwd);
return EXIT_SUCCESS;
}
„
Wenn dieses Programm ausgeführt wird, wird die folgende Ausgabe gedruckt:
„
Aktuelles Arbeitsverzeichnis:/tmp
„
Dies zeigt, dass das aktuelle Arbeitsverzeichnis in /tmp geändert wurde.