FTPLinuxSystème

Installation Serveur FTP – ProFTPD + SSL

Ce tutoriel montre comment installer et utiliser FTP avec ProFTPd en toute sécurité sur un serveur Debian , il fonctionnera aussi sur Ubuntu. ProFTPD est un démon FTP pour les systèmes d’exploitation Unix. FTP sans TLS est un protocole non sécurisé car tous les mots de passe et toutes les données sont transférés en texte clair. En utilisant TLS, toute la communication peut être cryptée, rendant ainsi le FTP beaucoup plus sécurisé. Cet article explique comment configurer ProFTPd avec TLS sur un serveur Debian, comment ajouter un utilisateur FTP.

L’article est téléchargeable en PDF

Installation du serveur ProFTPd :

ProFTPD et Open SSL sont téléchargeables via les dépôts officiels de Debian. Pour l’installer, vous n’avez qu’à lancer la commande :

apt-get install proftpd openssl nano

Pendant le processus d’installation on vous demandera comment doit être lancé ProFTPd.

Pour quelques connections par jours, utilisez inetd . Mais si vous utilisez le serveur FTP de manière intensive choisissez Indépendamment.

Création de l’utilisateur FTP :

Bien sur vous pouvez utiliser un utilisateur déjà existant mais, celui ci aura accès au shell bash si cet utilisateur à comme shell celui par défaut. Pour évite ce problème de sécurité il faut changer de shell de cet utilisateur.

nano /etc/passwd | grep votre_user

votre_user:x:1002:1002:,,,:/home/toto:/bin/bash

Modifiez la valeur bash en false.

votre_user:x:1002:1002:,,,:/home/toto:/bin/false

ou alors:

Vous pouvez directement créer un nouvel utilisateur qui aura le bon shell.

Ajout d’un utilisateur:

adduser votre_user

Supprimer l’accès console:

sudo chsh -s /bin/false votre_user

Je vous conseil de vérifier que votre utilisateur FTP est bien présent dans le fichier suivant.

cat /etc/ftpusers

root
bin
daemon
adm
lp
sync
shutdown
halt
votre_user
news
uucp
operator
games
nobody

Si il n’est pas présent vous pouvez le rajouter.

Configuration de ProFTPd :

La configuration de ProFTPd ce trouve dans /etc/proftpd/proftpd.conf.

nano /etc/proftpd/proftpd.conf

Le fichier de configuration complet du serveur FTP est disponible ici.

# Configuration complète#

# Inclure le fichier modules.conf

Include /etc/proftpd/modules.conf

# Autoriser IPV6

UseIPv6                         on

# Protocole pour tenter identifier le nom d'utilisateur distant.

# off Désactive l'identification distante

IdentLookups                    off

# Nom du serveur FTP local.

ServerName "Proftpd Server"

# "standalone" pour démarrer le serveur par la commande /etc/init.d/proftpd start

# "inetd" c'est par le meta-deamon xinetd qu'il faudra le démarrer.

ServerType standalone

# Ne pas donner d'informations sur le serveur.

DeferWelcome off

# Permet de faire un arrangement des lignes pour plus de compatibilité.

MultilineRFC2228 on

# Ne sert que si l'on utilise des VirtualHosts

DefaultServer on

# Pour cacher les liens symboliques.

ShowSymlinks on

#Pour connexion en tant que root

RootLogin On

# Ferme la connection s'il y à plus aucun transfert au bout d'un certain temps en #seconde.

TimeoutNoTransfer 600

# Durée maximun d'un transfert.

TimeoutStalled 600

# Ferme la connection s'il y à plus aucune activité du son client.

TimeoutIdle 1200

# welcome.msg est un fichier comportant un message qui sera afficher lors de la connexion

DisplayLogin                    /srv/ftp/welcome.msg

# Configure un fichier texte ASCII qui sera affichée à chaque fois que le client changera

# de répertoire. Si vous souhaitez avoir l'ancien comportement utiliser l'option "true".

DisplayChdir            .message true

# Force l'option "-l" aux commandes nlst, stat et list à -l

ListOptions "-l"

# Pour prévenir Proftpd d'attaques Dos avec l'utilisation de ../../..

#DenyFilter "\*.*/"

# Permet de chrooter les utilisateurs locaux dans leur répertoire personnel #/home/nom_user

DefaultRoot ~

# Autorise seulement si le shell est valide

RequireValidShell             off

# Port d'écoute pour le serveur FTP local, le port par défault 21 est connue de tous #le

# monde c'est pour cela qu'il est préférable de l'utilisé pour le ftp anonyme.

Port 21

# Définit la plage des ports passifs que proFTPd utilisera pour répondre aux clients.

PassivePorts 49152 65534

# Directive pour définir le nom ou l'adresse IP publique du NAT.

# MasqueradeAddress             1.2.3.4    # utilisant une adresse IP

# MasqueradeAddress      ftp. barrekevin.com     # en utilisant un nom DNS

#Le délais du rafraichissement

<IfModule mod_dynmasq.c>

DynMasqRefresh 28800

</IfModule>

# Ce paramètre n'est valable que si vous fonctionnez en mode "standalone".

# En mode "inetd" vous devrez configurer cette option dans le server xinetd.

MaxInstances 30

# User et Group sous lequel sera lancer le serveur FTP.

User proftpd

Group nogroup

# Définie le masque d'interdiction de droit, 022 est le standard par défault.

Umask 022

# Autorise le remplacement d'anciens fichiers par des nouveaux, si l'utilisateur

# à le droit en écriture.

AllowOverwrite on

# Permet au serveur de rechercher lui même la validité des mots de passe dans #/etc/passwd.

# Laisser par défaut sur "off".

PersistentPasswd off

# Configure les noms des modules auth, et l'ordre dans lequel ils seront vérifiés lors

# de l'authentification d'un utilisateur.

AuthOrder      mod_auth_pam.c* mod_auth_unix.c

# Cette fonctionnalité permet une optimisation de l'envoi de fichiers aux clients.

UseSendFile    off

# Emplacement du fichier log pour les transfert.

TransferLog /var/log/proftpd/xferlog

# Emplacement du fichier log du serveur FTP.

SystemLog   /var/log/proftpd/proftpd.log

# Variable sur le temps

SetEnv TZ :/etc/localtime

# Email de l'administrateur ProFTPd.

ServerAdmin ftp@barrekevin.com

# Permet de prendre en compte le fichier des hôtes virtuels.

Include /etc/proftpd/virtuals.conf

# L'accès anonyme #

<Anonymous ~ftp>

User            ftp

Group           nogroup

# Après la connexion anonyme, le démon s'exécute comme utilisateur

UserAlias     anonymous ftp

# Refuser

DirFakeUser  on ftp

DirFakeGroup on ftp

# Autorise seulement si le shell est valide

RequireValidShell  off

# Limite du nombre maximum de clients

MaxClients 10

# Message qui s'affiche lors de la connection anonyme

DisplayLogin         /srv/ftp/welcome.msg

# Configure un fichier texte ASCII qui sera affichée au client chaque fois qu'il #changera

# de répertoire. Si vous souhaitez avoir l'ancien comportement utiliser l'option #"true".

DisplayChdir         .message

# Limiter l'écriture anonyme

<Directory *>

<Limit WRITE>

DenyAll

</Limit>

</Directory>

<Directory incoming>

Umask       022

      <Limit READ WRITE>

DenyAll

</Limit>

<Limit STOR>

AllowAll

</Limit>

</Directory>

</Anonymous>

 

Vous pouvez aussi opter pour une configuration plus basic comme celle-ci. Elle est disponible ici

# Nom du serveur qui s'affiche

ServerName "ProFTPD Default Server"

# Serveur Autonome (ne pas modifier)

ServerType standalone

# Activer le serveur par défaut (Si pas de "VirtualHost")

DefaultServer on

# Est-ce qu'on a besoin d'un shell valide pour se connecter

RequireValidShell off

# Activer l'authentification PAM

AuthPAM off

AuthPAMConfig ftp

# Port d'écoute (21 par défaut)

Port 21

# Permissions d'un dossier ou d'un fichier créé via FTP

Umask 022

# Nombre de connexions simultanées au FTP

MaxInstances 30

# Lancer le démon ftp sous cet utilisateur et groupe

User ftp

Group ftp

# Racine du FTP ( [b]~[/b] correspond au fait que l'utilisateur est cloisonné dans son dossier personnel)

DefaultRoot ~

# Generally files are overwritable.

AllowOverwrite on

# Désactiver la commande CHMOD via le FTP

DenyAll

# Exemple de dossier anonyme sans possibilité d'uploader

User ftp

Group ftp

# Possibilité de se connecter avec les utilisateurs "anonymous" et "ftp".

UserAlias anonymous ftp

# Limiter le nombre de connexions anonymes

MaxClients 10

# Désactiver la commande WRITE (d'écriture) pour les utilisateurs anonymes

DenyAll

Ajouter TLS SSL : 

Aller dans le dossier de configuration ProFTPD :

cd /etc/proftpd/

Créer le dossier ssl :

sudo mkdir ssl

Se déplacer dans :

cd ssl/

Générer le certificat SSL :

sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -out proftpd-rsa.pem -keyout proftpd-key.pem

 

Protéger la clé – les utilisateur autre que le propriétaire et les groupe n’aurons pas accès a ce fichier :

sudo chmod 440 proftpd-key.pem

 

Editer le fichier /etc/proftpd/proftpd.conf avec son éditeur préféré et ajouter cela à la fin du fichier

TLSEngine on

TLSRequired on

TLSRSACertificateFile /etc/proftpd/ssl/proftpd-rsa.pem

TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd-key.pem

TLSLog /var/log/proftpd/tls.log

 

Rechercher dans le fichier ceci :

<IfModule mod_tls.c>TLSEngine off</IfModule>

 

Le modifier comme cela :

<IfModule mod_tls.c>TLSEngine on</IfModule>

 

Enregistrer et fermer le fichier via la combinaison de touche CTRL + X

 

Redémarrer le serveur :

sudo /etc/init.d/proftpd restart

ou

sudo systemctl restart proftpd

 

Voilà ProFTPD avec ssl/tls pour le tester en ligne de commande vous pouvez utiliser ftp-ssl ou via un autre PC du votre réseau via FilzZilla.

 

Résolution de Problème :

  • 500 AUTH not understood

Dans certains cas, la connexion ne se fait pas et retourne “500 AUTH not understood”, vous pouvez régler le problème en ajoutant la ligne suivante en tête du fichier /etc/proftpd/proftpd.conf :

Include /etc/proftpd/modules.conf

nano /etc/proftpd/proftpd.conf

Enregistrer le fichier, et ne pas oublier de redémarrer proftpd :

sudo /etc/init.d/proftpd restart

 

  • Connexion en tant que root sur Proftpd

– Rajout du paramètre “RootLogin On” dans le fichier de config de proftpd /etc/proftpd/proftpd.conf
– Suppression de l’utilisateur “root” dans le fichier de config des users banni du serveur ftp /etc/ftpusers
– Relancer le service de proftpd

sudo /etc/init.d/proftpd restart

 

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *