3.f. Installation et configuration FTP
Un serveur web sans pouvoir se connecter en FTP à distance, ça semblerai bizarre...
Alors l'installation d'un serveur FTP semble nécessaire. Après quelques essais, j'ai choisi d'utiliser ProFTPd. J'avais d'abord tenté l'installation de vsftpd, mais j'ai lâché l'affaire après 2 heures de configuration sans succès.
Installation ...
Un serveur web sans pouvoir se connecter en FTP à distance, ça semblerai bizarre...
Alors l'installation d'un serveur FTP semble nécessaire. Après quelques essais, j'ai choisi d'utiliser ProFTPd. J'avais d'abord tenté l'installation de vsftpd, mais j'ai lâché l'affaire après 2 heures de configuration sans succès.
Installation de ProFTPd
sudo apt-get install proftpd
Une fois cette ligne de commande exécutée, on me demande quel mode d'exécution je désire. Je choisi l'option par défaut : indépendamment.
Pour me faciliter un peu la tâche au départ, j'installe également un outil en mode graphique qui va me permettre de modifier la configuration du serveur et ajouter des utilisateurs : gadmin-proftpd.
Malheureusement, cette fois pas de apt-get install car la version de cet outil sur les dépôts ubuntu ne fonctionne pas avec Intrepid Ibex, ma version d'ubuntu.
Je dois donc télécharger le fichier et l'installer manuellement. Sur cette page, je choisi la dernière version en .deb (gadmin-proftpd_0.3.5-2_i386.deb) et la télécharge sur le serveur (sur le bureau).
Pour installer un .deb, les lignes de commande suivantes suffisent :
cd /home/titouille/Bureau sudo dpkg -i gadmin-proftpd_0.3.5-2_i386.deb
et gadmin-proftpd s'installe sans broncher.
Configuration de ProFTPd
L'installation, c'est bien... La configuration, c'est mieux.
Mes besoins sont les suivants :
- Sécuriser l'accès via FTP en passant par un certificat et des authentifications cryptées
- Permettre à un utilisateur d'accéder à toute l'arborescence du serveur
- Permettre à des utilisateurs d'accéder uniquement à la partie web de mon serveur, chacun ayant un virtualHost dédié
J'édite tout d'abord le fichier global de configuration proftpd situé ici : /etc/proftpd/proftpd.conf pour y rajouter les lignes suivantes :
[...] DefaultRoot ~ IdentLookups off ServerIdent on "Titouille FTP Server ready." [...]
Sécuriser l'accès au FTP via un certificat (TLS)
Pour sécuriser l'accès, je dois tout d'abord générer un certificat.
Si OpenSSL n'est pas encore installé, je l'installe :
sudo apt-get install openssl
puis je génère les fichiers nécessaires (certificat et clé) :
cd /etc/ssl/perms openssl req -new -x509 -days 365 -nodes -out proftpd.cert.pem -keyout proftpd.key.pem
Lors de la génération de la clé, plusieurs questions sont posées, auxquelles je réponds par des données standard. La question "Common Name" est importante, je dois spécifier le nom de domaine que j'utilise : titouille.is-a-geek.net.
Une fois le certificat et la clé générées, je vais protéger ces 2 fichiers pour qu'ils soient accessible uniquement par "root". Le service proftpd étant lancé par "root", puis un sous-service servant à établir les connexions, seul root doit avoir accès à la paire certificat/clé.
sudo chmod 600 proftpd.*
Maintenant que mon certificat et ma clé sont créés, je vais activer TLS sur mon serveur FTP. Pour ce faire, je dois éditer le fichier de configuration :
sudo nano /etc/proftpd/proftpd.conf
et y rajouter tout d'abord la ligne suivante tout en haut :
Include /etc/proftpd/modules.conf
ce qui va permettre d'activer le support TLS. Je vais ensuite rechercher la section TLS et y placer la configuration suivante :
<IfModule mod_tls.c> TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol SSLv23 TLSRSACertificateFile /etc/ssl/perms/proftpd.cert.pem TLSRSACertificateKeyFile /etc/ssl/perms/proftpd.key.pem TLSOptions NoCertRequest #TLSSCACertificateFile /etc/proftpd/ssl/cacert.pem #TLSRenegotiate required off TLSVerifyClient off TLSRequired on </IfModule>
Il existe également une directive "PassivePorts" qui contient l'intervalle de ports utilisés pour les transferts en mode passif.
Il est nécessaire d'ouvrir ces ports sur le routeur, ainsi que bien entendu les ports 20 et 21 qui sont utilisés par le protocole ftp.
Une fois cette configuration modifiée, il ne reste plus qu'à l'appliquer avec la ligne de commande :
sudo /etc/init.d/proftpd restart
afin de redémarrer le serveur FTP.
Créer un utilisateur pouvant naviguer dans toute l'arborescence
Pour créer un utilisateur, je vais passer par l'interface d'administration gadmin-proftpd que j'ai installée auparavant.
Je la démarre. Si un message s'affiche me disant que le fichier de configuration n'est pas correct pour gadmin-proftpd et qu'il faudrai écraser la version actuelle par une nouvelle version par défaut, je réponds non.
Une fois l'interface démarrée, je vais sur l'onglet "user", puis je remplis les données :
nom d'utilisateur : ftp
mot de passe : xxxxx
groupe : no-group
comment :
Shell : dev/null
Require password : yes
Show user in statistics : yes
Maximum logins : 5
Allow logins from : all
puis je rajoute un dossier en cliquant sur "Ajouter un dossier". Je choisi de le faire atterrir dans mon répertoire home/titouille/ftp que j'ai créé pour l'occasion.
Enfin, je clique sur le bouton "Ajouter" en dessous de la liste des utilisateurs, et mon utilisateur est ajouté dans la liste.
Je ne ferai cette action que pour un seul utilisateur, car l'interface gadmin-proftpd a un peu de peine à gérer l'ajouts de nouveaux utilisateurs... Lorsque je tente d'ajouter un second utilisateur, je ne peux pas supprimer le dossier affecté au premier utilisateur et il est ajouté au nouvel utilisateur, ce que je ne désire pas.
Je rajouterai les autres utilisateurs en passant directement par le fichier de configuration proftpd.conf et en m'inspirant du premier utilisateur inséré. Ou alors je passerai encore par l'interface graphique, mais je changerai ensuite le dossier et la config par le fichier de config.
Reste maintenant à donner un accès à l'utilisateur pour qu'il puisse naviguer dans toute l'arborescence. Pour ce faire, je vais créer dans le répertoire /home/titouille/ftp tous les dossiers nécessaires : /bin, /boot, /dev, /etc, /home, etc... et monter ces dossier grace au fichier /etc/fstab.
Pour chaque dossier, je vais rajouter une ligne du type
/bin /home/titouille/ftp/bin ext3 bind 0 0
puis utiliser la commande "mount" pour monter les répertoires sans devoir relancer ma machine, comme suivant :
sudo mount /home/titouille/ftp/bin
(a exécuter pour chaque répertoire créé et à monter)
Créer des utilisateurs ayant accès à un virtualHost
Pour avoir des utilisateurs qui peuvent créer leur propre "site web" sur mon serveur, je vais tout d'abord créer un virtualHost par utilisateur (voir le billet sur l'installation et la configuration d'apache2) puis je vais simplement créer un nouvel utilisateur par virtualHost, via l'interface gadmin-proftpd en faisant pointer le répertoire sur le chemin du virtualHost dans ma racine www. Je n'aurai plus qu'à affecter les droits nécessaires (création / suppression de fichiers / dossiers, etc...) et le tour est joué.
Tests de connexion
Les tests en mode FTPES étaient des échecs, à cause de Filezilla. Les dernières versions ont un problème avec le mode TLS/SSL. La dernière version de proftpd corrige ce problème, mais je n'ai pas réussi à l'installer avec les sources. Il faut donc utiliser la version 3.0.11 de Filezilla pour réussir à se connecter.
Seuls les connexions sécurisées sont possibles grace à la directive "TLSRequired on".
Tests en local
Les tests ne posent pas de problèmes en passant par l'adresse ip locale, mais ça ne fonctionne pas avec la dyndns.
Tests en distant
Tests ok en passant par l'adresse dyndns.
Lorsque je me connecte via l'utilisateur sensé avoir tous les accès, je peux bien naviguer dans l'interface, mais je ne peux malheureusement pas modifier, ajouter ou supprimer quoi que ce soit.
Reste donc à régler ces différents problèmes afin d'avoir un serveur FTP totalement fonctionnel.
Sources :
proftpd - documentation ubuntu francophone
gproftpd - documentation ubuntu francophone
HOWTO : Create a FTP server with user access (proftpd)
Setting Up ProFTPd + TLS On Ubuntu 8.10 (Intrepid Ibex)
FTP and SSL/TLS