Openssh: créer un accès SFTP sur un seul répertoire sous Linux

Dans ce post, je vais vous montrer comment ouvrir un accès SSH à un user toto vers un seul dossier sur votre serveur. Ca evite que toto se balade tranquillement sur votre machine alors qu’il ne devait avoir accès qu’à un seul repertoire pour déposer ou récupérer des fichiers en SSH.

Tout d’abord, nous allons installer openssh :

sudo apt-get install openssh-server

Créer le user

Pour cela rien de très compliqué :

sudo adduser toto

Empêcher le user de se connecter en SSH

pour des raison de sécurité, on va interdire l’accès au serveur via SSH pour ce user :

sudo usermod -s /bin/false toto

Configurer SSH

Nous avons besoin de modifier la configuration ssh en allant dans le fichier /etc/ssh/sshd_config

Je vous recommande de créer un backup de ce fichier avant de le modifier

Vous y êtes ? OK, alors il faut remplacer la ligne suivante :

Subsystem sftp /usr/lib/openssh/sftp-server

Par celle ci :

Subsystem sftp internal-sftp

internal-sftp est plus récent que sftp-server. Le SFTP-SERVER reste le service par défault pour des raison de comptabilité. Par contre, internal-sftp supporte toutes les options de sftp-server avec en plus les limitations des accès pour les users et les groupes. Il est aussi plus performant que sftp-server car il n’a pas besoin de lancer un nouveau processus pour SFTP.

Configurer le path par défaut pour notre user

Nous allons définir le path par défaut à la racine de notre serveur “/”

sudo usermod -d / toto

c’est une étape importante car le ChrootDirectory qui va être défini plus loin sera relatif au chemin racine “/”

Configurer le dossier SFTP

Le repertoire “ChrootDirectory” doit etre la propriété de root :

sudo chown root.root /PATH/TO/THE/FOLDER/WITH/SFTP/ACCESS

Créer un compte limité à un user

Pour cela, il faut aller au fichier de configuration /etc/ssh/sshd_config et ajouter ces lignes

Match User toto
    ChrootDirectory /PATH/TO/THE/FOLDER/WITH/SFTP/ACCESS
    PermitTunnel no
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp

Créer un compte limité à un group

Create the group:Create limited account for a group

On crée tout d’abord le group

sudo addgroup sftplimited

S'assurer que notre user est bien dans le groupe :

sudo usermod -g sftplimited toto

ajouter ces lignes à la fin de notre fichier sshd_config :


Match group sftplimited
    ChrootDirectory /PATH/TO/THE/FOLDER/WITH/SFTP/ACCESS
    PermitTunnel no
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp

Redémarer le service SSH et essayer !

sudo service ssh restart

Essayez de vous connecter

sftp toto@YOUR.SERVER.COM

Des problèmes?

Si ca ne marche pas, essayer de lancer ssh en mode debug pour voir les erreurs sur l’écran ou allez dans /var/logs/ssh/

/usr/sbin/sshd -ddd