[C] - utilisation de chroot() (unistd.h)

- utilisation de chroot() (unistd.h) [C] - C - Programmation

Marsh Posté le 09-06-2005 à 16:55:16    

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

Reply

Marsh Posté le 09-06-2005 à 16:55:16   

Reply

Marsh 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.

Reply

Marsh Posté le 09-06-2005 à 17:45:35    

Il n'existe pas de fonction pour sortir du chroot?

Reply

Marsh 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.

Reply

Marsh 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
 


---------------
-= RAK =-
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed