Contenu

Serveur LAMP (Debian 6.6) 6/7 : Installation et configuration de VSFTPD

Installation du serveur FTP (VSFTPD)

Avoir un site disponible sur le net, c’est bien. Pouvoir y mettre des fichiers, c’est mieux ;). Et c’est le but de VSFTPD qui est un serveur FTP très sécurisé.

Installation de VSFTPD via la commande suivante :

1
# apt-get install vsftpd

Configuration de VSFTPD en mode « utilisateur virtuel »

On commence par préparer la configuration en créant le répertoire qui contiendra tous nos fichiers :

1
# mkdir /etc/vsftpd

On va devoir modifier la configuration de VSFTPD. Pour cela, on effectue une sauvegarde. Cela permettra de revenir en arrière en cas de souci via les commandes suivante :

1
2
# cp /etc/vsftpd.conf /etc/vsftpd.conf.ori
# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.ori

Modification de vsftpd.conf

Pour pouvoir utiliser nos utilisateurs virtuels, nous devons reconfigurer le fichier vsftpd.conf Nous allons supprimer ce dernier via la commande suivante :

1
# rm /etc/vsftpd.conf

Pour ensuite en créer un nouveau :

1
# vi /etc/vsftpd.conf

Copier la configuration suivante dans le fichier nouvellement créé :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# Ceci configure VSFTPd en mode "standalone"
listen=YES
# On modifie le port pour transmettre les commandes (par défaut : 21)
listen_port=5678
connect_from_port_20=YES
# On désactive les connexions anonymes
# et on active les non-anonymes (c'est le cas des utilisateurs virtuels) :
anonymous_enable=NO
local_enable=YES
# Pour des raisons de sécurité on interdit toute action d'écriture :
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
# 'guest_enable' est très important: cela active les utilisateurs virtuels !
# 'guest_username' fait correspondre tous les utilisateurs virtuels à
# l'utilisateur 'virtual' que nous avons défini plus haut, et au home
# correspondant : '~virtual/'.
guest_enable=YES
guest_username=www-data
# On définit les droits par défaut des fichiers uploadés
anon_umask=022
# On veut que les utilisateurs virtuels restent chez eux : '~virtual/'
# (attends, on leur a fait un toit, c'est pas pour rien !)
chroot_local_user=YES
# On définit le nombre maximum de sessions à 200 (les nouveaux clients recevront
# un message du genre: "erreur : serveur occupé").
# On définit le nombre maximum de sessions par IP à 4
max_clients=200
max_per_ip=4
# Activation des logs
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
####################################
Debian customization #
(ou adoptons la Debian attitude) #
####################################
# Some of vsftpd's settings don't fit the Debian filesystem layout by
# default. These settings are more Debian-friendly.
#
# This option should be the name of a directory which is empty. Also, the
# directory should not be writable by the ftp user. This directory is used
# as a secure chroot() jail at times vsftpd does not require filesystem
# access.
secure_chroot_dir=/var/run/vsftpd
#
# This string is the name of the PAM service vsftpd will use.
pam_service_name=vsftpd
#
# This option specifies the location of the RSA certificate to use for SSL encrypted connections.
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
# Permet d'utiliser les configurations individuelles pour chaque utilisateur
user_config_dir=/etc/vsftpd/vsftpd_user_conf
setproctitle_enable=YES

Sauvegardez puis quittez.

La base de données

Il nous faut maintenant installer la base de données. On utilise pour cela la commande suivante :

1
# apt-get install db4.8-util

Ce type de base de données est extrêmement simple, c’est pourquoi nous l’utilisons. Il se base sur un fichier de type texte contenant nos différentes informations, entrées une à une.
En fait, il n’y a pas de tables, ni de champs à configurer ! On va juste convertir un fichier contenant nos données sous cette forme :

1
2
3
4
login 1
password 1
login n
password n

On crée donc un fichier login.txt (le .txt n’est là que pour indiquer que ce sera nos données brutes ! Vous pouvez le nommer comme bon vous semble !). Puis on va le convertir en base de données.

1
2
3
# vi /etc/vsftpd/login.txt
monsiteweb.fr
password_pour_monsiteweb.fr

On génère la base donnée via la commande suivante :

1
# db4.8_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db

On modifie les droits sur les fichiers login.db et login.txt pour qu’ils ne soient accessible qu’a l’utilisateur root via les commandes suivantes :

1
2
# chmod 600 /etc/vsftpd/login.db
# chmod 600 /etc/vsftpd/login.txt

On va maintenant informer le module PAM d’utiliser notre base de données nouvellement créée. Pour cela :

1
# vi /etc/vsftpd/vsftpd.pam

Si OS en 32 bits :

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

Si OS en 64 bits :

1
2
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/login

On copie le fichier vsftpd.pam dans le répertoire /etc/pam.d/ qui contient les fichiers de configuration PAM via la commande suivante :

1
# cp /etc/vsftpd/vsftpd.pam /etc/pam.d/vsftpd

Si le système nous informe que le fichier existe déjà, on l’écrase.

Paramétrer les utilisateurs

On va maintenant chrooter (modifier le répertoire racine) nos utilisateurs dans leur répertoire respectif. Pour cela, on crée le répertoire qui sera utilisé pour contenir nos différents fichiers par utilisateur. Et on crée le fichier pour chaque utilisateur dans notre base de données.

1
# mkdir /etc/vsftpd/vsftpd_user_conf

Puis on créé le fichier /etc/vsftpd/vsftpd_user_conf/monsiteweb.fr :

1
# vi /etc/vsftpd/vsftpd_user_conf/monsiteweb.fr

Et on y ajoute :

1
2
3
4
5
6
anon_world_readable_only=NO
local_root=/home/monsiteweb.fr/public_html
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

On enregistre et on ferme.

Redémarrage et test

On redémarre notre serveur FTP via la commande suivante :

1
# /etc/init.d/vsftpd restart

Et il ne nous reste plus qu’à nous connecter à notre compte FTP pour vérifier que tout fonctionne en utilisant les informations suivantes :

  • IP: ip du serveur
  • Port : 5678
  • Login: monsiteweb.fr
  • Password: password

Dans le cas où vous ne pouvez pas uploader de fichiers, c’est que les droits ne sont pas bons. Vérifiez bien que le répertoire /home/monsiteweb.fr/public_html ait les droits www-data:www-data pour propriétaire et groupe :

1
# chown -R www-data:www-data /home/monsiteweb.fr/public_html