[Tuto/HowTo] Configurer et monter SSHFS sécurisé via utilisateur dédié côté server

Avatar du membre
voxdemonix
Messages : 1336
Enregistré le : lun. févr. 02, 2015 7:28 pm

[Tuto/HowTo] Configurer et monter SSHFS sécurisé via utilisateur dédié côté server

Message par voxdemonix » dim. sept. 11, 2016 4:48 pm

[Tuto/HowTo] Configurer et monter SSHFS sécurisé via utilisateur dédié côté server

Introduction :
  • Ce tuto vous explique comment mettre en place un serveur SSH afin de monter un ou plusieurs dossiers distant via SSHFS (fonctionne aussi avec sftp). Ensuite est expliqué comment configurer vos clients SSH puis effectuer le montage au démarrage.
    Pour rappel SSHFS est un montage FUSE à travers ssh (fuse over ssh). Il permet de monter un dossier distant via SSH, rendant ainsi le contenu de ce dossier accessible aux applications locales comme si les données étaient présente sur la machine locale. Par exemple VLC pourra lire des musiques sur votre serveur comme si elles étaient sur votre pc portable.
    Ce tuto reprends des informations disponible dans d'autres Tuto/HowTo sur 0rion. Ainsi allez donc jeter un œil sur celui-ci afin de sécuriser votre serveur et vos clients SSH en veillant à ne pas répéter les actions déjà accomplie ici.
    Ce tuto fonctionne sur l'ensemble des systèmes Ubuntu (Xubuntu, Lubuntu, Kubuntu, Linux Mint, Voyager OS et j'en passe) ainsi que les systèmes de la famille Debian.
    SSH étant compatible avec le réseau Tor, vous pouvez sans problème monter vos dossiers à travers Tor. Bien que vous y perdez en latence (visible surtout avec le streaming) et en augmentation de la consommation de ressources machines/electricité, vous n'aurez ainsi plus de problème de hairpinning ni besoin d'un nom de domaine.
Farm Link : Configurer le serveur GNU/Linux
  1. Créez un utilisateur dédié
    • Code : Tout sélectionner

      sudo adduser userCommunSFTP
      • userCommunSFTP le pseudo de votre utilisateur
  2. Empêchez l'user de faire autre chose que du sftp/sshfs
    Note : vous devrez désactiver les options suivantes (en placant un # devant ForceCommand internal-sftp) pour exporter les clés publique depuis vos clients vers votre serveur. Si non lorsque vous tenterez d'exporter (avec ssh-copy-id) vous aurez une erreur.
    1. Éditez /etc/ssh/sshd_config
    2. Ajoutez à la fin du fichier les lignes suivantes après avoir adapté le pseudo de l'utilisateur
      • Code : Tout sélectionner

        Match User userCommunSFTP
                ForceCommand internal-sftp
        • userCommunSFTP le pseudo de votre utilisateur sur le serveur
          internal-sftp on restreint l'accès a sftp (pas de connexion ssh au shell possible)

Configurer le(s) client(s) GNU/Linux
  1. Installez les pré-requis
  2. Si vous ne l'avez jamais fait depuis votre installation, générez de nouvelles clés
    • Code : Tout sélectionner

      ssh-keygen -t ed25519 -o -a 100
      ssh-keygen -t rsa -b 4096 -o -a 100
      
      • -o -a 100 : permet de faire boucler l’algorithme 100 fois
        -b 4096 : précise qu'on veut une clés a 4096 bit (au début des années 2k la France interdisait plus de 126 bit ;) )
        -t rsa : on utilise l’algorithme RSA
        -t ed25519 : on utilise l'algorithme EdDSA
  3. Exportez votre clés publique sur le serveur
    • Code : Tout sélectionner

      ssh-copy-id -i ~/.ssh/id_ed25519.pub userCommunSFTP@adresseServerSSH
      • id_ed25519 remplacez par id_rsa si vous besoin
        userCommunSFTP le pseudo de votre utilisateur sur le serveur
        adresseServerSSH URL/hostname pour joindre votre serveur SSH, peut être un .onion
  4. Ajoutez votre utilisateur à la liste des utilisateurs autorisés à utiliser fuse
    • Code : Tout sélectionner

      sudo adduser $USER fuse
      • Note : remplacez $USER par l'utilisateur de votre choix (par défaut $USER = votre utilisateur courant (celui qui a ouvert la session sur votre machine)).
  5. Autoriser les autres users a monter un dossieravec fusermount
    • Code : Tout sélectionner

      sudo nano /etc/fuse.conf
      Décommentez (enlevez le # devant) user_allow_other
Montage au démarrage sur le(s) client(s) GNU/Linux
  1. Créer le point de montage local (adaptez à vos envies)
  2. Éditez le fichier /etc/fstab
  3. Ajoutez le montage afin de le monter au boot
    • Code : Tout sélectionner

      userCommunSFTP@adresseServerSSH:/home/userCommunSFTP/                /media/monPointDeMontageLocal          fuse.sshfs           port=22,user,noatime,reconnect,_netdev,nofail,allow_other     0 0
      Note : :/dossier/distant/ n'est pas obligatoire ; nofail permet d'empêcher le boot de crasher si le montage ne réussit pas, _netdev ordonne d'attendre que le réseau soit fonctionnel avant d'effectuer le montage; allow_other autorise les autres users à monter le dossier. Ajoutez noauto si vous voulez que le montage ne s'effectue qu'à la demande et non au démarrage de la machine.
    Pour effectuer le montage SSHFS au démarrage il est fort possible que la machine passe par root. Appliquez donc les modifications suivantes :
  4. Connectez-vous en root (admin)
  5. Générez une paire de clés solide pour root
    • Code : Tout sélectionner

      ssh-keygen -t rsa -b 4096 -o -a 1666
      ssh-keygen -t ed25519 -o -a 1666
      • La deuxième (ed25519) ne fonctionne pas sur rpi
  6. Ajoutez vos nouvelles clés au trousseau de votre utilisateur
  7. Exportez la clés publique de root sur la machine distante
    • Code : Tout sélectionner

      ssh-copy-id -i /root/.ssh/id_rsa.pub userCommunSFTP@adresseServerSSH
  8. Testez si l'ajout a bien fonctionné (ne doit pas demander de mot de passe)
  9. Quittez root
  10. Testez votre montage
    • Code : Tout sélectionner

      sudo sshfs -d -o allow_other -o reconnect -o ServerAliveInterval=15 userCommunSFTP@adresseServerSSH:/home/userCommunSFTP /media/monPointDeMontageLocal -p 22 -C



Gestion des erreurs :
  • ssh-keygen: illegal option -- o
    • Supprimez l'option "-o" de la commande (Exemple : ssh-keygen -t rsa -b 4096 -a 500)
    unknown key type ed25519
    • Remplacez "-t ed25519" par "-t rsa" (Exemple : ssh-keygen -t rsa -b 4096 -a 500)

    fuse: bad mount point `/media/monPointDeMontageLocal': Transport endpoint is not connected ou impossible d'accéder à /media/monPointDeMontageLocal: Noeud final de transport n'est pas connecté
    • Tentez de vous connecter en utilisateur normal et root (sudo ssh user@hostname). Si vous avez une erreur de type :
      Warning: the ECDSA host key for 'myserver' differs from the key for the IP address '192.168.1.42'
      Offending key for IP in /root/.ssh/known_hosts:1
      Matching host key in /root/.ssh/known_hosts:2
      Alors éditez le fichier /root/.ssh/config Et ajoutez Il est possible que vous deviez répèter l'opération pour votre user lambda ($HOME/.ssh/config)
    SSH continue de demander le mot de passe malgré la configuration par clés
    • Les permissions de vos dossiers sont mauvaises (/home, /home/$USER, /home/$USER/.ssh). Lors de mes essais ce fut plus rapide de recréer un user que d'arriver a remettre les bonnes permissions (malgré d'avoir essayé les réponses de plusieurs tuto et thread sur le net).
Modifié en dernier par voxdemonix le jeu. déc. 08, 2016 4:00 pm, modifié 8 fois.
~ Infernalis Creatorem ~
  • Rejoins le côté obscure, on a des cookies !
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Donation Dash : XmowiBRku3tsEREp7PhpheY4TgeLLDyKdM

Avatar du membre
voxdemonix
Messages : 1336
Enregistré le : lun. févr. 02, 2015 7:28 pm

Re: [Tuto/HowTo] Configurer et monter SSHFS sécurisé via utilisateur dédié côté server

Message par voxdemonix » mar. nov. 01, 2016 1:06 pm

[Tuto/HowTo] [GNU/Linux] Montage SSHFS cross-canal (Lan, Wan, Tor, etc)
[WTFPL]
[_precheurori_] Introduction
Nous allons ici effectuer notre montage sshfs non pas via /etc/fstab mais via un script maison (DIY) et la commande sshfs.
Ce mécanisme va nous permettre de spécifier un HOSTNAME pour notre server SSH différent en fonction des possibilités offertes par le réseau. Ainsi sur un réseau local nous privilégierons un montage en LAN et hors réseau local on utilisera Tor ou Wan.
Pour passer par tor vous devez avoir installé tor (apt-get install tor) sur votre client et installé et configuré un SSH Tor Hidden Service sur votre serveur.
Note : ce script ne nécessite aucun privilège spécifique pour effectuer le montage au boot, par contre il nécessite root (à cause de umount) si vous souhaitez le lancer par la suite (par exemple avec cron) pour forcer un démontage/remontage du dossier distant.
Github : https://github.com/voxdemonix/divers-sc ... sscanal.sh
Note Bis: si votre système freeze (se gèle/plante) lorsque vous ouvrez un dossier distant plein de vidéos jetez un oeil sur ce topic : [Tuto/HowTo] [GNU/Linux] Désactiver les prévisualisations (thumbnail) des fichiers vidéos sur Xubuntu


[_precheurori_] Mise en place
  1. Créez le script
  2. Collez le code suivant en l'adaptant
    • Code : Tout sélectionner

      #!/bin/bash
      #licence WTFPL - script infos : https://www.0rion.netlib.re/forum4/viewtopic.php?f=68&t=339&p=893#p893
      #github : https://github.com/voxdemonix/divers-script/blob/master/mountSSHFS_crosscanal.sh
      #work on raspbian, ubuntu, debian and possibly Arch
      
      	#si votre montage nécessite root, décommentez les 4 lignes suivantes (if [...] fi)
      #if [ ! "$SUDO_USER" ]; then
      #echo "i need root => $0"
      #exit 0
      #fi
      sleep 60 # petit délais d'attente afin que le réseau soit prêt
      
      
      IpServerLocale="192.168.1.42" # server IP LAN
      AdresseServerOnion="blablablablabla1.onion" # tor hidden service OR Hostname WAN
      MacServerLocale="00:00:00:00:00:00" #l'adresse mac du serveur SSH (tapez ifconfig dans un terminal sur votre server pour la voir)
      UserRemoteForSsh="user_sur_server" # l'user a utiliser côté server ( /!\ n'utilisez jamais root !)
      port="22" # le port sur le server
      monPointDeMontageLocal="/media/monPointDeMontageLocal"
      monPointDeMontageDistant="/home/user_sur_server/"
      
      umount $monPointDeMontageLocal -f >> /dev/null 2>&1
      ping $IpServerLocale -c 1 >> /dev/null 2>&1
      macRecover=$(arp -n | grep -i -o $MacServerLocale)
      
      if [ "$macRecover" == "$MacServerLocale" ]; then
         sshfs -o allow_other -o reconnect -o ServerAliveInterval=15 $UserRemoteForSsh@$IpServerLocale:$monPointDeMontageDistant $monPointDeMontageLocal -p $port -C
      else
         sshfs -o allow_other -o reconnect -o ServerAliveInterval=15 $UserRemoteForSsh@$AdresseServerOnion:$monPointDeMontageDistant $monPointDeMontageLocal -p $port -C
      fi
      
      • IpServerLocale="192.168.1.42" => l'adresse IP LAN de votre server
        AdresseServerOnion="blablablablabla1.onion" => l'hostname de votre server. Au choix un Tor Hidden Service, une IP WAn ou un Hostname WAN (exemple.com)
        MacServerLocale="00:00:00:00:00:00" => l'adresse MAC de votre server (tapez ifconfig sur votre server pour la voir)
        UserRemoteForSsh="user_sur_server" => user sur le server SSH à utiliser pour la connexion
        port="22" => le port d'écoute du serveur ssh (par défaut 22)
        monPointDeMontageLocal="/media/monPointDeMontageLocal" => où rendre disponible le montage sur votre client
        monPointDeMontageDistant="/home/user_sur_server/" => Le dossier sur le server à partir du quel effectuer le montage
  3. Rendez le script exécutable
  4. Lancez le au boot en éditant /etc/rc.local
  5. Et ajoutez la ligne suivante avant "exit 0"
  6. Rendez compatible votre client ssh avec le reseau tor
    • Code : Tout sélectionner

      sudo nano /etc/ssh/ssh_config
      Et collez les lignes suivantes puis tapez CTRL+X pour sauver&quitter
~ Infernalis Creatorem ~
  • Rejoins le côté obscure, on a des cookies !
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Donation Dash : XmowiBRku3tsEREp7PhpheY4TgeLLDyKdM

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité