ProFTPD est un serveur FTP/SFTP/FTPS open source, modulaire et puissant.
Pour utiliser une authentification sur une base de données, installez les paquets proftpd-mod suggérés correspondants.
...@...:~$ sudo apt install proftpd ftp
...@...:~$ sudo apt install proftpd-mod-ldap proftpd-mod-mysql proftpd-mod-odbc proftpd-mod-pgsql proftpd-mod-sqlite proftpd-mod-geoip
...@...:~$ 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....@...:~$
...@...:~$ tree -d /etc/proftpd/ /etc/proftpd/ └── conf.d
ou pour un Raspberry Pi :
pi@framboise:~ $ tree -d /etc/proftpd/ /etc/proftpd/ └── conf.d
Chaque utilisateur a accès à son propre répertoire personnel /home/xxxxxxx (ou /home/pi pour un Raspberry Pi).
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
...@...:~$ id www-data uid=33(www-data) gid=33(www-data) groupes=33(www-data)
→ L’identifiant du groupe www-data est 33.
...@...:~$ sudo groupadd www-data ...@...:~$ sudo useradd -g www-data -d /var/www -s /bin/false www-data
...@...:~$ 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
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.
# 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 :
# 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
...@...:~$ sudo touch /etc/proftpd/ftp.passwd ...@...:~$ sudo touch /etc/proftpd/ftpd.group
...@...:~$ 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:~ $
...@...:~$ 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:~ $
Il inclut :
Après chaque changement de configuration, pensez à relancer proftpd :
$ sudo systemctl restart proftpd
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 :
<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 !
Sur un PC du réseau, ouvrez Filezilla et lancez une connexion :
Interface graphique : Gadmin-ProFTPd : une interface graphique pour le serveur FTP ProFTPd
Basé sur « Comment configurer un serveur FTP Raspberry Pi – Installation du serveur Web » par raspberrypi-tutorials.fr.