Lorsque cela est possible, il est préférable d’utiliser le protocole SFTP pour effectuer des transferts de fichiers sur un serveur plutôt que du FTP classique. Je vous propose aujourd’hui un petit mémo pour mettre en place un accès SFTP avec utilisateurs chrootés.
L’exemple de base est de donner un accès au fichiers d’un serveur web qui seront situé sous /var/www
, dans mon cas sous CentOS 7.
Configuration du SFTP
- Créer un groupe pour le SFTP :
$ sudo groupadd sftp_users
- Ajouter un utilisateur (ici web) pour le SFTP :
$ sudo useradd web
- Ajouter un mot de passe à l’utilisateur web :
$ sudo passwd web
- Ajouter l’utilisateur web au groupe pour le SFTP et lui attribuer le répertoire par défaut :
$ sudo usermod -g sftp_users web $ sudo usermod -d /var/www web
- Éditer le fichier de configuration du daemon SSH sous
/etc/ssh/sshd_config
.- Commenter la ligne suivante :
#Subsystem sftp /usr/libexec/openssh/sftp-server
- Ajouter ce qui suit :
Subsystem sftp internal-sftp Match Group sftp_users X11Forwarding no AllowTcpForwarding no ChrootDirectory %h ForceCommand internal-sftp
- Commenter la ligne suivante :
- Redémarrer le service SSH :
$ sudo systemctl restart sshd
- S’assurer que les permissions sont correctes pour le chroot, le répertoire
/var/www
doit appartenir à root et uniquement éditable par le propriétaire.
Test de l’accès SFTP
On teste l’accès en SFTP :
$ sftp web@mon-serveur web@mon-serveur's password: Connected to mon-serveur. sftp> ls -l drwxrwxr-x 2 0 48 4096 Oct 19 20:39 cgi-bin drwxrwxr-x 2 0 48 4096 Mar 29 06:12 html sftp> pwd Remote working directory: / sftp>
Test de l’accès SSH
L’accès ssh quant à lui est bien refusé :
$ ssh web@mon-serveur web@mon-serveur's password: This service allows sftp connections only. Connection to mon-serveur closed.