VSFTPD

De TeteveWiki.

Sommaire

Installation

Installation du paquet :

# apt-get install vsftpd

Si le répertoire /etc/vsftpd n'existe pas, le créer :

# mkdir /etc/vsftpd

Renommer les fichiers de configuration d'origine pour sauvegarde :

# cp /etc/vsftpd.conf /etc/vsftpd.conf.default.bak
# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.default.bak

Installation du paquet pour gérer la base de données login/mot de passe : libdb3-util

# apt-get install libdb4.6
# apt-get install db4.6-util

voir dans la partie "commandes" s'il y a un souci d'installation

Remplir le fichiers des utilisateurs :

# vim /etc/vsftpd/login.txt

Important : respecter la syntaxe !
(retour à la ligne entre les deux et sans commentaires)

utilisateur1
mot de passe1
utilisateur2
mot de passe2

Créer la base de données proprement dite :

# db4.6_load -T -t hash -f login.txt /etc/vsftpd/login.db
# chmod 600 /etc/vsftpd/login.db
# vim /etc/pam.d/vsftpd.pam
	auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login
	account required /lib/security/pam_userdb.so db=/etc/vsftpd/login
# cp /etc/pam.d/vsftpd.pam /etc/pam.d/vsftpd

Le serveur FTP, géré par vsftpd, n'utilise pas les comptes système pour s'authentifier (d'où l'utilité de la base de données des utilisateurs => utilisateurs virtuels)
Il faut donc créer l'utilisateur système utilisé par le démon :

# mkdir -p /home/ftp/virtual
# groupadd ftp
# useradd -g ftp -d /home/ftp/virtual/ virtual

Vérifier dans les fichiers /etc/passwd et /etc/group

# chown root.ftp ~virtual/
# chmod 2750 ~virtual/

Préparation pour le SSL

Installer le paquet openssl

# apt-get install openssl

Créer le fichier certificat

# openssl req -x509 -nodes -days 730 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem

Plusieurs questions seront posées afin de créer le certificat. La plus critique est celle-ci :

Common Name (eg, YOUR name) []: <renseigner le nom ou l'ip que les clients utiliseront>

Une fois ce fichier certificat généré, il faut le copier dans le dossier /etc/ssl/certs.

# cp vsftpd.pem /etc/ssl/certs

Il faut ensuite le sécuriser :

sudo chown root:root /etc/ssl/certs/vsftpd.pem
sudo chmod 600 /etc/ssl/certs/vsftpd.pem

Note : vsftp s'exécute avec les droits de l'utilisateur nobody mais il se lance en tant que root et donc lit le certificat en tant que root.

Configuration VSFTPD

# vim /etc/vsftpd.conf
# Ceci configure vsFTPd en mode "standalone"
listen=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 pour activer l'utilisateur virtuel
guest_enable=YES
guest_username=virtual 

# On veut que les utilisateurs virtuels restent dans ~virtual/ 
chroot_local_user=YES

# On définit le nombre maximum de sessions à 4 (les nouveaux clients recevront un message du genre: "erreur : serveur occupé")
max_clients=4

# On définit le nombre maximum de sessions par IP à 4
# max_per_ip=4

# Configuration emplacement fichiers utilisateurs, jail chroot, et service pam 
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd 
user_config_dir=/etc/vsftpd/vsftpd_user_conf 

#################### Supplément Teteve #############################

ftpd_banner=Bienvenue sur le serveur FTP de teteve.fr
# Activation des messages personnalisés à l'entrée dans les dossiers (non utilisé actuellement)
dirmessage_enable=YES

# On active les logs pour les uploads/downloads
xferlog_enable=YES
xferlog_file=/var/log/vsftpd-dl.log

# Connexion et ports pour le mode passif 
connect_from_port_20=YES
pasv_address=<Adresse ip> ou <nom d'hôte>
pasv_min_port=50000
pasv_max_port=60000

# temps d'inactivité 
idle_session_timeout=600
data_connection_timeout=120

################## SSL : connexions cryptées ######################
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem

################# Droits sur les fichiers uploadés #################
chown_uploads=YES
chown_username=virtual
chown_upload_mode=0750

Droits utilisateurs

# mkdir /etc/vsftpd/vsftpd_user_conf/
# /etc/init.d/vsftpd reload

Donner les droits en lecture (utilisateur1) et lecture/écriture (utilisateur2) :

# echo "anon_world_readable_only=NO" > /etc/vsftpd/vsftpd_user_conf/utilisateur1
# echo "anon_world_readable_only=NO" > /etc/vsftpd/vsftpd_user_conf/utilisateur2
# echo "write_enable=YES" >> /etc/vsftpd/vsftpd_user_conf/utilisateur2
# echo "anon_upload_enable=YES" >> /etc/vsftpd/vsftpd_user_conf/utilisateur2

Créer le répertoire utiliser pour les uploads :

# mkdir ~virtual/upload/
# chmod 770 ~virtual/upload/

si besoin, rajouter deux lignes sur les ports ftp et modifier le firewall en conséquence

Commandes pour séparer les répertoires d'upload de chaque utilisateur
# cd ~virtual/
# mkdir -p {utilisateur1/,utilisateur2/}/upload
# chmod 2750 {utilisateur1/,utilisateur2/}
# chmod 770 {utilisateur1/,utilisateur2/}/upload/
# echo "local_root=utilisateur1" >> /etc/vsftpd/vsftpd_user_conf/utilisateur1
# echo "local_root=utilisateur2" >> /etc/vsftpd/vsftpd_user_conf/utilisateur2

On relance le serveur FTP pour prendre en compte tous ces paramètres :

# /etc/init.d/vsftpd stop
# /etc/init.d/vsftpd start