Partons du principe que nous avons déjà un serveur FTP qui tourne avec pure-ftpd. C’est bien, mais transmettre les infos en clair des mots de passe c’est mal. Sécurisons ça un minimum pour chiffrer les données.

Création du certificat

Que dit la doc ? Oui c’est pas très joli, on aurait pu au minimum avoir le droit à un sommaire, mais au moins elle existe :

To use TLS, you must provide a file called /etc/ssl/private/pure-ftpd.pem with a private key for your host and the related certificate.

Très bien, comment on génère ce fichier .pem ? Ça tombe bien, la doc nous fournit les commandes à lancer, allons y.

mkdir -p /etc/ssl/private

openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 2048

openssl req -x509 -nodes -newkey rsa:2048 -sha256 -keyout \
  /etc/ssl/private/pure-ftpd.pem \
  -out /etc/ssl/private/pure-ftpd.pem

chmod 600 /etc/ssl/private/*.pem

Ça fait quoi ce bordel ? Rien, c’est juste une création de fichiers dans le bon dossier avec les bons droits. Pourquoi faire ? En gros on va générer un certificat que pure-ftpd va pouvoir utiliser pour chiffrer les données, sans lui, on ne peut pas chiffrer.

Activer la prise en charge TLS

A présent, il faut relancer pure-ftpd en lui spécifiant qu’on ne veut plus que des connexions sécurisées. On stoppe pour le moment le serveur :

service pure-ftpd stop

La doc indique qu’il faut lancer le serveur avec l’option --tls pour configurer l’activation ou pas de TLS. Pour éviter d’y penser à chaque fois, on va créer un fichier de configuration qui sera lu à chaque démarrage. Les fichiers de configuration se trouvent dans /etc/pure-ftpd/conf. Chaque option de configuration possède son fichier contenant la valeur. On va donc créer un fichier TLS parmi les autres :

echo 2 > TLS

L’option peut prendre la valeur 0, 1, 2, ou 3. La valeur 2 indique que seules les connexions chiffrées sont acceptées. Vérifier que les droits du fichier sont bien les mêmes que les autres présents dans le répertoire.

On peut maintenant redémarrer le serveur :

service pure-ftpd start