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

 Charge moyenne sur 1mn : 1.25 Charge moyenne sur 5mn : 1.01 Charge moyenne sur 15mn : 0.86


How to configure a web server, FTP; a directory, a database; a mail server, the solutions ?





Site user blocks : Account info / user rights / summary

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 : Thursday 08 september 2022

  • 3554 views

Share :

Installer pure-ftpd

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

Script avec 1 ligne

001./configure --prefix=/usr --sysconfdir=/etc/pure-ftpd/ --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).

Il faut auparavant ajouté fake shell /dev/false au fichier /etc/shells

Puis on ajoute notre 1er utilisateur (virtual) - un utilisateur normal.

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 pour lui attribuer (dans cet exemple) le compte de l'utilisateur UID:1000 et GID:1000 (pour qu'il puisse modifier ses fichiers - c'est la même personne)

Script avec 1 ligne

001pure-pw usermod mon_user -u 1000 -g 1000 -m

Par exemple, après avoir fixer entre 9h00 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 -m

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

Savoir si des utilisateurs sont loggués sur la machine en FTP :

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é.

Sans oublier pure-pw --help pour connaître toutes les options ;)

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/pure-ftpd/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 95 lignes

001#!/bin/bash
002
003### BEGIN INIT INFO
004# Provides:             ftp-server
005# Required-Start:       $network $remote_fs $syslog
006# Required-Stop:        $network $remote_fs $syslog
007# Default-Start:        2 3 4 5
008# Default-Stop:         0 1 6
009# Short-Description:    Pure FTP server
010# Description:          Secure and efficient FTP server
011#                       Free, secure, production-quality and standard-conformant FTP server.
012#                       Features include chrooted home directories,
013#                       virtual domains, built-in 'ls', anti-warez system, configurable ports for
014#                       passive downloads, FXP protocol, bandwidth throttling, ratios,
015#                       fortune files, Apache-like log files, fast standalone mode, atomic uploads,
016#                       text / HTML / XML real-time status report, virtual users, virtual quotas,
017#                       privilege separation, SSL/TLS and more.
018### END INIT INFO
019
020#####-------------------------- VARIABLES ----------------------------######
021
022# 0 : Désactive les connexions ssl/tls.
023# 1 : Accepte les deux standard de connexions.
024# 2 : Refuse les connexions n'utilisant pas le ssl/tls.
025
026MODE_PAR_DEFAULT=2
027
028#####-------------------------- VARIABLES ----------------------------######
029
030#####-------------------------- FONCTIONS ----------------------------######
031
032function server_mode()
033{
034    if [ $1 ]; then
035        case "$1" in
036          1)
037            MODE=$1
038            ;;
039          2)
040            MODE=$1
041            ;;
042          0)
043            MODE=$1
044            ;;
045          *)
046            MODE=$MODE_PAR_DEFAULT
047            ;;
048         esac
049    else
050        MODE=$MODE_PAR_DEFAULT
051    fi
052}
053
054function echo_server()
055{
056    if [ $MODE = 1 ]; then
057        echo "Accepte les deux standard de connexions..."
058    elif [ $MODE = 2 ]; then
059        echo "Refuse les connexions n'utilisant pas le ssl/tls."
060    else
061        echo "Désactive les connexions ssl/tls..."
062    fi
063}
064
065function start_server()
066{
067        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/pure-ftpd/pureftpd.pdb -U 113:002 -D -b -j -p 40000:50000
068}
069
070#####-------------------------- FONCTIONS ----------------------------######
071
072#####-------------------------- START / STOP ----------------------------######
073
074case "$1" in
075
076start|restart)
077$0 stop
078        echo -n "Starting pure-ftp 1.0.51 server... "
079        server_mode $2
080        echo_server
081        start_server
082;;
083
084stop)
085        echo "Stopping pure-ftp 1.0.51 server... "
086        killall -9 pure-ftpd
087;;
088
089*)
090echo "usage : $0 (start|stop|restart) (0|1|2)"
091;;
092
093esac
094
095#####-------------------------- 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

Et on vérifie que les fichiers sont bien présent dans les rc (runlevels) :

Script avec 8 lignes

001find /etc/rc* -name "*pure*" -type l -exec ls -l {} \;
002lrwxrwxrwx 1 root root 18 sept.  8 15:18 /etc/rc0.d/K01pure-ftp -> ../init.d/pure-ftp
003lrwxrwxrwx 1 root root 18 sept.  8 15:18 /etc/rc1.d/K01pure-ftp -> ../init.d/pure-ftp
004lrwxrwxrwx 1 root root 18 sept.  8 15:18 /etc/rc2.d/S01pure-ftp -> ../init.d/pure-ftp
005lrwxrwxrwx 1 root root 18 sept.  8 15:18 /etc/rc3.d/S01pure-ftp -> ../init.d/pure-ftp
006lrwxrwxrwx 1 root root 18 sept.  8 15:18 /etc/rc4.d/S01pure-ftp -> ../init.d/pure-ftp
007lrwxrwxrwx 1 root root 18 sept.  8 15:18 /etc/rc5.d/S01pure-ftp -> ../init.d/pure-ftp
008lrwxrwxrwx 1 root root 18 sept.  8 15:18 /etc/rc6.d/K01pure-ftp -> ../init.d/pure-ftp

OK, donc, le serveur FTP se lancera au boot de la machine.

Le firewall :

Il faut donc ouvrir le port TCP 21 et les ports TCP pour le mode passif (plus sécurisé) de 40000 à 50000.

Pour faire simple de cette façon (si vous êtes sur le serveur lui-même) :

Script avec 2 lignes

001iptables -A INPUT -p tcp --dport 21 -j ACCEPT
002iptables -A INPUT -p tcp --dport 40000:50000 -j ACCEPT
Comment faire un pare-feu IPv4 et IPv6 sous linux

 

Salutations,
Romain


J'ajoute un sujet de discussion que j'ai posté sur Debian-FR.org : Pure-FTPd - TLS/SSL Error? si çà peut vous intéressez.

Liens web :

  • FTP public avec les sources de Pure-FTPd : ftp.ntu.edu.tw (National Taiwan University)


Keywords :

linux لينكس pure-ftpd ftp server ftp بروتوكول نقل الملفات pureftp


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)
    45 years activity !

Translate this page with Google

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