Table des matières
Pro-ftpd : un serveur FTP open source pour Linux
Introduction
ProFTPD est un serveur FTP/SFTP/FTPS open source, modulaire et puissant.
- Il gère les répertoires cachés, les hôtes virtuels et les fichiers .ftpaccess par répertoire.
- La structure interne des répertoires anonymes FTP est quelconque (pas besoin de bin, lib ni de fichiers spéciaux).
- Il gère les fonctionnalités avancées (plusieurs fichiers de mots de passe, ratios téléchargement/envoi, etc.).
Pré-requis
Installation
Pour utiliser une authentification sur une base de données, installez les paquets proftpd-mod suggérés correspondants.
- Installez les paquets proftpd,ftp ou (cas d'un Raspberry Pi) :
...@...:~$ sudo apt install proftpd ftp
- ftp pour les tests
- Vous pouvez installer aussi les paquets proftpd-mod-ldap,proftpd-mod-mysql,proftpd-mod-odbc,proftpd-mod-pgsql,proftpd-mod-sqlite,proftpd-mod-geoip ou
...@...:~$ sudo apt install proftpd-mod-ldap proftpd-mod-mysql proftpd-mod-odbc proftpd-mod-pgsql proftpd-mod-sqlite proftpd-mod-geoip
- L'installation crée les utilisateurs système suivants :
- proftpd (UID 127), groupe nogroup ; pas de répertoire personnel /run/proftpd.
- ftp (UID 128), groupe nogroup ; création du répertoire personnel /srv/ftp »…
Vérifiez que ftp fonctionne sous l'utilisateur en cours (pi pour un Raspberry Pi) :...@...:~$ ftp localhost ...
Name (localhost:xxxxxxx): 331 Mot de passe requis pour xxxxxxx Password: 230 Utilisateur xxxxxxx authentifié Remote system type is UNIX. Using binary mode to transfer files.ftp> ls ... drwxrwxr-x 4 xxxxxxx xxxxxxx 4096 Sep 5 05:39 Bureau ... 226 Téléchargement terminé ftp> bye 221 Au revoir....@...:~$Si vous essayez avec un client comme Filezilla, vous constaterez que l'utilisateur n'est pas bloqué dans son home.Configuration
- L'installation a créé l’arborescence :
...@...:~$ tree -d /etc/proftpd/ /etc/proftpd/ └── conf.d
ou pour un Raspberry Pi :
pi@framboise:~ $ tree -d /etc/proftpd/ /etc/proftpd/ └── conf.d
- Pour le listing des fichiers de la distribution, voir ProFTPd : Fichiers de la distribution
- Pour que les réglages persistent après les mises à jour, nous ne toucherons pas au fichier /etc/proftpd/proftpd.conf.
- Nous placerons dans le répertoire /etc/proftpd/conf.d/ des fichiers contenant nos directives de configuration. Ces fichiers ne seront pas affectés par les mises à jour.
- Liste des directives : http://www.proftpd.org/docs/directives/linked/by-name.html
Utilisateurs virtuels
Chaque utilisateur a accès à son propre répertoire personnel /home/xxxxxxx (ou /home/pi pour un Raspberry Pi).
- Unix ne connaît que les UID : il n'utilise pas les noms d'utilisateurs.
- proftpd ne fait donc pas de différence entre un utilisateur système et un utilisateur virtuel : ils sont définis par leur UID.
- Un utilisateur virtuel est un utilisateur qui n'est pas défini dans le système.
Création d'un webmestre pour un site monsite.tld
Nous allons créer un utilisateur virtuel admiweb pour accéder par ftp au site monsite.tld, hébergé à l'emplacement /var/www/html/monsite.tld
- Vérifiez l'existence de l'utilisateur www-data et de son groupe :
...@...:~$ id www-data uid=33(www-data) gid=33(www-data) groupes=33(www-data)
→ L’identifiant du groupe www-data est 33.
- Si le groupe www-data n'existe pas, créez-le ainsi que l'utilisateur www-data par :
...@...:~$ sudo groupadd www-data ...@...:~$ sudo useradd -g www-data -d /var/www -s /bin/false www-data
Créez un nouvel utilisateur virtuel ayant accès à /var/www/html (le webmestre admiweb, de home /var/www/html, avec les uid et gid de www-data, fournissez et confirmez le mot de passe du nouveau compte) :...@...:~$ cd /etc/proftpd/ ...@...:/etc/proftpd$ sudo ftpasswd --passwd --name admiweb --gid 33 --uid 33 --home /var/www/html --shell /bin/false ftpasswd: creating passwd entry for user admiweb ... Password: Re-type password: ... ftpasswd: entry created
Création d'un utilisateur virtuel (cas général)
On peut créer de la même façon des utilisateurs virtuels ayant des identifiants quelconques (sauf UID 0 (zéro) et GID 0 (zéro) qui sont utilisés pour l'utilisateur root et le groupe root).
Utilisez pour les utilisateurs virtuels des identifiants qui ne sont pas déjà utilisés dans /etc/passwd pour séparer les privilèges de vos utilisateurs système de ceux de vos utilisateurs virtuels.
Les privilèges sont déterminés par les identifiants.
Les utilisateurs virtuels peuvent tous avoir les mêmes identifiants → ils auront tous exactement les mêmes privilèges.
La directive DefaultRoot ~ dans /etc/proftpd/conf.d/global.conf confine vos utilisateurs virtuels dans des répertoires personnels distincts.
Ainsi, ces utilisateurs virtuels, bien qu'ayant tous les mêmes privilèges, seront tous séparés dans des répertoires différents.
L'outil ftpasswd est un script Perl.
Fichier de configuration
- Créez ou éditez avec les droits d'administration le fichier /etc/proftpd/conf.d/global.conf pour ajouter à la fin votre configuration :
- /etc/proftpd/conf.d/global.conf
# Tous les utilsateurs seront emprisonnés dans leur home, sauf l'utilisateur système xxxxxxx DefaultRoot ~ !xxxxxxx # Pas de shell valide exigé (ex : bin/sh ou /bin/bash). RequireValidShell off # Fichier des mots de passe AuthUserFile /etc/proftpd/ftpd.passwd # Fichier des groupes AuthGroupFile /etc/proftpd/ftpd.group AuthOrder mod_auth_file.c mod_auth_unix.c AuthPAM off
Cas d'un Raspberry Pi :
- /etc/proftpd/conf.d/global.conf
# Tous les utilsateurs seront emprisonnés dans leur home, sauf l'utilisateur système pi DefaultRoot ~ !pi # Pas de shell valide exigé (ex : bin/sh ou /bin/bash). RequireValidShell off # Fichier des mots de passe AuthUserFile /etc/proftpd/ftpd.passwd # Fichier des groupes AuthGroupFile /etc/proftpd/ftpd.group AuthOrder mod_auth_file.c mod_auth_unix.c AuthPAM off
- Créez les fichiers /etc/proftpd/ftp.passwd et /etc/proftpd/ftpd.group :
...@...:~$ sudo touch /etc/proftpd/ftp.passwd ...@...:~$ sudo touch /etc/proftpd/ftpd.group
Rechargement et test
- Relancez proftpd et vérifiez que l'utilisateur admiweb peut se connecter :
- Relancez proftpd et vérifiez que l'utilisateur admiweb peut se connecter :
...@...:~$ sudo systemctl restart proftpd ...@...:~$ ftp localhost ...
Name (localhost:xxxxxxx): admiweb 331 Mot de passe requis pour admiweb Password: 230 Utilisateur admiweb authentifié Remote system type is UNIX. Using binary mode to transfer files.ftp> ls ... -rwxrws--- 1 admiweb www-data 612 Apr 25 2018 index.nginx-debian.html ... ftp> bye 221 Au revoir....@...:~$Pour un Raspberry Pi :
pi@framboise:~ $ sudo systemctl restart proftpd pi@framboise:~ $ ftp localhost Connected to localhost. 220 ProFTPD Server (Debian) [::1] Name (localhost:pi): admiweb 331 Mot de passe requis pour admiweb Password: 230 Utilisateur admiweb authentifié Remote system type is UNIX. Using binary mode to transfer files.
ftp> ls ... drwxrws--- 22 admiweb www-data 4096 Jul 28 13:23 html ... ftp> bye 221 Au revoir.pi@framboise:~ $ - L'utilisateur système xxxxxxx, lui, peut se connecter et n'est pas emprisonné :
...@...:~$ ftp localhost ...
Name (localhost:xxxxxxx): 331 Mot de passe requis pour xxxxxxx Password: 230 Utilisateur xxxxxxx authentifié Remote system type is UNIX. Using binary mode to transfer files.ftp> ls ... drwxrwxr-x 4 xxxxxxx xxxxxxx 4096 Sep 5 05:39 Bureau ... 226 Téléchargement terminé ftp> cd .. ... ftp> ls ... drwxrwxr-x 269 xxxxxxx xxxxxxx 20480 Sep 10 11:51 xxxxxxx ... ftp> bye 221 Au revoir....@...:~$Pour un Raspberry Pi :
pi@framboise:~ $ ftp localhost ... Name (localhost:pi): 331 Mot de passe requis pour pi Password: 230 Utilisateur pi authentifié ...
ftp> ls ... drwxr-xr-x 2 pi pi 4096 Sep 9 16:15 Desktop ... ftp> cd .. ... ftp> ls ... drwxr-xr-x 33 pi pi 4096 Sep 9 17:53 pi ... ftp> bye 221 Au revoir.pi@framboise:~ $
Fichier proftpd.conf et dérivés
Il inclut :
- /etc/proftpd/modules.conf
- Répertoire des modules DSO : /usr/lib/proftpd
- Seul l'utilisateur root peut charger et décharger des modules, mais tout le monde peut voir quels modules ont été chargés.
- Charge les modules mod_ctrls_admin.c, mod_tls.c, mod_radius.c, mod_quotatab.c, mod_quotatab_file.c, mod_quotatab_radius.c, mod_wrap.c, mod_rewrite.c, mod_load.c, mod_ban.c, mod_wrap2.c, mod_wrap2_file.c, mod_dynmasq.c, mod_exec.c, mod_shaper.c, mod_ratio.c, mod_site_misc.c, mod_sftp.c, mod_sftp_pam.c, mod_facl.c, mod_unique_id.c, mod_copy.c, mod_deflate.c, mod_ifversion.c, mod_tls_memcache.c, mod_ifsession.c
/etc/proftpd/conf.d/(désactivés) :- #/etc/proftpd/ldap.conf (entièrement désactivé par des #)
- #/etc/proftpd/sql.conf (entièrement désactivé par des #)
- #/etc/proftpd/tls.conf (entièrement désactivé par des #)
- #/etc/proftpd/virtuals.conf (entièrement désactivé par des #)
Après chaque changement de configuration, pensez à relancer proftpd :
$ sudo systemctl restart proftpd
Sécurisation TLS
Le serveur est maintenant en place, cependant, tout ce qui transite entre votre serveur et votre Client FTP transite en clair sur le Net.
Nous allons chiffrer le tout avec une sécurisation TLS (SSLv3 étant deprecated).
Commençons par créer un certificat SSL auto-signé :
$ sudo openssl req -new -x509 -days 365 -nodes -out /etc/ssl/certs/proftpd.cert -keyout /etc/ssl/private/proftpd.key Generating a 2048 bit RSA private key ..........................................................+++ ..................................................................................+++ writing new private key to '/etc/ssl/private/proftpd.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:sd-xxxxx.dedibox.fr Email Address []:me@mymail.tld
Renseignez les champs demandés avec les bonnes informations. (sd-xxxxx.dedibox.fr : votre nom de domaine si vous en avez un).
Protégez la clé :
$ sudo chmod 440 /etc/ssl/private/proftpd.key
Nous allons maintenant forcer notre serveur FTP à utiliser cette clé pour générer une connexion chiffrée.
Avec les droits d'administration, éditez le fichier /etc/proftpd/conf.d/tls.conf pour le modifier comme ceci :
- /etc/proftpd/conf.d/tls.conf
<IfModule mod_tls.c> TLSEngine on TLSLog /var/log/proftpd/tls.log # TLSv1 Uniquement TLSProtocol TLSv1 # N'autorise que les connexions sécurisées TLSRequired on # Renseigne l'emplacement des certificats TLSRSACertificateFile /etc/ssl/certs/proftpd.cert TLSRSACertificateKeyFile /etc/ssl/private/proftpd.key TLSVerifyClient off TLSRenegotiate none TLSOptions NoSessionReuseRequired </IfModule>
Redémarrez le serveur FTP :
$ sudo systemctl restart proftpd
Vous pouvez maintenant vous connecter à votre serveur FTP de manière sécurisée !
Quelques exemples de fichiers de configuration
- Basic :
- Anonymous
- Simple MySQL Authentication
- Virtual hosts
- Complex Virtual
Fichier /etc/proftpd/proftpd.conf
Utilisation
Sur un PC du réseau, ouvrez Filezilla et lancez une connexion :
- Hôte : l'adresse IP du serveur (ici, un Raspberry)
- Identifiant : admiweb
- Mot de passe : son mot de passe
Interface graphique : Gadmin-ProFTPd : une interface graphique pour le serveur FTP ProFTPd
Désinstallation
Voir aussi
Basé sur « Comment configurer un serveur FTP Raspberry Pi – Installation du serveur Web » par raspberrypi-tutorials.fr.