photo_admin
Auteur : Clément MICHEL
Niveau de difficulté : Experts
Licence :
licence

VSFTP (avec certificat SSL)

Aujourd'hui, nous allons faire du FTP mais nous allons faire du FTP sécurisé ! Pas d'informations qui transitent en clair (comme le nom des fichiers téléchargés ou tout simplement des mots de passes) et pas de connexions anonymes.
Je m'explique : un serveur FTP de "base" est un espace sur lequel vous pouvez accéder librement (sans avoir besoin de vous logger) et télécharger des données à tout va !
Ce que nous allons faire aujourd'hui c'est donc du VSFTP, pour Very Secure File Transfert Protocol, qui va nous permettre de, justement, structurer notre espace FTP aussi bien à l'aide de comptes mais aussi avec des catégories de comptes que l'on pourra configurer (Administrateur/Utilisateur). Ce qui est pratique avec VSFTP c'est que l'on n'aura même pas besoin de créer de comptes sur notre serveur. On utilisera tout simplement des utilisateurs virtuels qui, eux, utiliseront un compte local du serveur (le compte "ftp").
On créera aussi un certificat SSL afin de renforcer la sécurité, notamment si votre serveur est accessible au travers d'Internet.

Bonne lecture !

Paquets à installer pour réaliser ce tutoriel :

vsftpd
openssl
db4-utils

Ces services se trouvent sur l'ISO du dvd de CentOS.
Vous pouvez aussi les installer de la façon suivante (votre serveur doit être connecté à internet !) :
		yum install vsftpd
		yum install openssl
		yum install db4-utils
	

Comme promis les fichiers de configuration commentés :

vsftpd.conf :

#Créateur : Clément MICHEL

############################################
#                                          #
#  Configuration globale du serveur VSFTP  #
#                                          #
############################################

#Port d'écoute (on utilise le port SSL)
listen_port=465

#Interdiction d'utiliser le port 20
connect_from_port_20=no

#bannière d'accueil du FTP
ftpd_banner=Bienvenue sur le serveur FTP de TUTORIELS.COM

#fichier de config PAM
pam_service_name=vsftpd

#Mode standalone
listen=yes

#Connexions anonymes refusées
anonymous_enable=no

#Les users virtuels pourront mapper un compte local
local_enable=yes

#fichier des users interdits (ex: root)
userlist_file=/etc/vsftpd/user_list

#on charge la liste
userlist_enable=yes

#on refuse tous les comptes qu'elle contient
userlist_deny=yes

#les users virtuels seront mappés sur le compte local "ftp"
guest_enable=yes
guest_username=ftp

#un user virtuel pourra télécharger des fichiers (on assure un minimum
#de service en cas d'erreur de config)
anon_world_readable_only=no

#"emprisonnement" des users
chroot_local_user=yes

#nombre de connexions simultannées maximum
max_clients=50

#nombre maximum de connexion avec la même adresse IP
max_per_ip=4

#fichier de log
xferlog_enable=yes


#######################
#                     #
#  Connexion via SSL  #
#                     #
#######################

#On autorise le SSL
ssl_enable=yes

#On force l'utilisation du SSL
force_local_data_ssl=yes

#on accepte les différentes versions d'SSL
ssl_tlsv1=yes
ssl_sslv2=yes
ssl_sslv3=yes

#Renseignement du certificat à utiliser
rsa_cert_file=/etc/vsftpd/vsftpd.pem


##################################
#                                #
#  Configuration au cas par cas  #
#                                #
##################################

#Répertoire où se trouvent tous les fichiers de conf users
user_config_dir=/etc/vsftpd/vsftpd_user_conf
	


admin :

#Créateur : Clément MICHEL

###########################
#                         #
#  Fichier de conf admin  #
#                         #
###########################

#répertoire de base de l'admin
local_root=/opt

#droits d'écriture
write_enable=yes

#Autorisation d'uploader
anon_upload_enable=yes

#autorisation de créer des répertoires
anon_mkdir_write_enable=yes
	


user :

#Créateur : Clément MICHEL

##########################
#                        #
#  Fichier de conf user  #
#                        #
##########################

#répertoire de base de l'admin
local_root=/opt/FTP

#droits d'écriture
write_enable=yes

#Autorisation d'uploader
anon_upload_enable=yes

#autorisation de créer des répertoires
anon_mkdir_write_enable=no
	


Pour ajouter un nouvel utilisateur :



Editez la Base des utilisateurs VSFTP avec la commande suivante :
vim /etc/vsftpd/login.txt
Rajoutez le login ainsi que le mot de passe et, surtout, n'oubliez pas de faire un retour à la ligne à la fin du fichier !

Je vous propose maintenant deux scripts qui vont automatiser le reste de l'étape. Vous n'avez qu'à les créer dans /opt/Programmes/ et n'oubliez pas la commande suivante (qui permet de les rendre exécutables) :
chmod +x "chemin+nom du fichier"

Le premier script permet de recharger la base des utilisateurs VSFTP :

reload_user_database_vsftpd.sh :
#!/bin/bash
#Script qui permet de recharger la base des users virtuels de VSFTPD
#Créateur : Clément MICHEL

clear
read -p 'Appuyez sur "Entrée" pour recharger la base VSFTP' -n 1 key
cd /etc/vsftpd/
db_load -T -t hash -f login.txt login.db
echo ' '
echo 'Base rechargée avec succès'
echo ' '
echo 'Redémarrage sur serveur VSFTP'
echo ' '
service vsftpd restart
echo ' '
read -p 'Opération terminée, appuyez sur une touche pour quitter.' -n 1 key
	


Le deuxième script permet de créer un fichier de configuration pour l'utilisateur que l'on a créé :

add_user_vsftpd.sh :
#!/bin/bash
#Script de création d'un nouvel utilisateur
#Créateur : Clément MICHEL

clear
echo "Création d'un nouvel utilisateur VSFTP"
echo "Créateur : Clément MICHEL"
echo ' '
read -p 'Appuyez sur "Entrée" pour commencer.' -n 1 key
echo ' '

#on se place dans le répertoire des users VSFTP
repertoire=/etc/vsftpd/vsftpd_user_conf/
cd $repertoire

read -p "Rentrez le nom de l'utilisateur (login) : " nom
echo ' '
read -p "Type de compte à créer (Administrateur/Utilisateur) (a/u) : " reponse
echo ' '
#en fonction du choix on copie le fichier "admin" ou "user"
#avec le nom rentré plus haut
if [ $reponse = "a" ]; then
	cp ./admin ./$nom
	echo ' '
	echo 'Compte Administrateur "'$nom'" créé avec succès !'
	read -p "Appuyez sur une touche pour terminer." -n 1 key
	exit
elif [ $reponse = "u" ]; then
	cp ./user ./$nom
	echo ' '
	echo 'Compte Utilisateur "'$nom'" créé avec succès !'
	read -p "Appuyez sur une touche pour terminer." -n 1 key
	exit
#deuxième chance si on à rentré une mauvaise touche
else
	read -p "Erreur, veuillez rentrer une option valide (a/u) : " reponse2
	if [ $reponse2 = "a" ]; then
		cp ./admin ./$nom
		echo ' '
		echo 'Compte Administrateur "'$nom'" créé avec succès !'
		read -p "Appuyez sur une touche pour terminer." -n 1 key
		exit
	elif [ $reponse2 = "u" ]; then
		cp ./user ./$nom
		echo ' '
		echo 'Compte Administrateur "'$nom'" créé avec succès !'
		read -p "Appuyez sur une touche pour terminer." -n 1 key
		exit
	else
		echo "Erreur, fermeture du script."
		read -p "Appuyez sur une touche pour terminer." -n 1 key
		exit
	fi
fi