I. Introduction▲
Pure-ftpdServeur FTP Pure-ftpd(i) est un serveur FTP sécurisé et fiable pour les systèmes dérivés d'UNIX, sous licence BSD(ii). Le choix de l'utilisation du serveur Pure-ftpd repose sur sa facilité de configuration, de mise en place, contrairement à certains de ses concurrents et sur les nombreuses options de customisation qu'il offre.
Pure-FTPd était fondé sur Troll-FTPd écrit par Arnt Gulbrandsen alors qu'il travaillait chez Trolltech en 1995. Les contributeurs originaux étaient Janos Farkas, August Fullford, Ximenes Zalteca et Patrick Michael Kane. Le logiciel est désormais développé par l'équipe PureFTPd, Frank Denis étant l'initiateur et le mainteneur principal. PureFTPd est né d'une collecte des différents patchs non officiels de Troll-FTPd réunis en un ensemble cohérent et des autres premières contributions de Frank Denis(iii).
II. Pourquoi Pure-ftpd ?▲
Pure-ftpd se veut à la fois simple dans sa configuration, mais, en même temps, sécurisé et puissant, de par le nombre de fonctionnalités qu'il propose. Contrairement à ses concurrents les plus directs (Proftpd et vsftpd notamment), il est très facile à appréhender et convient donc parfaitement aux plus novices en systèmes Unix-like.
Néanmoins, facilité de configuration ne signifie pas faiblesse ! Pure-ftpd est utilisé par de nombreuses entreprises. Nous pouvons par exemple citer OVH qui l'utilise en production.
Dans ses dernières versions, Pure-ftpd a été porté sur Iphone.
III. Installation▲
Remarque : La méthode d'installation proposée dans cet article repose sur le fonctionnement de la distribution Debian et ses dérivés. Pour les autres distributions, veuillez vous reporter aux commandes de gestion des paquets implantées pour la distribution choisie.
L'installation du serveur FTP nécessite une base de données Mysql. Il est donc nécessaire d'installer également Mysql sur la machine.
III-A. Installation de Mysql▲
Pour installer un serveur de bases de données Mysql, se connecter en tant que root et lancer la commande suivante :
apt-get install mysql-server
L'installeur du serveur Mysql vous demande d'entrer un mot de passe pour l'utilisateur administrateur de la base de données (root). Entrez un mot de passe 2x et terminez l'installation. Voilà, votre serveur Mysql est installé !
III-B. Installation de Pure-ftpd▲
Il existe différentes versions de Pure-ftpd. Nous allons installer la version mysql, car nous utiliserons une authentification par base de données avec les utilisateurs virtuels.
apt-get install pure-ftpd-mysql
IV. Configuration de la base de données▲
Comme annoncé plus haut, nous allons configurer notre serveur FTP en nous reposant sur une authentification par base de données. Il nous faut donc créer un utilisateur et une base de données pouvant accueillir les utilisateurs virtuels.
IV-A. Création de l'utilisateur Mysql▲
Nous allons créer un utilisateur Mysql afin de ne pas utiliser l'utilisateur administrateur de Mysql.
Connexion à la base de données en tant qu'administrateur de la base de données (root) :
$
mysql -u root -p
Entrez le mot de passe administrateur Mysql que vous avez défini lors de l'installation du serveur de base de données. Vous êtes maintenant connecté en CLI au serveur Mysql, en tant qu'administrateur tout puissant. À présent, nous allons créer un nouvel utilisateur Mysql avec des droits restreints :
CREATE
USER
'USER_MYSQL_A_CREER'
@'localhost'
IDENTIFIED
BY
'MON_MOT_DE_PASSE'
;
GRANT
USAGE
ON
*
. *
TO
'USER_MYSQL_A_CREER'
@'localhost'
IDENTIFIED
BY
'MON_MOT_DE_PASSE'
WITH
MAX_QUERIES_PER_HOUR
0
MAX_CONNECTIONS_PER_HOUR
0
MAX_UPDATES_PER_HOUR
0
MAX_USER_CONNECTIONS
0
;
IV-B. Création de la base de données pour Pure-ftpd▲
On crée une base de données en donnant les droits sur cette base au nouvel utilisateur Mysql :
CREATE
DATABASE
IF
NOT
EXISTS
NOM_BASE_DE_DONNEES;
GRANT
ALL
PRIVILEGES
ON
NOM_BASE_DE_DONNEES.*
TO
'USER_MYSQL_A_CREER'
@'localhost'
;
IV-C. Création de la table utilisateur pour Pure-ftpd▲
On crée une table utilisateur pour Pure-ftpd et son schéma :
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
)
)
;
V. Configuration du serveur Pure-ftpd▲
Les fichiers de configuration du serveur Pure-ftpd se trouvent dans le répertoire /etc/pure-ftpd/.
V-A. Connexion à la base de données▲
À présent, nous allons configurer la connexion à la base de données.
Le fichier à éditer est /etc/pure-ftpd/db/mysql.conf .
Différentes méthodes de stockage des mots de passe en base sont proposées : cleartext, crypt, md5 et password.
Nous en profitons aussi pour spécifier que les mots de passe des comptes FTP devront être chiffrés(iv) (dans cet exemple en md5).
Le chiffrement des mots de passe s'explique facilement. En effet, s'il arrivait qu'une personne mal intentionnée ou qu'une faille permette d'accéder au contenu de la base de données, la personne aurait la possibilité de se connecter sans problème aux différents espaces de stockage FTP, grâce aux mots de passe en clair.
Le chiffrement des mots de passe offre donc une couche de sécurité dans le stockage des informations de connexion, car un hash a pour but d'être irréversible (en théorie).
Renseignez les champs suivants :
# Mandatory : user to bind the server as.
MYSQLUser USER_MYSQL_A_CREER
# Mandatory : user password. You must have a password.
MYSQLPassword MON_MOT_DE_PASSE
# Mandatory : database to open.
MYSQLDatabase NOM_BASE_DE_DONNEES
# Mandatory : how passwords are stored
# Valid values are : "cleartext", "crypt", "md5" and "password"
# ("password" = MySQL password() function)
# You can also use "any" to try "crypt", "md5" *and* "password"
MYSQLCrypt md5
V-B. Suppirmer les connexions utilisateurs Unix▲
Par défaut, le serveur Pure-ftpd permet la connexion ftp grâce aux utilisateurs Unix de la machine. Nous allons supprimer cette option afin de sécuriser les accès aux ftp et n'autoriser que les connexions par les utilisateurs virtuels inclus dans la base.
Pour cela, nous allons dans le répertoire /etc/pure-ftpd/conf et éditons le fichier UnixAuthentication en plaçant sa valeur à « no » :
echo no >
/etc/pure-ftpd/conf/UnixAuthentication
V-C. Mettre un umask sur les dossiers et fichiers▲
Il peut être utile de changer les permissions des dossiers et fichiers sur un FTP. Avec Pure-ftpd, il est possible de définir un umask différent pour les dossiers et les fichiers. Cela se fait en créant un fichier Umask dans /etc/pure-ftpd/conf et en y écrivant les valeurs des umasks désirés, dans l'ordre fichier-dossier.
echo "133 022"
>
/etc/pure-ftpd/conf/Umask
Avec les umasks 133 et 022, les fichiers déposés sur le ftp auront comme droits 644 et les dossiers 755.
V-D. Chrooter les comptes FTP▲
Par défaut, en se connectant par ftp au serveur, il est possible de remonter dans l'arborescence, jusqu'au « / ». Afin de restreindre l'accès aux utilisateurs ftp à leur répertoire racine personnel, il faut activer l'option « Chroot » dans la configuration de Pure-ftpd. Encore une fois, cela se fait par le biais un fichier dans le dossier /etc/pure-ftpd/conf :
echo yes >
/etc/pure-ftpd/conf/ChrootEveryone
V-E. Forcer l'affichage des fichiers cachés▲
Il peut être utile de visualiser les fichiers cachés sur le système de fichiers, ces fameux fichiers commençant par un « . », par exemple les fichiers .htaccess que l'on peut trouver sur certains sites web. On peut forcer leur affichage en passant une nouvelle option au serveur Pure-ftpd. Dans ce cas, on crée un nouveau fichier de configuration dans /etc/pure-ftpd/conf :
echo yes >
/etc/pure-ftpd/conf/DisplayDotFiles
V-F. Cas particulier pour certaines applications web▲
Certaines applications web telles que Joomla offrent la possibilité d'installer des modules directement depuis le back-office. Un problème de permissions peut être rencontré pour installer ces modules. En effet, l'utilisateur pris en compte par l'application pour installer ces modules est l'utilisateur du serveur web, par exemple www-data s'il s'agit d'un serveur web apache.
Dans ce cas, donnez les droits à l'utilisateur du serveur web au niveau du répertoire web racine et à tout son contenu à l'aide de la commande « chown ». Ensuite, pour que vous puissiez à la fois uploader sans problème et installer des modules depuis le back-office, autorisez le serveur Pure-ftpd à se connecter en tant que l'utilisateur du serveur web. Puis notez l'UID de l'utilisateur système du serveur web (www-data) et dire au serveur FTP qu'il autorise cet UID à se connecter. Encore une fois, tout se passe dans le répertoire /etc/pure-ftpd/conf. L'UID de www-data étant 33, il faut autoriser l'utilisateur 33 à se connecter :
echo 33
>
/etc/pure-ftpd/conf/MinUID
V-G. Liste des Options disponibles▲
Pure-ftpd propose un nombre impressionnant d'options afin de customiser à souhait son serveur FTP. Je vous invite à lire la documentationDocumentation de Pure-ftpd de Pure-ftpd.
En voici un extrait, présentant les options existantes :
--(
switches sorted by ##GNU-style long switches## lexical order)--
-W --allowanonymousfxp
-z --allowdotfiles
-w --allowuserfxp
-O --altlog <
format>
:<
log file>
-t --anonymousbandwidth <
bandwidth (
KB/s)>
-M --anonymouscancreatedirs
-i --anonymouscantupload
-e --anonymousonly
-q --anonymousratio <
upload ratio>
:<
download ratio>
-s --antiwarez
-r --autorename
-S --bind <
ip address,port>
-b --brokenclientscompatibility
-À --chrooteveryone
-9
--clientcharset <
charset>
-j --createhomedir
-Z --customerproof
-B --daemonize
-D --displaydotfiles
-H --dontresolve
-Y --tls <
0
:no TLS |
1
:TLS+cleartext |
2
:enforce TLS |
3
:enforce encrypted data channel as well>
-P --forcepassiveip <
ip address>
-F --fortunesfile <
file>
-8
--fscharset <
charset>
-h --help
-4
--ipv4only
-6
--ipv6only
-K --keepallfiles
-l --login <
auth>
or <
auth>
:<
config file>
-1
--logpid <
file>
-L --limitrecursion <
number:number>
-c --maxclientsnumber <
number>
-C --maxclientsperip <
number>
-k --maxdiskusagepct <
percentage>
-I --maxidletime <
time (
min)>
-m --maxload <
load>
-u --minuid <
uid>
-N --natmode
-E --noanonymous
-R --nochmod
-G --norename
-0
--notruncate
-v --bonjour <
name>
-p --passiveportrange <
minport:maxport>
-y --peruserlimits <
per user max>
:<
max anonymous sessions>
-g --pidfile <
path to pid file>
-X --prohibitdotfilesread
-x --prohibitdotfileswrite
-f --syslogfacility <
facility>
-a --trustedgid <
gid>
-V --trustedip <
ip address>
-U --umask <
mask>
-o --uploadscript
-T --userbandwidth <
bandwidth (
KB/s)>
or [<
up bw>
]:[<
down bw>
]
-Q --userratio <
upload ratio>
:<
download ratio>
La syntaxe des options ci-dessus est celle que l'on peut utiliser dans la commande de démarrage de Pure-ftpd.
Pour que ces options soient prises en compte à chaque démarrage du serveur, on utilise les fichiers de configuration comme présentés dans les sous-sections du titre V.
Par exemple, pour limiter le nombre de clients à 30 lors d'un démarrage du serveur, on utilise la commande avec l'option « -C 30 ». Afin que cette commande soit prise en compte à chaque démarrage du serveur, il faut créer un fichier dans /etc/pure-ftpd/conf/ s'appelant : MaxClientsNumber et y spécifier le nombre d'utilisateurs désirés.
echo 30
>
/etc/pure-ftpd/conf/MaxClientsNumber
VI. Création d'un utilisateur virtuel FTP▲
Nous allons, à présent, créer un utilisateur virtuel afin de pouvoir nous connecter par FTP à notre serveur. Pour cela, il faut se connecter au CLI de Mysql avec l'utilisateur que l'on a créé tout à l'heure :
mysql -u USER_MYSQL_A_CREER -p
Il faut se rendre sur la bonne base de données :
use
NOM_BASE_DE_DONNEES ;
Puis, on crée le nouvel utilisateur virtuel. Les champs à renseigner sont : le nom de l'utilisateur, son mot de passe, l'UID autorisé (égal 33 si vous avez choisi www-data), le GID autorisé (égal 33 si vous avez choisi www-data) et enfin le chemin absolu du répertoire racine du compte FTP (ex. : /home/titi/www/). Voici la requête SQL correspondant à ces informations :
INSERT
INTO
`users`
(
`User`
, `Password`
, `Uid`
, `Gid`
, `Dir`
)
VALUES
(
'toto'
, MD5
(
'MOT_DE_PASSE_TOTO_FTP'
)
, '33'
, '33'
, '/home/titi/www/'
)
;
Dans ce cas, l'utilisateur virtuel « toto » connecté en FTP possèdera comme répertoire racine le dossier www du home de l'utilisateur unix titi et ne pourra pas accéder plus haut dans l'arborescence système !
VII. Démarrage du serveur Pure-ftpd▲
Pure-ftpd peut être lancé de deux façons différentes : en tant que service (inetd) ou en tant que démon (init.d). La configuration du choix de démarrage se fait au niveau du fichier /etc/defaults/pure-ftpd-common.
# STANDALONE_OR_INETD
# valid values are "standalone" and "inetd".
# Any change here overrides the setting in debconf.
STANDALONE_OR_INETD
=
standalone
VII-A. Inetd VS standalone daemon▲
Inetd est un démon qui active un service à la demande, lorsqu'un client tente de s'y connecter. Son avantage initial et principal est de n'allouer des ressources qu'en cas de besoin. En effet, contrairement aux démons qui utilisent des ressources système en continu par le biais de processus permanents parfois peu actifs, inetd écoute le port d'un service, dans l'attente d'une demande de connexion cliente. Lorsqu'une demande de connexion arrive, inetd active le service en lançant de nouveaux processus le temps de répondre aux requêtes clientes. Lorsque les connexions clientes sont terminées, les processus créés sont tués.
Du fait de son fonctionnement, inetd est souvent appelé « super-serveur », car il peut gérer à lui seul toutes les composantes serveur.
Il peut donc être intéressant d'utiliser inetd pour un service qui ne serait que rarement utilisé et/ou qui serait très gourmand en ressources afin de ménager votre machine. Cependant, le lancement du service prend du temps, la réponse à la requête cliente prend donc elle aussi plus de temps. C'est pourquoi, pour un service qui est utilisé fréquemment, la solution inetd n'est pas préconisée, le mode standalone est à privilégier.
VII-B. En tant que service : inetd▲
Pour démarrer le serveur Pure-ftpd en tant que service, il faut éditer le fichier /etc/defaults/pure-ftpd-common et placer le champ STANDALONE_OR_INETD à inetd :
# STANDALONE_OR_INETD
# valid values are "standalone" and "inetd".
# Any change here overrides the setting in debconf.
STANDALONE_OR_INETD
=
inetd
Ensuite, pour démarrer et arrêter le serveur, utiliser la commande suivante :
/etc/init.d/openbsd-inetd start
# ou
/etc/init.d/openbsd-inetd stop
VII-C. En tant que démon : init.d▲
Pour démarrer le serveur Pure-ftpd en tant que démon, il faut éditer le fichier /etc/defaults/pure-ftpd-common et placer le champ STANDALONE_OR_INETD à standalone :
# STANDALONE_OR_INETD
# valid values are "standalone" and "inetd".
# Any change here overrides the setting in debconf.
STANDALONE_OR_INETD
=
standalone
Ensuite, pour démarrer et arrêter le serveur, utiliser la commande suivante :
/etc/init.d/pure-ftpd-mysql start
# ou
/etc/init.d/pure-ftpd-mysql stop
VIII. Conclusion▲
Comme vous avez pu le constater en lisant cet article, le serveur FTP Pure-ftpd est très simple à configurer grâce à son système de configuration nominal par fichiers et ses nombreuses options de customisation. Sur le site officiel de Pure-ftpd, vous trouverez la liste complète des différentes options existantes que l'on peut activer dans la configuration de Pure-ftpd. En conclusion, la simplicité de configuration, la grande flexibilité et la robustesse de ses connexions font de Pure-ftpd le serveur FTP idéal pour une utilisation personnalisée de qualité.
IX. Liens utiles▲
X. Remerciements▲
Un grand merci à pixelomilcouleurs pour la qualité de sa relecture.
Merci également à OVH, toujours aussi sympathique.