cClaude.rocks ☕ Le blog

[Nouvelles technologies, sciences et coups de gueule…]

Menu

Lorsque l’on fait des recherches sur le partage de dossier sous Linux, la solution la plus souvent proposĂ©e s’appuie sur des partages SAMBA.

Le problĂšme est que SAMBA (ou SMB) n’a pas Ă©tĂ© pensĂ© pour les systĂšmes Linux, mais est issue d’une veille technologie Microsoft comportant de nombreuses limitations vis-Ă -vis d’Unix.

Hormis la gestion des droits, le fait que les noms de fichiers ne soient pas sensibles à la casse (majuscules/minuscules) peut la source d’effets inattendus.


ඏ

Le support du partage des fichiers sous Linux

Le systÚme de partage natif sous Linux est NFS (Network File System), la gestion des droits est alors pleinement supportée, mais pour cela il faut que les utilisateurs soient déclarés sur toutes les machines concernées et avec le bon « mapping » (user_name/user_id et goup_name/goup_id), une contrainte qui dans certains cas est difficile à satisfaire, en particulier avec un NAS propriétaire (quelle que soit sa marque).

Attention sur Internet on trouve de nombreux articles qui confondent NSF et SMB. ; le second acronyme étant un raccourci pour SAMBA.

Il existe de nombreuses solutions pour Ă©changer des fichiers, mais le choix de sshfs s’inscrit dans une solution permettant un accĂšs aux fichiers Ă  travers le systĂšme de fichier (« file system ») natif de la machine.

Par exemple une solution comme ftp ne correspond pas Ă  cela, car vous ne pouvez pas avec n’importe quel logiciel atteindre un fichier stockĂ© sur un serveur ftp.

Mais les solutions permettant de partager des partitions en fond partie, elles sont cependant sans doute plus adaptées à des besoins professionnels ou ponctuels :

  • Network block device,
  • Le ISCSI est typiquement une solution plutĂŽt orientĂ©e professionnel et qui n’est pas destinĂ©e Ă  partager des fichiers entre des machines mais plus Ă  dĂ©porter des disques (des partitions).

ඏ

sshfs

Pour ssh et fs, ce qui veut dire « systÚme de fichier » (« File System ») sur ssh (« Secure Shell Protocol »).


Précision préalable

Ce billet ne prĂ©tend pas dire que sshfs est la solution ultime. Certaines fonctionnalitĂ©s peuvent aussi bien ĂȘtre vues comme un avantage que comme un inconvĂ©nient.

Ce billet suppose que vous sachiez configurer ssh, en particulier crĂ©er une paire de clĂ© dont la paire doit rester sur le client et la clĂ© publique ĂȘtre dĂ©finie dans le fichier ~/.ssh/authorized_keys de l’ordinateur serveur (le ~ indiquant le dossier personnel de l’utilisateur qui est Ă  l’origine du partage).


Pourquoi utiliser sshfs ?

  • Parce que SAMBA demande l’installation d’un service dĂ©diĂ©, que la configuration et que le support des fonctionnalitĂ©s Unix est partiel,
  • Parce que NFS c’est contraignant et que la configuration se fait au niveau administrateur,
  • Parce que sshfs ça doit s’utiliser dans un contexte utilisateur (pas en tant qu’utilisateur root) et que la configuration se fait par l’utilisateur qui effectue le partage.

Il est possible d’affiner la configuration en tant que root, en particulier durcir ("hardening") la sĂ©curitĂ© au niveau de FUSE.


PrĂ©cautions d’utilisation

Un utilisateur qui partage un accĂšs ssh Ă  un tiers, dĂ©lĂšgue tous ces droits sur la machine, y compris celui d’exĂ©cuter des applications.

sshfs est basĂ© sur FUSE qui ne fait pas partie du noyau Linux, c’est pourquoi vous devez proscrire d’utiliser sshfs en root, afin de protĂ©ger votre machine d’éventuelle attaques.


Installation sur le serveur

ssh est requis, mais il est probablement déjà présent.
Concernant la configuration, il n’y a rien Ă  faire pour sshfs proprement dit, mais ssh doit ĂȘtre fonctionnel.

Comme dis plus haut, l’objet de ce billet n’est pas la configuration de ssh.


Installation sur le client

Il suffit d’installer le paquet sshfs

sudo apt install -y sshfs
  • Vous devrez veiller Ă  ce que les utilisateurs potentiels de sshfs fassent bien partie du groupe fuse.
  • Il est probable, surtout si vous utilisez l’authentification ssh par certificat (ce qui est le principal intĂ©rĂȘt de sshfs), que vous deviez redĂ©marrer la machine


Vous obtiendrez l’erreur « failed to open /dev/fuse: Permission denied » si les points prĂ©cĂ©dents ne sont pas vĂ©rifiĂ©s.


ඏ

Monter un répertoire avec sshfs

En partant du principe que vous pouvez vous connecter en ssh sur la machine serveur, tout ce passe cÎté client.

Comme pour tous point de montage, vous devez avoir un répertoire vide qui « recevra » le dossier que vous souhaitez monter. Par exemple :

cd "$( xdg-user-dir DOCUMENTS )" # Version plus portable de : cd ~/Documents
mkdir mon_point_de_montage_sshfs

Vous pouvez alors utiliser les commandes suivantes :

  • sshfs [user@]host:[dir] mountpoint [options] qui s’appuie directement sur FUSE,
  • mount.sshfs [user@]host:[dir] mountpoint [options] qui permet de retrouver la syntaxe de mount,
  • et enfin, la commande mount : mount -v -t sshfs [user@]host:[dir] mountpoint [options]

La syntaxe utilisant sshfs est largement documentĂ©e, mais je prĂ©fĂšre rester sur la syntaxe de mount puisque l’idĂ©e est d’unifier la gestion des fichiers.


Quelques spécificités de sshfs

Avec sshfs on n’a pas la notion de crĂ©ation de partage, il est possible de monter n’importe quel dossier accessible par l’utilisateur et se fait relativement Ă  cet utilisateur.

ainsi :

mount -v -t sshfs pi@192.168.1.102: mon_point_de_montage_sshfs

Montera le dossier $HOME de l’utilisateur pi sur la machine 192.168.1.102 dans le dossier local mon_point_de_montage_sshfs

Pour démonter, utiliser simplement :

umount mon_point_de_montage_sshfs # Implique d’ĂȘtre dans le mĂȘme dossier que pour la commande mount

Si c’est l’écriture minimale, je vous dĂ©courage, en dehors d’un usage trĂšs spĂ©cifique, l’utilisation relative aussi bien sur l’ordinateur distant, mais plus encore sur l’ordinateur local.

Voici dont écriture, permettant de mieux contrÎler ce que vous faites :

Sur la machine distante, on utilisera le chemin permettant d’accĂ©der au dossier depuis la racine de la machine, on suppose qu’il s’agit de /home/pi.
Sur la machine locale, on utilisera le chemin complet vers le point de montage, vous pouvez résoudre ce chemin en utilisant :

realpath mon_point_de_montage_sshfs

ou dans le cas de notre exemple :

realpath "$( realpath "$( xdg-user-dir DOCUMENTS )/mon_point_de_montage_sshfs" )"

On aura alors quelque chose comme :

mount -v -t sshfs pi@192.168.1.102:/home/pi /home/user/Documents/mon_point_de_montage_sshfs

Le dĂ©montage se fera Ă  l’aide de umount :

umount /home/user/Documents/mon_point_de_montage_sshfs

Notez que :

  • Vous n’avez pas besoin (et que vous ne devez pas) utiliser sudo pour mount et umount dans ce cas,
  • Aucun autre utilisateur (mĂȘme pas l’utilisateur root) n’a accĂšs au partage — Cette caractĂ©ristique est hĂ©ritĂ© de FUSE.

Options de sshhf

  • idmap=XXX – Permet de gĂ©rer la transformation des UID/GID distants vers les valeurs locales.

Les valeurs possibles sont :

* `none` – pas de traduction de l’espace ID (par dĂ©faut).
* `user` – mapper l’UID/GID de l’utilisateur distant à l’UID/GID de l’utilisateur de montage.
* `file` – traduire les UID/GID en fonction du contenu de --uidfile et --gidfile.

En cas de doute, l’option idmap=user est probablement ce que vous souhaitez.


Options liĂ©es Ă  l’optimisation de sshhf

Attention :

Beaucoup de solutions proposĂ©es pour « optimiser » sshfs ont pour consĂ©quence directe de rĂ©duire sĂ©rieusement la sĂ©curitĂ©, si cela peut ĂȘtre acceptable (et encore) sur votre rĂ©seau local, c’est Ă  bannir si vous laisser un « port ssh » ouvert vers l’extĂ©rieur.

Je vous déconseille de jouer avec la sécurité de ssh si vous ne savez pas ce que vous faites.

Je trouve les performances de sshfs trĂšs correctes, j'ai testĂ© la configuration ci-dessus, pas assez finement cependant pour avoir un avis dĂ©finitif, mais je ne suis pas prĂšs ni Ă  sacrifier la sĂ©curitĂ© de mes machines, ni utilisĂ© des options qui me semble ĂȘtre inadaptĂ©es (voire dangereuses ou contre-productives).
J’ai pris le temps de dĂ©tailler ce que font ces options (ce qui n’est gĂ©nĂ©ralement pas prĂ©sent dans les articles qui parlent d’optimisation) afin de faire votre choix.

  • Conseils trouvĂ©s autour de l’optimisation

    De nombreuses couches sont impliquĂ©es dans sshfs, les options s’adressent donc Ă  des couches diffĂ©rentes, je prĂ©cise les options prĂ©conisĂ©es pour l’optimisation, ce qu’elles font et Ă  quelle couche elles s’adressent.

    En fonction des machines concernĂ©es (disponibilitĂ© du CPU, RAM
) vous pouvez envisager les optimisations suivantes :

     Option Traitée par Commentaire
    Ciphers=arcfour ssh ❓ Attention ce protocole est maintenant considĂ©rĂ© comme peu sur, les prĂ©conisations sont plutĂŽt de dĂ©sactiver cela vos machines.
    Compression=no ssh 👍 Suivant le type de donnĂ©es transportĂ©es compresser peut ralentir plus que gagner du temps.
    ServerAliveCountMax=3 ssh ❔ Pas d’avis, à creuser
    ServerAliveInterval=15 ssh ❔ Pas d’avis, à creuser
    cache=yes ??? ❔ À creuser
    kernel_cache fuse 👎 Cette option dĂ©sactive le vidage du cache du contenu du fichier Ă  chaque ouverture. Cela ne devrait ĂȘtre activĂ© que sur les systĂšmes de fichiers, oĂč les donnĂ©es du fichier ne sont jamais modifiĂ©es de maniĂšre externe (pas via le systĂšme de fichiers FUSE montĂ©). Ainsi, il n'est pas adaptĂ© aux systĂšmes de fichiers rĂ©seau et aux autres systĂšmes de fichiers "intermĂ©diaires".
    large_read ??? ❔ À creuser
    reconnect sshfs 👍 Relance la connexion au serveur si nĂ©cessaire.
    workaround=all sshfs 👎 Voir ci-dessous, je suis trĂšs Ă©tonnĂ© de ce choix, cela ne concerne pas l’optimisation Ă  mon sens, et ne devrait pas ĂȘtre utilisĂ© sans de bonnes raisons.

    -o workaround=LIST – liste de solutions de contournement sĂ©parĂ©es par deux-points :
    * none – 👍 Aucune solution de contournement activĂ©e
    * [no]rename – 👎 Émulez l’écrasement d’un fichier existant en le supprimant et en le renommant. (par dĂ©faut : dĂ©sactivĂ©)
    * [no]renamexdev – ❔ Faire Ă©chouer le changement de nom avec EXDEV au lieu de l'EPERM par dĂ©faut pour permettre le dĂ©placement de fichiers sur des systĂšmes de fichiers distants. (par dĂ©faut : dĂ©sactivĂ©)
    * [no]truncate – 👎 Contournez les serveurs qui ne prennent pas en charge la troncation en copiant l’intĂ©gralitĂ© du fichier, en le tronquant localement et en le renvoyant. (par dĂ©faut : dĂ©sactivĂ©)
    * [no]buflimit – 👍 Corrige un bogue de remplissage de tampon (« buffer fillup ») dans le serveur. (par dĂ©faut : dĂ©sactivĂ©)
    * [no]fstat – 👎 Contournez les serveurs dĂ©fectueux qui ne prennent pas en charge fstat() en utilisant stat() Ă  la place. (par dĂ©faut : dĂ©sactivĂ©)
    * [no]createmode – 👎 Contournez les serveurs cassĂ©s qui produisent une erreur lors du passage d’un mode non nul Ă  crĂ©er, en passant toujours un mode de 0. (par dĂ©faut : dĂ©sactivĂ©)

    sshfs -o cache=yes -o large_read -o Compression=no -o ServerAliveCountMax=3 -o ServerAliveInterval=15 -o reconnect remoteuser@server:/remote/directory/ /media/mountpoint
    

les liens symboliques

Les liens symboliques ("symlink"), comme les liens durs ("hardlink") ne sont pas un problÚme pour sshfs, sauf dans un cas : si vous souhaitez monter dossier qui est en fait un lien symbolique.
C’est le cas des points de montage samba sur les NAS QNAP par exemple.

Pour Ă©viter d’avoir une erreur, vous devez aller au delĂ  du lien et c’est fort simple, il suffit d’ajouter un / final.

Au lieu d’utiliser :

mount -v -t sshfs admin@192.168.1.121:/share/photos /media/sshfs-username/photos

Utiliser :

mount -v -t sshfs admin@192.168.1.121:/share/photos/ /media/sshfs-username/photos

Astuce

Par convention les points de montage se font dessous le rĂ©pertoire /media cependant, en tant qu’utilisateur, vous ne pouvez pas Ă©crire dans ce dossier.
Je vous propose donc de créer un dossier sous /media que vous donnerez à votre utilisateur, comme suit :

sudo mkdir -vp "/media/sshfs-${USER}"                 # Création du répertoire en root
sudo chown "${USER}:${GROUP}" "/media/sshfs-${USER}"  # Transfert des droits vers l’utilisateur
chmod 700 "/media/sshfs-${USER}"                      # On donne tous les droits à l’utilisateur, et on enlùve les droits aux autres.

Maintenant vous pouvez créer le dossier pour le point de montage sans les droits root.

mkdir -vp "/media/sshfs-${USER}/photos"

Que vous utiliser par exemple :

mount -v -t "sshfs admin@192.168.1.121:/share/photos/" "/media/sshfs-${USER}/photos"

La configuration de /etc/fstab

Si vous souhaitez mettre la configuration dans /etc/fstab, voici la syntaxe à utiliser :

user@machine:/répertoire/dossier_distant/   /media/sshfs-username/dossier_local    fuse.sshfs  port=22,user,noauto,noatime     0 0

ඏ

Liens

኿


â„č 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog