3psilon website

slogan


Vous êtes ici : Accueil » Articles » Réseau

>>Pure-ftpd

26 juillet 2006
Auteur(e) : 

Présentation

PureFTPd est compatible IPv6, et supporte MySQL, PostgreSQL PAM et LDAP pour le stockage des paramètres utilisateurs, et SSL/TLS (échange de login, mot de passe et des commandes FTP cryptées, mais echange de données non cryptées, entre clients et serveur) ou SSH (encryption totale).

Il est disponible pour de nombreuses distributions : OpenBSD, NetBSD, FreeBSD, Solaris, Mac OS ...

Introduction

Dans notre situation, nous allons installer pure-ftpd 1.0.20 sur une suse 9.2 kernel 2.6.4.

Voici le résultat que nous attendons :

Nous désirons avoir un serveur ftp sécurisé, derrière un routeur. Il ne doit pas utiliser de base de données. La sécurité employée doit être du SSL.

Il doit pouvoir chrooter les utilisateurs (limiter à un seul dosser), tout en permettant des liens vers des dossiers externes.

Il ne sera pas appliqué de restrictions d’ip, de bande passante, ni de ratios.

Voir le site Officiel : pureftpd.org

La compilation, l’installation , le paramètrage, tout ce fait en mode console.

Cette installation sera faite à partir des sources. Le serveur sera démarrer via init.d

Installation

Tout d’abord, étant donné que nous souhaitons utiliser du SSL nous devons créer un certificat qui permettra une connexion sécurisée.

Pour cela vous devez disposer de OpenSSL (openssl.org).

Création du certificat :


openssl req -x509 -nodes -newkey rsa:1024
\ -keyout /etc/ssl/private/pure-ftpd.pem
\ -out /etc/ssl/private/pure-ftpd.pem

chmod 600 /etc/ssl/private/*.pem


Maintenant nous devons installer pure-ftpd. Il faut tout d’abord télécharger les sources : ftp.pureftpd.org.

Ensuite vous les décompressez :


tar -xzf pure-ftpd-1.0.20.tar.gz


Maintement il faut compiler les sources.Dans notre cas, voici ce que ca donne :


./configure --with-ftpwho --without-banner --with-puredb
\ --with-diraliases --with-language=english --with-tls
\ --with-certfile=/home/ftpuser/pure-ftpd.pem --with-altlog
\ --with-largefile --with-virtualchroot

--with-ftpwho : support pour le ftpd-who (stats)
--without-banner : pas de banierre d'entrée
--with-puredb : méthode d'enregistrement des utilisateurs
--with-tls : support ssl/tls
--with-certfile=/etc/ssk/private/pure-ftpd.pem
--with-altlog : support creation des logs
--with-largefile : support pour les gros fichiers > 2Go
--with-virtualchroot : Active les liens


Afin de connaitre toutes les options de la compilation faire :


./configure --help


Aprés la configuration : make && make install

Les fichiers sont crées dans les répertoires /usr/local/bin et /usr/local/sbin (suivant les distributions)

-  pure-authd
-  pure-ftpd
-  pure-ftpwho
-  pure-mrtginfo
-  pure-pw
-  pure-pwconvert
-  pure-quotacheck
-  pure-statsdecode
-  pure-uploadscript

Je reviendrais sur ces quelques uns de ces binaires. Maintenant nous devons créer sur le système un groupe d’utilisateur dédié ftp:


groupadd ftpgroup


Et nous ajoutons un utilisateur sur le systeme.


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


A noter que cet utilisateur de possèdera aucun shell.

Utilisateur

Passons au utilisateur du serveur ftp.

Nous avons donc décidé d’utiliser la méthode interne du serveur pour sauvegarder nos utilisateurs soit puredb

Pour les administrer, nous disposons du binaire pure-pw


pure-pw useradd 'login' -f 'passwd file'
-u 'uid' [-g 'gid']-D/-d 'home directory' [-c 'gecos']
[-t 'download bandwidth'] [-T 'upload bandwidth']
[-n 'max number of files'] [-N 'max Mbytes']
[-q 'upload ratio'] [-Q 'download ratio']
[-r 'allow client ip'/'mask'] [-R 'deny client ip'/'mask']
[-i 'allow local ip'/'mask'] [-I 'deny local ip'/'mask']
[-y 'max number of concurrent sessions']
[-z 'hhmm'-'hhmm'] [-m]

pure-pw usermod 'login' -f 'passwd file'
-u 'uid' [-g 'gid']-D/-d 'home directory' -[c 'gecos']
[-t 'download bandwidth'] [-T 'upload bandwidth']
[-n 'max number of files'] [-N 'max Mbytes']
[-q 'upload ratio'] [-Q 'download ratio']
[-r 'allow client ip'/'mask'] [-R 'deny client ip'/'mask']
[-i 'allow local ip'/'mask'] [-I 'deny local ip'/'mask']
[-y 'max number of concurrent sessions']
[-z 'hhmm'-'hhmm'] [-m]

pure-pw userdel 'login' [-f 'passwd file'] [-m]

pure-pw passwd 'login' [-f 'passwd file'] [-m]

pure-pw show 'login' [-f 'passwd file']

pure-pw mkdb ['puredb database file' [-f 'passwd file']]

pure-pw list [-f 'passwd file']


Comme vous le voyez ceci est assez explicite et complet. Pour ajouter un utilisateur simple (sans restrictions) :


pure-pw useradd hal -u ftpuser -d /home/ftpuser/hal -m


Ajout de l’utilisateur ’hal’ ayant comme utilisateur systéme ’ftpuser’ et possédant un dossier chrooté ici : /home/ftpuser/hal

Il vous sera demander par la suite le mot de passe de cet utilisateur.

L’option -m permet de modifier la base des utilisateurs directement ce qui permet d’éviter de taper une autre ligne permettant la mise à jour de la base qui aurait été : pure-pw mkdb

Maintenant si nous désirons voir le compte de ’hal’ :


pure-pw show hal

Login : hal
Password : $2a$07$zDAQsdinYZ.6RLE2iOZYu
UID : 1001 (ftpuser)
GID : 1000 (ftpgroup)
Directory : /home/ftpuser/hal/./
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 : 0 (unlimited)


Pour supprimer le compte, c’est le même principe soit :


pure-pw userdel hal


Puisque nous avons activé la redirection dans les répertoires chrootés, nous allons donner à l’utilitaire ’hal’ l’accès à une ressource d’une partition existante. Dans notre cas, c’est un partition fat32 qui est ici : /mnt/hda4. Celle-ci est déjà montée, et bien configurée (Masque de montage à 022).

Donc dans le répertoire de ’hal’, nous faisons :


ln -s /mnt/hda4/Software


Dorévanant hal aura accès à la ressource ’Software’. Définissez à votre guise les droits d’accès au fichier avec chmod.

Configuration

Toute la configuration du serveur se réalise en donnant des arguments au binaire pure-ftpd.


pure-ftpd --help

-0 --notruncate
-1 --logpid
-4 --ipv4only
-6 --ipv6only
-A --chrooteveryone
-a --trustedgid 'opt'
-b --brokenclientscompatibility
-B --daemonize
-C --maxclientsperip 'opt'
-c --maxclientsnumber 'opt'
-d --verboselog
-D --displaydotfiles
-e --anonymousonly
-E --noanonymous
-f --syslogfacility 'opt'
-g --pidfile 'opt'
-G --norename
-h --help
-H --dontresolve
-I --maxidletime 'opt'
-i --anonymouscantupload
-j --createhomedir
-K --keepallfiles
-k --maxdiskusagepct 'opt'
-l --login 'opt'
-L --limitrecursion 'opt'
-M --anonymouscancreatedirs
-m --maxload 'opt'
-N --natmode
-O --altlog 'opt'
-p --passiveportrange 'opt'
-P --forcepassiveip 'opt'
-r --autorename
-R --nochmod
-s --antiwarez
-S --bind 'opt'
-t --anonymousbandwidth 'opt'
-T --userbandwidth 'opt'
-U --umask 'opt'
-u --minuid 'opt'
-V --trustedip 'opt'
-w --allowuserfxp
-W --allowanonymousfxp
-x --prohibitdotfileswrite
-X --prohibitdotfilesread
-Y --tls 'opt'
-z --allowdotfiles
-Z --customerproof


Pour trouver la description d’une commande :


man pure-ftpd :)


Dans notre cas voici à quoi ressemble notre configuration :


pure-ftpd -O w3c:/var/log/pureftpd -B -d -R -A -E
\ -S "192.168.166.188,1000" -p 2100:2700
\ -N -P xx.xx.xx.xx -lpuredb:/etc/pureftpd.pdb -Y 2

-O w3c:/var/log/pureftpd: log de pureftpd, exploitable par la suite par d'autres outils.
-B : Démarre en tâche de fond
-A : Tout les utilisateurs sont chrootés (bloqués) dans leurs répertoires 'home' respectifs
-E : Les utilisateurs anonymes sont refusés
-Y x : Nous spécifions que seules les connexions sécurisés sont acceptées. ( 0 = normal, 1 = normal/ssl/tls, 2 = ssl/tls )
-S "xx.xx.xx.xx,xx" : Adresse ip et port de la machine en local ou se trouve le serveur
-p xx:xx : Plage de port pour les transferts des fichiers
-N : mode NAT activé car nous sommes derrière un routeur.
-P xx.xx.xx.xx : Nous spécifions l'ip publique
-lpuredb:/etc/pureftpd.pdb : méthode de gestion des utilisateurs avec le path du fichier


Bien entendu, il existe d’autre méthode pour paramétrer votre serveur. Vous pouvez créer un fichier de configuration, ou encore utiliser une interface graphique. Elles ne seront pas détaillées ici.

Démarrage

Dans notre cas, nous créeons un fichier nommé : pure-ftpd Nous le plaçons dans le répertoire /etc/init.d/

Le fichier contient seulement ca :


pure-ftpd -O w3c:/var/log/pureftpd -B -d -R -A -E
\ -S "192.168.1.18,23000" -p 41000:42000
\ -N -P xx.xx.xx.xx -lpuredb:/etc/pureftpd.pdb -Y 2


Il faut définir les droits d’accès :


chmod 755 pure-ftpd


Maintenant pour démarrer pure-ftpd faite :


/etc/init.d/pureftpd start


Un rapide netstat -atp devrait vous montrez votre serveur en écoute.

Vous avez à disposition le binaire ’pure-ftpwho’ qui vous permet de connaitre les personnes actuellements connectées, ainsi que les transferts en cours.


pure-ftpwho

+------+---------+-------+------+--------------------------+
| PID | Login |For/Spd| What | File/IP |
+------+---------+-------+------+--------------------------+
|28792 | hal | 01:09 | DL | fichier.rar |
| '' | '' | 11M/s| 92% | -> 192.168.1.45 |
+------+---------+-------+------+--------------------------+


Vous pouvez aussi formater les logs et ainsi générer des pages web qui peuvent être accessible avec un petit serveur httpd comme lighttpd

Le formatage et l’utilisation des logs ne seront pas décrit ici, voir les références.

Conclusion

Pure-ftpd est certainement l’un des meilleurs serveur FTP. Sa simplicité à le configurer et à l’installer et surtout ses performances optimales font de lui un très bon serveur Ftp.

Références

pureftpd.org

purify.sourceforge.net

lea-linux.org

machiel.generaal.net

modlogan.org

Formuler un commentaire


3psilon (c) 2003

[W3C CSS Validator] [W3C XHTML Validator] [W3C WAI AAA]