Passerelle SSHFS/Samba

Attention, article velu pour barbu linuxien. Si tu comprends pas, alors ce n’est probablement pas pour toi :). Cet article est plus une référence pour moi-même, mais si ça peut en aider d’autres, c’est tout bon.


J’ai actuellement un serveur de stockage hébergé chez OVH sur lequel j’effectue régulièrement des sauvegardes et qui me sers un peu à tout. Une sorte de box à tout faire informatique. Je partage quelques fichiers à l’aide nextcloud, je downloade un peu tavu, j’ai divers sites dont ce blog et pour accéder aux fichiers j’ai plusieurs possibilités (FTP, WebDav etc). Ma préférée est d’utiliser FUSE pour monter en local le partage de fichier distant SFTP.
Or, si cela fonctionne bien avec un client Linux via SSHFS, c’est bien plus difficile sous Windows.
J’ai essayé Dokan/Win-SSHFS, sans vraiment être convaincu, d’autant plus que le code n’est plus maintenu, et quelques autres solutions dont aucune ne m’a donné satisfaction.
Je me suis donc lancé dans la création d’une passerelle Linux/Windows de partage de fichier.

J’ai commencé à l’aide d’un RaspberyPi sous Raspbian branché en permanence chez moi. La solution fonctionne très bien, d’autant plus qu’elle me sert aussi de routeur, de serveur VPN et parfois de point d’accès Wifi.
Je peux aussi, au besoin, la débrancher et l’emmener avec moi n’importe où.
C’est pratique.
Mais je cherchais surtout une solution purement logicielle.
Je souhaitais une VM la plus petite possible, utilisant le minimum de RAM, pour qu’elle soit portable et rapide. La quête du Graal un peu.
Et là, paf, après plusieurs jours de recherche et de test je tombe sur mon Graal justement.
TinyCore que ça s’appelle.
Une distribution Linux de 11Mo, ultra-modulaire, qui se charge intégralement en RAM et qui met moins de 5 secondes à se charger.
Elle contient le strict minimum pour un système linux de base mais on peut ensuite y ajouter des tas d’extensions.
C’est idéal pour qui a un besoin extrêmement précis, une seule fonction et qui veut se concentrer dessus.

Pour mon propre besoin, voici les étapes qui m’ont permis de construire cette passerelle.

  1. Machine virtuelle
    1. Téléchargement et installation de VirtualBox dans sa dernière version
    2. Création d’une machine virtuelle avec la config suivante
      1. Disque dur 100Mo (juste pour conserver les extensions et les fichiers de config)
      2. RAM 64Mo
      3. Pas d’USB, Pas de carte son
      4. Réseau en Pont
  2. TinyCore
    1. Télécharger le fichier ISO de CorePlus sur le site officiel. C’est un plus gros fichier mais il contient l’installeur complet.
    2. Booter la VM sur l’ISO
    3. Suivre la procédure d’installation
    4. Enlever l’ISO et rebooter
  3. Configuration de TinyCore
    1. Modifier le fichier extlinux (qui est lu au boot) pour y ajouter quelques options
      1. vi /mnt/sda1/tce/boot/extlinux/extlinux.conf
      2. home=sda1 opt=sda1 kmap=azerty/fr-latin9 quiet host=sshfstc
    2. Rebooter (Par défaut aucun fichier n’est sauvegardé. Home et Opt définissent deux répertoires persistants au reboot.)
    3. Ajouter les extensions Openssh, SSHFS et Samba
      tce => S => openssh => Q => Install
      tce => S => sshfs => Q => Install
      tce => S => samba=> Q => Install
  4. Configuration de Samba (SHARE est à remplacer par un nom de partage quelconque)
    1. Créer le répertoire à partager
      1. mkdir /opt/SHARE
    2. Modifier le fichier de conf
      1. vi /usr/local/etc/samba/smb.conf
      2. Remplacer tout par :
        1. [SHARE]
        2. writable=yes
        3. browsable=yes
        4. path=/opt/SHARE
    3. Ajouter un utilisateur
      1. sudo smbpasswd -a tc
      2. <motdepasse>
    4. Lancer Samba au démarrage
      1. vi /opt/bootsync.sh
      2. /usr/local/etc/init.d/samba start
  5. Configuration de ssh/sshfs
    1. Créer les clés publique et privée dans le répertoire root
      1. cd root; sudo ssh-keygen; sudo cat .ssh/id_rsa.pub | ssh user@hostname « cat – >> .ssh/authorized_keys »
      2. Se connecter une première fois sur le serveur distant, ça ne doit plus demander de mot de passe
        1. ssh user@hostname
    2. Ajouter le montage du système de fichier distant
      1. vi /opt/bootlocal.sh
      2. sleep 20 #Je mets 20 secondes de sécurité avant de tenter le montage distant. On doit probablement pouvoir le réduire ou mettre un test qui checke que c’est bien monté et qui tente de le monter sinon.
      3. sshfs user@hostname:/<répertoire distant> /opt/SHARE -o allow_other,reconnect,_netdev,uid=1001,gid=50
  6. Finalisation
    1. On sauvegarde les paramètres. TinyCore ne sauvegarde que les répertoires home, opt et les fichiers et répertoires listés dans /opt/.filetool.lst
      1. vi /opt/.filetool.lst
      2. /root/.ssh
      3. /usr/local/etc/ssh
      4. /usr/local/etc/samba
    2. filetool.sh -b
    3. Reboot
    4. Depuis un client Windows le partage est accessible via \\sshfstc\SHARE avec l’utilisateur tc et le mot de passe <motdepasse> défini plus haut.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *