$Revision: 1.14 $
$Date: 2004/01/19 10:15:39 $
Vsftpd est un serveur FTP assez simple à paramétrer et considéré comme sécurisé.
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]
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.
Installez le serveur : "apt-get update && apt-get
install vsftpd".
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.
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
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
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
/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").
Trois types d'accès sont proposés :
Accès anonyme. Activable et paramétrable dans /etc/vsftpd.conf.
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
/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).Installez le paquet libdb3-util, qui contient un utilitaire
nécessaire pour créer une base de données.
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
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'").
Sécurisez la base de données :
chmod 600 /etc/vsftpd.db
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
mkdir -p /home/ftpsite/publicCré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.
Dans le fichier /etc/vsftpd.conf, définissez les options
suivantes :
local_enable=YES
chroot_local_user=YES
guest_enable=YES
guest_username=ftpuser
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'optionwrite_enable=YES
/etc/vsftpd.conf :anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YESSection 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).
$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