Contenu

Serveur LAMP (CentOS 6.5) 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é. Nous installons donc VSFTPD via la commande suivante :

1
# yum install vsftpd

Configuration de VSFTPD en mode « utilisateur virtuel »

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/vsftpd.conf /etc/vsftpd/vsftpd.conf.ori
# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.ori

La base de données

Nous allons maintenant utiliser la base de donnés Berkeley. 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
4
# vi /etc/vsftpd/login.txt

monsiteweb.fr
password_pour_monsiteweb.fr

On génere la base donnée via la commande suivante :

1
# db_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.

Création d’un utilisateur local

Nous allons créer un utilisateur local qui n’aura pas le droit de s’authentifier sur le serveur via la commande suivante :

1
# useradd -G users -s /bin/false -d /home/vsftpd vsftpd

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/vsftpd.conf

Pour ensuite en créer un nouveau :

1
# vi /etc/vsftpd/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
55
56
57
58
59
60
61
# No ANONYMOUS users allowed
anonymous_enable=NO
# Allow 'local' users with WRITE permissions (0755)
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
# if you want to LOG vsftpd activity then uncomment this  log_ftp_protocol
log_ftp_protocol=YES
connect_from_port_20=YES
# uncomment xferlog_file and xferlog_std_format if you  DIDN’T use the line above
# with log_ftp_protocol - it must be excluding each other
# The name of log file when xferlog_enable=YES and  xferlog_std_format=YES
# WARNING - changing this filename affects /etc/logrotate.d/vsftpd.log
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
#
# xferlog_std_format Switches between logging into  vsftpd_log_file and xferlog_file files.
# NO writes to vsftpd_log_file, YES to xferlog_file
xferlog_std_format=YES
#
# You may change the default value for timing out an idle session (in  seconds).
idle_session_timeout=600
#
# You may change the default value for timing out a data connection (in  seconds).
data_connection_timeout=120
#
# define a unique user on your system which the
# ftp server can use as a totally isolated and unprivileged user.
nopriv_user=apache
chroot_local_user=YES
listen=YES
listen_port=21
# here we use the authentication module for vsftpd to check users name and password
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
# here the vsftpd will allow the 'vsftpd' user to login into the
# '/home/vsftpd/$USER'  directory
guest_enable=YES
guest_username=vsftpd
local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vsftpd_user_conf
# Set to NO if you want to disallow the PASV method of obtaining a data
# connection
Default: YES
pasv_enable=NO
#
# Maximum and minimum port to allocate for PASV data connections
# these ports will be open in firewall and forwarded on router
Default: 0
pasv_min_port=30000
pasv_max_port=30100
#
# This optin can be used to provide the IP address that will be advertised in
# PASV commands, this should be the public IP of the server
# Default: (none - the address is taken from the incoming connected socket)
pasv_address=adresse_ip_du_serveur
setproctitle_enable=YES

Sauvegardez puis quittez.

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
dirlist_enable=YES
download_enable=YES
local_root=/var/www/html/monsiteweb.fr
write_enable=YES

On enregistre et on ferme. Avant de modifier les paramètres SELinux, il faut arrêter le démon httpd via la commande suivante :

1
# service httpd stop

On modifie le propriétaire du répertoire /var/www/html/monsiteweb.fr via la commande suivante :

1
# chown -R vsftpd:users /var/www/html/monsiteweb.fr

On modifie le contexte SELinux du répertoire /var/www/html/monsiteweb.fr afin de pouvoir écrire dedans via la commande suivante :

1
# chcon -R -t public_content_rw_t /var/www/html/monsiteweb.fr

Afin de prévenir un retour au context par défaut lors d’une prochaine mise à jour de l’OS, on enregistre le contexte SELinux à appliquer au répertoire /var/www/html/monsiteweb.fr dans le fichier /etc/selinux/targeted/contexts/files/file_contexts.local via la commande suivante :

1
# semanage fcontext -R -t public_content_rw_t "/var/www/html/monsiteweb.fr(/.*)?"

On modifie le contexte SELinux du répertoire /var/www/html/monsiteweb.fr pour le rendre accessible en écriture à Apache via la commande suivante :

1
# setsebool -P allow_httpd_anon_write 1

On modifie le contexte SELinux du répertoire /var/www/html/monsiteweb.fr pour le rendre accessible en écriture à Apache via la commande suivante :

1
2
# setsebool -P ftp_home_dir 1
# setsebool -P allow_ftpd_anon_write 1

Démarrage et test

On ouvre les ports dans le firewall iptables via les commandes suivantes :

1
2
# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT
# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 34567 -j ACCEPT

On sauvegarde la configuation d’iptables via la commande suivante :

1
# service iptables save

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

1
# service vsftpd start

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 : 21
  • 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 /var/www/html/monsiteweb.fr/ ait les droits vsftpd:users pour propriétaire et groupe :

1
# chown -R vsftpd:users /var/www/html/monsiteweb.fr/

Afin d’éviter de potentiel problème de droit, nous allons appliquer les bonnes sur le répertoire /var/www/html/monsiteweb.fr via la commande suivante :

1
# chmod -R 755 /var/www/html/monsiteweb.fr

Si vous rencontrez des problèmes de transfert de fichiers, vérifier que le mode de transfert est bien « Actif » dans votre client FTP.