Configurer un accès SFTP sécurisé
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é
sudo groupadd sftpusers
sudo adduser --shell /usr/sbin/nologin --ingroup sftpusers utilisateurnologin 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 :
Match Group sftpusers
ChrootDirectory /srv/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
PermitTunnel noLe 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 :
sudo sshd -t
sudo systemctl reload sshSur 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.
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/uploadsL'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
sftp [email protected]
pwd
put fichier.txt
ls -lpwd 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
- Installer Python et un environnement virtuelCréer un environnement virtuel Python, y installer les dépendances et lancer l'application avec systemd.
- Sauvegarder un VPS correctementDéfinir quoi sauvegarder sur un VPS, produire des archives vérifiées et appliquer la règle 3-2-1.
- Déployer avec Git sur un VPSDéployer depuis un dépôt Git avec une clé de déploiement en lecture seule et des mises à jour prévisibles.