{{tag>Logiciel}}
====== 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 **[[apt>proftpd,ftp]]** ou (cas d'un Raspberry Pi) :...@...:~$ sudo apt install proftpd ftp
* **ftp** pour les tests
* Lors de l’installation, il peut vous être demandé comment ProFTP doit être démarré. Choisissez **autonome** (**standalone**) :{{ logiciel:internet:ftp:proftpd:proftpd-01.png?400 |}}
* Vous pouvez installer aussi les paquets **[[apt>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.dou pour un Raspberry Pi :pi@framboise:~ $ tree -d /etc/proftpd/
/etc/proftpd/
└── conf.d
* **Pour le listing des fichiers de la distribution**, voir [[logiciel:internet:ftp:proftpd:dist:start]]
* 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 :
# 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
- 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 :
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
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** :
++++ Basic.conf |
# This is a basic ProFTPD configuration file (rename it to
# 'proftpd.conf' for actual use. It establishes a single server
# and a single anonymous login. It assumes that you have a user/group
# "nobody" and "ftp" for normal operation and anon.
ServerName "ProFTPD Default Installation"
ServerType standalone
DefaultServer on
# Port 21 is the standard FTP port.
Port 21
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022
# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd).
MaxInstances 30
# Set the user and group under which the server will run.
User nobody
Group nogroup
# To cause every FTP user to be "jailed" (chrooted) into their home
# directory, uncomment this line.
#DefaultRoot ~
# Normally, we want files to be overwriteable.
AllowOverwrite on
# A basic anonymous configuration, no upload directories. If you do not
# want anonymous users, simply delete this entire section.
User ftp
Group ftp
# We want clients to be able to login with "anonymous" as well as "ftp"
UserAlias anonymous ftp
# Limit the maximum number of anonymous logins
MaxClients 10
# We want 'welcome.msg' displayed at login, and '.message' displayed
# in each newly chdired directory.
DisplayLogin welcome.msg
DisplayFirstChdir .message
# Limit WRITE everywhere in the anonymous chroot
DenyAll
++++
* **Anonymous**
++++ anonymous.conf |
# This sample configuration file illustrates configuring two
# anonymous directories, and a guest (same thing as anonymous but
# requires a valid password to login)
ServerName "ProFTPD Anonymous Server"
ServerType standalone
# Port 21 is the standard FTP port.
Port 21
# If you don't want normal users logging in at all, uncomment this
# next section
#
# DenyAll
#
# Set the user and group that the server normally runs at.
User nobody
Group nogroup
# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd)
MaxInstances 30
# Set the maximum number of seconds a data connection is allowed
# to "stall" before being aborted.
TimeoutStalled 300
# We want 'welcome.msg' displayed at login, and '.message' displayed
# in each newly chdired directory.
DisplayLogin welcome.msg
DisplayFirstChdir .message
# Our "basic" anonymous configuration, including a single
# upload directory ("uploads")
# Allow logins if they are disabled above.
AllowAll
# Maximum clients with message
MaxClients 5 "Sorry, max %m users -- try again later"
User ftp
Group ftp
# We want clients to be able to login with "anonymous" as well as "ftp"
UserAlias anonymous ftp
# Limit WRITE everywhere in the anonymous chroot
DenyAll
# An upload directory that allows storing files but not retrieving
# or creating directories.
DenyAll
AllowAll
# A second anonymous ftp section. Users can login as "private". Here
# we hide files owned by root from being manipulated in any way.
User bobf
Group users
UserAlias private bobf
UserAlias engineering bobf
# Deny access from *.evil.net and *.otherevil.net, but allow
# all others.
Order deny,allow
Deny from .evil.net, .otherevil.net
Allow from all
# We want all uploaded files to be owned by 'engdept' group and
# group writable.
GroupOwner engdept
Umask 006
# Hide all files owned by user 'root'
HideUser root
DenyAll
# Disallow clients from any access to hidden files.
IgnoreHidden on
# Permit uploading and creation of new directories in
# submissions/public
DenyAll
IgnoreHidden on
AllowAll
IgnoreHidden on
# The last anonymous example creates a "guest" account, which clients
# can authenticate to only if they know the user's password.
User guest
Group nobody
AnonRequirePassword on
AllowAll
# Deny write access from all except trusted hosts.
Order allow, deny
Allow from 10.0.0.
Deny from all
++++
* **Simple MySQL Authentication**
++++ mysql_simple.conf |
##
## Config with simple mysql authentication support
## Contributed by 'Stonki'
## Added to www.proftpd.org 18/Oct/2002
##
# This is a basic ProFTPD configuration file. It establishes a single
# server and a single anonymous login. It assumes that you have a
# user/group "nobody"/"nogroup" for normal operation and anon.
# !!! PLEASE read the documentation of proftpd !!!
#
# You can find the documentation in /usr/doc/packages/proftpd/,
# http://www.proftpd.org/ and don't forget to read carefully
# and _follow_ hints on http://www.proftpd.net/security.html.
#
# geaendert: 03.11.2001 für ProFTP 1.2.4 und mod_sql 4.x
#
#
# Basic
#
ServerName "Stonki"
serverType inetd
ServerAdmin support@stonki.de
#
# Debug Level
# emerg, alert, crit (empfohlen), error, warn. notice, info, debug
#
#SyslogLevel emerg
#SystemLog /var/log/proftpd.system.log
#
# uncomment, if you want to hide the servers name:
#
ServerIdent on "Stonki's Server"
DeferWelcome on
DefaultServer on
#
# Display
#
DisplayLogin /messages/ftp.motd
DisplayConnect /net/messages/ftp.pre
DisplayFirstChdir index.txt
HiddenStor off
DirFakeUser on stonki
DirFakeGroup on stonki
DirFakeMode 0000
# Enable PAM for authentication...
#
AuthPAM on
# Setting this directive to on will cause authentication to fail
# if PAM authentication fails. The default setting, off, allows
# other modules and directives such as AuthUserFile and friends
# to authenticate users.
#
# AuthPAMAuthoritative on
# This directive allows you to specify the PAM service name used
# in authentication (default is "proftpd" on SuSE Linux).
# You have to setup the service in the /etc/pam.d/.
#
#AuthPAMConfig
# Port 21 is the standard FTP port.
Port 21
#------------------------mysql Modul: 4.x
#
# Zugangskontrolle
#
SQLAuthTypes Plaintext
SQLAuthenticate users*
SQLConnectInfo db@localhost username password
SQLDefaultGID 65534
SQLDefaultUID 65534
SQLMinUserGID 100
SQLMinUserUID 500
SQLUserInfo ftp username password uid gid homedir shell
#
# aktive SQL Kommandos, ab hier passiert etwas :-)
#
SQLLog PASS counter
SQLNamedQuery counter UPDATE "letzter_zugriff=now(), count=count+1 WHERE username='%u'" ftp
# xfer Log in mysql
SQLLog RETR,STOR transfer1
SQLNamedQuery transfer1 INSERT "'%u', '%f', '%b', '%h', '%a', '%m', '%T', now(), 'c', NULL" xfer_stat
SQLLOG ERR_RETR,ERR_STOR transfer2
SQLNamedQuery transfer2 INSERT "'%u', '%f', '%b', '%h', '%a', '%m', '%T', now(), 'i', NULL" xfer_stat
#------------------------mysql
# Port 21 is the standard FTP port.
Port 21
# disable listen on 0.0.0.0:21 - the port (and IP) should
# be specified explicitly in each VirtualHost definition
#
#Port 0
# listen for each (additional) address explicitly that is
# specified (via Bind and Port) in a VirtualHost definition
#
#SocketBindTight on
#
# FXP Unterstuetzung
#
AllowForeignAddress on
# Umask 022 is a good standard umask to prevent new dirs
# and files from being group and world writable.
Umask 022
# Set the user and group that the server normally runs at.
User nobody
Group nogroup
# Maximal Werte setzen
MaxClientsPerHost 3 "Nicht mehr als %m Verbindungen"
MaxClients 5 "Leider sind schon %m Clients verbunden"
# RateReadBPS 5000
# RateReadFreeBytes 5000
# RateReadHardBPS on
Classes on
Class default limit 5
Class internet limit 2
Class local limit 3
Class internet ip 0.0.0.0/0
Class internet ip 192.168.99.99/24
Class local ip 127.0.0.1/24
Class local ip 192.168.0.0/24
#
# Restart erlauben
#
AllowStoreRestart on
AllowRetrieveRestart on
# Normally, we want files to be overwriteable.
AllowOverwrite off
HideNoAccess on
AllowAll
DenyAll
AllowOverwrite on
AllowALL
DenyALL
# It is a very good idea to allow only filenames containing normal
# alphanumeric characters for uploads (and not shell code...)
#PathAllowFilter "^[a-zA-Z0-9_.-]()'+$"
#PathAllowFilter "^[a-zA-Z0-9 _.-]()'+$"
# We don't want .ftpaccess or .htaccess files to be uploaded
#PathDenyFilter "(\.ftp)|(\.ht)[a-z]+$"
#PathDenyFilter "\.ftp[a-z]+$"
# Do not allow to pass printf-Formats (security! see documentation!):
#AllowFilter "^[a-zA-Z0-9@~ /,_.-]*$"
#DenyFilter "%"
# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# such as xinetd)
MaxInstances 30
# Performance: skip DNS resolution when we process the logs...
UseReverseDNS on
# Turn off Ident lookups
IdentLookups on
# Set the maximum number of seconds a data connection is allowed
# to "stall" before being aborted.
TimeoutStalled 300
# Where do we put the pid files?
ScoreboardPath /usr/local/var/proftpd
#
# Logging options
#
TransferLog /var/log/proftpd.xferlog
# Some logging formats
#
LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
LogFormat write "%h %l %u %t \"%r\" %s %b"
# Log file/dir access
ExtendedLog /var/log/proftpd.access_log WRITE,READ write
# Record all logins
ExtendedLog /var/log/proftpd.auth_log AUTH auth
# Paranoia logging level....
ExtendedLog /var/log/proftpd.paranoid_log ALL default
#
# Do a chroot for web-users (i.e. public or www group), but
# do not change root if the user is also in the users group...
#
DefaultRoot ~ !users
#
# Limit login attempts
#
MaxLoginAttempts 3
#
# Users needs a valid shell
#
RequireValidShell off
++++
* **Virtual hosts**
++++ virtual.conf |
# This sample configuration file illustrates creating two
# virtual servers, and associated anonymous logins.
ServerName "ProFTPD"
ServerType inetd
# Port 21 is the standard FTP port.
Port 21
# Global creates a "global" configuration that is shared by the
# main server and all virtualhosts.
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022
# Set the user and group that the server normally runs at.
User nobody
Group nogroup
# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd)
MaxInstances 30
# Maximum seconds a data connection may "stall"
TimeoutStalled 300
# First virtual server
ServerName "Virtual.com's FTP Server"
MaxClients 10
MaxLoginAttempts 1
# DeferWelcome prevents proftpd from displaying the servername
# until a client has authenticated.
DeferWelcome on
# Limit normal user logins, because we only want to allow
# guest logins.
DenyAll
# Next, create a "guest" account (which could be used
# by a customer to allow private access to their web site, etc)
User cust1
Group cust1
AnonRequirePassword on
AllowAll
HideUser root
HideGroup root
# A private directory that we don't want the user getting in to.
DenyAll
# Another virtual server, this one running on our primary address,
# but on port 4000. The only access is to a single anonymous login.
ServerName "Our private FTP server"
Port 4000
Umask 027
DenyAll
User ftp
Group ftp
UserAlias anonymous ftp
AllowAll
DenyAll
AllowAll
++++
* **Complex Virtual**
++++ virtual_authuserfile.conf |
#
# Virtual Hosting Server Configuration
# by M.Lowes
# for Frontier Internet Services Limited
# (http://www.ftech.net/)
#
ServerName "Master Webserver"
#
# Spawn from inetd?
#
#ServerType inetd
#
# or maybe a standalone server...
#
ServerType standalone
#
# don't give the server banner until _after_ authentication
#
DeferWelcome off
#
# Some basic defaults
#
Port 21
Umask 002
TimeoutLogin 120
TimeoutIdle 600
TimeoutNoTransfer 900
TimeoutStalled 3600
#
# No, I don't think we'll run as root!
#
User ftp
Group ftp
#
# This is a non-customer usable name, (ie they should be connecting via www.{domain})
# not 'hostname'. Therefore let's dump them in a dummy account and wait for them to
# scream.
#
DefaultRoot /web/Legacy/
#
# Performance, let's do DNS resolution when we process the logs...
#
UseReverseDNS off
#
# Where do we put the pid files?
#
ScoreboardPath /var/run/proftpd
#
# Logging options
#
TransferLog /var/spool/syslog/proftpd/xferlog.legacy
#
# Some logging formats
#
LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
LogFormat write "%h %l %u %t \"%r\" %s %b"
#
# Global settings
#
DisplayLogin welcome.msg
DisplayFirstChdir readme
#
# having to delete before uploading is a pain ;)
#
AllowOverwrite yes
#
# Turn off Ident lookups
#
IdentLookups off
#
# Logging
#
# file/dir access
#
ExtendedLog /var/spool/syslog/proftpd/access.log WRITE,READ write
#
#
# Record all logins
#
ExtendedLog /var/spool/syslog/proftpd/auth.log AUTH auth
#
# Paranoia logging level....
#
##ExtendedLog /var/spool/syslog/proftpd/paranoid.log ALL default
#
# Deny writing to the base server...
#
DenyAll
# --------------------------------------------
# Virtual Servers start here....
#
# (Note: this is normally auto generated by a
# script written in house).
# --------------------------------------------
#
# www.ftech.net.
# This is the default server
# Gets all the connections for www.{customer.domain},
# & www.ftech.net
#
ServerAdmin webmaster@Ftech.net
ServerName "Master Webserver"
MaxLoginAttempts 2
RequireValidShell no
TransferLog /var/spool/syslog/proftpd/xferlog.www
MaxClients 50
DefaultServer on
DefaultRoot ~ !staff
AllowOverwrite yes
#
# No quickly do we kick someone out
#
TimeoutLogin 120
TimeoutIdle 600
TimeoutNoTransfer 900
# --------------------------------------------
# Got a Frontpage customer who keeps breaking things????
# - stick 'em in group fpage
# --------------------------------------------
#
# Block them from doing anything other than reading...
#
DenyGroup fpage
#
# ditto for ftp_root if it's there...
#
DenyALL
#
# Limit by IP...
#
Order Allow,Deny
Allow 195.200.31.220
Allow 212.32.17.0/26
Deny ALL
# --------------------------------------------
#
# Legacy server, left in because some people
# haven't realised it's gone yet. Shove 'em into
# a dummy $home
#
ServerAdmin webmaster@Ftech.net
ServerName "Legacy Web Upload Server"
MaxLoginAttempts 2
RequireValidShell no
MaxClients 50
DefaultRoot ~ !staff
MaxClients 2
AllowOverwrite yes
TransferLog /var/spool/syslog/proftpd/xferlog.web-1
# --------------------------------------------
#
# ftp.ftech.net
#
ServerAdmin ftpmaster@ftech.net
ServerName "Frontier Internet Public FTP Server"
TransferLog /ftp/xferlog/ftp.ftech.net
MaxLoginAttempts 3
RequireValidShell no
DefaultRoot /ftp/ftp.ftech.net
AllowOverwrite yes
#
# Auth files....
#
AuthUserFile /var/conf/ftp/authfiles/passwd.ftp.ftech.net
AuthGroupFile /var/conf/ftp/authfiles/group.ftp.ftech.net
# A basic anonymous configuration, no upload directories.
User ftp
Group ftp
# We want clients to be able to login with "anonymous" as well as "ftp"
UserAlias anonymous ftp
RequireValidShell no
# Limit the maximum number of anonymous logins
MaxClients 50
# We want 'welcome.msg' displayed at login, and '.message' displayed
# in each newly chdired directory.
AllowAll
DenyAll
AllowAll
DenyAll
#
# Limit access to the mirrors to LINX
# only
#
Order Allow,Deny
Allow .uk, .ftech.net
Allow .vom.tm
Deny ALL
# Limit WRITE everywhere in the anonymous chroot
DenyAll
# ----------------------------------------------------
# Virtual ftp with anon access, but no incoming
#
ServerAdmin ftpmaster@foo1.com
ServerName "Foo1 FTP Server"
TransferLog /var/spool/syslog/xfer/ftp.foo1.com
MaxLoginAttempts 3
RequireValidShell no
DefaultRoot /ftp/ftp.foo1.com
User foo1
Group foo1
AllowOverwrite yes
#
# Auth files....
#
AuthUserFile /var/conf/ftp//authfiles/passwd.ftp.foo1.com
AuthGroupFile /var/conf/ftp//authfiles/group.ftp.foo1.com
User ftp
Group ftp
UserAlias anonymous ftp
RequireValidShell no
MaxClients 20
DenyAll
# ----------------------------------------------------
# ftp.foo2.com
# Anon, no incoming, some private access areas
#
ServerAdmin ftpmaster@mcresearch.co.uk
ServerName "MC Research FTP Server"
TransferLog /var/spool/syslog/xfer/ftp.foo2.com
MaxLoginAttempts 3
RequireValidShell no
DefaultRoot /ftp/ftp.foo2.com
User foo2
Group foo2
AllowOverwrite yes
#
# Auth files....
#
AuthUserFile /var/conf/ftp//authfiles/passwd.ftp.foo2.com
AuthGroupFile /var/conf/ftp//authfiles/group.ftp.foo2.com
User ftp
Group ftp
UserAlias anonymous ftp
RequireValidShell no
MaxClients 20
DenyAll
DenyAll
AllowUser mcres
DenyAll
AllowUser mcres
AllowUser customer
DenyAll
# ----------------------------------------------------
# ftp.foo3.com
#
#
ServerAdmin ftpmaster@farrukh.co.uk
ServerName "Farrukh FTP Archive"
TransferLog /var/spool/syslog/xfer/ftp.foo3.com
MaxLoginAttempts 3
RequireValidShell no
DefaultRoot /web/farrukh2/ftp_root
User farrukh2
Group farrukh2
AllowOverwrite yes
#
# Auth files....
#
AuthUserFile /var/conf/ftp//authfiles/passwd.ftp.foo3.com
AuthGroupFile /var/conf/ftp//authfiles/group.ftp.foo3.com
User ftp
Group ftp
UserAlias anonymous ftp
RequireValidShell no
MaxClients 20
AllowAll
DenyAll
AllowAll
AllowAll
DenyAll
AllowAll
#
# block access to the secure areas by anon...
#
DenyAll
DenyAll
DenyAll
#
# define user based access
#
AllowUser farrukh
AllowUser fguest
DenyAll
AllowUser farrukh
AllowUser fgroup
DenyAll
# ----------------------------------------------------
# ftp.foo4.com
# anon, with incoming upload
#
ServerAdmin ftpmaster@teamwork.co.uk
ServerName "Teamwork FTP Server"
TransferLog /var/spool/syslog/xfer/ftp.foo4.com
MaxLoginAttempts 3
RequireValidShell no
DefaultRoot /ftp/ftp.foo4.com
User foo4
Group foo4
AllowOverwrite yes
#
# Auth files....
#
AuthUserFile /var/conf/ftp//authfiles/passwd.ftp.foo4.com
AuthGroupFile /var/conf/ftp//authfiles/group.ftp.foo4.com
User ftp
Group ftp
UserAlias anonymous ftp
RequireValidShell no
MaxClients 20
AllowAll
DenyAll
AllowAll
AllowAll
DenyAll
AllowAll
DenyAll
# ----------------------------------------------------
# The end....
# ----------------------------------------------------
++++
==== Fichier /etc/proftpd/proftpd.conf ====
* **Fichier Proftpd.conf exemple**
++++ Proftpd.conf |
# Fichier de configuration de ProFTPD
# Pour une liste complète des directives : http://www.proftpd.org/docs/directives/configuration_full.html
# /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file.
# To really apply changes, reload proftpd after modifications, if
# it runs in daemon mode. It is not required in inetd/xinetd mode.
# Includes DSO modules
Include /etc/proftpd/modules.conf
# Set off to disable IPv6 support which is annoying on IPv4 only boxes.
UseIPv6 on
# Virtualhosts
# Emplacement du fichier contenant la liste des utilisateurs virtuels,
AuthUserFile /etc/proftpd/ftpd.passwd
# Emplacement du fichier contenant la liste des groupes virtuels,
AuthGroupFile /etc/proftpd/ftpd.group
# Active l'utilisation du fichier /etc/ftpusers qui donne la liste des utilisateur n'ayant pas d'accès au serveur ftp
# ( fichier ftpusers situé dans /etc ).
UseFtpUsers on
# If set on you can experience a longer connection delay in many cases.
IdentLookups off
# Nom du serveur FTP
ServerName "Debian"
# Mode de fonctionnement du serveur ( inetd ou standalone )
ServerType standalone
DeferWelcome off
MultilineRFC2228 on
# Si vous utilisez des virtualhosts, laissez cette option activée, sinon désactivez la.
DefaultServer on
ShowSymlinks on
# Déconnection du client au bout de "x" secondes
# S'il n'opère aucun transfert.
TimeoutNoTransfer 600
# S'il a stoppé le transfert.
TimeoutStalled 600
# S'il n'a effectué aucune activité après la saisie du login/passwd.
TimeoutIdle 1200
DisplayLogin
DisplayChdir
ListOptions
welcome.msg
.message true
"-l"
DenyFilter
\*.*/
# Permet de "chrooter" les utilisateurs FTP locaux dans leurs répertoires personnels.Ici tous les utilsateurs seront
« emprisonnés » sauf l'utilisateur mickael,
DefaultRoot
~ !mickael
#Si cette directive est mise sur "on" , proftpd exigera que les utilisateurs qui se connectent aient des shells valides ( ex :
bin/sh ou /bin/bash ).
RequireValidShell
on
#Port d'écoute du serveur ftp.
Port
21#Plage des ports passifs que ProFTPd utilisera pour répondre aux clients,
# PassivePorts
49152 65534
# If your host was NATted, this option is useful in order to
# allow passive tranfers to work. You have to use your public
# address and opening the passive ports used on your firewall as well.
# MasqueradeAddress
1.2.3.4
# This is useful for masquerading address with dynamic IPs:
# refresh any configured MasqueradeAddress directives every 8 hours
# DynMasqRefresh 28800
#Nombre maximal de connexions simultanées.
MaxInstances
30
# Définit avec quel utilisateur/groupe ProFTPD sera lancé ( vous pouvez modifier le nom de l'utilisateur ou bien le groupe
comme vous le voulez )
User
userftp
Group
groupftp
# Umask 022 is a good standard umask to prevent new files and dirs
# (second parm) from being group and world writable.
#Droits du propriétaire du fichier 022 donnes des droits 664 ( rw-r--r-- ) pour les fichiers et 755 ( rwxr-xr-x ) pour les
dossiers.
Umask
022 022
#Si la directive est mise à "on" cela permettra de remplacer les anciens fichiers par les nouveaux, cette option sera inutile
si vous interdisez l'écriture.
AllowOverwrite
on
# Uncomment this if you are using NIS or LDAP via NSS to retrieve passwords:
# PersistentPasswd
off
# This is required to use both PAM-based authentication and local passwords
# AuthOrder
mod_auth_pam.c* mod_auth_unix.c
# Be warned: use of this directive impacts CPU average load!
# Uncomment this if you like to see progress and transfer rate with ftpwho
# in downloads. That is not needed for uploads rates.
#
# UseSendFile
off
#Emplacement du fichier log pour les transferts.
TransferLog /var/log/proftpd/xferlog
#Emplacement du fichier log du serveur FTP.
SystemLog /var/log/proftpd/proftpd.log
# Logging onto /var/log/lastlog is enabled but set to off by default
#UseLastlog on
# In order to keep log file dates consistent after chroot, use timezone info
# from /etc/localtime. If this is not set, and proftpd is configured to
# chroot (e.g. DefaultRoot or ), it will use the non-daylight
# savings timezone regardless of whether DST is in effect.
#SetEnv TZ :/etc/localtime
QuotaEngine off
Ratios off
# Delay engine reduces impact of the so-called Timing Attack described in
# http://www.securityfocus.com/bid/11430/discuss
# It is on by default.
DelayEngine on
ControlsEngine
off
ControlsMaxClients 2
ControlsLog
/var/log/proftpd/controls.log
ControlsInterval
5
ControlsSocket
/var/run/proftpd/proftpd.sock
AdminControlsEngine off
#
# Alternative authentication frameworks
#
#Include /etc/proftpd/ldap.conf
#Include /etc/proftpd/sql.conf
#
# This is used for FTPS connections
#
#Include /etc/proftpd/tls.conf
#
# Useful to keep VirtualHost/VirtualRoot directives separated
#
#Include /etc/proftpd/virtuals.conf
# A basic anonymous configuration, no upload directories.
#Configuration du mode anonyme.Si vous voulez autoriser ce mode, décommenter toutes les lignes,
#
# User
ftp
# Group
nogroup
# # We want clients to be able to login with "anonymous" as well as "ftp"
# UserAlias
anonymous ftp
# # Cosmetic changes, all files belongs to ftp user
# DirFakeUseron ftp
# DirFakeGroup on ftp
#
# RequireValidShell
off
#
# # Limit the maximum number of anonymous logins
# MaxClients
10
#
# # We want 'welcome.msg' displayed at login, and '.message' displayed
# # in each newly chdired directory.
# DisplayLogin
welcome.msg
# DisplayChdir
.message
#
# # Limit WRITE everywhere in the anonymous chroot
# #
#
DenyAll
#
#
#
# # Uncomment this if you're brave.
# #
# # # Umask 022 is a good standard umask to prevent new files and dirs
# # # (second parm) from being group and world writable.
# # Umask
022 022
# #
# #
DenyAll
# #
# #
# #
AllowAll
# #
# #
#
#
Partie SSL/TLS
# Activation du SSL
TLSEngine on
# On force toutes les connections avec ssl
TLSRequired on
# logs
TLSLog /var/log/proftpd/proftpd.tls_log
# Protocole
TLSProtocol SSLv23
# Pas de demande de certificat client
TLSOptions NoCertRequest
# Certificat et clé
TLSRSACertificateFile /etc/ssl/certs/proftpd.cert.pem
TLSRSACertificateKeyFile /etc/ssl/certs/proftpd.key.pem
# Pas de vérification du certificat client
TLSVerifyClient off
# Include other custom configuration files
Include /etc/proftpd/conf.d/
++++
++++ Modèle de fichier proftpd.conf |
# Fichier de configuration de ProFTPD
# Pour une liste complète des directives : http://www.proftpd.org/docs/directives/configuration_full.html
# /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file.
# To really apply changes, reload proftpd after modifications, if it runs in daemon mode.
# It is not required in inetd/xinetd mode.
#
# Includes DSO modules
Include /etc/proftpd/modules.conf
# Set off to disable IPv6 support which is annoying on IPv4 only boxes.
UseIPv6 on
#Virtualhosts
#Emplacement du fichier contenant la liste des utilisateurs virtuels,
AuthUserFile /etc/proftpd/ftpd.passwd
#Emplacement du fichier contenant la liste des groupes virtuels,
AuthGroupFile /etc/proftpd/ftpd.group
#Active l'utilisation du fichier /etc/ftpusers qui donne la liste des utilisateur n'ayant pas d'accès au serveur ftp ( fichier
ftpusers situé dans /etc ).
UseFtpUsers on
# If set on you can experience a longer connection delay in many cases.
IdentLookups
off
# Nom du serveur FTP
ServerName
"Debian"
#Mode de fonctionnement du serveur ( inetd ou standalone )
ServerType
standalone
DeferWelcome
off
MultilineRFC2228
on
#Si vous utilisez des virtualhosts, laissez cette option activée, sinon désactivez la.
DefaultServer
on
ShowSymlinks
on
# Déconnection du client au bout de "x" secondes
#S'il n'opère aucun transfert.
TimeoutNoTransfer
600
#S'il a stoppé le transfert.
TimeoutStalled
600
#S'il n'a effectué aucune activité après la saisie du login/passwd.
TimeoutIdle
1200
DisplayLogin
DisplayChdir
ListOptions
welcome.msg
.message true
"-l"
DenyFilter
\*.*/
# Permet de "chrooter" les utilisateurs FTP locaux dans leurs répertoires personnels.Ici tous les utilsateurs seront
« emprisonnés » sauf l'utilisateur mickael,
DefaultRoot
~ !mickael
#Si cette directive est mise sur "on" , proftpd exigera que les utilisateurs qui se connectent aient des shells valides ( ex :
bin/sh ou /bin/bash ).
RequireValidShell
on
#Port d'écoute du serveur ftp.
Port
21#Plage des ports passifs que ProFTPd utilisera pour répondre aux clients,
# PassivePorts
49152 65534
# If your host was NATted, this option is useful in order to
# allow passive tranfers to work. You have to use your public
# address and opening the passive ports used on your firewall as well.
# MasqueradeAddress
1.2.3.4
# This is useful for masquerading address with dynamic IPs:
# refresh any configured MasqueradeAddress directives every 8 hours
# DynMasqRefresh 28800
#Nombre maximal de connexions simultanées.
MaxInstances
30
# Définit avec quel utilisateur/groupe ProFTPD sera lancé ( vous pouvez modifier le nom de l'utilisateur ou bien le groupe
comme vous le voulez )
User
userftp
Group
groupftp
# Umask 022 is a good standard umask to prevent new files and dirs
# (second parm) from being group and world writable.
#Droits du propriétaire du fichier 022 donnes des droits 664 ( rw-r--r-- ) pour les fichiers et 755 ( rwxr-xr-x ) pour les
dossiers.
Umask
022 022
#Si la directive est mise à "on" cela permettra de remplacer les anciens fichiers par les nouveaux, cette option sera inutile
si vous interdisez l'écriture.
AllowOverwrite
on
# Uncomment this if you are using NIS or LDAP via NSS to retrieve passwords:
# PersistentPasswd
off
# This is required to use both PAM-based authentication and local passwords
# AuthOrder
mod_auth_pam.c* mod_auth_unix.c
# Be warned: use of this directive impacts CPU average load!
# Uncomment this if you like to see progress and transfer rate with ftpwho
# in downloads. That is not needed for uploads rates.
#
# UseSendFile
off
#Emplacement du fichier log pour les transferts.
TransferLog /var/log/proftpd/xferlog
#Emplacement du fichier log du serveur FTP.
SystemLog /var/log/proftpd/proftpd.log
# Logging onto /var/log/lastlog is enabled but set to off by default
#UseLastlog on
# In order to keep log file dates consistent after chroot, use timezone info
# from /etc/localtime. If this is not set, and proftpd is configured to
# chroot (e.g. DefaultRoot or ), it will use the non-daylight
# savings timezone regardless of whether DST is in effect.
#SetEnv TZ :/etc/localtime
QuotaEngine off
Ratios off
# Delay engine reduces impact of the so-called Timing Attack described in
# http://www.securityfocus.com/bid/11430/discuss
# It is on by default.
DelayEngine on
ControlsEngine
off
ControlsMaxClients 2
ControlsLog
/var/log/proftpd/controls.log
ControlsInterval
5
ControlsSocket
/var/run/proftpd/proftpd.sock
AdminControlsEngine off
#
# Alternative authentication frameworks
#
#Include /etc/proftpd/ldap.conf
#Include /etc/proftpd/sql.conf
#
# This is used for FTPS connections
#
#Include /etc/proftpd/tls.conf
#
# Useful to keep VirtualHost/VirtualRoot directives separated
#
#Include /etc/proftpd/virtuals.conf
# A basic anonymous configuration, no upload directories.
#Configuration du mode anonyme.Si vous voulez autoriser ce mode, décommenter toutes les lignes,
#
# User
ftp
# Group
nogroup
# # We want clients to be able to login with "anonymous" as well as "ftp"
# UserAlias
anonymous ftp
# # Cosmetic changes, all files belongs to ftp user
# DirFakeUseron ftp
# DirFakeGroup on ftp
#
# RequireValidShell
off
#
# # Limit the maximum number of anonymous logins
# MaxClients
10
#
# # We want 'welcome.msg' displayed at login, and '.message' displayed
# # in each newly chdired directory.
# DisplayLogin
welcome.msg
# DisplayChdir
.message
#
# # Limit WRITE everywhere in the anonymous chroot
# #
#
DenyAll
#
#
#
# # Uncomment this if you're brave.
# #
# # # Umask 022 is a good standard umask to prevent new files and dirs
# # # (second parm) from being group and world writable.
# # Umask
022 022
# #
# #
DenyAll
# #
# #
# #
AllowAll
# #
# #
#
#
Partie SSL/TLS
# Activation du SSL
TLSEngine on
# On force toutes les connections avec ssl
TLSRequired on
# logs
TLSLog /var/log/proftpd/proftpd.tls_log
# Protocole
TLSProtocol SSLv23
# Pas de demande de certificat client
TLSOptions NoCertRequest
# Certificat et clé
TLSRSACertificateFile /etc/ssl/certs/proftpd.cert.pem
TLSRSACertificateKeyFile /etc/ssl/certs/proftpd.key.pem
# Pas de vérification du certificat client
TLSVerifyClient off
# Include other custom configuration files
Include /etc/proftpd/conf.d/
++++
++++ Autre exemple |
# 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 ~
# Généralement, les fichiers peuvent être écrasés.
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
++++
===== Utilisation =====
Sur un PC du réseau, ouvrez Filezilla et lancez une connexion :{{ logiciel:internet:ftp:proftpd:raspi:proftp-01.png?400 |}}
* Hôte : l'adresse IP du serveur (ici, un Raspberry)
* Identifiant : admiweb
* Mot de passe : son mot de passe
Interface graphique : [[logiciel:internet:ftp:proftpd:gadmin-proftpd:start]] FIXME
===== Désinstallation =====
===== Voir aussi =====
* **(fr)** [[http://arobaseinformatique.eklablog.com/mise-en-place-d-un-serveur-ftp-avec-proftpd-a105781016]]
* **(fr)** [[https://raspberrypi-tutorials.fr/comment-configurer-un-serveur-ftp-raspberry-pi-installation-du-serveur-web/]]
----
//Basé sur << [[https://raspberrypi-tutorials.fr/comment-configurer-un-serveur-ftp-raspberry-pi-installation-du-serveur-web/|Comment configurer un serveur FTP Raspberry Pi – Installation du serveur Web]] >> par raspberrypi-tutorials.fr.//