Configurer un accès SFTP sécurisé

2 min de lecture07 novembre 2026

SFTP passe par SSH et remplace avantageusement FTP, qui transmet identifiants et fichiers en clair. Pour un prestataire ou un collègue qui doit déposer des fichiers, créez un compte dédié, sans shell, enfermé dans un dossier précis. Le piège principal est le chroot : sshd refuse la connexion si les permissions ne sont pas exactes.

Créer un compte dédié

Bash
sudo groupadd sftpusers
sudo adduser --shell /usr/sbin/nologin --ingroup sftpusers utilisateur

nologin interdit le shell interactif mais pas SFTP. L'utilisateur n'a aucun accès sudo. Si vous préférez une clé, installez-la dans /home/utilisateur/.ssh/authorized_keys avant de désactiver le mot de passe.

Configurer sshd

Ouvrez /etc/ssh/sshd_config avec sudoedit et ajoutez ce bloc à la fin :

Configuration
Match Group sftpusers
    ChrootDirectory /srv/sftp/%u
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no
    PermitTunnel no

Le bloc Match doit être en fin de configuration. Sur Debian, les fichiers de /etc/ssh/sshd_config.d/ sont inclus au début du fichier principal : un Match placé là rendrait conditionnelles les directives qui suivent. ChrootDirectory enferme l'utilisateur dans son dossier ; ForceCommand internal-sftp ignore toute commande shell. %u est remplacé par le nom du compte. Validez avant de recharger :

Bash
sudo sshd -t
sudo systemctl reload ssh

Sur Debian, le service s'appelle ssh. Gardez une session root ouverte pendant le test : une erreur de configuration peut couper SSH.

Permissions du chroot

Le dossier chroot et tous ses parents doivent appartenir à root et ne pas être modifiables par l'utilisateur, sinon sshd refuse la connexion.

Bash
sudo mkdir -p /srv/sftp/utilisateur/uploads
sudo chown root:root /srv/sftp /srv/sftp/utilisateur
sudo chmod 755 /srv/sftp /srv/sftp/utilisateur
sudo chown utilisateur:sftpusers /srv/sftp/utilisateur/uploads
sudo chmod 750 /srv/sftp/utilisateur/uploads

L'utilisateur écrit uniquement dans uploads. Des permissions 777 casseraient la séparation et exposeraient les fichiers. Ne placez pas de clé privée ni de configuration sensible dans ce dossier.

Tester

Bash
sftp [email protected]
pwd
put fichier.txt
ls -l

pwd doit afficher /. Tentez cd .. : la sortie doit rester dans le chroot. Vérifiez journalctl -u ssh -n 50 en cas de Broken pipe ou de fermeture immédiate. Un Permission denied vient souvent du shell, du mot de passe ou des droits du chroot. Un Write failed indique presque toujours un dossier parent modifiable par l'utilisateur.

Pour publier vers un site, synchronisez depuis uploads vers /var/www avec un script rsync exécuté par un compte de déploiement. Ne donnez pas à l'utilisateur SFTP l'accès direct à la racine web : il pourrait remplacer le code exécuté par PHP.

Publicité

Cet article vous a-t-il aidé ?

À lire aussi