Apache2, Pure-FTPd, VSFTPd, LDAP, Samba, Active Directory

 Charge moyenne sur 1mn : 0.47 Charge moyenne sur 5mn : 0.55 Charge moyenne sur 15mn : 0.68




Site user blocks : Account info / user rights / summary

Identify yourself

Authenticate with your ZW3B account and take advantage of member services.

Username :
Password :
  
  

Howto Pure-FTPd - TLS-SSL - Virtualchroot

  • Howto Pure-FTPd - TLS-SSL - Virtualchroot
Installer un serveur FTP en mode sécurisé. Le protocole FTP transmet sur Internet votre mot de passe en clair. Utiliser le mode SSL ou TLS des serveurs... Je met un mémo rapide en attandant, de faire un article plus complet. La toute première remarque c'est que ; étant sous Debian, j'ai fait en premier apt-get install pure-ftpd puis je me suis rendu compte que je n'avais pas accés aux liens symboliques en me connectant avec un utilisateur chrooté. Donc recompilation en bonne éduforme :)

Informations :

Dates
  • Publish : : Monday 05 june 2006
  • Modification : Wednesday 01 february 2012

Share :

Installer pure-ftpd

On récupère les sources de pure-ftpd vs 1.0.21 et on opte pour les options de compilations :

Script avec 1 ligne

001./configure --prefix=/usr --with-everything --with-paranoidmsg --without-capabilities --with-virtualchroot --with-tls  --with-peruserlimits --with-sysquotas --with-welcomemsg --with-boring --without-inetd --without-sendfile --with-extauth --with-largefile 

Si vous avez une erreur lors de la configuration à propos du SSL (-with-tls) faites un p'tit apt-get install libssl-dev

  • --with-altlog

Permet de loguer les informations dans des formats spécifiques afin d'être utilisé par des analyseurs de logs (webalizer, Analog, etc)

  • --with-brokenrealpath

Permet de garder une compatibilité avec certains systèmes solaris.

  • --with-cookie

Affiche un fortune ou une bannière customisée quand un utilisateur se logue.

  • --with-diraliases

Support des alias pour le parcours des répertoires.

  • --with-everything

Compilation avec toutes ces options : altlog, cookies, throttling, ratios, ftpwho, upload script, virtual users (puredb), quotas, virtual hosts, directory aliases et external authentication.

  • --with-extauth

Support pour les authentifications par des modules externes.

  • --with-ftpwho

Support de la commande pure-ftpwho.

  • --with-language=french

Support de la langue française.

  • --with-largefile

Support des fichiers de plus de 2 go.

  • --with-ldap

Support de LDAP.

  • --with-minimal

Compilation avec un minimum d'options (déconseillé).

  • --with-mysql

Support de MySQL.

  • --with-nonroot

Permet de lancer le serveur sans être root. Vous n'aurez cependant pas accès à toutes les possibilités de pure-ftpd (déconseillé).

  • --with-pam

Support de PAM (pluggable authentification modules).

  • --with-paranoidmsg

Permet de supprimer les messages user-friendly.

  • --with-peruserlimits

Permet de limiter le nombre de sessions qu'un utilisateur peut ouvrir.

  • --with-pgsql

Support de PostgreSQL.

  • --with-probe-random-dev

Permet d'utiliser /dev/arandom, /dev/urandom ou /dev/random pour la génération des nombres aléatoires.

  • --with-puredb

Support des utilisateurs virtuels.

  • --with-quotas

Support des quotas.

  • --with-ratios

Support des ratios.

  • --with-sysquotas

Support des quotas du système et non des quotas propre a pure-ftpd.

  • --with-throttling

Support de la gestion de la bande passante.

  • --with-uploadscript

Support du programme pure-uploadscript.

  • --with-virtualchroot

Permet de suivre les liens symboliques. Une utilisation courante est le pointage vers un dossier d'uploads commun à tous les utilisateurs.

  • --with-virtualhosts

Support des virtual hosts. Les virtual hosts permettent notamment d'avoir plusieurs espaces sur votre ftp selon l'adresse IP spécifiée.

  • --with-welcomemsg

Permet d'utiliser un fichier welcome.msg à la place de .banner.

  • --with-boring

Affiche les messages à aspect professionnel.

  • --with-privsep

Permet D'utiliser deux processus par client. Cela réduit les performances mais augmente la sécurité.

  • --without-ascii

Désactive le support des transferts en mode ASCII. (Déconseillé).

  • --without-banner

Désactive l'affichage de la bannière d'accueil.

  • --without-capabilities

Ignore la librairie Libcap.

  • --without-globbing

Désactive les expressions régulières (tel que ls *.rpm) (déconseillé).

  • --without-inetd

Désactive le support du mode de démarrage inetd.

  • --without-iplogging

Désactive le logue des IP.

  • --without-nonalnum

Désactive le support des caractères non alphanumériques. (Déconseillé).

  • --without-sendfile

Permet de garder une compatibilité avec les systèmes de fichier réseau (comme NFS).

  • --without-shadow

Ignore les shadow password. (Déconseillé).

  • --without-standalone

Désactive le mode de démarrage standalone.

  • --without-usernames

Affiche les uid ou gid plutôt que les noms des utilisateurs.

Une fois que la configuration est effectuée, compiler et installer

Script avec 1 ligne

001make && make install

Voilà c'est installé et les ln -s de mes Home's seront visibles (--with-virtualchroot).

Utilisateurs Virtuels et comptes Chrooter

Donc maintenant on va ajouter des utilisateurs à notre serveur. Plusieurs solutions d'authentification s'offrent à nous et en même temps. C'est à dire que l'on peut avoir des utilisateurs systèmes (ceux qui sont dans notre fichier /etc/password) ou créer des utilisateurs virtuels (qui auront accés à notre machine que par ce FTP). Les utilisateurs virtuels peuvent être authentifiés par différents moyens ; grâce à une base MySQL, grâce à une base PostgreSQL; grâce à un annuaire LDAP ou encore grâce à une base Pure-ftpd.

On va travailler avec la base pure-ftp (celle qui ne demande aucun serveur à côté)

Pour exemple, on va tout de même créer un groupe et un user au système.

Script avec 2 lignes

001groupadd ftpgrp
002useradd -g ftpgrp -d /dev/null -s /bin/false ftpusr

on crée un groupe ftpgrp pour nos futurs utilisateurs ; et un utilisateur ftpusr sans homeDirectory (/dev/null) ni shell (/bin/false).

Puis on ajoute notre 1er utilisateur.

Script avec 1 ligne

001pure-pw useradd mon_user -u ftpusr -g ftpgrp -d /home/mon_user/ -m

on change son mot de passe :

Script avec 1 ligne

001pure-pw passwd mon_user -m

on modifie notre utilisateur

Script avec 1 ligne

001pure-pw usermod mon_user -N 1000 -m

Par exemple, après avoir fixer entre 9h10 et 10h31 l'heure possible de connection au serveur FTP pour l'utilisateur mon_user, par cette commande :

Script avec 1 ligne

001pure-pw usermod mon_user -z 0900-1031 -m

vous pouvez supprimer, la restriction d'heure (Time restrictions) d'accés comme ceci :

Script avec 1 ligne

001pure-pw usermod mon_user -z <em> -m</em>

La commande pour appliquer les changements c'est : pure-pw mkdb mais vous pouvez remarquez le -m à chaque fois ; cela permet d'appliquer les changement automatiquement dans la base pure-ftp.

Pour lister les utilsateurs virtuels :

Script avec 1 ligne

001pure-pw list

ou seulement notre utilisateur :

Script avec 1 ligne

001pure-pw show mon_user

et tiens quand un utilisateur est loggué sur la machine :

Script avec 1 ligne

001pure-ftpwho -v

qui nous affiche son pseudo, son IP, son fichier en cours de DL/UP, la vitesse de DL/UP, et le % effectué.

Le certificat SSL pour la connexion TLS

Il faut openssl bien sûr : apt-get install openssl si cela n'est pas déjà fait.

Script avec 1 ligne

001openssl req -x509 -days 365 -nodes -newkey rsa:1024 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem chmod 600 /etc/ssl/private/*.pem

On démare le serveur ? enfin !

Pour l'instant je le démare comme cela :

Script avec 1 ligne

001pure-ftpd -B -1 -k 95% -A -c 50 -C 5 -E -w -Y 1 -O clf:/var/log/pure-ftpd/transfer.log -l puredb:/etc/pureftpd.pdb -U 113:002 -D -b -j -p 40000:50000

dans l'ordre rapidement :

  • -B == daemon serveur
  • -k 95% == Arrête les uploads si le pourcentage d'espace libre spécifié est dépassé.
  • -A Chroot tout le monde sauf root.
  • -c 50 == Nombre maximum de client. 50 par défaut.
  • -C 5 == Nombre maximum de client par IP. Augmente la sécurité.
  • -E -e == Le serveur n'acceptera pas les connexions anonymes.
  • -w == Support du protocole FXP pour les utilisateurs authentifiés.
  • -Y 1 == Désactive le ssl/tls (0), Accepte les deux standard (1), ou refuse les connexions n'utilisant pas le ssl/tls (2).
  • -l pam == (on peut en mettre plusieurs) users system peuvent se loguer
    Bon le -l on peut le changer ou en ajouter ex: -l pam pour les users system etc. (avec ldap ou mysql..)
  • -D == Affiche les fichiers caché sans que le client ne spécifie l'option -a.
  • -b == Assure une compatibilité avec certains clients ftp.
  • -j == Créer le répertoire maison de l'utilisateur automatiquement si cela n'est pas déjà fait.
  • -p 40000:50000 == Permet de laisser la connection choisir les ports à utiliser entre 40000 et 50000 (histoire que les sniffers n'aient pas que le port 21 à snorter).
  • aussi on peut ajouter ces options :
  • -N == Force le mode ACTIF.
    Mode actif : le client établit la connexion de commandes vers le port 21 et le serveur établit la connexion de data à partir de son port 20.
    Mode passif : le client établit la connexion de commandes vers le port 21 et établit aussi la connexion de data vers un port Passive Range du serveur (1024-65535). L'avantage dans une connexion passive réside dans le fait que le serveur n'initie aucune connexion. Cela est intéressant pour des clients intranet voulant consulter un serveur FTP sur Internet et devant traverser un pare-feu, le mode FTP passif permettra de n'avoir que des flux sortants vers Internet, alors qu'avec du FTP actif, on aurait une connexion initiée depuis l'extérieur, ce qui peut être une source d'intrusion.
  • -H == Le serveur ne cherche pas à transformer les IPs en noms dans les logs.
  • -r == Renomme les fichiers existant lors de l'upload.
  • -K == Autorise les utilisateurs a résumer ou uploader des fichiers, mais pas de les effacer ou renommer.
  • -t == Active la limitation de la bande passante pour les utilisateurs anonymes.
  • -T == Active la limitation de la bande passante pour les utilisateurs authentifiés.
  • -U : == Active le umask différent de default (133:022). Exemple : pour que nos fichiers et dossiers uploadés soient modifiable pour le groupe utiliser un umask 113:002

et d'autres.. ;)

On arrête le serveur

Script avec 1 ligne

001killall -9 pure-ftpd

Un script de lancement pure-ftp

Nétant pas un as en matière de script bash j'ai fais un script rapide qui prend en 3ème argument la valeur de l'option -Y (tls) soit 0 ou 1 ou 2 qui permet de démarer le serveur en mode SSL ou pas.

Script avec 1 ligne

001vi /etc/init.d/pure-ftp

Script avec 78 lignes

001#!/bin/bash
002
003#####-------------------------- VARIABLES ----------------------------######
004
005# 0 : Désactive les connexions ssl/tls.
006# 1 : Accepte les deux standard de connexions.
007# 2 : Refuse les connexions n'utilisant pas le ssl/tls.
008
009MODE_PAR_DEFAULT=1
010
011#####-------------------------- VARIABLES ----------------------------######
012
013#####-------------------------- FONCTIONS ----------------------------######
014
015function server_mode()
016{
017    if [ $1 ]; then
018        case "$1" in
019          1)
020            MODE=$1
021            ;;
022          2)
023            MODE=$1
024            ;;
025          0)
026            MODE=$1
027            ;;
028          *)
029            MODE=$MODE_PAR_DEFAULT
030            ;;
031         esac
032    else
033        MODE=$MODE_PAR_DEFAULT
034    fi
035}
036
037function echo_server()
038{
039    if [ $MODE = 1 ]; then
040        echo "Accepte les deux standard de connexions..."
041    elif [ $MODE = 2 ]; then
042        echo "Refuse les connexions n'utilisant pas le ssl/tls."
043    else
044        echo "Désactive les connexions ssl/tls..."
045    fi
046}
047
048function start_server()
049{
050        pure-ftpd -B -1 -k 95% -A -c 50 -C 5 -E -w -Y $MODE -O clf:/var/log/pure-ftpd/transfer.log -l puredb:/etc/pureftpd.pdb -U 113:002 -D -b -j -p 40000:50000
051}
052
053#####-------------------------- FONCTIONS ----------------------------######
054
055#####-------------------------- START / STOP ----------------------------######
056
057case "$1" in
058
059start|restart)
060$0 stop
061        echo -n "Starting pure-ftp 1.0.21 server... "
062        server_mode $2
063        echo_server
064        start_server
065;;
066
067stop)
068        echo "Stopping pure-ftp 1.0.21 server... "
069        killall -9 pure-ftpd
070;;
071
072*)
073echo "usage : $0 (start|stop|restart) (0|1|2)"
074;;
075
076esac
077
078#####-------------------------- START / STOP ----------------------------######

Attribuer les droits executables au fichier :

Script avec 1 ligne

001chmod +x /etc/init.d/pure-ftp

Démarer, arrêter, redémarer le serveur (un peu louche ce chiffre mais bon..) :

Script avec 1 ligne

001/etc/init.d/pure-ftp start|stop|restart 0|1|2

On ajoute pure-ftp aux runlevels (pour que le serveur démare au boot de la machine) :

Script avec 1 ligne

001update-rc.d pure-ftp defaults




Translate this page with Google

Author of the page

O.Romain.Jaillet-ramey

O.Romain.Jaillet-ramey

  • Firstname : Olivier Romain Luc
  • Lastname : : Jaillet-ramey
  • Arrived on tuesday 19 october 1976 (1976/10/19 00:00)
    44 years activity !

Firefox Nighlty

Our friends from Framasoft are interested in Mozilla and asked them questions about Nightly: Firefox Night-club, free entry !






Valid XHTML 1.0 Strict CSS Valide !

ipv6 ready