chroot(); - C - Programmation
Marsh Posté le 07-03-2006 à 13:13:07
merci pour ta reponse,
tu me conseil quoi comme methode verifier que le 'cd' ou le 'ls' ne sorte pas du 'chroot' ? verifier touce que le mec a tapper et notement les ../../ ?
Marsh Posté le 07-03-2006 à 23:14:17
gorila a écrit : merci pour ta reponse, |
T'es pas obligé d'examiner toute la chaîne "../../..etc../..". Tu peux regarder où ça mène en final en faisant un "chdir() + getpwd()" et accepter la position finale que si elle ne dépasse pas le niveau voulu...
Marsh Posté le 08-03-2006 à 03:11:32
c'est excactement comme ca que j'ai gere pour mon "cd"
je me chdir a l'endroit voulu et laisse donc le kernel prendre en charge la chaine que je lui passe.
je verifie ensuite si l'endroit ou je suis est au bon endroit par rapport au home attendu du client, sans quoi je re-chdir le client dans son home.
pour 'ls' je le ferait peut etre pas de cette maniere, pasque c'est quand meme un poil bourrin...
faudra y aller a la mano.... (snif.... c++.... pas le droit.....)
Marsh Posté le 07-03-2006 à 00:05:41
Bonjour a tous,
je suis en train de reecrire un serveur ftp a but pedagogique, et je souhaiterait faire que chaque nouveau client (le serveur fork a chaque connection) soit chroote dans un repertoire de mon choix (defini par un fichier de conf)
le seul probleme, c'est que je ne suis pas root sur le systeme ou je dois lancer le serveur (chroot() ne marchant que pour le super utilisateur - cf le man- ).
Existe il une maniere de contourner cette restriction? ou bien de faker un chroot de maniere a ce que les commandes du genre cd, ls et cie executees sur mon serveur ne puissent pas afficher ce qu'il y a autre part sur le systeme?
merci d'avance pour vos reponses.