Installer et configurer un serveur FTP avec des utilisateurs virtuels avec vsFTPd sous Linux
Par fpl le vendredi 18 juillet 2008, 12:26 - Général - Lien permanent
Voici comment mettre en place un serveur FTP vsFTPd sur une Fedora Core (mais ça devrait être quasiment la même chose sous Debian) avec deux comptes virtuels, c'est-à-dire qui ne sont pas des comptes systèmes. Chaque compte possède sa propre arborescence de fichiers. Le premier compte que j'appellerai "lecteur" n'aura que des droits en lecture seule tandis que le compte "contributeur" aura des droits en lecture-écriture sur son arborescence.
Mise à jour du 18/07/2008 : variante avec base MySQL à la place de DB4
Les pré-requis
- vsFTPD (Very Secure FTPD) ;
- Berkeley DB;
- le module userdb de PAM (Pluggable Authentication Modules).
PAM est normalement déjà là. Pour le reste il suffit d'exécuter yum install db4 db4-utils vsftpd
Paramétrage de vsftpd
Le serveur vsftpd est paramétré dans le fichier /etc/vsftpd/vsftpd.conf dont voici un exemple pour mon cas :
# Interdire les connexions anonymes au serveur
anonymous_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
# Autoriser les utilisateurs locaux (obligatoire même si on ne veut que des utilisateurs virtuels)
local_enable=YES
# Autoriser les utilisateurs virtuels
guest_enable=YES
guest_username=ftp
# Droits par défaut
local_root=/var/ftp
write_enable=NO
local_umask=020
hide_ids=YES
# Activer les droits spécifiques par utilisateur
user_config_dir=/etc/vsftpd/vsftpd_user_conf
# activation de logs
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.xfer.log
xferlog_std_format=YES
log_ftp_protocol=YES
vsftpd_log_file=/var/log/vsftpd.log
# Configuration du serveur en standalone
listen=YES
tcp_wrappers=YES
connect_from_port_20=YES
ftpd_banner="Bienvenue sur le serveur FTP"
# Configuration de l'authentification
pam_service_name=vsftpd
userlist_enable=YES
Configuration des droits propres à chaque utilisateur
Pour chaque utilisateur, il faut créer un fichier portant le nom de l'utilisateur dans le répertoire défini par la directive user_config_dir.
Mon fichier /etc/vsftpd/vsftpd_user_conf/lecteur
anon_world_readable_only=NO
local_root=/var/ftp/
Mon fichier /etc/vsftpd/vsftpd_user_conf/crontibuteur
anon_world_readable_only=NO
local_root=/var/ftp2/
Configuration de l'authentification PAM avec une base db4
Créer le fichier /etc/pam.d/vsftpd suivant :
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/login
Ainsi, PAM va donc interroger la base BDB /etc/vsftpd/login.db pour authentifier les utilisateurs.
Créer la base BDB des utilisateurs
Il suffit de lancer le script suivant :
#!/bin/bash
FTPUSERS=/etc/vsftpd/login.db
rm -f $FTPUSERS
db_load -T -t hash $FTPUSERS <<EOF
lecteur
motdepasse_lecteur
contributeur
motdepasse_contributeur
EOF
chmod 600 $FTPUSERS
Pour redumper la base générée : db_dump -p login.db
Configuration de l'authentification PAM avec une base MySQL
Nécessite pam_mysql.
Créer le fichier /etc/pam.d/vsftpd suivant :
auth required pam_mysql.so user=MYSQL_USER passwd=MYSQL_PASS host=MYSQL_SRV db=MYSQL_DB table=USER_TABLE usercolumn=LOGIN_COLUMN passwdcolumn=PASS_COLUMN crypt=2
account required pam_mysql.so user=MYSQL_USER passwd=MYSQL_PASS host=MYSQL_SRV db=MYSQL_DB table=USER_TABLE usercolumn=LOGIN_COLUMN passwdcolumn=PASS_COLUMN crypt=2
Ainsi, pour authentifier les utilisateurs FTP, PAM va donc interroger la table USER_TABLE de la base MYSQL_DB sur le serveur MySQL MYSQL_SRV en s'authentifiant avec le user mysql MYSQL_USER et le mot de passe MYSQL_PASS. La colonne LOGIN_COLUMN contient le login FTP et la colonne PASS_COLUMN le mot de passe FTP stocké avec la fonction mysql PASSWORD().




Commentaires
Excellent. Attention avec la Berkely db 4.2 installée avec FC5, j'ai eu des soucis.
Il faut impérativement faire yum install db4 db4-utils.
Ensuite ça roule.
Merci
Salut,
moi j'ai un problème:
Cela ne fonctionne que pour le premier utilisateur de la liste.
Merci pour le tuto!
Tchouvince
Pour redumper la base générée : db_dump -p login.db