Skip to Content

Installation et configuration du serveur FTP Pure-FTPd sous Debian

But de ce document

Ce document me sert de mémo pour installer le serveur FTP « Pure-FTPd  » sur une Debian stable (Sarge).

Pré-requis

Avoir installé une Debian Sarge de Base :

  •  cf mon autre document sur ce sujet : http://www.coagul.org/article.php3 ?id_article=337

    Choix d’un serveur FTP

    Sous Linux, il existe de nombreux serveurs FTP. Les deux plus connus étant «  proftpd  » et « wu-ftpd ». J’ai choisi « Pure-FTPd », pour plusieurs raisons :

  •  Il est réputé pour être sécurisé
  •  Il dispose de beaucoup de fonctionnalités et d’options
  •  Il est facile à configurer et à paramétrer
  •  Il est possible de le connecter à MySQL ou à OpenLDAP pour la gestion des utilisateurs. Cela permet de mettre en place une interface Web pour le configurer et gérer les utilisateurs.

    Installation classique de Pure-FTPd

    Dans un premier temps, j’ai choisi de faire une installation classique de « Pure-FTPd » (sans le lien avec MySQL), pour me faire la main avec ce logiciel :

    # aptitude install pure-ftpd       

    Remarque : Lors de l’installation, il faut choisir entre le mode «  inetd  » et « Serveur autonome ». J’ai choisi « Serveur autonome », car mon poste ne fera que cela et ce mode offre plus de possibilités de configuration (ex : Limitation des connexions selon l’IP).

    Ensuite, j’ai choisi de ne pas autoriser le programme « pure-ftpwho » à s’exécuter avec les droits du super-utilisateur ».

    Premier test avec les utilisateurs du système

    Par défaut « Pure-FTPd » est directement fonctionnel avec les utilisateurs du système. Pour le tester, il suffit de se connecter sur l’adresse du serveur avec n’importe quel client ftp:

    $ ftp AdresseDeMonServeur

    Le répertoire ftp utilisé par défaut correspond au home de l’utilisateur.

    Configuration

    La configuration de « pure-ftpd » est assez spéciale, car elle utilise des paramètres passés en ligne de commande. Par exemple, par défaut la ligne de commande ressemble à :

    pure-ftpd -l pam -u 1000 -E -O clf:/var/log/pure-ftpd/transfer.log -B

    Cependant pour faciliter ou améliorer la compréhension de la configuration, « pure-ftpd » utilise un fichier de configuration par option de la ligne de commande. Ces fichiers sont enregistrés dans le dossier « /etc/pure-ftpd/conf ». Ensuite, le programme « pure-ftpd-wrapper » se charge automatiquement de lire ces fichiers de configuration pour modifier les paramètres de la ligne de commande.

    Par exemple, il est possible de modifier le nom du fichier contenant les logs en modifiant le fichier « /etc/pure-ftpd/conf/AltLog ». Pour prendre en compte la modification dans les fichiers de configuration, il faut lancer la commande suivante :

    # /etc/init.d/pure-ftpd force-reload

    Pour avoir la liste des fichiers de configuration qu’il est possible de créer ou de modifier et la syntaxe pour les renseigner, il faut faire « man pure-ftpd-wrapper ». Il faut faire attention à la case des caractères lors de la création des fichiers. Chaque fichier correspondant à une option de configuration que vous retrouverez au chapitre « Annexe » de ce document.

    Par exemple, en créant le fichier « /etc/pure-ftpd/conf/ChrootEveryone » et en mettant « yes » sur sa première ligne, cela permet de « Chrooter » les utilisateurs. Pour info, cela ajoutera le paramètre « -A » sur la ligne de commandes après avoir rechargé la configuration.

    Dans mon cas, j’ai créé les fichiers suivant :

    Fichiers Contenu
    /etc/pure-ftpd/conf/ChrootEveryone yes
    /etc/pure-ftpd/conf/CreateHomeDir Yes
    /etc/pure-ftpd/conf/MaxDiskUsage 80

    Création d’utilisateurs virtuels

    Dans mon cas, je souhaite que les comptes du système soient dissociés des comptes d’accès au serveur FTP. Dans ce cas, il faut donc créer des utilisateurs virtuels.

    Il faut donc commencer par créer un vrai compte système mais sans accès à celui-ci :

    # groupadd ftpgroup
    # useradd -g ftpgroup -d /dev/null -s /etc ftpuser

    Ensuite, il faut créer les utilisateurs virtuels avec la commande suivante :

    # pure-pw useradd toto -u ftpuser -d /LeDossierDeToto

    Remarque : Le dossier « LeDossierDeToto » indiqué sera créé automatiquement à la première connexion si le fichier « /etc/pure-ftpd/conf/CreateHomeDir » contient « yes »

    Il est possible de changer le mot de passe avec la commande suivante :

    # pure-pw passwd toto

    Il est possible de modifier un utilisateur avec la commande suivante :

    # pure-pw usermod toto -d /UnautreDossierPourToto

    Il est possible également de modifier directement le fichier « /etc/pure-ftpd/pureftpd.passwd »

    ATTENTION : Après chaque création ou modification d’un utilisateur, il faut générer la base de données avec la commande suivante :

    # pure-pw mkdb

    Pour finir, il faut créer un lien symbolique pour activer l’authentification des utilisateurs virtuels :

    # cd /etc/pure-ftpd/auth/
    # ln -s ../conf/PureDB 50puredb

    Remarque : Le dossier « /etc/pure-ftpd/auth/ » contient un lien symbolique pour chaque méthode d’authentification acceptée. Pour désactiver l’accès FTP aux comptes du système Linux, il faut mettre « no » dans le fichier « /etc/pure-ftpd/conf/PAMAuthentication » et recharger la configuration.

    Gérer les utilisateurs de Pure-FTPd dans MySQL

    Il faut commencer par créer un fichier de configuration lisible uniquement par root (chmod 600) pour des raisons de sécurité.

    Ce fichier de configuration peut être enregistré n’importe où comme dans :

  •  /etc/pureftpd-mysql.conf .

    Exemple de fichier de configuration :

    #MYSQLServer    localhost
    #MYSQLPort      3306
    MYSQLSocket     /tmp/mysql.sock
    MYSQLUser       root
    MYSQLPassword   rootpw
    MYSQLDatabase   pureftpd
    MYSQLCrypt      cleartext
    MYSQLGetPW      SELECT Password FROM users WHERE User="\L"
    MYSQLGetUID     SELECT Uid FROM users WHERE User="\L"
    MYSQLGetGID     SELECT Gid FROM users WHERE User="\L"
    MYSQLGetDir     SELECT Dir FROM users WHERE User="\L"

    Ensuite, il faut lancer pure-ftpd avec l’option suivante :

    # /usr/local/bin/pure-ftpd -login mysql:/etc/pureftpd-mysql.conf

    Il est possible de mélanger une authentification avec MySQL et sur les comptes Unix :

    # /usr/local/bin/pure-ftpd -login mysql:/etc/pureftpd-mysql.conf use -login unix

    Pure-FTPd est très flexible et les utilisateurs peuvent être stockés dans une table SQL quelconque. Il faut simplement qu’elle contienne les informations suivantes :

  •  Le login de l’utilisateur
  •  Le mot de passe stocké au format : plaintext, MD5, crypt()ed ou MySQL’s password()
  •  l’uid système sous forme numérique ou alphanumérique
  •  le gid système sous forme numérique ou alphanumérique
  •  Le chemin du répertoire utilisateur.

    Voici un exemple de description de table :

    CREATE TABLE users (
     User varchar(16) NOT NULL default '',
     Password varchar(64) NOT NULL default '',
     Uid varchar(11) NOT NULL default '',
     Gid varchar(11) NOT NULL default '',
     Dir varchar(128) NOT NULL default '',
     PRIMARY KEY  (User)
    );

    En fonction du nom de la table et des champs, il faut donc adapter le fichier de configuration « pureftpd-mysql.conf » :

    MYSQLGetPW   SELECT Password FROM users WHERE User="\L"
    MYSQLGetUID  SELECT Uid FROM users WHERE User="\L"
    MYSQLGetGID  SELECT Gid FROM users WHERE User="\L"
    MYSQLGetDir  SELECT Dir FROM users WHERE User="\L"

    Pour chaque query, il faut utiliser les codes suivants :

  •  \L représente le login
  •  \I représente l’adresse IP du client
  •  \P représente le port de connexion
  •  \R représente l’adresse IP du client

    Il est possible d’utiliser les codes précédents dans les requêtes SQL pour retrouver la bonne information.

    Il est possible de supprimer les uid et gid des champs des tables et d’utiliser des valeurs par défaut avec les lignes suivantes dans le fichier « pureftpd-mysql.conf ». Exemple :

    MYSQLDefaultUID 1000
    MYSQLDefaultGID 1000

    Il existe d’autres options facultatives :

  •  MySQLGetQTAFS permet de déterminer le nombre de fichiers qu’un utilisateur peut enregistrer dans son dossier. Exemple :

    MySQLGetQTAFS  SELECT QuotaFiles FROM users WHERE User="\L"

  •  MySQLGetQTASZ permet de limiter la taille maximum en Mo, qu’un utilisateur peut mettre dans son dossier. Exemple :

    MySQLGetQTASZ  SELECT QuotaSize FROM users WHERE User="\L"

    Il y a également deux options pour les ratios :

    MySQLGetRatioUL SELECT ULRatio FROM users WHERE User="\L"
    MySQLGetRatioDL SELECT DLRatio FROM users WHERE User="\L"

    Deux options pour limiter la bande passante à l’upload et au dowload en KB/s :

    MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="\L"
    MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="\L"

    Par défaut et pour des raisons de sécurité, il n’est pas possible de mettre un user "root" ou un iud/id à 0 comme utilisateur dans MySQL.

    Annexe : Détail des switches de Pure-FTPd

    Option CourteOption Gnu Commentaire
    -0—notruncate Cette option permet de renommer automatiquement un fichier si un autre du même nom existe déjà sur le serveur.Cette option est incompatible avec les "Quotas virtuels"
    -1—logpid Log le PID de chaque session dans Syslog
    -4—ipv4only Écoute uniquement les connections IP V4
    -6—ipv6only Écoute uniquement les connections IP V6
    -a —trustedgid Seulement les membre du groupe peuvent se connecter.
    -A—chrooteveryone Chroot tous les utilisateurs
    -B—daemonize Démarrer le serveur en mode Standalone (en daémon)
    -c —maxclientsnumber Autorise au maximum clients à se connecter simultanément au serveur (Défaut = 50)
    -C —maxclientsperip Nombre maximum de connexions simultanées par client (adresse IP)
    -d—verboselog Envoie des messages de débugage dans Syslog (A utiliser seulement en cas de problème)Pour avoir également les log de réponses, il faut doubler ce paramètre.
    -D—displaydotfiles Affiche les fichiers commençant par un point (Paramètre à activer pour les puristes et à désactiver pour les simples utilisateurs)
    -e—anonymousonly Autorise uniquement les utilisateurs anonymes. A utiliser uniquement pour les sites FTP publiques.
    -E—noanonymous Autorise uniquement les utilisateurs authentifiés. Les utilisateurs anonymes sont interdits.
    -f —syslogfacility Indique la « facility » à utiliser pour syslog (Défaut = local2). « -f none » permet de désactiver les logs.
    -F —fortunesfile Affiche une ligne de texte aléatoire à la connexion en provenance du fichier « fortune file » (ex : Astuce du jour). Pour afficher un texte à la connexion, il faut également utiliser cette option.
    -g
    —pidfile
    Change l’adresse du fichier pid quand l serveur est exécuté en mode standalone. (Défaut = /var/run/pure-ftpd.pid)
    -H —dontresolve Par défaut, les noms pleinement qualifiés sont logués en faisant une requête DNS inverse sur l’adresse IP. Cette option permet d’éviter de rechercher le nom pleinement qualifié dans le but d’accélérer le temps de connexion. Cette option est donc conseillée pour les sites publiques très chargés.
    -i —anonymouscantupload Interdit l’accès en écriture sur le serveur (upload) pour les utilisateurs anonymes.
    -I —maxidletime Change la durée de connexion maximum en minutes (Défaut = 15)
    -j—createhomedir Crée automatiquement le home de l’utilisateur s’il n’existe pas.
    -k
    —MaxDiskUsage
    Interdit les chargements sur le serveur (upload) si la partition utilisée est chargée à plus de
    -K—keepallfiles Autorise les utilisateurs à charger des fichiers sur le serveur, mais les interdit de les renommer ou les supprimer.
    -l —login or  : Ajoute une nouvelle règle d’authentification.
    -L  :—limitrecursion Cette option permet d’éviter le nombre de fichiers listes et le nombre de niveau de recherches pour éviter les déni de services.(Défaut = 2000 fichiers et 5 niveaux de répertoire)
    -m —maxload Interdit les téléchargements anonymes si la charge du CPU atteint
    -M—anonymouscancreatedirs Autorise les utilisateurs anonymes à créer des répertoires.
    -n  : Si le serveur supporte les quotas virtuels, cette option permet de les configurer
    -N—natmode Mode NAT
    -O
     :—altlog
     :
    Enregistre les logs des fichiers transférés dans un fichier spécifique. Plusieurs formats sont supportés : CLF (Apache-like), Stats, W3C and xferlog.Par exemple le format "Stats" ressemble à :
    -p  :—passiveportrange Permet de modifier les ports sur lesquels le serveur Écoute
    -P —forcepassiveip Force l’adresse IP ou le nom de la machine pour le retour
    -q  :—anonymousratio  : Active les ratios pour les utilisateurs anonymes
    -Q  :—userratio  : Active les ratios pour tous les utilisateurs
    -r—autorename Ne jamais écraser un fichier existant. Le fichier est automatiquement renommé si c’est nécessaire.
    -R—nochmod Interdit aux utilisateurs d’utiliser les commandes CHMOD
    -s—antiwarez Interdit aux utilisateur anonymes de télécharger des fichiers
    -T —userbandwidth or [] :[] Active la limitation de la bande passante en kilobytes/seconds. Il est possible d’avoir une bande passante différente avec la syntaxe "-t [] :[]"
    -t —anonymousbandwidth Active la limitation de la bande passante en kbps pour les utilisateurs anonymes. Il est possible d’avoir une bande passante différente avec la syntaxe "-t [] :[]"
    -u —minuid Interdit les accès pour les utilisateurs ayant un uid inférieur à celui indiqué.
    -U  :—umask  : Change le mask de création des dossiers et des fichiers. (Défaut = 133.022)
    -V —trustedip Autorise les accès non anonymes seulement pour l’adresse IP spécifiée. Les autres adresses IP auront un accès anonyme.
    -x—prohibitdotfileswrite Interdit les utilisateurs anonymes à écrire des fichiers commençant par un point.
    -X—prohibitdotfilesread Interdit les utilisateurs anonymes à lire et écrire des fichiers commençant par un point.
    -y  : —peruserlimits  : Permet de limiter le nombre de sessiond simultanées qu’un utilisateur peut ouvrir (Défaut = 0 = illimités)
    -z —allowdotfiles Autorise les utilisateurs anonymes à lire les fichiers et les dossiers commençant par un point.

    Exemple :

    # /usr/local/sbin/pure-ftpd -y 3:20 -c 15 -C 5 -B

  •  3 connexions maximum pour le même utilisateur
  •  20 connexions maximum pour les utilisateurs anonymes
  •  15 sessions maximum
  •  5 connections maximum pour la même adresse IP du client
  •  Serveur en mode daemon

    Autres liens

    La documentation officielle :

  •  http://www.pureftpd.org/project/pure-ftpd/doc

    Historique des modifications

    Version Date Commentaire
    0.1 16/11/05 Création par Tony GALMICHE
    0.2 20/08/06 Mise en ligne
  • Commentaires

    Installation et configuration du serveur FTP Pure-FTPd sous Debi

    Bonjour,

    Super tuto, merci !

    Mais une question, sur le quotas sur les dossiers, :

    Comment faire pour qu’il soit personnalisable pour chaque utilisateurs ?

    Merci

    Installation et configuration du serveur FTP Pure-FTPd sous Debi

    Bon tuto :)
    Pour d’autre information il y a aussi ce tuto
    http://serveurhaksyn.free.fr/hsncity/viewtopic.php ?t=4

    sa peut toujour aider du monde :)

    > Installation et configuration du serveur FTP Pure-FTPd sous De

    Bonsoir Patrice,

    Merci pour la relecture.

    Bonne santé même si c’est pas le nouvel an :-) et à bientôt.

    Tony

    > Installation et configuration du serveur FTP Pure-FTPd sous De

    Bonjour Tony,

    Très bien ton article.
    Ce la me rappelle qu’il faut que j’apprennes à utiliser la macro pour l’article sur le forwarding SSH.

    A mardi si la santé me le permet.

     :)

    Patrice.