• Configurer un serveur SFTP avec OpenSSH

    Le but :
    - permettre à des utilisateurs d'accéder à un espace de stockage personnel sur le serveur (via SSH).
    - les utilisateurs n'ont pas le droit d'accéder en SSH au serveur, seulement en SFTP
    - les utilisateurs doivent être chrootés (enfermés) dans un répertoire particulier sur le serveur (ils ne doivent pas pouvoir en sortir ni consulter l'arborescence antérieure).

    On peut utiliser un logiciel (Pro-FTP, VsFTPd etc..)... ou simplement utiliser OpenSSH...
    ça se fait en un tour de main !

    Je vous montre ici 2 méthodes.
    La première est la plus simple, la seconde est un peu plus élaborée.

     

    Méthode 1 :

    • On se met en root pour la suite !
      su -
       
    • Création des groupes d'utilisateurs : Créer un groupe pour chaque utilisateur.

      groupadd UTILISATEUR1
      groupadd UTILISATEUR2
      groupadd UTILISATEUR3
      groupadd UTILISATEUR4
      
       
    • Création des utilisateurs : Créer les utilisateurs UTILISATEUR1, UTILISATEUR2, UTILISATEUR3 et UTILISATEUR4 sans shell de connexion pour des raisons de sécurité. Assurez-vous de les ajouter au groupe correspondant.

      useradd -G UTILISATEUR1 -m -d /SFTP/UTILISATEUR1 -s /sbin/nologin UTILISATEUR1
      useradd -G UTILISATEUR2 -m -d /SFTP/UTILISATEUR2 -s /sbin/nologin UTILISATEUR2
      useradd -G UTILISATEUR3 -m -d /SFTP/UTILISATEUR3 -s /sbin/nologin UTILISATEUR3
      useradd -G UTILISATEUR4 -m -d /SFTP/UTILISATEUR4 -s /sbin/nologin UTILISATEUR4
      
       
    • Définir les mots de passe des utilisateurs : Utiliser la commande passwd pour définir les mots de passe des utilisateurs.

      passwd UTILISATEUR1
      passwd UTILISATEUR2
      passwd UTILISATEUR3
      passwd UTILISATEUR4
      
       
    • Création des répertoires : Créer les répertoires nécessaires pour chaque utilisateur.

      mkdir -p /SFTP/UTILISATEUR1/DATA
      mkdir -p /SFTP/UTILISATEUR2/DATA
      mkdir -p /SFTP/UTILISATEUR3/DATA
      mkdir -p /SFTP/UTILISATEUR4/DATA
      
       
    • Définir les permissions : Configurer les permissions pour le chroot.

      chown root:wheel /SFTP
      chmod 755 /SFTP
      
      chown root:UTILISATEUR1 /SFTP/UTILISATEUR1
      chmod 755 /SFTP/UTILISATEUR1
      chown UTILISATEUR1:UTILISATEUR1 /SFTP/UTILISATEUR1/DATA
      chmod 700 /SFTP/UTILISATEUR1/DATA
      
      chown root:UTILISATEUR2 /SFTP/UTILISATEUR2
      chmod 755 /SFTP/UTILISATEUR2
      chown UTILISATEUR2:UTILISATEUR2 /SFTP/UTILISATEUR2/DATA
      chmod 700 /SFTP/UTILISATEUR2/DATA
      
      chown root:UTILISATEUR3 /SFTP/UTILISATEUR3
      chmod 755 /SFTP/UTILISATEUR3
      chown UTILISATEUR3:UTILISATEUR3 /SFTP/UTILISATEUR3/DATA
      chmod 700 /SFTP/UTILISATEUR3/DATA
      
      chown root:UTILISATEUR4 /SFTP/UTILISATEUR4
      chmod 755 /SFTP/UTILISATEUR4
      chown UTILISATEUR4:UTILISATEUR4 /SFTP/UTILISATEUR4/DATA
      chmod 700 /SFTP/UTILISATEUR4/DATA
      
       
    • Configuration de sshd_config : Modifier le fichier de configuration SSH pour activer le chroot et restreindre les utilisateurs.

      vi /etc/ssh/sshd_config
      
       

      Ajouter/modifier les lignes suivantes :

      Subsystem sftp internal-sftp
      
      Match Group UTILISATEUR1
          ChrootDirectory /SFTP/UTILISATEUR1
          ForceCommand internal-sftp
          AllowTcpForwarding no
          X11Forwarding no
      
      Match Group UTILISATEUR2
          ChrootDirectory /SFTP/UTILISATEUR2
          ForceCommand internal-sftp
          AllowTcpForwarding no
          X11Forwarding no
      
      Match Group UTILISATEUR3
          ChrootDirectory /SFTP/UTILISATEUR3
          ForceCommand internal-sftp
          AllowTcpForwarding no
          X11Forwarding no
      
      Match Group UTILISATEUR4
          ChrootDirectory /SFTP/UTILISATEUR4
          ForceCommand internal-sftp
          AllowTcpForwarding no
          X11Forwarding no
      
       
    • Redémarrage du service SSH : Redémarrer le service SSH pour appliquer les modifications.

      service sshd restart

       ---------------------------------------------------------------------------------------------------------------------------------------

      Méthode 2 :

       

      On se met en root pour la suite !

      su -

       

      1) Créer le groupe dont les utilisateurs seront autorisés à se connecter en SFTP :

      groupadd sftpexclusive

      2) Créer un second groupe, qui lui, permettra de désactiver le compte d'un utilisateur :

      groupadd nosftp

      Vous l'aurez compris, le principe est très simple : si on veut désactiver le compte d'un utilisateur, il suffira de le rajouter au groupe nosftp avec la commande suivante : (le compte sera alors immédiatement désactivé)

      usermod -G nosftp marcel

      Peu importe qu'il soit aussi dans l'autre groupe, car l'instruction du groupe interdisant la connexion sera placée avant dans le fichier /etc/ssh/sshd_config (voir plus bas).
      Pour réactiver le compte, il faudra sortir l'utilisateur du groupe.

      3) Ajouter le shell /usr/bin/false à la liste des shells autorisés

      echo "/usr/bin/false" >> /etc/shells

      Par défaut, ce shell n'est pas autorisé.

      4) Créer l'utilisateur marcel, l'ajouter au groupe sftpexclusive, l'empêcher de se connecter en SSH, lui créer son répertoire d'accueil, lui attribuer un mot de passe et enfin s'occuper des permissions d'accès à son répertoire.

      useradd -G sftpexclusive -s /sbin/nologin -m -d /SFTP/marcel marcel
      /sbin/chown root:sftpexclusive /SFTP/marcel
      chmod 755 /SFTP/marcel

      Sur NetBSD, le raccourci de la commande chown ne fonctionne pas dans les scripts en shell standard, il faut indiquer le chemin complet (raison pour laquelle je le mets ici en entier).

      5) modifier le fichier de configuration d'OpenSSH, /etc/ssh/sshd_config
      - on va d'abord empêcher l'affichage des bannières d'accueil ainsi que du motd (je trouve ça drôlement emmerdant de voir que lorsqu'une connexion est refusée, openSSH vous présente qu'il s'agît d'un serveur NetBSD !! pas futefute ce truc !).
      La commande suivante modifie directement le fichier sshd_config (à condition que vous n'ayez pas déjà modifié ces éléments avant.. sinon voir plus bas !)

      sed -i "" "s/#Banner none/Banner no\nPrintMotd no/" /etc/ssh/sshd_config

      - on va modifier le serveur SFTP indiqué par défaut dans le fichier pour le passer sur le serveur SFTP interne
      - on va également faire en sorte que les utilisateurs n'ait qu'accès à SFTP, les enfermer, et empêcher tout type de forwarding.
      La commande suivante modifie directement le fichier sshd_config (à condition que vous n'ayez pas déjà modifié ces éléments avant.. sinon voir plus bas !)

      sed -i'' "s/\/usr\/libexec\/sftp-server/internal-sftp\n\nMatch Group nosftp\n     ForceCommand \/usr\/bin\/false\n\nMatch Group sftpexclusive\n     ChrootDirectory \/SFTP\/%u\n     ForceCommand internal-sftp\n     AllowTcpForwarding no\n     X11Forwarding no\n/" /etc/ssh/sshd_config

      Pour résumer le 5) :
      voici ce que donne les 2 commandes imbuvables au-dessus dans votre fichier /etc/ssh/sshd_config :

      # no default banner path
      Banner no
      PrintMotd no
      # override default of no subsystems

      Subsystem       sftp    internal-sftp

      Match Group nosftp
      ForceCommand /usr/bin/false


      Match Group sftpexclusive
      ChrootDirectory /SFTP/%u
      ForceCommand internal-sftp
      AllowTcpForwarding no
      X11Forwarding no


      6) On redémarre ssh :

      service sshd restart

       


    Tags Tags : , , , ,
  • Commentaires

    Aucun commentaire pour le moment

    Suivre le flux RSS des commentaires


    Ajouter un commentaire

    Nom / Pseudo :

    E-mail (facultatif) :

    Site Web (facultatif) :

    Commentaire :