Comment faire : Apache2, Pure-FTPd, VSFTPd, LDAP, Samba, Active Directory...
 Charge moyenne sur 1mn : 2.23 Charge moyenne sur 5mn : 2.25 Charge moyenne sur 15mn : 2.10




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
  • Publication : Lundi 05 juin 2006
  • Modification : Mercredi 01 février 2012

Partager

Traduire la page

Installer pure-ftpd

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

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

001 make && 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.

001 groupadd ftpgrp
002 useradd -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.

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

on change son mot de passe :

001 pure-pw passwd mon_user -m

on modifie notre utilisateur

001 pure-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 :

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

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

001 pure-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 :

001 pure-pw list

ou seulement notre utilisateur :

001 pure-pw show mon_user

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

001 pure-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.

001 openssl 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 :

001 pure-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

001 killall -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.

001 vi /etc/init.d/pure-ftp
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 
009 MODE_PAR_DEFAULT=1
010 
011 #####-------------------------- VARIABLES ----------------------------######
012 
013 #####-------------------------- FONCTIONS ----------------------------######
014 
015 function 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 
037 function 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 
048 function 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 
057 case "$1" in
058 
059 start|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 
067 stop)
068         echo "Stopping pure-ftp 1.0.21 server... "
069         killall -9 pure-ftpd
070 ;;
071 
072 *)
073 echo "usage : $0 (start|stop|restart) (0|1|2)"
074 ;;
075 
076 esac
077 
078 #####-------------------------- START / STOP ----------------------------######

Attribuer les droits executables au fichier :

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

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

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) :

001 update-rc.d pure-ftp defaults

LAB3W.ORJ Alias de O.Romain JAILLET-RAMEY (NOTIF LVL 7 - 42 ans) LAB3W.ORJ
CONTACT
- Web - STEAM - Monster - LinkedIn - Viadeo - DailyMotion - FACEBOOK - GOOGLE+ - Twitter
DROITS SITES : ZW3B.Admin
INSCRIPTION : Le samedi 06 janvier 1 (2001/01/06 15:31)
CONNEXION : il y a 8 heures (2019/09/19 10:22)
DERNIERE VISITE : il y a 4 heures (2019/09/19 13:40)

les réactions des ZW3B.Nautes (0 note)

Ajouter un commentaire

Avatar par default
Pseudo :
Email :
 
Ajouter la chaine de caractères (le code) ci-dessous dans le champ du dessous.
Captcha
Code :





Valid XHTML 1.0 Strict CSS Valide !

ipv6 ready