Configurer vsftpd avec des utilisateurs virtuels

vsftpd est peut-être le serveur FTP le plus connu. Il propose deux gestions des utilisateurs différente. La première méthode est la plus simple et se base sur les utilisateurs locaux de votre système. La seconde méthode, un peu plus complexe à mettre en place est elle basée sur des utilisateurs virtuels. C’est sur cette dernière que nous nous attarderons.

Il existe de nombreux avantages à utiliser des utilisateurs virtuels plutôt que des utilisateurs locaux :

  • une gestion plus simple des comptes FTP ;
  • une sécurité accru (pas d’accès SSH possible) ;
  • l’accès au même dossier par plusieurs utilisateurs différents ;
  • etc.

Créer la base de données utilisateurs

La base de données contenant les différents utilisateurs est très simple. Il suffit de créer un fichier contenant l’identifiant et le mot de passe de chaque utilisateur virtuel puis de transformer ce fichier en une base de données Berkeley. Dans cet exemple nous allons créer deux utilisateurs : toto identifié par le mot de passe foo et tata identifié par bar.

Le fichier se présente comme suit :

toto
foo
tata
bar

Sauvegardez ce fichier avec comme nom virtual-users.txt.

Pour transformer ce fichier texte en une base de données Berkeley nous avons besoin de db d’installé. Il en existe plusieurs versions, et à l’heure où j’écris ces lignes j’ai installé la 4.8 :

$ apt-get install db4.8-util

Une fois le logiciel installé il faut générer la base de données que nous stockerons aux côtés du fichier de configuration de vsftpd, dans /etc :

db4.8_load -T -t hash -f virtual-users.txt /etc/vsftpd_login.db

Prenons quelques secondes pour modifier les permissions de notre fichier nouvellement créé :

chmod 600 /etc/vsftpd_login.db

Dernière étape de la création de la base de données : la configuration de PAM servant à faire l’interface entre la base de données et vsftpd. Créez (ou s’il existe déjà, supprimez son contenu) un fichier nommé vsftpd dans /etc/pam.d avec les deux lignes suivantes :

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

Sous Debian Lenny les librairies étaient déjà présentes. Vérifiez que ce soit le cas sur votre système, sinon installez-les.

La gestion des utilisateurs virtuels est terminée. Passons maintenant à la configuration de vsftpd.

Configurer vsftpd.conf

Ouvrez /etc/vsftpd.conf avec votre éditeur de texte préféré puis modifiez (ou ajoutez) les valeurs suivantes :

guest_enable=YES
local_enable=YES
write_enable=YES
chroot_local_user=YES
pam_service_name=vsftpd
user_sub_token=$USER
local_root=/var/www/$USER
virtual_use_local_privs=YES

Dans ce tutoriel nous partons du principe que les différents comptes FTP se trouvent dans /var/www. Si ce n’est pas le cas il faut modifier la variable local_root en conséquence.

Une fois le fichier de configuration modifié, redémarrer vsftpd :

$ /etc/init.d/vsftpd restart

Créer les dossiers utilisateurs

Dernière étape, la création des dossiers utilisateurs :

$ mkdir /var/www/toto
$ chown ftp:ftp /var/www/toto

Répéter l’opération pour tata.

La configuration de vsftpd avec des utilisateurs virtuels est finie. Vous pouvez dès à présent vous connecter en ftp avec l’utilisateur toto ou tata et leur mot de passe respectif foo et bar. Une fois connecté, si vous utilisez toto le répertoire racine sera /var/www/toto.

Créer plusieurs utilisateurs pour un même dossier

Il existe de nombreux cas d’utilisations où vous aurez besoin d’avoir plusieurs utilisateurs ayant accès au même dossier. Il faut alors indiquer à vsftpd un local_root différent de celui par défaut (/var/www/$USER) en utilisant un fichier de configuration par utilisateur.

Créer un répertoire /var/www/_users qui contiendra un fichier spécifique à chaque utilisateur ayant besoin d’accéder à un dossier autre que /var/www/$USER puis ajouter la ligne de configuration suivante dans /etc/vsftpd.conf :

user_config_dir=/var/www/_users

Redémarrer vsftpd pour prendre en compte ce changement de configuration :

$ /etc/init.d/vsftpd restart

J’organise ces utilisateurs de la façon suivante : nom_du_repertoire_du_site-nom_utilisateur. De cette façon si j’ai un site ayant pour nom de répertoire barfoo j’aurais les utilisateurs suivants barfoo-user1, barfoo-user2, etc. Il est bien entendu possible de remplacer user1, user2 par d’autres logins.

Dans /var/www/_users créer un fichier par utilisateur ayant pour nom le login de celui-ci :

$ touch /var/www/_users/barfoo-user1

Redéfinir le local_root de l’utilisateur dans ce fichier :

local_root=/var/www/barfoo

Attention, les fichiers de configurations doivent appartenir au compte root :

$ chown root:root /var/www/_users/barfoo-user1

Il faut bien entendu que barfoo-user1 soit défini dans notre base de données (cf. « Créer la base de données utilisateurs » en début d’article).

Commentaires

Ajouter un commentaire