FTP : Installer et configurer un serveur ProFTPd
Table des matières
Introduction
ProFTPD est un serveur FTP libre. Il permet de transférer des fichiers par Internet ou par le biais d'un réseau informatique local (intranet).
Toute personnes en ayant l'autorisation, peut télécharger et envoyer des fichiers. Il permet la création d'un espace anonyme.
Installation
Calculate Linux
Code BASH :
emerge -avq net-ftp/proftpd
CentOS
Code BASH :
yum install proftpd
Configuration du service ProFTPd
Suivant la distribution, le fichier de configuration s'appelle /etc/proftpd/proftpd.conf ou /etc/proftpd.conf
Calculate Linux
On créé le fichier proftpd.conf depuis le modèle, on démarre le service puis on l'ajoute au démarrage :
Code BASH :
cp /etc/proftpd/proftpd.conf.sample /etc/proftpd/proftpd.conf /etc/init.d/proftpd start rc-update add proftpd default
CentOS
On démarre le service puis on l'ajoute au démarrage :
Code BASH :
systemctl start proftpd
systemctl enable proftpd
Fichier de configuration proftpd.conf
Par défaut, la configuration attribue un espace FTP anonyme : les fichiers listés sont ceux de /home/ftp.
Aussi, chaque utilisateur peut accéder à son dossier personnel (chrooté) avec ses identifiants et mots de passe système.
Fichier de démonstration
Voici le fichier original avec quelques explications en commentaire :
Code BASH :
# 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 <Limit SITE_CHMOD> DenyAll </Limit> # Exemple de dossier anonyme sans possibilité d'uploader <Anonymous ~ftp> 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 <Limit WRITE> DenyAll </Limit> </Anonymous>
Interdire la connexion à root
Pour interdire root à se connecter, placer dans la section Global : RootLogin off
Code BASH :
<Global> RootLogin off </Global>
Interdire des utilisateurs à se connecter
Pour interdire des utilisateurs à se connecter on pet utiliser le fameux fichier /etc/ftpusers. Dedans on liste les utilisateurs qui ne pourront pas se connecter. Exemple :
Code BASH :
# Provided by ftpbase (dont remove this line!) # /etc/ftpusers: list of users disallowed FTP access # $Header: /var/cvsroot/gentoo-x86/net-ftp/ftpbase/files/ftpusers,v 1.1 2005/06/28 14:52:26 uberlord Exp $ halt operator root shutdown sync bin daemon adm
Dans la section Global, ne pas oublier de mentionner son utilisation :
Code BASH :
<Global> UseFtpUsers on </Global>
Créer des utilisateurs FTP
On peut créer simplement un utilisateur système puis lui attribuer un mot de passe :
Code BASH :
useradd -d /home/moi -s /bin/false moi passwd moi mkdir /home/moi chown -R moi /home/moi
ProFTPD + SSL
Un petit peu de sécurité, ça vous dit ?
On va générer un certificat :
Code BASH :
cd /etc/proftpd/ mkdir ssl cd ssl/ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -out proftpd-rsa.pem -keyout proftpd-key.pem
On protège la clé :
Code BASH :
chmod 440 proftpd-key.pem
On édite /etc/proftpd/proftpd.conf pour renseigner le tout en ajoutant à la fin du fichier :
Code BASH :
TLSEngine on TLSRequired on TLSRSACertificateFile /etc/proftpd/ssl/proftpd-rsa.pem TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd-key.pem TLSLog /var/log/proftpd-tls.log <IfModule mod_tls.c> TLSEngine on </IfModule>
On redémarre proftpd pour prendre en compte les infos :
Code BASH :
/etc/init.d/proftpd restart
ou
Code BASH :
systemctl restart proftpd