ZW3B :-: API Client * Contents * Docs by LAB3W.ORJ

Translate this page

Name : BETA-TESTERS

Project name : ZW3B-API-BETA-TESTERS

Authorized. - 200 - Client API Name and Origin Wildcard OK

¿Comment? 'Ou' ¿Que faire?, OS GNU/Linux, Serveurs, 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 :)

Author : O.Romain.Jaillet-ramey

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 
Retirer les numéros de lignes

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

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

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

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

Support des alias pour le parcours des répertoires.

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

Support pour les authentifications par des modules externes.

Support de la commande pure-ftpwho.

Support de la langue française.

Support des fichiers de plus de 2 go.

Support de LDAP.

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

Support de MySQL.

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

Support de PAM (pluggable authentification modules).

Permet de supprimer les messages user-friendly.

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

Support de PostgreSQL.

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

Support des utilisateurs virtuels.

Support des quotas.

Support des ratios.

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

Support de la gestion de la bande passante.

Support du programme pure-uploadscript.

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

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

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

Affiche les messages à aspect professionnel.

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

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

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

Ignore la librairie Libcap.

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

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

Désactive le logue des IP.

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

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

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

Désactive le mode de démarrage standalone.

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

on change son mot de passe :

Script avec 1 ligne

001pure-pw passwd mon_user -m
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

ou seulement notre utilisateur :

Script avec 1 ligne

001pure-pw show mon_user
Retirer les numéros de lignes

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

Script avec 1 ligne

001pure-ftpwho -v
Retirer les numéros de lignes

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:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem && chmod 600 /etc/ssl/private/*.pem
Retirer les numéros de lignes

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
Retirer les numéros de lignes

dans l'ordre rapidement :

et d'autres.. ;)

On arrête le serveur

Script avec 1 ligne

001killall -9 pure-ftpd
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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 ----------------------------######
Retirer les numéros de lignes

Attribuer les droits executables au fichier :

Script avec 1 ligne

001chmod +x /etc/init.d/pure-ftp
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes
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 :