[Accueil] alex / doc / vsftpd


Installation du serveur FTP
vsftpd sur Debian Woody

$Revision: 1.14 $
$Date: 2004/01/19 10:15:39 $

Introduction

Vsftpd est un serveur FTP assez simple à paramétrer et considéré comme sécurisé.

Licence

Copyright 2002-2004 Alexandre Ratti. Document diffusé dans les conditions des licences GPL 2 (GNU General Public License) et GFDL 1.2 (GNU Free Documentation License). [Explications]

Installation et paramétrage

Les manips décrites ont été faites sur Debian GNU/Linux 3.0 (Woody) avec vsftpd 1.0.0-2. Cette section décrit le paramétrage d'un serveur FTP de base, avec authentification /etc/passwd. L'utilisation d'une base de données PAM est décrite dans la section suivante.

  1. Installez le serveur : "apt-get update && apt-get install vsftpd".

  2. Créez un répertoire vide : "mkdir /home/empty". Il constitue le répertoire personnel de l'utilisateur non privilégié utilisé par les processus secondaires du démon.

  3. Créez un utilisateur spécialisé aux droits limités. Les processus secondaires du démon seront exécutés sous cette identité. Dans cet exemple, l'utilisateur s'appelle "chrvsftp".

    adduser --home /home/empty --no-create-home --disabled-login \
    --system --group chrvsftp

  4. Paramétrez le serveur en modifiant le fichier /etc/vsftpd.conf. Voir notamment les paramètres suivants :

    – Identité sous laquelle les processus non privilégiés du démon sont exécutés :
    nopriv_user=chrvsftp

    – Enfermer les utilisateurs locaux connectés dans une arborescence limitée (leur répertoire personnel) :
    chroot_local_user=YES

    – Répertoire vide et non modifiable par les processus du serveur. Il est utilisé comme cellule chroot lorsque le serveur n'a pas besoin d'accéder au système de fichiers. /var/run/vsftpd est la valeur par défaut sur Debian Woody.
    secure_chroot_dir=/var/run/vsftpd

  5. Créer un fichier de bannière avec un message accueillant ("Big Brother is watching you", par exemple). Ce message sera affiché à la place du nom du serveur FTP à l'ouverture d'une connexion. Il permet de dissimuler le nom et la version du serveur utilisé.

    echo "Big Brother is watching you" > /etc/banner.msg

  6. Configurez /etc/xinetd.conf (ou /etc/xinetd.d/vsftpd) :
    service ftp
    {
            id              = ftp_public
            disable         = no
            socket_type     = stream
            wait            = no
            user            = root
            server          = /usr/sbin/vsftpd
            per_source      = 5
            instances       = 10
            nice            = 10
            log_on_success += PID HOST DURATION
            log_on_failure += HOST
            banner          = /etc/banner.msg
    }
    

    Vous pouvez limiter l'accès au serveur FTP en n'écoutant qu'une interface ("bind 192.168.0.10", par exemple) ou en n'acceptant que certains clients ("only_from toto.net"). Relancez xinetd ("/etc/init.d/xinetd restart").

  7. Définissez un sous-domaine, le cas échéant (ftp.toto.net, par exemple) et connectez-vous au serveur avec un client FTP.

Authentification des clients

Trois types d'accès sont proposés :

  1. Accès anonyme. Activable et paramétrable dans /etc/vsftpd.conf.

  2. Accès avec compte local. Les clients sont authentifiés par le fichier /etc/passwd. Une fois connectés, ils sont confinés dans leur répertoire personnel. Pour créer un utilisateur limité au service FTP, vous pouvez interdire l'accès au système via un terminal :

    adduser --home /var/ftp/toto --disabled-login --no-create-home toto

  3. Accès d'utilisateurs virtuels (qui n'ont pas de compte dans /etc/passwd) avec authentification par une base de données PAM. Tous les accès ont lieu sous l'identité d'un utilisateur réel (défini par le paramètre guest_username).

Paramétrage d'utilisateurs virtuels avec authentification PAM

  1. Installez le paquet libdb3-util, qui contient un utilitaire nécessaire pour créer une base de données.

  2. Créez un fichier texte /etc/vsftpd.txt contenant un nom d'utilisateur sur une ligne et son mot de passe sur la suivante. Exemple :

    oscar
    toto

  3. Générez la base de données à partir du fichier texte en entrant :

    db3_load -T -t hash -f /etc/vsftpd.txt /etc/vsftpd.db

    Attention : utilisez db3_load (du paquet libdb3-util) et non db_load (du paquet libdb2-util). Sinon, la base de données ne sera pas lisible et l'authentification échouera (erreur caractéristique : "pam_userdb[214]: user_lookup: could not open database `/etc/vsftpd'").

  4. Sécurisez la base de données :

    chmod 600 /etc/vsftpd.db

  5. Placez les lignes suivantes dans le fichier /etc/pam.d/ftp (à créer s'il n'existe pas) :

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

    Pour authentifier des utilisateurs avec le fichier /etc/passwd et avec la base de données PAM, ajoutez les lignes suivantes juste avant les deux lignes ci-dessus :

    auth sufficient pam_unix.so
    account sufficient pam_unix.so

  6. Créez le dossier qui sera accessible en écriture par FTP.

    mkdir -p /home/ftpsite/public

  7. Créez un utilisateur ; les accès virtuels auront lieu sous son identité. Il ne doit pas avoir de droits d'écriture sur la racine de l'arborescence dans laquelle il est enfermé ; j'ai donc créé un sous-dossier dans lequel il pourra placer des fichiers.

    adduser --home /home/ftpsite --disabled-login --no-create-home \
    --system --group ftpuser

    chown root.ftpuser /home/ftpsite/public
    chmod 775 /home/ftpsite/public

    Ainsi, l'utilisateur ftpuser se retrouve confiné dans /home/ftpsite et peut placer des fichiers dans /home/ftpsite/public.

  8. Dans le fichier /etc/vsftpd.conf, définissez les options suivantes :

    local_enable=YES
    chroot_local_user=YES
    guest_enable=YES
    guest_username=ftpuser

  9. Dans vsftpd, les utilisateurs virtuels ont les mêmes privilèges que les utilisateurs anonymes. Pour qu'ils aient accès en écriture au dossier partagé, en plus de l'option

    write_enable=YES

    vous devez activer les options suivantes dans le fichier /etc/vsftpd.conf :

    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES

Sécurité des processus

Section inspirée du document de Thomas Seyrat (HSC) sur vsftpd. Voir les références dans la rubrique Documentation.

Lorsqu'un client se connecte au serveur FTP, un processus vsftpd disposant des droits de root est lancé par xinetd. Ce processus active un processus secondaire non privilégié (exécuté sous l'identité de chrvsftp dans notre exemple et confiné dans un répertoire vide), qui assure l'authentification du client. Le processus fils communique avec le processus père par un socket (pour lui fournir les données d'authentification).

Lorsque le client a été authentifié, le processus principal lance un autre processus secondaire qui gère la session de l'utilisateur, est exécuté sous l'identité de ce dernier et est confiné dans son répertoire personnel. Ensuite, le processus principal abandonne ses droits de root et prend l'identité non privilégiée (chrvsftp). Ainsi, les processus conservent le moins longtemps possible des droits dangereux (root).

Documentation


$Id: index.html,v 1.14 2004/01/19 10:15:39 alex Exp $
http://www.gabuzomeu.net/alex/doc/vsftpd/index.html
courrier électronique | e-mail  Alexandre Ratti