Forum Linux.général [Samba] Comment présenter les liens symboliques comme s'ils étaient des fichiers classiques ?

Posté par  .
2
23
oct.
2012

Bonjour,

J'ai un partage Samba contenant des fichiers et des liens symboliques vers d'autres fichiers. L'option suivante est activée sur le partage:
follow symlinks = yes

Je monte ce partage Samba via une commande similaire à:
mount -t cifs //host/share mountpoint

Si je fais un ls -l dans un sous-répertoire de mountpoint, j'obtiens par exemple:
-rw-rw-rw- 1 root root 732372992 Jan 26 2008 fichier_regulier1
lrwxrwxrwx 1 root root 21 Oct 23 18:09 fichier_regulier2 -> ../fichier_regulier2

Les liens symboliques sont donc vus comme tels même à travers le montage CIFS. Je peux accéder au contenu des fichiers pointés par ces liens.

Mon problème: certaines de mes applications ignorent tout ce qui n'est pas un répertoire ou un fichier régulier ; elles ignorent donc les liens symboliques.
Par conséquent, elles n'accèdent pas aux fichiers pointés par les liens symboliques de ce partage.

Savez-vous s'il est possible de configurer le serveur Samba pour qu'il n'exporte pas les liens symboliques comme tels, mais qu'il les exporte comme si c'était directement les fichiers pointés eux mêmes, de façon à ce qu'un montage CIFS ne puisse pas différencier un fichier régulier d'un lien.
L'exemple précédent me donnerai alors:
-rw-rw-rw- 1 root root 732372992 Jan 26 2008 fichier_regulier1
lrwxrwxrwx 1 root root 21 Oct 23 18:09 fichier_regulier2

Je vous remercie pour votre aide.
Cordialement.

  • # Alternative

    Posté par  (site web personnel) . Évalué à 3.

    Une alternative est de faire un mount --bind de ton répertoire source vers ton répertoire destination. C'est même la solution préconisée pour empêcher les utilisateurs d'un serveur FTP d'accéder à ce à quoi ils n'ont pas le droit.

    Par contre, c'est manuel et peut vite devenir dantesque si tu as trop de mount disparates.

    Et je n'ai malheureusement aucune idée pour Samba.

    • [^] # Re: Alternative

      Posté par  (site web personnel) . Évalué à 2.

      on peut aussi ajouter à son fstab :

      /repsource /repcible none bind 0 0
      
      

      Et ça monte tout seul au prochain démarrage

      • [^] # Re: Alternative

        Posté par  . Évalué à 2.

        Ca pourrait être une solution, mais je préfèrerai éviter toute modification coté client, même si en dernier recours c'est peut-être ce qu'il me faudra faire.
        Mais merci à vous deux car je ne connaissais pas cette méthode!

        • [^] # Re: Alternative

          Posté par  (site web personnel) . Évalué à 2.

          Non non, c'est ce que tu fais cote serveur.

          Tu definis un repertoire /shared sur ton serveur, et tu dis a Samba de le partager. En parallele, tu lances :

            $ mount --bind /data /shared
          
          

          Et tes applications n'y verront que du feu. Elles ne sauront pas ce qu'il y a réellement derrière /shared. Du coup, Samba va partager un dossier qu'il pense être constitue de simples fichiers et dossiers. En bonus, si tu chroot tes clients, ils ne pourront pas remonter dans l'architecture du serveur.

          Si je ne me trompe pas, c'est la version générique de la commande ln, qui a l'avantage de marcher d'une partition A a une partition B.

          • [^] # Re: Alternative

            Posté par  . Évalué à 2.

            Ah oui en effet, vu comme ça ça peut être une solution très intéressante!
            Merci rakoo!

            • [^] # Re: Alternative

              Posté par  . Évalué à 1.

              Avec la solution du mount --bind j'ai bien mes fichiers accessibles dans un nouveau point de montage, cependant les liens symboliques sont toujours vus comme des liens.
              Coté client avec montage CIFS ça ne fonctionne donc pas mieux, car les liens symboliques sont toujours vus comme tel, et non pas comme des fichiers réguliers.

              Je n'ai peut être pas compris quelque chose?

              • [^] # Re: Alternative

                Posté par  (site web personnel) . Évalué à 2.

                J'ai peut-être été rapide : le mount --bind est censé remplacer le lien symbolique. Donc le principe est de supprimer les liens symboliques et de les remplacer par ce mount, ou par un ln. C'est pour ça que j'ai prévenu : ça peut devenir énorme.

                • [^] # Re: Alternative

                  Posté par  . Évalué à 1.

                  Ah oui en effet, j'avais mal compris, je pensais que ça aurait fonctionné pour un répertoire entier de liens ;)
                  Bon ben vu que j'ai des milliers de liens, je pense que je vais mettre de coté cette solution.

  • # C'est crade mais ...

    Posté par  . Évalué à 6.

    Il faut désactiver les unix extensions sur le serveur (ou le client ?).

    J'avais le même problème quand j'ai voulu utiliser des liens symboliques pour pouvoir partager des fichiers qui ne sont pas dans le répertoire partagé. Avec les unix extensions, les linux voyaient un lien symbolique qui pointait vers un fichier qui n'existe pas sur les clients, sans, ils voyaient un fichier ordinaire.

    • [^] # Commentaire supprimé

      Posté par  . Évalué à 3.

      Ce commentaire a été supprimé par l’équipe de modération.

      • [^] # Re: C'est crade mais ...

        Posté par  . Évalué à 2.

        J'ai testé rapidement ça a l'air de fonctionner, il me faudra des tests plus approfondis pour voir si cette solution est acceptable.
        Ca aurait été bien de pouvoir désactiver les unix extensions que sur ce partage, mais on dirait que ce n'est qu'une option de configuration globale.

        Je vous remercie en tout cas pour votre aide!

        • [^] # Re: C'est crade mais ...

          Posté par  . Évalué à 2.

          Tu pourrais peut-être faire une suggestion de fonctionnalité au projet Samba?

  • # A voir...

    Posté par  (site web personnel) . Évalué à 3. Dernière modification le 24 octobre 2012 à 12:57.

    http://www.samba.org/samba/docs/using_samba/ch08.html

    ==> wide links = yes

    Pour voir s'il change sa façon de rendre les liens visibles par le client sous Windows, ce qui doit être le cas vu que ça permet normalement de sortir de la zone exportée (ie. attention, c'est un trou de sécurité).

    Voir aussi la sémantique qui est derrière - si le lien est ouvert en écriture, est-ce que ça réécrit à l'endroit du lien ou à l'endroit du fichier d'origine ?

    Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

    • [^] # Re: A voir...

      Posté par  . Évalué à 2.

      J'ai déjà tenté cette solution, mais ça donne simplement des liens cassés sur les montages CIFS. C'est bizarre comme comportement d'ailleurs…
      Merci quand même!

    • [^] # Re: A voir...

      Posté par  . Évalué à 1.

      et un peu plus …
      j'utilise ces 3 options dans le smb.conf pour les liens
      follow symlinks = yes
      wide links = yes
      unix extensions = no

      Par contre je n'ai que des clients windows.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.