====== Pure-FTPd ======
>**Sujet** : Installer un serveur FTP avec Pure-FTPd avec le mode SSL
>**Distribution** : Debian et dérivés
>**Niveau** : Intermédiaire
>**Auteur** : [[utilisateurs:waver]] (9 novembre 2004)
===== Introduction =====
[[http://www.pureftpd.org/project/pure-ftpd|Pure-FTPd]] est un serveur FTP qui présente l'avantage d'être a la fois très sécurisé et de se mettre en place très facilement malgré l'absence d'interface graphique de configuration.
Il existe une multitude de configurations possibles pour un serveur FTP (public, privé, etc.). Nous allons essayer de mettre en place ici un serveur FTP public auquel pourront accéder les utilisateurs anonymes ainsi que les utilisateurs de notre système pour télécharger ou transférer des fichiers.
===== Installation =====
On se basera sur le paquet ''pure-ftpd'' de la Debian SID (http://packages.debian.org/unstable/net/pure-ftpd) au moment ou j'écris, la version 1.0.19-4 est disponible.
# apt-get install pure-ftpd
===== Configuration =====
On partira sur une configuration en mode ''standalone''.
En effet il faut savoir que Pure-FTPd peut fonctionner soit seul, soit par le biais de ''inetd/xinetd'', ce choix se faisant au niveau du fichier ''/etc/default/pure-ftpd-common'' qu'il faut éditer :
# vi /etc/default/pure-ftpd-common
Voici ce qu'il doit contenir :
# Configuration for pure-ftpd
# (this file is sourced by /bin/sh, edit accordingly)
# STANDALONE_OR_INETD: valid values are "standalone" and "inetd".
# Any change here overrides the setting in debconf.
STANDALONE_OR_INETD=standalone
La configuration par défaut de Pure-FTPd est judicieuse et convient parfaitement pour une utilisation normale d'un serveur FTP. Elle autorise entre autre les connexions anonymes comme celles des utilisateurs du système et ce en toute sécurité.
Pour profiter de notre nouveau serveur, on va donc tout simplement le lancer:
# /etc/init.d/pure-ftpd restart
Voila, votre serveur ftp est opérationnel. Pour le vérifier il suffit de lancer un client FTP ou un navigateur et de se connecter en anonyme ou en s'identifiant sur ''ftp://localhost''. Si le comportement par défaut ne vous satisfait pas, vous pouvez facilement personnaliser le fonctionnement de Pure-FTPd.
Bien ceci étant posé la majeure partie de la configuration repose dans /etc/pure-ftpd. Si on regarde cela se présente ainsi:
# tree
.
|-- auth
| |-- 50pure -> ../conf/PureDB
| |-- 65unix -> ../conf/UnixAuthentication
| `-- 70pam -> ../conf/PAMAuthentication
|-- conf
| |-- AllowUserFXP
| |-- AltLog
| |-- AnonymousBandwidth
| |-- AnonymousCanCreateDirs
| |-- AnonymousCantUpload
| |-- AutoRename
| |-- BrokenClientsCompatibility
| |-- ChrootEveryone
| |-- DisplayDotFiles
| |-- FortunesFile
| |-- IPV4Only
| |-- MaxClientsNumber
| |-- MaxClientsPerIP
| |-- MaxDiskUsage
| |-- MaxIdleTime
| |-- MinUID
| |-- NoAnonymous
| |-- NoRename
| |-- PAMAuthentication
| |-- PassivePortRange
| |-- PureDB
| |-- SyslogFacility
| `-- UserBandwidth
|-- db
|-- pure-ftpd
|-- pureftpd-dir-aliases
|-- pureftpd.passwd
`-- pureftpd.pdb
3 directories, 30 files
Une première chose a comprendre quand on aborde Pure-FTPd, c'est qu'il ne comprend que les switchs/flags, c'est a dire qu'il ne lis pas de fichier de configuration. Cela peut paraître austère à première vue mais heureusement il existe des moyens de passer outre ce genre de soucis et le mainteneur Debian nous l'offre en utilisant un wrapper. Ce script (le wrapper) va en fait lire la configuration de Pure-FTPd et permettre de lancer le démon avec les arguments qui vont bien (tm).
Notre wrapper (''/usr/sbin/pure-ftpd-wrapper'') va donc parcourir le répertoire ''/etc/pure-ftpd/''; tout d'abord, le sous-répertoire ''auth'', puis le sous repertoire ''conf''.
Ici donc il lira ceci : ''50pure -> ../conf/PureDB''. Ce fichier ''PureDB'' contient en fait les informations permettant au wrapper de localiser la base ''puredb'', ici ''/etc/pure-ftpd/pureftpd.pdb''. Ainsi Pure-FTPd sera lancé avec le switch supplémentaire ''-l puredb:/etc/pure-ftpd/pureftpd.db''.
Pour le fichier ''70pam -> ../conf/PAMAuthentication'', il saura donc qu'on veut une auth PAM (le contenu du fichier ''PAMAuthentication'' étant ''no'') alors il ne lancera pas l'auth PAM lors de son lancement.
Donc pour mémoire le wrapper permet ainsi de faire le lien entre des fichiers de configuration et les switchs de Pure-FTPd : en lisant le man de Pure-FTPd on peut y découvrir lesdits switchs.
La lecture du manuel de /usr/sbin/pure-ftpd-wrapper (''man 8 pure-ftpd-wrapper'') permet ainsi de connaître les éléments recherchés pour la correspondance switch/fichiers.
Par exemple dans mon cas on trouvera dans le repertoire ''/etc/pure-ftpd/conf'' ceci:
/etc/pure-ftpd/conf# ls
AllowUserFXP ChrootEveryone MaxDiskUsage PureDB
AltLog Daemonize MaxIdleTime SyslogFacility
AnonymousBandwidth DisplayDotFiles MinUID TLS
AnonymousCanCreateDirs FortunesFile NoAnonymous UnixAuthentication
AnonymousCantUpload IPV4Only NoRename UserBandwidth
AutoRename MaxClientsNumber PAMAuthentication VerboseLog
BrokenClientsCompatibility MaxClientsPerIP PassivePortRange
Une fois que je relance mon serveur FTP on peut remarqué que le wrapper lance Pure-FTPd avec les switchs définis dans les fichiers se trouvant dans ''/etc/pure-ftpd/conf'':
# /etc/init.d/pure-ftpd restart
Restarting ftp server:
Running: /usr/sbin/pure-ftpd -f ftp -l puredb:/etc/pure-ftpd/pureftpd.pdb -u 1 -E -w -4 -O
stats:/var/log/pure-ftpd/pureftpd.log -A -Y 1 -d -b -c 5 -C 2 -i -F /usr/share/games/fortunes/waver -G -I 2 -k 99
-r -T 100000:10 -t 100000:10 -p 4000:5900 -B -1
L'ensemble des options disponibles et leurs significations sont détaillés dans la documentation livrée avec le logiciel.
Ceci étant dit, il existe une autre manière de lancer notre serveur FTP sans devoir configurer les fichiers dans ''/etc/pure-ftpd/conf''. Il suffit de supprimer le fichier ''/etc/init.d/pure-ftpd'' pour ne plus dépendre du wrapper et crée un nouveau fichier ''/etc/init.d/pure-ftpd'' contenant:
#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
pure-ftpd -1 -4 -A -b -B -c 5 -C 2 -E -f ftp -F /usr/share/games/fortunes/waver -G -i -I 2 -k 99% -K -l
puredb:/etc/pure-ftpd/pureftpd.pdb -O stats:/var/log/pure-ftpd/pureftpd.log -p 4000:5900 -r -T 100000:10 -t
100000:100 -u 1 -w -Y 1
Ceci lancera notre serveur Pure-FTPd avec les switchs qui vont bien sans devoir à passer par les fichiers de configuration.
==== Options =====
-A: Demande au serveur de chrooter tous les utilisateurs ftp. Concrètement cela veut dire qu'ils ne pourront sortir du répertoire maison que je leur ai défini [ici /ftp/[=_FTP_=]]. Ils ne verront rien d'autre de mon système que le répertoire /ftp/[=_FTP_=\] et ses sous-répertoires .
-b: Être moins exigeant avec les standards pour permettre la connexion à des clients ftp très peu soucieux des standards, tel IExplorer.
-B: Fonctionnement du serveur en arrière-plan.
-c: Autoriser au maximum de [n] connexions simultanées au serveur.Ici n=5.
-C: Autoriser au maximum [n] connexions simultanées venant de la même adresse ip au serveur. Ici n=2.
-e: N'accepter uniquement que les connexions anonymes.
-F: A chaque connexion d'un client, afficher un message de bienvenue pris de manière aléatoire dans le fichier /usr/share/games/fortunes/waver.
-H: Ne pas résoudre les noms de domaine pour accélérer les connexions c-a-d ne pas chercher a déterminer quel est le nom de domaine de l'adresse ip 111.111.111.111 qui demande la connexion.
-k: Ne pas autoriser les uploads dès lors que la partition est à [pourcentage]% pleine. Ici, limite fixée a 80%.
-K: Autoriser les utilisateurs à uploader et à "résumer" leur upload mais pas à supprimer ou renommer leur fichiers uploadés.
-M: Autoriser les utilisateurs anonymes à créer des répertoires.
-p: Mettre en place les ports pour le passiv mode port:port.
-q: Mettre en place les ratios [ratio upload]:[ratio download] pour les utilisateurs anonymes. Par exemple -q 1:2 signifie que les utilisateurs anonymes doivent uploader 1Mo de données pour pouvoir downloader 2Mo.
-r: Ne jamais écraser un fichier existant. Le fichier est automatiquement renommer si un fichier du même nom existe déjà sur le serveur.
-s: La protection anti-warez. Ne pas autoriser les utilisateurs anonymes à télécharger des fichiers qui viennent d'être uploadé par d'autres utilisateurs anonymes. Il faut qu'auparavant, l'administrateur du serveur est validé tous les fichiers uploadés comme étant disponible [ou non] au téléchargement.
-t: Mettre en place une limitation de la bande passante [n kb/s upload]:[m kb/s download]. Exemple -t :10 signifie que pour les utilisateurs, la vitesse en upload est illimitée [d'où l'absence de valeur] et que la vitesse en download est limitée à 10 kb/s.
-w: Activer le support FXP pour les utilisateurs authentifié.
-S (port): Connexion à Pure-ftpd sur un port non standard.
-Y: 0 = Désactivé TLS/SSL , 1 = Activé session normal et session TLS/SSL , 2 = Seulement session TLS/SSL est accepté.
==== Commandes utiles ====
* Pour supprimer le compte TEST : pure-pw userdel TEST
* Changer le password de l'utilisateur TEST: pure-pw passwd TEST
suivi de ''pure-pw mkdb'' pour que la modification soit prise en charge.
* Arrêt du serveur PureFtpd : killall pure-ftpd
* Vérification de l'arrêt du serveur : ps -C pure-ftpd
* Vérification des présences sur le ftp: pure-ftpwho ou pure-ftpwho -v
===== Ajouter le TLS/SSL pour Pure-FTPd =====
# apt-get install openssl
# mkdir -p /etc/ssl/private
# openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/pm -out /etc/ssl/private/pure-ftpd.pem
Il faut répondre aux questions. :P
# chmod 600 /etc/ssl/private/*.pem
Maintenant que tout est bon au niveau de SSL il ne faut pas oublier le flag ''-Y'' à la ligne de commande ou le fichier TLS dans ''/etc/pure-ftpd/conf''.