Accueil

Chroot SFTP : Isoler les Utilisateurs SFTP

Security
Difficulte: Intermediate
4 min de lecture

Guide étape par étape pour configurer un environnement SFTP sécurisé avec chroot, afin de restreindre les utilisateurs à leurs répertoires dédiés.

Retour aux tutoriels

L'essentiel

  • Le confinement se déclare dans un bloc Match Group sftp_users placé à la fin de /etc/ssh/sshd_config, avec ChrootDirectory /sftp/%u : le jeton %u évite d'écrire une règle par utilisateur.
  • Le répertoire racine de la prison doit appartenir à root:root et être en 755. S'il est inscriptible par l'utilisateur ou son groupe, sshd refuse la connexion, sans exception.
  • L'utilisateur n'écrit donc jamais à la racine de son chroot : on lui crée un sous-répertoire dédié /sftp/laura/uploads dont il devient propriétaire avec chown laura:sftp_users.
  • ForceCommand internal-sftp supprime l'accès shell, et le compte est créé avec -s /sbin/nologin. On ajoute AllowTcpForwarding no et X11Forwarding no pour couper le tunneling, inutile en SFTP.
  • La validation tient en trois vérifications après systemctl restart sshd : pwd renvoie /, cd .. échoue, et l'envoi de fichier ne passe que dans uploads.
Qu'est-ce qu'un chroot SFTP ?
"Chroot" signifie "changer la racine". Un chroot SFTP est une configuration de sécurité pour le service SSH qui limite les utilisateurs SFTP à un répertoire spécifique sur le serveur. Pour eux, ce répertoire devient la racine (/) du système, et ils ne peuvent pas naviguer ou voir les fichiers en dehors de cette "prison".

Pourquoi utiliser un chroot SFTP ?

  • Sécurité : C'est la raison principale. Vous donnez accès à un serveur pour le transfert de fichiers sans exposer toute l'arborescence de votre système.
  • Confidentialité : Isole les utilisateurs les uns des autres. Chaque utilisateur ne voit que son propre environnement.
  • Simplicité pour l'utilisateur : L'utilisateur n'est pas submergé par l'arborescence complexe du système de fichiers du serveur.

Prérequis

  • Un serveur Linux (Ubuntu/Debian, CentOS/RHEL, etc.).
  • Accès root ou privilèges sudo.
  • Le service OpenSSH Server est installé et fonctionnel.

Configuration

Étape 1 : Créer un groupe pour les utilisateurs SFTP

Il est recommandé de gérer les utilisateurs SFTP via un groupe dédié.

sudo groupadd sftp_users

Étape 2 : Créer un utilisateur et son répertoire

Nous allons créer un nouvel utilisateur, par exemple `laura`, qui sera limité au SFTP.

# Créer l'utilisateur sans shell interactif et l'ajouter au groupe sftp_users
sudo useradd -m -G sftp_users -s /sbin/nologin laura

# Définir un mot de passe pour cet utilisateur
sudo passwd laura

Étape 3 : Préparer l'arborescence du chroot

C'est l'étape la plus importante et la source de nombreuses erreurs. La structure des permissions est très stricte.

# Créer le répertoire qui servira de prison
sudo mkdir -p /sftp/laura

# Le répertoire racine de la prison DOIT appartenir à root
sudo chown root:root /sftp/laura

# Les permissions ne doivent PAS autoriser l'écriture pour le groupe ou les autres
sudo chmod 755 /sftp/laura

# Créer un sous-répertoire où l'utilisateur pourra écrire des fichiers
sudo mkdir /sftp/laura/uploads

# Donner la propriété de ce répertoire à l'utilisateur
sudo chown laura:sftp_users /sftp/laura/uploads
Attention aux permissions !
Si le répertoire racine du chroot (/sftp/laura) peut être écrit par l'utilisateur, SSH refusera la connexion pour des raisons de sécurité. Il doit appartenir à root.

Étape 4 : Configurer le service SSH

Modifiez le fichier /etc/ssh/sshd_config pour activer le chroot pour notre groupe.

sudo nano /etc/ssh/sshd_config

Ajoutez ce bloc à la toute fin du fichier :


# Règle pour le groupe sftp_users
Match Group sftp_users
    # Appliquer le chroot au répertoire spécifié (%u est remplacé par le nom d'utilisateur)
    ChrootDirectory /sftp/%u
    
    # Forcer la commande interne SFTP (désactive l'accès shell)
    ForceCommand internal-sftp
    
    # Désactiver les fonctionnalités de tunneling, non nécessaires pour SFTP
    AllowTcpForwarding no
    X11Forwarding no

Étape 5 : Redémarrer le service SSH

Appliquez les changements en redémarrant le service SSHD.

sudo systemctl restart sshd

Tester la connexion

Depuis une machine cliente, essayez de vous connecter en SFTP.

sftp laura@votre_serveur_ip

Une fois connecté, vous devriez être dans le répertoire racine (qui est en réalité /sftp/laura). Vous ne pourrez pas remonter dans l'arborescence (cd .. échouera). Vous ne devriez pouvoir écrire que dans le répertoire uploads.


sftp> pwd
Remote working directory: /
sftp> ls
uploads
sftp> cd uploads
sftp> put mon_fichier.txt
Uploading mon_fichier.txt to /uploads/mon_fichier.txt
Isolé et sécurisé !
Votre utilisateur est maintenant confiné dans son répertoire, protégeant le reste de votre serveur.

Conclusion

La configuration d'un chroot SFTP est une compétence essentielle pour tout administrateur système. Elle représente un excellent équilibre entre la nécessité de fournir un accès pour le transfert de fichiers et l'impératif de sécuriser le système sous-jacent. La clé du succès réside dans la gestion rigoureuse des permissions des répertoires.

MR

Écrit par

Morgann Riu

Expert en cybersécurité et administration Linux. Je partage mes connaissances à travers des tutoriels gratuits et des formations pour aider les administrateurs systèmes et développeurs à sécuriser leurs infrastructures.

Questions fréquentes

Pourquoi la connexion SFTP est-elle refusée juste après l'ajout du bloc Match ?
Dans la quasi-totalité des cas, c'est un problème de permissions sur le ChrootDirectory. sshd exige que ce répertoire, ainsi que tous les répertoires parents du chemin, appartiennent à root et ne soient inscriptibles ni par le groupe ni par les autres. Appliquez chown root:root /sftp/laura puis chmod 755 /sftp/laura et retestez.
Pourquoi l'utilisateur ne peut-il rien déposer à la racine de sa prison ?
C'est la conséquence directe de la règle précédente : la racine du chroot appartient à root en 755, donc elle est en lecture seule pour l'utilisateur. Le schéma correct consiste à créer un sous-répertoire, par exemple /sftp/laura/uploads, et à en donner la propriété à l'utilisateur avec chown laura:sftp_users. Il navigue depuis la racine mais n'écrit que dans ce sous-répertoire.
Faut-il copier des binaires et des bibliothèques dans le chroot pour que SFTP fonctionne ?
Non, à condition d'utiliser ForceCommand internal-sftp. Le serveur SFTP est alors implémenté directement dans sshd, qui le sert depuis son propre processus : la prison peut rester rigoureusement vide, sans /bin, /lib ni /dev. C'est aussi ce qui rend la configuration facile à maintenir dans le temps.
Comment ajouter un deuxième utilisateur sans retoucher sshd_config ?
C'est exactement le rôle du jeton %u dans ChrootDirectory /sftp/%u. Il suffit de créer le compte avec useradd -m -G sftp_users -s /sbin/nologin, de créer /sftp/<utilisateur> en root:root 755 avec son sous-répertoire inscriptible, et l'appartenance au groupe sftp_users déclenche automatiquement la règle Match existante.
Comment vérifier que le confinement est réellement actif ?
Connectez-vous avec sftp laura@votre_serveur_ip. La commande pwd doit répondre / et non le chemin réel /sftp/laura, ls ne doit lister que le sous-répertoire uploads, et cd .. doit échouer. Vérifiez aussi qu'une tentative de session shell classique en SSH est refusée, puisque ForceCommand internal-sftp et le shell /sbin/nologin l'interdisent.

Partager ce tutoriel

Cet article vous a plu ?

Cet article vous a-t-il été utile ?

Merci pour votre retour !

Commentaires

Recommandé pour vous

Article de fond sur le sujet

Checklist Sécurité Linux

30 points essentiels pour sécuriser un serveur Linux. Recevez aussi les nouveaux tutoriels par email.

Pas de spam. Désabonnement en 1 clic.