Retourner au contenu. Retourner à la navigation

 

Module 2

by admin @ 23/02/2006

Chapitre 02 - PureFTPd

Mise en place d'un serveur PureFTPd

1. Introduction

Pure-ftpd est un serveur ftp libre, sécurisé, de qualité et répondant aux standard du protocole FTP. Il tourne sur de nombreux systèmes tel que Linux, FreeBSD, NetBSD, OpenBSD, ISOS, EkkoBSD, BSDi, Solaris, Darwin, Tru64, Irix, AIX et HPUX.

Il possède de nombreux atouts tels que le "chroot" des répertoires, le choix des ports pour le téléchargement passif, le support du FXP (transfert entre deux serveurs FTP), le réglage de la bande passante, le support des ratios, le support de ldap / mysql / postgreSQL / SSL pour l'authentification, et bien d'autres choses encore.

2. Rappel sur le protocole FTP

Le protocole FTP (File Transfer Protocol) est, comme son nom l'indique, un protocole de transfert de fichiers. Celui-ci a été créé en 1971, et à cette époque on ne se souciait guère de la sécurité des données. De nos jours le protocole FTP est très répandu et sa lacune envers la sécurité persiste. En effet par défaut toutes les données passent en clair sur le réseau (nom d'utilisateur/mot de passe et données).

Le protocole FTP agit au niveau de la couche 7 du modèle OSI, il est base sur un modèle client serveur avec authentification via nom d'utilisateur/mot de passe et écoute par défaut sur les ports 20 (données) et 21 (commandes).

3. FTP et la sécurité

Nous avons vu que les données transitent en clair sur le réseau, cela signifie qu'une personne mal intentionnée peut récupérer très aisément des noms d'utilisateurs/mot de passe.

Voici donc quelques précautions à prendre lorsque vous mettez en place un serveur FTP (nous exclurons ici le fait que le serveur soit directement vulnérable) :

  • Éviter d'implémenter un serveur FTP dans un réseau non commuté (un réseau contenant des Hubs).

  • Éviter d'implémenter un serveur FTP sur un serveur comportant des services critiques (DNS, MAIL...).

  • Éviter d'implémenter un serveur FTP sur un serveur comportant des données critiques/confidentielles.

  • Bloquer le compte root afin qu'il ne puisse pas se connecter au serveur FTP.

Solutions adoptables pour renforcer la sécurité :

  • L'utilisation d'utilisateurs virtuels (Voir ci-dessous).

  • Combiner le FTP avec le système de cryptage SSL/TLS (Voir le cours sur OpenSSL).


4. Introduction aux utilisateurs virtuels

Dans le cas ou une personne mal intentionnée arrive a récupérer le nom d'utilisateur/mot de passe d'un utilisateur (ceci est désastreux dans le cas du compte root), celui-ci aura accès au serveur FTP mais pire encore celui-ci pourra le cas échéant se connecter physiquement ou via SSH sur la machine !!!

La notion d'utilisateurs virtuels est très simple, il s'agit d'un utilisateur pouvant se connecter uniquement via FTP. Toutes connexions locales, SSH... lui seront refusées. Cependant les utilisateurs doivent posséder un UID/GID pour que le système puisse savoir si celui-ci a le droit de lire/écrire tel fichier/répertoire...

La méthode utilisée est la suivante :

  • Les utilisateurs possèdent l'UID d'un utilisateur système existant, celui-ci est souvent nommé ftpuser et en général ne possède pas de shell (ni de mot de passe). Il est évidemment possible de créer un utilisateur virtuel possédant le même UID que votre utilisateur système courant (afin de garder les mêmes accès). Le même principe est utilise pour le GID.

  • Chaque utilisateur virtuel possède un profil unique contenant ses limites de bande passante, ses quotas, ses horaires d'accès...

Dans le cas où vous créez un utilisateur virtuel possédant le même nom d'utilisateur/UID que votre utilisateur système, il peut être intéressant de ne pas mettre le même mot de passe (changez une lettre ou un chiffre).

5. Installation du serveur PureFTPd

Nous allons procéder à l'installation de PureFTPd via les sources, cependant vous pouvez tout à fait l'installer via un système de packages (portage, dpkg, rpm...).

La première étape consiste à récupérer les sources sur le site officiel :

ftp://ftp.pureftpd.org/pub/pure-ftpd/releases/

Une fois téléchargé, la procédure d'installation est la suivante :

# tar jxvf pure-ftpd-x.x.xxx.tar.bz2
# cd pure-ftpd-x.x.xxx
# ./configure --option1 --option2 ...
# make install-strip

Par défaut, les binaires seront installés dans /usr/local/(bin|sbin).

Voici les options du script configure que nous utiliserons :


Option

Effet

--with-puredb

Active le support des utilisateurs virtuels

--with-virtualchroot

Active les liens symboliques pour les utilisateurs chrootés

--with-ftpwho

Active la commande ftpwho

--with-altlog

Active les fichiers de log avancés

--with-throttling

Active la gestion de la bande passante

--with-peruserlimits

Active la gestion des limites par utilisateur

--without-inetd

Désactive le support inetd (gain de place)

D'autres options sont utilisables, la liste complète est disponible en tapant :

# ./configure --help

6. Lancement du serveur FTP

Nous avons vu dans le chapitre 4 qu'un utilisateur/groupe système devait être crée afin que les utilisateurs virtuels puissent avoir une identité sur le système

Voici les 2 lignes nécessaires à la création de cet utilisateur/groupe :

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

L'utilisateur système ftpuser se pourra jamais se connecter au système (home directory et shell invalide).

PureFTPd se lance de cette manière :

/usr/local/sbin/pure-ftpd -option1 arg1 -option2 arg2 -option3 ....

Voici les options que nous utiliserons :


Option

Effet

-lpuredb:/fichier

Précise la base de comptes (/etc/pureftpd.pdb par défaut).

-c N

Limite le nombre de connexions à N.

-C N

Limite le nombre de connexions par IP à N.

-E

Désactive les connexions anonymes.

-O type:/chemin/vers/fichier

Active et spécifie le fichier de log ainsi que le type.
Où type =
clf : Log de type apache
stats : log qui peut être traité par des logiciels de statistiques.
w3c: fichier de log compatible W3C.

7. Gestion des utilisateurs virtuels

Le fichier contenant les utilisateurs virtuels se nomme /etc/pureftpd.passwd, et voici son organisation :

Un utilisateur par ligne :

<account>:<mot de passe>:<uid>:<gid>:<gecos>:<home directory>:<upload bandwidth>:<download bandwidth>:<upload ratio>:<download ratio>:<max number of connections>:<files quota>:<size quota>:<authorized local Ips>:<refused local Ips>:<authorized client IPs>:<refused client Ips>:<time restrictions>

Les champs <account>, <mot de passe>, <uid>, <gid> et <home directory> sont obligatoires.

PureFTPd utilise la base de compte /etc/pureftpd.pdb qui est une version "compilée" de /etc/pureftpd.passwd.

Tout comme pour les utilisateurs système, il est possible d'ajouter/modifier/effacer un utilisateur à la main directement dans le fichier, cependant l'utilisation des commandes suivantes facilite cette tâche :
La commande pure-pw permet d'administrer le serveur, elle s'utilise de la manière suivante :

# pure-pw action [options]

Voici les différentes actions possibles :


Option

Effet

useradd

Ajouter un utilisateur virtuel.

usermod

Modifier un utilisateur virtuel.

userdel

Supprimer un utilisateur virtuel.

passwd

Modifier le mot de passe d'un utilisateur virtuel.

show

Afficher le profil d'un utilisateur virtuel.

list

Lister tous les utilisateurs virtuels.

mkdb

Recréer la base de données PureFTPd (/etc/pureftpd.pdb)

8. Les utilisateurs virtuels

Nous allons voir comment créer et gérer des utilisateurs virtuels.

8.1 Ajouter/Modifier un utilisateur virtuel

Voici la syntaxe de la commande d'ajout d'utilisateur :

# pure-pw useradd nom d'utilisateur options [-m]

A chaque ajout d'un utilisateur il faut recréer la base de données PureFTPd avec la commande :

# pure-pw mkdb

L'ajout de l'option '-m' lors de la création de l'utilisateur recrée automatiquement la base de données (plus besoin de taper 'pure-pw mkdb').

Voici les options que nous utiliserons :


Option

Effet

-u

Précise l'UID de l'utilisateur virtuel (généralement celui de ftpuser).

-g

Précise le GID de l'utilisateur virtuel (généralement celui de ftpgroup).

-D

Précise le répertoire personnel de l'utilisateur.

-d

Précise le répertoire personnel de l'utilisateur (celui-ci sera chrooter dans ce répertoire).

-T

Précise le débit maximum (upload) de l'utilisateur.

-t

Précise le débit maximum (download) de l'utilisateur.

-y

Précise le nombre maximum de sessions simultanées que l'utilisateur peut ouvrir (threads).

-z

Précise les heures de connexion de l'utilisateur (Exemple -z 1400-1800 entre 14h et 18h).

-Q

Précise le ratio de l'utilisateur (download).

-q

Précise le ratio de l'utilisateur (upload).

Exemple :

# pure-pw useradd user1 -u ftpuser -g ftpgroup -d /ftp/ -y 3 -m

Cet exemple crée un utilisateur user1 ayant l'UID de ftpuser, le GID de ftpgroup, comme répertoire personnel /ftp/ (chroote) ainsi que trois connexions simultanées au maximum.

D'autres options sont disponibles en tapant :

$ pure-pw

Voici la syntaxe de la commande de modification d\u2019utilisateurs virtuels :

# pure-pw usermod login options [-m]

A chaque modification d'un utilisateur il faut recréer la base de données PureFTPd avec la commande :

# pure-pw mkdb

L'ajout de l'option '-m' lors de la modification de l'utilisateur recrée automatiquement la base de données (plus besoin de taper 'pure-pw mkdb').

Les options sont les mêmes que pour l'ajout d'un utilisateur.

Exemple :

# pure-pw usermod user1 -y 2 -m

Cet exemple modifie le nombre de connexions simultanées (2) de l'utilisateur user1.

8.2 Changer le mot de passe d'un utilisateur virtuel

Voici la syntaxe de la commande de changement de mot de passe d'un utilisateur :

# pure-pw passwd nom d'utilisateur [-m]

A chaque modification de mot de passe il faut recrée la base de données PureFTPd avec la commande :

# pure-pw mkdb

L'ajout de l'option '-m' lors de la modification de mot de passe recrée automatiquement la base de données (plus besoin de taper 'pure-pw mkdb').

Exemple :

# pure-pw passwd user1 -m

Cet exemple change le mot de passe de l'utilisateur user1.

8.3 Convertir un utilisateur système en utilisateur virtuel

Si vous souhaitez convertir votre utilisateur système en utilisateur virtuel, voici la procédure à suivre :

# pure-pwconvert nom d'utilisateur >> /etc/pureftpd.passwd

Exemple :

# pure-pwconvert user2 >> /etc/pureftpd.passwd

8.4 Supprimer un utilisateur virtuel

Voici la syntaxe de la commande de suppression d'utilisateurs virtuels :

# pure-pw userdel login [-m]

A chaque suppression d'un utilisateur il faut recréer la base de données PureFTPd avec la commande :

# pure-pw mkdb

L'ajout de l'option '-m' lors de la suppression d'un utilisateur recrée automatiquement la base de données (plus besoin de taper 'pure-pw mkdb').

Exemple :

# pure-pw userdel user1 -m

Cet exemple supprime l'utilisateur virtuel user1.

8.5 Afficher les informations relatives à un utilisateur virtuel

La commande suivante permet d'afficher les informations relatives à un utilisateur virtuel :

# pure-pw show nom d'utilisateur

Exemple :

# pure-pw show user1
Login : user1
Password : $1$zL.EEBKZ$MbyJUyqrAa3sT719arBbB0
UID : 1001 (ftpuser)
GID : 101 (ftpgroup)
Directory : /ftp
Full name :
Download bandwidth : 0 Kb (unlimited)
Upload bandwidth : 0 Kb (unlimited)
Max files : 0 (unlimited)
Max size : 0 Mb (unlimited)
Ratio : 0:0 (unlimited:unlimited)
Allowed local IPs :
Denied local IPs :
Allowed client IPs :
Denied client IPs :
Time restrictions : 0000-0000 (unlimited)
Max sim sessions : 2

8.6 Afficher la liste des utilisateurs virtuels :

La commande suivante permet de lister tous les utilisateurs virtuels du système :

# pure-pw list

9. Administration du serveur

9.1 Lister les utilisateurs connectes au serveur

La commande pure-ftpwho permet de lister les utilisateurs actuellement connectés au serveur ainsi que leurs actions.

Exemple :

# pure-ftpwho
+------+---------+-------+------+-------------------------------------------+
| PID | login |For/Spd| What | File/IP |
+------+---------+-------+------+-------------------------------------------+
| 6105 | user1 | 00:00 | DL | File.avi |
| '' | '' | 170K/s| '' | -> 62.39.155.70 |
+------+---------+-------+------+-------------------------------------------+

La commande pure-mrtg info permet de exporter un fichier MRTG (Graphique) sur l'utilisation du serveur.

9.2 Les fichiers de log

Le fichier de log des transferts est spécifié au démarrage du serveur (Voir Chapitre 6), par exemple si vous lancez le serveur de cette manière :

# pure-ftpd -option -option -O clf:/var/log/pureftpd.log

Le fichier de log sera /var/log/pureftpd.log (format clf).

Voici un extrait de fichier de log :

172.16.34.1 - luser [17/Aug/2004:10:32:42 +0100] "GET /home/luser/code/bash/yop/yop-1.0.sh" 200 2388
172.16.34.2 - ruser [17/Aug/2004:12:24:50 +0100] "PUT /data/incoming/Supinfo.avi" 200 612732928

D'autres informations (connexions, erreurs...) sont disponibles dans les fichiers /var/log/messages et syslog.

10. Utilisation de SSL/TLS

Nous allons voir comment configurer PureFTPd afin qu'il supporte le SSL. Cela permet de ne plus envoyer les noms d'utilisateurs et les mots de passe en clair sur le réseau. Par contre le canal de données n'est pas affecté par cette encryption, afin de ne pas apporter de baisse significative des performances et cela permet de faire du FXP (transfert entre deux serveurs FTP) entre des serveurs qui supportent SSL/TLS et d'autres qui ne le supportent pas.

Pour utiliser cette fonction, vous devez posséder le fichier "/etc/ssl/private/pure-ftpd.pem" qui contient la clé privée et le certificat du serveur. Vous pouvez changer l'emplacement de ce fichier en passant l'option "--with-certfile /chemin/vers/le/fichier" au script configure, ou alors si vous avez changé le chemin pour lesysconfdir, alors le fichier doit se trouver dans "<sysconfdir>/ssl/private/pure-ftpd.pem>. Notez bien que c'est le même fichier qui doit contenir la clé privée et le certificat du serveur. Il doit ressembler à cela :

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQC+KU+laUdHceXk4ZWSH5nFJPd/TJjpZVuVgZ5FuS2/mkof8kOV
[ clé tronquée ]
SwWH5WI9d0CffE30Ab1VpDnzKRn1ncBfvh3GIdLBgtjy
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIICoDCCAgmgAwIBAgIBADANBgkqhkiG9w0BAQQFADBFMQswCQYDVQQGEwJBVTET
[ certificat tronqué ]
QZ2/xw==
-----END CERTIFICATE-----

Pour démarrer le serveur avec le support des connexions SSL, vous devez utiliser le drapeau "-Y" ou "--tls", qui peut prendre les valeurs suivantes :

  • 0 : le support pour SSL/TLS est désactivé, c'est la valeur par défaut

  • 1 : les clients peuvent se connecter soit de manière traditionnelle, soit en utilisant une connexion SSL/TLS

  • 2 : seules les connexions SSL/TLS sont acceptées

Exemple :

On possède le bon certificat pour notre serveur, et on veut
qu'il n'accepte que les connexions sécurisées.
On utilise donc cette commande pour le lancer :
# pure-ftpd ${pure-ftpd-options} -Y 2
ou bien :
# pure-ftpd ${pure-ftpd-options} --tls=2
Par admin Dernière modification 22/03/2007 15:52
Navigation
Actualités
16/05/2008 Linux intégré sur les cartes mères Asus
15/05/2008 L'association culture-libre est née
14/05/2008 Peerfuse 0.0 - Le système de fichier distribué pair-à-pair
14/05/2008 Sortie de Fedora 9
10/05/2008 Vidéo - Richard Stallman
Plus d'actualités...
Articles
21/02/2008 GNU / Screen
03/09/2007 The Linux File System Encryption API
11/08/2007 Surveillance réseau avec Snort
10/08/2007 Première approche de Xen
10/08/2007 Première approche sur LVM
More articles
Tips
28/04/2008 Mozilla Firefox : Google Talk et Facebook Chat
22/04/2008 Sed : Rechercher du texte entre deux chaines de caractères
04/04/2008 Gérer son(ses) écran(s) avec xrandr
26/03/2008 Tips sur l'historique de vos commandes
13/02/2008 Linux-Unix Cheat Sheets
More tips
Codes
09/04/2008 Chapitre 13 - Administration DNS et DHCP
09/04/2008 Chapitre 06 - Service web avec Apache
04/04/2008 Chapitre 09 - PureFTPd
04/04/2008 Chapitre 06 - Scripting Bash
01/04/2008 Chapitre 20 - Haute Disponibilité
More codes
Courses
13/09/2006 Module 3
23/02/2006 Module 2
23/02/2006 Module 1
More courses
Formation Linux

Supinfo Training Center has the first Linux Certification. The training is 13 days and allow you to pass the LPI 101 and 102.

more info
 
 
Vous êtes ici :
Cours Module 2 Chapitre 02 - PureFTPd