Association Générale des Utilisateurs de logiciels libres en Côte-d'Or

logo_coagul

Installation et configuration du serveur FTP Pure-FTPd sous Debian

Rubrique : Serveurs
Le : dimanche 27 août 2006
Par : Tony  
Visites : 49306
Tags : FTP, MySQL, Pure-FTPd

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 :

FichiersContenu
/etc/pure-ftpd/conf/ChrootEveryoneyes
/etc/pure-ftpd/conf/CreateHomeDirYes
/etc/pure-ftpd/conf/MaxDiskUsage80

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 GnuCommentaire
-0—notruncateCette 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 —maxclientsperipNombre maximum de connexions simultanées par client (adresse IP)
-d—verboselogEnvoie 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—noanonymousAutorise 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 —dontresolvePar 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 —anonymouscantuploadInterdit 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—createhomedirCré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—keepallfilesAutorise 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—natmodeMode 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—autorenameNe jamais écraser un fichier existant. Le fichier est automatiquement renommé si c’est nécessaire.
-R—nochmodInterdit 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 —allowdotfilesAutorise 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

VersionDateCommentaire
0.116/11/05Création par Tony GALMICHE
0.220/08/06Mise en ligne
Version imprimable de l'article

Forum


  • Installation et configuration du serveur FTP Pure-FTPd sous Debian
    26 mai 2008

    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 Debian
    26 janvier 2008, par crashx

    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 :)

Site réalisé sous Spip. Merci à NFrance pour son hébergement gracieusement offert. Tous les articles de ce site sont sous licence Creative Commons by-nc-sa (CC).