Configurer un serveur ftp : vsftpd avec des utilisateurs virtuels

Installation de vsftpd

apt-get install vsftpd

Une fois le serveur installé, il créé un user ‘ftp’ avec un groupe ‘nogroup’.
L’utilisateur ftp possède maintenant un répertoire dans /home/ftp/ en root:nogroup.

On peut d’or et déjà se logguer en tant qu’utilisateur anonyme.

Si on veut modifier le répertoire du serveur il suffit de modifier son chemin.
Ex :
on va choisir le chemin /var/ftp
donc :

mkdir /var/ftp
chown root:nogroup /var/ftp

On modifie le répertoire personnel de l’user ftp et tout devrait être bon.

Installation de db nécessaire pour la gestion des utilisateurs au cas par cas :

apt-get install db4.8-util

Maintenant que tout ca marche pensons à sauvegarder les fichiers de configuration même
si les modifications sont des plus légères.

cp /etc/vsftpd.conf /etc/vsftpd.conf1
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak1

Attaque au cas du cas par cas :
pour la liste des utilisateurs virtuels il faut créér un fichier virtual.txt
( on peut choisir un autre nom, il vous suffira d’adapter ), du style :
jack
none
polo
senva

jack étant l’user et none son passe, polo l’user et senva son passe, donc pour résumer :
login
pass
login
pass

Ensuite il nous faut formater les données de ce fichier pour qu’elles puissent être lu par PAM :

db_load -T -t hash -f virtual.txt virtual.db

Un petit chmod 600 virtual.* s’impose sinon juste le .db et vous supprimer le .txt qui ne sert plus à rien.

Direction /etc/pam.d/ :

vi vsftp

Soit vous supprimez les lignes déjà existantes soit vous mettez des commentaires
et placez y ces lignes :

auth required /lib/security/pam_userdb.so db=/etc/virtual
account required /lib/security/pam_userdb.so db=/etc/virtual

Reste à configurer vsftpd.conf pour accepter ces utilisateurs :

anonymous_enable=NO #désactive les anonymes
guest_enable=YES #active les users virtuels
guest_username=ftp #nom de l'utilisateur, j'ai choisit de mettre celui créé à l'installation par vsftpd.

Testez maintenant le serveur en vous connectant avec un des comptes de la base PAM, essayez en anonyme ou avec un compte réel, pour voir le résultat.

Maintenant que ca marche, nous pouvons passer à un paramétrage plus complet de vsftpd.conf
avant de vraiment attaquer le cas par cas.

listen=YES
#
#listen_ipv6=YES
#
#definie le nombre de clients et de fois qu'il peut-être connecté
max_clients=4
max_per_ip=1
#
#montre les fichiers et répertoire comme appartenant a FTP
hide_ids=YES
#
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
local_enable=YES
guest_enable=YES
guest_username=ftp
user_config_dir=/etc/vsftpd_user
#
#
#écrire sur le serveur et droit des anonymes
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_world_readable_only=YES
#
local_umask=022
#
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using 'root' or uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
#xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format
#xferlog_std_format=YES
#
idle_session_timeout=600
#
data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
async_abor_enable=YES
#
#pas d'up ni dl en ascii
ascii_upload_enable=NO
ascii_download_enable=NO
#
ftpd_banner=Welcome On My Domain.
#
#deny_email_enable=YES
#
#banned_email_file=/etc/vsftpd.banned_emails
#
#cantonne les utilisateurs locaux à leur répertoire personnel
chroot_local_user=YES
#
#
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd.chroot_list
#
#désactivation du ls récursif
ls_recurse_enable=NO
#
secure_chroot_dir=/var/run/vsftpd
#
# nom du fichier pam
pam_service_name=vsftpd
#
#location de la certification rsa pour le ssl
rsa_cert_file=/etc/ssl/certs/vsftpd.pem

Aprés avoir créér la base de la gestion par utilisateurs, passons à un affinement des règles. Dans le fichier vsftpd.conf, il faut rajouter la ligne:

user_config_dir=/etc/vsftpd_user

Avec ca on indique à vsftpd qu’il existe un répertoire /etc/vsftpd_user qui contiendra les fichiers de configurations pour chaque utilisateur.

mkdir /etc/vsftpd_user

Il suffit maintenant de créér un fichier portant le nom de la personne voulu dans ce dossier avec les options désirées pour chaque personne et créér une réelle gestion des membres au cas par cas.

Petit exemple :
nous voulons que l’utilisateur polo puisse monter et télécharger des données, il nous faut donc lui créér un fichier de configuration à son nom dans /etc/vsftpd_user

touch polo
vi polo

et les options à mettre pour contrer les règles principales définies pour vsftpd :

anon_upload_enable=YES
write_enable=YES
anon_world_readable_only=NO

Maintenant il peut télécharger mais aussi stocker des données sur le serveur.

Ca peut-être utile de traiter les utilisateurs au cas par cas ou par groupe, mais pour certains cas rien ne faut un répertoire « chrooter » ou seul le membre pourra y rentrer.

echo 'local_root=polo' >> /etc/vsftpd_user/polo

Ceci permet de créér un répertoire perso à polo ( bien entendu penser au mkdir et chown ).

4 réflexions sur « Configurer un serveur ftp : vsftpd avec des utilisateurs virtuels »

  1. sudo apt-get install libdb3-util
    Lecture des listes de paquets… Fait
    Construction de l’arbre des dépendances
    Lecture des informations d’état… Fait
    E: Impossible de trouver le paquet libdb3-util

    Ma version ubuntu 10.0.4.3
    Merci si quelqu’un a une solution, introuvable dans synaptic

  2. salut, tres bon tuto

    un détail pour ceux qui ne veulent pas chercher :
    il faut écrire « db4.8_load » (sans les guillemets) au début, pas juste deb4_load ;o)

    est-ce que tu me dire où je mets la derniere instruction stp ?? je ne vois pas où

    autre chose comment créer des mots de passe ?? je ne comprends pas l’admin en fait là

    merci

  3. @kriss
    Ce tutoriel date de 2007 et a été réalisé par un camarade de promo.
    La mise en place de mot de passe se fait en créant un fichier passwd dans le dossier /etc/vsftpd_user en utilisant par exemple la commande :
    htpasswd polo /etc/vsftpd_user/passwd

    J’espère avoir le temps de remettre en forme ce tutoriel afin qu’il soit un peu plus propre…

Laisser un commentaire