Configurer un serveur SFTP avec OpenSSH

Le but :

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


↑ Haut de page