The ZATAZ network :: ZATAZ.com :: ZATAZ.net


Documentation : Accès FTP avec PureFTPd et LDAP

Date de publication : 16.7.2004
Date de modification : 9.11.2005

Contributeur : Eric Romang

Société : ZATAZ / http://eromang.zataz.com

Eric Romang co-fondateur de ZATAZ, avec Damien Bancal, supervise la direction technique de ZATAZ.

Situé au Luxembourg, Eric Romang a eu l'occasion au cours de ses années d'expériences dans le domaine au sein de datacenter de développer une expertise dans la haute disponibilité d'infrastructure, la mise en place de cluster MySQL, de solutions de stockages, de sauvegardes et de sécurisation d'environnement Linux.


Introduction

Ce document va expliquer comment mettre en place une authentification FTP au travers des démons PureFTPd et LDAP.

Pré-requis

Un serveur sous linux, un accès root, les outils de développements et de compilations linux (gcc, make, etc.), OpenLDAP.

Mise en condition

Pour installer cette authentification, il nous faut télécharger au préalable PureFTPd

Nous allons utiliser des utilisateurs virtuels ce qui nous permettra de ne pas créer autant de compte que d'utilisateurs FTP sur notre serveur.

De plus, nous allons les limiter au niveau quota, bande passante en upload et download, nombre de clients FTP autorisé.

Installation de pureftpd source

Télécharger les sources de pureftpd à partir de http://www.pureftpd.org

Décompressez l'archive dans un répertoire de votre choix, par exemple :

cd /usr/local/sources/
tar -zxvf pureftpd_version.tar.gz


Rendez-vous dans le répertoire source de PureFTPd.

cd pureftpd_version

Pour compiler et installer PureFTPd, suiver les instructions suivantes :

- Ajout d'un groupe et d'un utilisateur commun à tous les utilisateurs, par exemple apache et ftp_only.

Ce groupe et cet utilisateur pourront être réutiliser de part la suite dans la compilation d'apache.

groupadd nobody
useradd -s /bin/false -d /home/ftp -g nobody nobody


- Compilation :

./configure --prefix=/usr/local/pure-ftpd --with-cookie --with-ldap --with-quotas --with-ratios --with-welcomemsg --without-banner --without-humor --with-ftpwho
make
make install

Explication des options de compilation :

# prefix : Répertoire d'installation.
# with-cookie : Affiche une bannière lors d'une connexion utilisateur.
# with-ldap : Ajout du support LDAP.
# with-quota : Ajout des quotas virtuels.
# with-ratio : Ajout du support du ratio upload / download
# with-welcomemsg : Ajout du support d'un message d'accueil.
# without-banner : Suppression de la bannière PureFTPd par mesure de sécurité
# with-ftpwho : Rajout de la commande pure-ftpwho

- Installation du script de démarrage init.d

cp contrib/redhat.init /etc/init.d/pure-ftpd
chmod +x /etc/init.d/pure-ftpd


Bien sûr vérifier si les chemins d'accès et et les paramètres sont identiques, si vous ne possédez pas une redhat, ou si vous avez des paramètres de démarage particulier, ce qui est mon cas (gentoo powa).

Et voila, PureFTPd avec LDAP est installé.

Configuration de PureFTPd

Créer un répertoire pure-ftpd dans /etc

mkdir /etc/pure-ftpd

- Créer le fichier de configuration PureFTPd qui sera chargé au lancement et qui inclus le support de LDAP.

vi pureftp-ldap.conf

################################################
LDAPServer urlduserveurldap # (localhost ou ldap.zataz.net par exemple)
LDAPPort 389 # Port du serveur LDAP
LDAPBaseDN ou=utilisateurs,dc=zataz,dc=net # Base de recherche pour les comptes utilisateurs
LDAPBindDN cn=admin,dc=dclux,dc=com # Rajouter l'administrateur LDAD afin de pouvoir parcourir l'annuaire LDAP
LDAPBindPW test # Mot de passe en claire de l'administrateur LDAP (huhu ... pas bien cela)
LDAPDefaultUID 405 # Utilisateur par défault si l'utilisateur n'est pas reconnu (ici nobody)
LDAPDefaultGID 100 # Groupe par défault si l'utilisateur n'est pas reconnu (ici nobody)
LDAPVersion 3 # Version de LDAP utilisée


Configuration de LDAP

Il nous faut maintenant, rajouter le schema PureFTPd dans slapd.conf de OpenLDAP

Editez le fichier slapd.conf et rajouter ceci :

include /etc/openldap/schema/pureftpd.schema

Le schéma d'accès à pureftpd.schema dépend bien sur de votre distribution

Vérifier bien si les utilisateurs anonymes n'ont pas accès à la branche qui va contenir les logins et mots de passe de vos utilisateurs.

Pour cela regarder la partie access right de slapd.conf

* Ajout des premiers utilisateurs par fichier LDIF :

Si vous avez déjà une arborescence LDAP, je pense que je n'ai rien à vous expliquer :)

Sinon, prenons cet exemple ci-dessous pureftpaccount.ldif :

dn: dc=zataz,dc=net
objectclass: dcObject
objectclass: organization
o: zataz
dc: zataz

dn: cn=admin,dc=zataz,dc=net
objectclass: organizationalRole
cn: admin

dn: ou=utilisateurs,dc=zataz,dc=net
objectclass: organizationalUnit
objectclass: top
ou: utilisateurs
description: utilisateurs

dn: cn=wow, ou=utilisateurs, dc=zataz, dc=net
sn : wow
FTPUploadRatio: 1 # Ratio upload
userPassword: motdepassecrypte # Par la commande ldappasswd
ou: zataz
FTPQuotaFiles: 10000 # Nombre de fichiers max.
uidNumber: 1001 # Utilisateur apache
gidNumber: 101 # Groupe ftp_only
FTPDownloadRatio: 5 # Ration download
FTPStatus: enabled # Si disabled, le compte ne pourra être accéder
objectClass: person
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: organizationalUnit
objectClass: PureFTPdUser
uid: wow # Login de connexion
FTPQuotaMBytes: 10000 # Nombre de MBytes max. autorisé
FTPUploadBandwidth: 50 # KBytes max. autorisé pour upload
FTPDownloadBandwidth: 50 # KBytes max. autorisé pour upload
homeDirectory: /home/wow # Home directory virtuel


Importer ce fichier dans LDAP

ldapadd -x -D "cn=admin,dc=zataz,dc=net" -W -f pureftpdaccount.ldif

Le mot de passe administrateur vous sera demander pour importer ce fichier.

Lancement de pureftpd et test

Créer le répertoire /home/wow, tout en sachant que les options de lancement de PureFTPd permettent de le créer dès la premières connexion.

Pour lancer PureFTPd :

/usr/local/pure-ftpd/sbin/pure-ftpd -l ldap:/usr/local/pure-ftpd/etc/pureftpd.conf &

Pour tester vous savez ce qu'il vous reste à faire :)


Lien(s) Associé(s) :


contentRight


valider