Swisslinux.org

− Le carrefour GNU/Linux en Suisse −

 

Langue

 

Pure-FTPd

Sujet : Installer un serveur FTP avec Pure-FTPd avec le mode SSL
Distribution : Debian et dérivés
Niveau : Intermédiaire
Auteur : waver (9 novembre 2004)

Introduction

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 ™.

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.

Powered by Dokuwiki - fr/documentation/pureftpd.txt · Dernière modification: 2011/07/18 08:44 (modification externe)