"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
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
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.