Présentation

FTP (File transfert Protocol) est un protocole destiné au transfert de fichiers d'une machine à une autre via le réseau.

Ici nous utiliserons vsftpd acronyme Very Secure FTP daemon disponible sur le site officiel vsftpd.beasts.org.

Cette fiche pratique à pour but de d'écrire la configuration de vsftpd via les utilisateurs virtuels c'est à dire une connexion à un FTP sans compte système réel Linux.L'utilisation des utilisateurs virtuels évite la compromission du système.

Installation

-Préparation et pre-requis matériel

Pour installer un serveur vsftpd, il faut disposer des éléments suivants :

* Un serveur sous Linux/Fedora Core.
* Un accès réseau INTERNET.
* De la place disque pour les différentes zones ftp (anonyme ou non) que l'on souhaite mettre en oeuvre.

-Installation des paquetages par le système yum
#yum install vsftpd
-Vérification

Demander à RPM de le lister pour vérifier l'installation du paquetages.
#rpm -qa vsftpd*
vsftpd-2.0.1-5
-Configurer le DNS pour le service vsftpd

Nommer votre service FTP dans son domaine DNS. En général l'usage de ftp.nom-domaine.fr est conseillé. Deux possibilités nous sont présentes, la deuxième étant largement plus intéressante.

* nommer la machine ftp.nom-domaine.calimero.homelinux.net
* ou créer un alias ftp.nom-domaine.calimero.homelinux.net qui pointe vers nom-machine.nom-domaine.calimero.homelinux.net
machine   IN      A       192.168.0.1
ftp       IN      CNAME   machine.nom-domaine.calimero.homelinux.net.
-Configurer le démarrage du service vsftpd
# chkconfig --level 2345 vsftpd on
# chkconfig --list
vsftpd     0:off   1:off   2:on    3:on    4:on    5:on    6:off
-Configurations du service vsftpd avec les virtualusers

Nous allons voir dans les sections suivantes comment configurer vsftpd avec les utilisteurs virtuels.

VirtualUsers, en français utilisateurs virtuels consiste à stocker ceux ci dans un fichier de type berkley database et ainsi éviter la création d'utilisateurs Unix.

-Mise en place

Le fichier de configuration est installé dans le répertoire /etc/vsftpd/vsftpd.conf lors de l'installation du paquetage.

Avant toute manipulation du fichier de configuration il faut le sauvegarder.
# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.ori
# touch /etc/vsftpd/vsftpd.conf
Attention au nommage des fichiers dans le répertoire /etc/vsftpd,les extensions .conf sont considérés comme un autre démon vsftpd.

Certains comptes système doivent être non autorisé à se connecter au ftp via la directive userlist_enable qui utilise le fichier /etc/vsftpd.user_list.

-Création du ficher vsftpd.user_list
#cat /etc/passwd | cut -d: -f1 > /etc/vsftpd.user_list
-Création de l'utilisateur système

Cet utilisateur sera le propriétaire des fichiers et dossiers que les utilisateurs virtuels vont créer.
# groupadd vftp
# useradd -g vftp -d /home/vftp vftp
# chown vftp:vftp /home/vftp
# chmod 700 /home/vftp
Editer le fichier /etc/passwd pour rajouter le paramètre suivant sur le compte système vsftp.
vftp:x:502:502::/home/vftp/$USER:/sbin/nologin

-Création de la base utilisateurs virtuels

Penser bien à limiter l'acces au fichier contenant les password
# touch /etc/vsftpd/virtual_users_list
# chmod 600 /etc/vsftpd/virtual_users_list
Editer le fichier virtual_users_list
# utilisateur
# mot de passe
darkVador
luke
La commande db_load nous permet la création du fichier type berkley database.
# db_load -T -t hash -f /etc/vsftpd/virtual_users_list /etc/vsftpd/virtual_login.db
# chmod 600 /etc/vsftpd/virtual_login.db
-Configuration des droits des utilisateurs virtuels

Par défaut, un utilisateur virtuel n'a ni le droit de lire, ni le droit d'écrire.

Pour donner des droits à un utilisateurs, nous allons créer un fichier portant le nom de cet utilisateur et dans ce fichier y paramétrer les droits.

Dossier contenant les droits :
# mkdir /etc/vsftpd/vsftpd_users_conf
-Edition du fichier de l'utilisateur virtuel darkVador
# Activer les utilisateurs virtuels
guest_enable=YES

# Nom de l'utilisateur système utilisé
guest_username=vftp

# Répertoire du client
user_sub_token=$USER

# Permission des fichiers déposés 644
anon_umask=022

# Droit de lecture
anon_world_readable_only=NO

# Droit d'écriture
write_enable=YES
anon_upload_enable=YES

# Droit de créer un dossier
anon_mkdir_write_enable=YES

# Droit de supprimer,renommer,..
anon_other_write_enable=YES
Pour pouvoir se connecter avec les utilisateurs virtuels, il faut modifier notre fichier /etc/vsftpd/vsftpd.conf
# Accepter les connections anonymes
anonymous_enable=YES

# Accepter les connections
local_enable=YES

# Aucun droit pas défaut
write_enable=NO

# Contenir les utilisateurs dans un blob
chroot_local_user=YES

# Dossier contenant les droits des utilisateurs virtuels
user_config_dir=/etc/vsftpd/vsftpd_users_conf

# Fichier des comptes systèmes à bannir
userlist_enable=YES

# Format et fichier de logs
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES

# Mise en écoute de vsftpd
pam_service_name=vsftpd
listen=YES

# Pas d'utilisation des TCP WRAPPERS
tcp_wrappers=NO
-Configuration du PAM

Vsftpd utilise PAM pour l'authentification des utilisateurs. Voici une configuration :

Editer le fichier /etc/pam.d/vsftpd defini par la directive pam_service_name du fichier vsftpd.conf.
# Authentification des utilisateurs virtuels
account sufficient pam_userdb.so db=/etc/vsftpd/virtual_login
auth    sufficient pam_userdb.so db=/etc/vsftpd/virtual_login

# Authentification des utilisateurs locaux
auth    sufficient pam_shells.so
account sufficient pam_unix.so
session sufficient pam_unix.so
-Test du serveur ftp avec les virtualusers

Démarrer le service vsftpd :
#service vsftpd start
Toujours avec notre client FileZilla :