Bonjour,
Dans l'application que je développe (un webserver) je fais un appel de la fonction chroot("/var/www" ) pour avoir comme racine le répertoire ou se trouvent les fichiers accessibles depuis le serveur. La question que je me pose est s'il est possible de sortir de ce chroot temporairement pour réstaurer la racine habituelle avant d'appeller une fonction devant accéder à un répertoire hors de /var/www. J'ai essayé de faire un appel chroot("/" ) pour restaurer la racine mais ça ne semble pas marcher.
Voici un petit shema explicatif de ce que je voudrais faire :
debut de l'application:
chroot("/var/www" );
chdir("/" );
...
//execution des fonctions classiques du webserver qui n'accèdent qu'à des fichiers sous /var/www
...
exit_chroot(); //pour sortir du chroot
...
//appel de la fonction necessitant l'accès à /dev/
...
chroot("/var/www" ); //on restaure la racine pour les fichiers web
chdir("/" );
...
//retour aux fonctions classique du webserver
Je sais pas si j'ai été très clair, mais toute aide serait la bienvenue.
Merci
Julien
Publicité
Posté le 09-06-2005 à 16:55:16
deather2
Posté le 09-06-2005 à 17:42:11
Salut !
Une fois chroote, il faut te dire que / n'existe plus.
Si, une fois dans la cage chroot, tu fais chroot("/" ), il te rechrootera en realite dans /var/www.
jumar
Posté le 09-06-2005 à 17:45:35
Il n'existe pas de fonction pour sortir du chroot?
matafan
Posté le 12-06-2005 à 04:17:32
La solution c'est de faire le chroot dans un process fils. Si tu veux faire des choses en dehors du chroot, tu les fais dans le père.
Rak111
Posté le 13-06-2005 à 14:30:19
Pour sortir d'une cage,
tu te places dans la racine de ta cage puis tu fais :
mkdir("toto" );
chroot("toto" );
tu seras donc hors de ta cage et tu lances ta fonction qui accede à /dev.
puis tu remets ta cage en place...une vieille technique de pirate