Serveur FTP

Dernière mise à jour : 09/03/2019

Pour mettre en œuvre un serveur FTP, il faut penser à quelques éléments de sécurité. Par exemple :

  • Cloisonner les utilisateurs
  • Interdire les shells
  • Contrôler la provenance des requêtes

Pure-FTPd

Il existe plusieurs serveurs FTP possibles. J’ai choisi pure-ftpd qui m’a l’air léger (~800 ko) et robuste.

Pour créer un utilisateur sous Linux :

Créer l’utilisateur Linux lui-même, de préférence sans accès au shell

$ sudo useradd ftpusr -g ftpaccess -s /usr/sbin/nologin -d /home/ftp
$ sudo pure-pw useradd ftpusr -u ftpusr -g ftpaccess -d /home/ftp
$ sudo pure-pw mkdb

Dans la commande pure-pw useradd, utilisez l’option -r si possible, laquelle indique l’hôte depuis lequel l’utilisateur peut se connecter. Il faut aussi penser à ajouter le nologin dans la liste des shells (merci), sinon on obtient une erreur 530 bien difficile à corriger…

$ echo '/usr/sbin/nologin' >> /etc/shells

Pour pure-ftpd, on peut configurer le serveur via différents fichiers présents dans le répertoire /etc/pure-ftpd/conf.

$ ll 
total 56
drwxr-xr-x 2 root root 4096 Aug 29 18:40 ./
drwxr-xr-x 5 root root 4096 Aug 29 18:35 ../
-rw-r--r-- 1 root root 36 Oct 29 2012 AltLog
-rw-r--r-- 1 root root 4 Aug 29 17:57 Daemonize
-rw-r--r-- 1 root root 4 Aug 29 17:57 DontResolve
-rw-r--r-- 1 root root 6 Oct 29 2012 FSCharset
-rw-r--r-- 1 root root 4 Aug 29 17:55 IPV4Only
-rw-r--r-- 1 root root 4 Aug 29 17:56 KeepAllFiles
-rw-r--r-- 1 root root 2 Aug 29 17:56 MaxClientsNumber
-rw-r--r-- 1 root root 5 Oct 29 2012 MinUID
-rw-r--r-- 1 root root 4 Oct 29 2012 NoAnonymous
-rw-r--r-- 1 root root 4 Aug 29 18:36 PAMAuthentication
-rw-r--r-- 1 root root 28 Oct 29 2012 PureDB
-rw-r--r-- 1 root root 4 Aug 29 18:40 UnixAuthentication

Pour pure-ftpd, chaque fichier contient des informations de configurations. Par exemple, mettre yes dans le fichier NoAnonymous si vous voulez interdire les accès anonymes, ce qui est souvent préférable.

Passage en FTPS

Paramétrage TLS

Il faut d’abord forcer le passage par SSL/TLS via la commande :

$ echo 2 | sudo tee /etc/pure-ftpd/conf/TLS

Vérifiez ensuite les protocoles autorisés, et si vous utilisez ce serveur pour un usage personnel, visez haut et récent dans les protocoles autorisés.

$ cat TLSCipherSuite 
ALL:!aNULL:!SSLv3
Certificat
$ sudo apt install letsencrypt 
$ sudo letsencrypt certonly --agree-tos --email mail -d domaine

Le certificat et la clé privée utilisés doivent être placés dans un fichier unique nommé pure-ftpd.pem et placé dans le répertoire /etc/ssl/private/.

$ sudo cat /etc/letsencrypt/archive/domaine/cert.perm \ 
/etc/letsencrypt/live/ftp.iku.fr/privkey.pem > /etc/ssl/private/pure-ftpd.pem

Le serveur pure-ftpd doit ensuite être redémarré.
xx

  • https://www.howtoforge.com/how-to-configure-pureftpd-to-accept-tls-sessions-on-ubuntu-10.10
  • https://www.linuxbabe.com/linux-server/secure-ftp-server-pure-ftpd-ubuntu-16-04

Sources

  • https://doc.ubuntu-fr.org/pure-ftp
  • https://www.pureftpd.org