Liens symboliques vs point de montage

Résolu/Fermé
Signaler
Messages postés
477
Date d'inscription
mercredi 7 mars 2001
Statut
Membre
Dernière intervention
12 septembre 2016
-
Messages postés
30374
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
3 décembre 2021
-
salut a tous,

Je constate un comportement etrange en utilisant les liens symboliques vers les dossiers.
Je serais ravi que quelqu'un puisse m'eclairer.

J'ai cree un repertoire /var/www/test qui appartient a root et test. Ces derniers ont tous les droits sur le repertoire qui par contre est interdit a tout le monde. Moi meme (santiago), j'appartiens au groupe test. J'ai donc tous les droits sur /var/www/test.
$ ls -l /var/www/
total 8
drwxr-xr-x 2 root root 4096 2008-11-11 01:24 apache2-default
drwxrws--x 2 root test 4096 2008-11-11 01:25 test

Dans mon repertoire personnel (/home/santiago), j'ai cree 2 liens vers /var/www/test de deux manieres differentes : Un lien symbolique (testln) et un point de montage (testmt). Je constate que je peux utiliser ces liens de maniere transparente :
$ ln -s /var/www/test/ testln
$ mkdir testmount
$ sudo mount --bind /var/www/test/ testmt/
$ ls -l
lrwxrwxrwx 1 santiago santiago   14 2008-11-11 01:25 testln -> /var/www/test/
drwxrws--x 2 root     test     4096 2008-11-11 01:36 testmt
$ cd testln/
$ pwd
/home/santiago/testln
$ cd ../testmt/
$ pwd
/home/santiago/testmt

Du point de vu du shell, qu'on utilise le lien symbolique ou le point de montage, on a vraiment l'impression de rester dans le repertoire chroot.

Pourtant, lorsque j'utilise le ftp, je n'obtiens pas les meme resultats :
ftp> pwd
257 "/home/santiago" is current directory.
ftp> ls
200 PORT command successful
150 Opening ASCII mode data connection for file list
lrwxrwxrwx   1 santiago santiago       14 Nov 11 00:25 testln -> /var/www/test/
drwxrws--x   2 root     test         4096 Nov 11 00:36 testmount
226 Transfer complete.
ftp> cd testln/
550 testln: No such file or directory
ftp> cd testmount/
ftp> pwd
257 "/home/santiago/testmount" is current directory.
ftp> cd /var/www/test
ftp> pwd
257 "/var/www/test" is current directory.

Autrement dit, il n'est pas possible de suivre les liens symboliques en ftp.
Est ce normal ?
Comment rendre le suivi des liens possible ?

Merci d'avance
Santiago

9 réponses

Messages postés
30374
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
3 décembre 2021
7 239
A priori ça ne me choque pas que tu ne puisses pas suivre un lien symbolique. Intuitivement ça doit être pour éviter qu'un utilisateur ftp ne sorte du root directory du serveur ftp.

Je n'ai pas lu en détail mais ceci pourrait peut être expliqué la raison :
http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-Chroot.html

Quoiqu'il en soit je te conseille plutôt de recourir à des mount bind pour construire ton arborescence ftp plutôt qu'à des liens symboliques. Exemple dans /etc/fstab (ici tout se passe comme si le contenu de /mnt/vfat/ftp était également dans /home/ftp, sachant qu'on peut agir indifféremment sur l'un ou l'autre) :
/mnt/vfat/ftp   /home/ftp       none        bind    0 0

Dans cet exemple, je suppose que la racine du serveur ftp est /home/ftp.

Je pense que tu aller plus loin et construire en plusieurs ligne de fstab toute ton arborescence si le contenu du serveur ftp est dispersé du moment que le répertoire cible dans lequel tu montes ton répertoire source existe. Ainsi tu évites complètement la création de lien symbolique.

Pour plus de détails, je pense que tu devrais te promener sur le site de proftpd, sur lequel de nombreux cas d'utilisations sont décrits :
http://www.proftpd.org/

Une autre approche complètement différente et qui m'a fait abandonné ftp, c'est ssh. En effet, à partir du moment ou la personne se connecte en ssh il n'y a plus vraiment de contraintes comme les liens symboliques etc.

- L'inconvénient c'est que tu dois créer un compte sur la machine et éventuellement être vigilant sur les droits (en particulier si tu veux qu'on évite de fouiner dans ton /home). Il reste toujours possible de ne pas laisser de shell à ce genre d'utilisateurs (cf /etc/passwd).

- L'avantage c'est que c'est simple à mettre en oeuvre et plus sûre que ftp. Le client doit de son côté utiliser un client ssh (par exemple winscp sous windows, fish:// dans konqueror ou dolphin sous KDE etc...) ou s'il est sous linux utiliser la commande scp.

Bonne chance
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
477
Date d'inscription
mercredi 7 mars 2001
Statut
Membre
Dernière intervention
12 septembre 2016
211
merci mamie mando pour tes eclairements
Messages postés
30374
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
3 décembre 2021
7 239
Pas de problème, est-ce que ton problème est résolu ?
Messages postés
477
Date d'inscription
mercredi 7 mars 2001
Statut
Membre
Dernière intervention
12 septembre 2016
211
salut mamiemando,
mon probleme est resolu si on peut dire.
en realite, je ne faisais que porter une reflexion theorique sur les differentes manieres de lier des repertoires :
1) hard link
2) symbolic link
3) mount point

D'emblee, j'ai decouvert que les hard links etaient interdits sur les repertoires.
Je connaissais bien les mount point puisque justement c'est ce que j'utilisais depuis toujours. Cependant on m'a un jour reproche cette methode et recommande les symbolic links. C'est la que j'ai entrepris de les comparer dans tous les usages que j'en faisais (notament ftp).

Comme je l'ai demontre dans ma question, symbolic links et mount points sont suivis de maniere tout a fait transparente dans le shell (en ssh). En ftp, mes conclusions etaient plus mitigees puisque je me suis rendu compte que le probleme ne venait pas du protocole ou du serveur, mais du client.

1) avec ftp (GNU/linux), les liens sont suivis, mais de maniere non transparente :
ftp> ls
200 PORT command successful
150 Opening ASCII mode data connection for file list
lrwxrwxrwx   1 santiago santiago       19 Nov 12 15:15 testln -> /var/www/test/
226 Transfer complete.
ftp> cd testln
250 CWD command successful
ftp> pwd
257 "/var/www/test" is current directory.

2) avec lftp (GNU/linux), les liens sont suivis de maniere transparente :
lftp> ls
lrwxrwxrwx   1 santiago santiago       19 Nov 12 15:15 testln -> /var/www/test/
lftp> cd testln
cd ok, cwd=/home/santiago/testln
lftp> pwd
ftp://santiago@xxx/%2Fhome/santiago/testln

Bien entendu, lorsque les liens sont suivis de maniere non transparente, se pose le probleme du home directory. Si l'utilisateur est cantonne a son home directory, les symbolic links externes ne seront pas suivis.

Bonne journee
Santiago
Messages postés
30374
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
3 décembre 2021
7 239
Merci pour toutes ces précisions ! En ce qui me concerne je fais surtout du ssh et quand je dois faire du ftp, j'utilise lftp, c'est le plus simple ;-) Bref après à toi de voir ce qui te convient le mieux !
Messages postés
477
Date d'inscription
mercredi 7 mars 2001
Statut
Membre
Dernière intervention
12 septembre 2016
211
moi ce qui me convient le mieux, c'est le ssh, mais j'ai des collaborateurs a qui j'offre un espace d'hebergement sur mon serveur et 1) il ne savent pas utiliser ssh 2) je ne veux pas qu'ils se connectent via un shell.
si tu t'interesse au scripts, j'en ai poste un que j'aimerais faire tester pour detecter les erreurs.
Messages postés
30374
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
3 décembre 2021
7 239
Concrètement ils ont juste à installer winscp s'ils sont sous windows, sous linux c'est directement intégré comme je disais auparavant.

Pour éviter qu'ils puissent avoir un shell, il suffit :
1) de leur créer un compte (via les commandes adduser ou useradd)
2) de corriger /etc/passwd de sorte à ce qu'ils aient /bin/false au lieu de /bin/bash.

Bonne chance
Messages postés
477
Date d'inscription
mercredi 7 mars 2001
Statut
Membre
Dernière intervention
12 septembre 2016
211
Mes collaborateurs ont deja tous un compte dont le shell est /bin/false.
Il y a 2 raisons pour lesquelles je ne leur propose pas winscp
1) Il connaissent tous un client ftp (et y sont habitues)
2) Je n'arrive pas a les cantonner a leur home directory avec winscp

Si tu as plus d'info sur le 2e point, ca m'interesse.
Messages postés
30374
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
3 décembre 2021
7 239
Pour (1) il faut bien voir que winscp est très proche de filezilla ou tout autre client ftp.
Pour (2) essaye de changer les droits sur ".." pour leur éviter de remonter l'arborescence et les cantonner dans leur home directory.
(mando@aldur) (~/pouet) $ chmod 000 ..
(mando@aldur) (~/pouet) $ cd ..
bash: cd: ..: Permission non accordée

Si le répertoire que tu chmod ne leur appartient pas tu peux mettre des droits moins réstrictif, car dans cet exemple seul root pourra accéder à "..".

Bonne chance