Il est préférable et plus simple d'utiliser aujourd'hui le transfert de fichiers par sftp plutôt que ftp/ftps, notamment parce que :

  • Le protocole FTP est vraiment mal conçu,
  • Il n'y a pas besoin de service supplémentaire autre que SSH,

D'une manière générale, il est plus simple de passer par des ACL, c'est à dire de pouvoir appliquer une configuration type à un ensemble d'utilisateurs, pour SSH nous allons utiliser les groupes. Cette manipulation a été réalisée sur une distribution de type Debian/Ubuntu.

On commence d'abord par basculer "root" le temps de faire les manipulations :

toto@server ~$ sudo -i
[sudo] Mot de passe de toto : 
root@server:~# 

 

On ajoute un groupe dédié :

root@server:~# groupadd sftpusers

 

Ensuite, nous allons configurer SSH pour "enfermer" les utilisateurs qui appartiennent à ce groupe dans leur répertoire de connexion. Ainsi ils ne pourront pas se rendre dans le reste du système et accéder à d'autres fichiers.

Il faut se rendre dans le fichier de configuration à l'aide d'un éditeur de texte (vi ou nano) /etc/ssh/sshd_config :

...

# Modifiez le ligne suivante

#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem       sftp    internal-sftp

# Ajoutez ceci à la fin

Match Group sftpusers
        ChrootDirectory %h
        ForceCommand internal-sftp
        X11Forwarding no
        AllowTcpForwarding no
        GatewayPorts no

 

On redémarre le service :

root@server:~# systemctl restart sshd

 

Pour cet exemple, nous allons créer un utilisateur "webmaster" qui pourra mettre à jour les pages Web se situant dans le répertoire "/var/www/html", vous noterez par contre que le répertoire de connexion ne sera pas directement ce répertoire, mais le répertoire du dessus. En effet, le répertoire dans lequel l'utilisateur est enfermé doit appartenir à "root". De plus, nous lui donnons un shell restreint car c'est suffisant pour ce type de connexion :

root@server:~# useradd -G sftpusers -g www-data -s /usr/sbin/nologin -c "WebMaster" -d /var/www webmaster

 

L'utilisateur sera membre du groupe www-data car c'est le groupe utilisé par le serveur Web sous Debian/Ubuntu.

Il faut ensuite lui donner un mot de passe :

root@server:~# passwd webmaster
Nouveau mot de passe : XXXXX
Retapez le nouveau mot de passe : XXXXX
passwd : le mot de passe a été mis à jour avec succès

 

Nous allons "donner" les fichiers web à cet utilisateur

root@server:~# chown -R webmaster.www-data /var/www/html

 

Nous pouvons tester en local et bien constater que l'utilisateur n'a pas accès à la racine du système :

root@server:~# sftp webmaster@localhost
webmaster@localhost's password: XXX
Connected to localhost.
sftp> ls
html                 cgi-bin  
sftp> cd /
sftp> ls
html                 cgi-bin  
sftp> exit
root@server:~#

 

Il est possible maintenant d'utiliser un logiciel de transfert de fichier comme FileZilla pour mettre à jour son site Web de manière sécurisé !!

Il faut bien penser à quitter le sudo à la fin :

root@server:~# exit

toto@server ~$