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 :
./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
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.
groupadd ftpgrp 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.
pure-pw useradd mon_user -u ftpusr -g ftpgrp -d /home/mon_user/ -m
on change son mot de passe :
pure-pw passwd mon_user -m
on modifie notre utilisateur
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 :
pure-pw usermod mon_user -z 0900-1031 -m
vous pouvez supprimer, la restriction d'heure (Time restrictions) d'accés comme ceci :
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 :
pure-pw list
ou seulement notre utilisateur :
pure-pw show mon_user
et tiens quand un utilisateur est loggué sur la machine :
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.
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 :
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
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.
vi /etc/init.d/pure-ftp
#!/bin/bash #####-------------------------- VARIABLES ----------------------------###### # 0 : Désactive les connexions ssl/tls. # 1 : Accepte les deux standard de connexions. # 2 : Refuse les connexions n'utilisant pas le ssl/tls. MODE_PAR_DEFAULT=1 #####-------------------------- VARIABLES ----------------------------###### #####-------------------------- FONCTIONS ----------------------------###### function server_mode() { if [ $1 ]; then case "$1" in 1) MODE=$1 ;; 2) MODE=$1 ;; 0) MODE=$1 ;; *) MODE=$MODE_PAR_DEFAULT ;; esac else MODE=$MODE_PAR_DEFAULT fi } function echo_server() { if [ $MODE = 1 ]; then echo "Accepte les deux standard de connexions..." elif [ $MODE = 2 ]; then echo "Refuse les connexions n'utilisant pas le ssl/tls." else echo "Désactive les connexions ssl/tls..." fi } function start_server() { 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 } #####-------------------------- FONCTIONS ----------------------------###### #####-------------------------- START / STOP ----------------------------###### case "$1" in start|restart) $0 stop echo -n "Starting pure-ftp 1.0.21 server... " server_mode $2 echo_server start_server ;; stop) echo "Stopping pure-ftp 1.0.21 server... " killall -9 pure-ftpd ;; *) echo "usage : $0 (start|stop|restart) (0|1|2)" ;; esac #####-------------------------- START / STOP ----------------------------######
Attribuer les droits executables au fichier :
chmod +x /etc/init.d/pure-ftp
Démarer, arrêter, redémarer le serveur (un peu louche ce chiffre mais bon..) :
/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) :
update-rc.d pure-ftp defaults