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