Social Icons

samedi 15 septembre 2012

FTP installation et configuration sous linux (fedora)

ftp logo

Introduction

De plus en plus, le protocole FTP (File Transfert Protocol) est critiqué pour son manque de sécurité, comparé à d'autres protocoles de transfert sécurisés, tel scp. Il est cependant toujours très utilisé et Fedora propose par défaut vsftpd (Very Secure File Transfert Protocol Daemon) comme serveur pour ce protocole.
Comme la plupart des autres serveurs FTP (ProFTPD, pure-ftpd), vsftpd gère les utilisateurs virtuels, c'est-à-dire la possibilité de créer des comptes utilisateurs sans que ceux-ci ne soient des utilisateurs système (ils sont en fait tous "mappés" sur un utilisateur système dédié à cela). La particularité de vsftpd est qu'il utilise PAM pour l'authentification des utilisateurs. Nous avons donc autant de possibilités d'authentification que PAM en propose.

Cette documentation détaille une configuration de vsftpd en mode standalone, avec authentification des utilisateurs système et des utilisateurs virtuels. Les informations de connexion de ces derniers seront stockées au choix dans une base de données au format berkeley, ou bien une base mysql. Cette documentation a été testée sur Fedora 7, Fedora 8, 9 preview et Centos 5.0/5.1, mais devrait fonctionner sur les versions antérieures. 

Diagrammes de connexion

Les deux diagrammes suivants ont pour but de mettre en évidence le suivi de connexion ip_conntrack pour ces 2 modes afin de mieux comprendre l'échange des données entre le serveur Ftp et un client, permettant ainsi de mettre en oeuvre des règles iptables pour un firewall.


Les diagrammes mettent en évidence l'utilisation de deux canaux bien distincts :
  • control channel : elle permet au client et au serveur de s'échanger les commandes relatives au protocole, et aussi de s'identifier.
  • data channel : comme son nom l'indique, elle est utilisée pour l'échange des données entre les deux postes. C'est sur la mise en place de ce canal que diffère le mode passif et le mode actif.

Installation

Préparation et pre-requis matériel

Pour installer un serveur vsftpd, il faut disposer des éléments suivants :
  •  Un serveur sous Linux/Fedora Core.
  • Un accès réseau INTERNET.
  • De la place disque pour les différentes zones ftp (anonyme ou non) que l'on souhaite mettre en oeuvre.
Installation des paquetages par le système yum

#yum install vsftpd

Vérification

Demander à RPM de le lister pour vérifier l'installation du paquetages.
#rpm -qa vsftpd*
vsftpd-2.0.1-5

Configuration 


Il existe un grand nombre de possibilités de configuration, faisant varier le comportement du serveur de façon très différente. Une lecture de la page de manuel de vsftpd reste indispensable pour une configuration sûre. 

Le fichier de configuration de vsftpd se trouve dans le répertoire /etc/vsftpd et se nomme vsftpd.conf. Nous partirons d'une configuration vide, nous nous déplaçons donc dans le dossier, puis nous renommons le fichier :
$ su -
# cd /etc/vsftpd
# mv vsftpd.conf vsftpd.conf.default
Nous créons ensuite un dossier qui contiendra les configurations spécifiques à chaque utilisateur :
# mkdir vsftpd_user_conf

ftpusers et user_list
Ces deux fichiers ont la même vocation : interdire des utilisateurs. En effet il contiennent tous les deux une liste d'utilisateurs pour lesquels le serveur ftp refusera toute connexion. Pourquoi deux fichiers (au contenu identique) ?
  • Le premier (ftpusers) est utilisé via PAM dans la configuration par défaut faite sur Fedora et CentOS. A la connexion d'un utilisateur, PAM vient lire ce fichier et si l'identifiant de connexion utilisé est dans ce fichier, la connexion est refusée.
  • Le second (user_list) est utilisé directement par vsftpd. Il peut avoir deux usages : soit les seuls utilisateurs contenus dans ce fichier ont le droit de se connecter, soit l'accès leur est systématiquement refusé. 

On se fiche d'avoir une liste d'utilisateurs autorisés (second cas), puisque ceux-ci seront gérés avec une base d'utilisateurs virtuels. Il est donc inutile d'avoir ces deux systèmes d'interdiction. Mon choix pourrait être de suivre la configuration par défaut faite par CentOS et Fedora, c'est-à-dire utiliser PAM, et donc supprimer le fichier user_list alors inutile. Et pourtant ce n'est pas la solution que j'ai retenue. En effet il y a une petite différence dans la façon de rejeter les utilisateurs. Si root (présent dans les deux fichiers par défaut) se connecte :
  • Premier cas (ftpusers) : le système PAM ne va pas réagir, et le mot de passe sera demandé. A partir de là, même si ce dernier est correct, PAM va refuser la connexion car "root" est présent dans le fichier ftpusers.
  • Second cas (user_list) : Vsftpd va lui réagir différemment. Lorsque le login sera demandé, et que l'utilisateur tapera "root", il coupera directement la connexion, sans même demander le mot de passe.
C'est une subtilité, mais je préfère ce comportement. Le protocole FTP envoyant les données en clair, cela évite par exemple d'envoyer le mot de passe root pour rien. Je vais donc utiliser le fichier user_list plutôt que ftpusers, même si ce n'est pas le choix par défaut fait pour Fedora et Centos.

N'étant pas utilisé, on supprime le fichier ftpusers (vous pouvez tout à fait le conserver et sauter cette étape, au cas où vous voudriez vous en servir ensuite, notez cependant que son contenu est par défaut le même que user_list) en root :
# rm /etc/vsftpd/ftpusers
Nous verrons plus loin la configuration de PAM pour qu'il n'aille plus chercher dans ce fichier. À vous de rentrer les identifiants que vous ne souhaitez pas voir se connecter dans user_list en plus de ceux par défaut. Cela sera pratique pour désactiver un utilisateur virtuel, plutôt que de supprimer puis recréer son compte.Venons-en maintenant au fichier de configuration à proprement parler :
# vi /etc/vsftpd/vsftpd.conf
Vous êtes dans un fichier vide, puisque nous avons renommé celui par défaut. Vous trouverez tous les paramètres possibles du fichier de configuration dans la page de man (man vsftpd.conf). Voici la configuration à entrer, avec la documentation de chaque paramètre:
# http://vsftpd.beasts.org/vsftpd_conf.html ou "man vsftpd.conf"

# Port d'ecoute
listen_port=21

# Banniere de bienvenue
ftpd_banner=Bienvenue sur mon ftp perso

# Fichier de config PAM
pam_service_name=vsftpd

# Mode "standalone"
listen=YES

# Je ne veux pas de connexion anonyme
anonymous_enable=Yes

# On autorise les connexions des utilisateurs locaux. C'est indispensable
# pour que les utilisateurs virtuels (mappes sur un utilisateur local)
# puissent se connecter (les "vrais" utilisateurs locaux sont ensuite desactives
# avec le fichier user_list
local_enable=YES

# Fichier de users
userlist_file=/etc/vsftpd/user_list
# Chargement de la liste userlist_file
userlist_enable=YES
# On refuse les utilisateurs de la liste
userlist_deny=YES

# trop restrictif, un utilisateur virtuel pourra ainsi telecharger un fichier meme s'il n'est pas world readable
anon_world_readable_only=NO

# Refus des commandes influant sur le systeme de fichier (STOR, DELE, RNFR, RNTO, MKD, RMD, APPE and SITE)
write_enable=Yes

# Refus des droits d'ecriture pour les anonymes (et donc utilisateurs virtuels) par défaut
# les autorisations seront données au cas par cas :
# pas d'upload
anon_upload_enable=NO
# pas de creation de repertoire
anon_mkdir_write_enable=NO
# pas de creation, suppression, renommage de repertoire ...
anon_other_write_enable=NO

# On fait en sorte que les utilisateurs "guest" (non-anonymes) soient mappés sur le compte local "ftp"
guest_enable=YES
guest_username=ftp

# chroot des utilisateurs
chroot_local_user=YES

# Nombre maximum de connexion simultanees
max_clients=50

# Nombre maximum de connexion venant de la meme IP
max_per_ip=4

# Dossier de configuration specifique des utilisateurs
user_config_dir=/etc/vsftpd/vsftpd_user_conf

# On active le log
xferlog_enable=YES
Petit résumé :
  • On écoute sur le port 21
  • On est en standalone
  • On refuse les utilisateurs anonymes
  • On accepte les utilisateurs système et les utilisateurs virtuels
  • Les utilisateurs virtuels sont mappés sur l'utilisateur système "ftp"
  • Les utilisateurs n'ont aucun droit d'écriture par défaut
  • Ils sont chrootés dans /var/ftp
  • /etc/vsftpd/vsftpd_user_conf/ sera le dossier pour les configurations d'utilisateurs virtuels
  • /etc/vsftpd/user_list contiendra la liste des utilisateurs refusés (pour lesquels on ne demandera même pas le mot de passe) 
Pour plus de sécurité, on réduit les droits sur le fichier de configuration :
# chmod 600 /etc/vsftpd/vsftpd.conf 

Création de l'utilisateur système

Cet utilisateur sera le propriétaire des fichiers et dossiers que les utilisateurs virtuels vont créer.
# groupadd ftpclient
# useradd -g ftpclient -d /home/ftpclient ftpclient
# passwd ftpclient
# chown ftpclient:ftpclient /home/ftpclient
# chmod 700 /home/ftpclient 

Démarrer le service vsftpd

Une fois le fichier de configuration remplacé, on relance le serveur FTP en tapant en root :
# /etc/init.d/vsftpd start

Pour démarrer, redémarrer et stopper le service, les commandes respectives sont (toujours en super utilisateur) :

# service vsftpd start
# service vsftpd restart
# service vsftpd stop

Test de serveur

Commande 
1-Ouvrez l'invite de
2-Type -> ftp targetMachineIP
J'utilise ftp 192.168.1.5 dans ce cas,
3-Type de nom d'utilisateur et mot de passe
J'utilise racine et root123

si tout ce que vous fournissez est vrai que vous êtes connecté!

ftp-connexion

Il est possible de se connecter à un serveur FTP grâce au module FTP contenu dans Internet Explorer ou Firefox

Pour accéder à un serveur qui requière un nom d'utilisateur et un mot de passe, tapez l'adresse ainsi:

ftp://login:password@adresse du serveur
login:
représente le nom d'utilisateur
password:
votre mot de passe

Exemple: ftp://ftpclient:ftpclient@menara.ma
ou
 
Exemple: ftp://ftpclient:ftpclient@192.168.1.5


Si votre login est correct alors vous accéderez à vos dossiers !
( voir image ci-dessous ! )




Aucun commentaire :

Enregistrer un commentaire

Abonnez-vous par e-mail

Pour recevoire les nouvelles article