Configurer un serveur SFTP seul + chroot

Il est possible de transférer des fichiers sur un serveur linux de plusieurs façons, mais 2 sont souvent utilisées : FTP et SSH. Ici, il est question de permettre à un utilisateur d’initier une connexion FTP over SSH : SFTP.Cette méthode permet donc d’autoriser un utilisateur à faire du transfert de fichier sécurisé assez rapidement en passant par une connexion SSH (port 22 d’origine). En revanche, il est préférable de bloquer (chrooter) ces utilisateurs dans un dossier personnel afin d’éviter les problèmes de sécurité et de visibilité entre utilisateurs.

Normalement tous serveurs Linux peut fournir une connexion SSH et donc SFTP, il suffit de créer l’utilisateur, son répertoire avec les bons droits et modifier le comportement du système à la connexion.

Créer l’utilisateur

useradd -s /sbin/nologin -M -d / sftpuser
passwd sftpuser
cat /etc/passwd | grep sftpuser
sftpuser:x:500:500::/:/sbin/nologin

Vérifier les règles du parefeu pour être certains que le port 22 est bien autorisé en entrée, ou un autre port si vous l’avez modifié.

iptables -L -n

Créer le répertoire racine

Ce répertoire peut être n’importe où, il faut lui mettre les droits root et autoriser les droits en lecture/écriture pour le groupe et les autres:

mkdir /home/data
chown root:root /home/data
chmod 755 /home/data

Créer un répertoire par utilisateur

Le répertoire utilisateur doit:

  • être à l’intérieur du répertoire racine
  • appartenir à nobody
  • appartenir au groupe de l’utilisateur
  • être en droit complet pour le propriétaire et le groupe
  • être en lecture/écriture pour les autres
mkdir /home/data/user1
chown nobody:user1_grp /home/data/user1
chmod 755 /home/data/user1

Configurer le serveur SSH

La configuration du serveur SSH se fait dans:

vim /etc/ssh/sshd_config

Les configurations se situent en fin de fichier.

Il faut définir le comportement du serveur SFTP en remplaçant:

Subsystem     sftp   /usr/libexec/openssh/sftp-server

par

Subsystem       sftp   internal-sftp

Autoriser le groupe de l’utilisateur à se connecter:

AllowGroups user1_grp*

ou l’utilisateur

AllowUsers user1

Créer une règle pour l’utilisateur:

Match User user1*

       ChrootDirectory /home/data/user1

       ForceCommand internal-sftp

       X11Forwarding no

       AllowTcpForwarding no

Il est possible de créer une règle pour un groupe en remplaçant

Match User user1*

par

Match Group group1*

Pour terminer

Si SELinux est de la partie, il est possible d’utiliser un booléen pour autoriser les utilisateurs chrootés à travailler dans leur environnement:

setsebool -P ssh_chroot_full_access 1

Redémarrer le service SSH

service sshd restart

L’utilisateur peut maintenant échanger des fichiers avec le serveur grâce à WinSCP par exemple.

* Minuscules obligatoires