Documentation du Dr FRAPPE

Ce wiki regroupe les résultats de mes expériences en informatique accumulés au cours de mes recherches sur le net.

Dans la mesure du possible, j'ai cité mes sources ; il en manque certainement… :-)

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
logiciel:internet:pro-ftpd:start [2019/03/17 08:01]
logiciel:internet:pro-ftpd:start [2019/05/18 19:41] (Version actuelle)
Ligne 1: Ligne 1:
 +{{tag>​Logiciel}}
  
 +====== Pro-ftpd : un serveur FTP open source ======
 +====== - Introduction ======
 +
 +**ProFTPD** est un serveur FTP open source.
 +====== - Pré-requis ======
 +
 +====== - Installation ======
 +
 +===== - Sous Linux =====
 +
 +ProFTPD est un serveur FTP/​SFTP/​FTPS modulaire et puissant. Ce démon pour le protocole de transfert de fichiers (FTP) gère les répertoires cachés, les hôtes virtuels et les fichiers « .ftpaccess » par répertoire. Il utilise un seul fichier de configuration avec une syntaxe proche de celle d'​Apache.
 +
 + Les répertoires anonymes FTP peuvent avoir une structure interne quelconque grâce à une conception avancée (bin, lib et les fichiers spéciaux ne sont pas nécessaires). Les fonctionnalités avancées telles que plusieurs fichiers de mots de passe et les ratios téléchargement/​envoi sont également gérées.
 +
 +Ce paquet fournit le démon et tous les modules principaux utilisés dans les configurations courantes. Pour utiliser une authentification sur une base de données, il est nécessaire d'​installer les paquets proftpd-mod suggérés correspondants.
 +
 +
 +Installez le paquet **[[apt>​proftpd-basic]]** ou en ligne de commande :
 +<​cli>​$ sudo apt install proftpd-basic</​cli>​
 +
 +Pendant l'​installation,​ les utilisateurs suivants sont créés :
 +  * utilisateur système **proftpd** (UID 127), groupe **nogroup**. Le répertoire personnel « /​run/​proftpd » n'a pas été créé.
 +  * utilisateur système **ftp** (UID 128), groupe **nogroup**. Création du répertoire personnel **/​srv/​ftp** »...
 +
 +<WRAP center round info 60%>
 +Si demandé pendant l'​installation,​ choisir de l'​installer en mode standalone :
 +
 +{{ :​logiciel:​internet:​pro-ftpd:​pro-ftp_install_standalone.png?​400 |}}
 +
 +Vous pouvez aussi installer les paquets suggérés : **[[apt>​proftpd-mod-ldap,​proftpd-mod-mysql,​proftpd-mod-odbc,​proftpd-mod-pgsql,​proftpd-mod-sqlite,​proftpd-mod-geoip]]** ou en ligne de commande :
 +<​cli>​$ sudo apt install proftpd-mod-ldap proftpd-mod-mysql proftpd-mod-odbc proftpd-mod-pgsql proftpd-mod-sqlite proftpd-mod-geoip</​cli>​
 +</​WRAP>​
 +
 +Pour vérifier que ftp fonctionne sous l'​utilisateur en cours, lancez :
 +<​cli>​$ ftp localhost
 +Connected to localhost.localdomain.
 +220 ProFTPD 1.3.5e Server (Debian) [::​ffff:​127.0.0.1]
 +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
 +200 Commande PORT exécutée avec succès
 +150 Ouverture d'une connexion de données en mode ASCII pour file list
 +...
 +drwxrwxr-x ​  4 xxxxxxx ​ users        4096 Apr 21 14:05 Bureau
 +...
 +226 Téléchargement terminé
 +ftp> bye
 +221 Au revoir.</​cli>​
 +
 +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 :
 +
 +<a2s>
 +/​etc/​proftpd/​
 +|            blacklist.dat
 +|            dhparams.pem
 +|            ldap.conf
 +|            modules.conf
 +|            proftpd.conf
 +|            sql.conf
 +|            tls.conf
 +|            virtuals.conf
 +|
 ++---- conf.d/
 +</​a2s>​
 +
 +<WRAP center round tip 60%>
 +Le fichier de configuration est **/​etc/​proftpd/​proftpd.conf**.
 +Sa syntaxe est similaire à celle d'​Apache.
 +  * Liste des directives : [[http://​www.proftpd.org/​docs/​directives/​linked/​by-name.html]]
 +
 +Nous choisissons de ne pas y toucher.
 +
 +Le répertoire **/​etc/​proftpd/​conf.d/​** est vide. Nous y mettrons plusieurs fichiers pour répartir les directives de configuration.
 +
 +La directive **include** en bas du fichier **/​etc/​proftpd/​proftpd.conf** appelle les directives des fichiers du répertoire **/​etc/​proftpd/​conf.d/​**.
 +
 +Ces fichiers ne seront pas affectés par les mises à jour.
 +</​WRAP>​
 +
 +<WRAP center round info 60%>
 +
 +**Fichiers de la distribution**
 +
 +++++ /​etc/​proftpd/​proftpd.conf |
 +<code - /​etc/​proftpd/​proftpd.conf>​
 +#
 +# /​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
 +# If set on you can experience a longer connection delay in many cases.
 +IdentLookups off
 +
 +ServerName "​Debian"​
 +# Set to inetd only if you would run proftpd by inetd/​xinetd.
 +# Read README.Debian for more information on proper configuration.
 +ServerType standalone
 +DeferWelcome off
 +
 +MultilineRFC2228 on
 +DefaultServer on
 +ShowSymlinks on
 +
 +TimeoutNoTransfer 600
 +TimeoutStalled 600
 +TimeoutIdle 1200
 +
 +DisplayLogin ​                   welcome.msg
 +DisplayChdir ​              ​ .message true
 +ListOptions ​               "​-l"​
 +
 +DenyFilter \*.*/​
 +
 +# Use this to jail all users in their homes 
 +# DefaultRoot ~
 +
 +# Users require a valid shell listed in /etc/shells to login.
 +# Use this directive to release that constrain.
 +# RequireValidShell off
 +
 +# Port 21 is the standard FTP port.
 +Port 21
 +
 +# In some cases you have to specify passive ports range to by-pass
 +# firewall limitations. Ephemeral ports can be used for that, but
 +# feel free to use a more narrow range.
 +# 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
 +<​IfModule mod_dynmasq.c>​
 +# DynMasqRefresh 28800
 +</​IfModule>​
 +
 +# 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 that the server normally runs at.
 +User proftpd
 +Group nogroup
 +
 +# Umask 022 is a good standard umask to prevent new files and dirs
 +# (second parm) from being group and world writable.
 +Umask 022 ​ 022
 +# Normally, we want files to be overwriteable.
 +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
 +
 +TransferLog /​var/​log/​proftpd/​xferlog
 +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 <​Anonymous>​),​ it will use the non-daylight
 +# savings timezone regardless of whether DST is in effect.
 +#SetEnv TZ :/​etc/​localtime
 +
 +<​IfModule mod_quotatab.c>​
 +QuotaEngine off
 +</​IfModule>​
 +
 +<​IfModule mod_ratio.c>​
 +Ratios off
 +</​IfModule>​
 +
 +
 +# Delay engine reduces impact of the so-called Timing Attack described in
 +# http://​www.securityfocus.com/​bid/​11430/​discuss
 +# It is on by default. ​
 +<​IfModule mod_delay.c>​
 +DelayEngine on
 +</​IfModule>​
 +
 +<​IfModule mod_ctrls.c>​
 +ControlsEngine ​       off
 +ControlsMaxClients ​   2
 +ControlsLog ​          /​var/​log/​proftpd/​controls.log
 +ControlsInterval ​     5
 +ControlsSocket ​       /​var/​run/​proftpd/​proftpd.sock
 +</​IfModule>​
 +
 +<​IfModule mod_ctrls_admin.c>​
 +AdminControlsEngine off
 +</​IfModule>​
 +
 +#
 +# 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.
 +
 +# <​Anonymous ~ftp>
 +#   ​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
 +#   ​DirFakeUser on 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
 +#   <​Directory *>
 +#     <​Limit WRITE>
 +#       ​DenyAll
 +#     </​Limit>​
 +#   </​Directory>​
 +
 +#   # Uncomment this if you're brave.
 +#   # <​Directory incoming>​
 +#   # ​  # Umask 022 is a good standard umask to prevent new files and dirs
 +#   # ​  # (second parm) from being group and world writable.
 +#   # ​  ​Umask 022 ​ 022
 +#   # ​           <Limit READ WRITE>
 +#   # ​           DenyAll
 +#   # ​           </​Limit>​
 +#   # ​           <Limit STOR>
 +#   # ​           AllowAll
 +#   # ​           </​Limit>​
 +#   # </​Directory>​
 +
 +# </​Anonymous>​
 +
 +# Include other custom configuration files
 +Include /​etc/​proftpd/​conf.d/​
 +
 +</​code>​
 +++++
 +
 +++++ /​etc/​proftpd/​modules.conf |
 +<code - /​etc/​proftpd/​modules.conf>​
 +#
 +# This file is used to manage DSO modules and features.
 +#
 +
 +# This is the directory where DSO modules reside
 +
 +ModulePath /​usr/​lib/​proftpd
 +
 +# Allow only user root to load and unload modules, but allow everyone
 +# to see which modules have been loaded
 +
 +ModuleControlsACLs insmod,​rmmod allow user root
 +ModuleControlsACLs lsmod allow user *
 +
 +LoadModule mod_ctrls_admin.c
 +LoadModule mod_tls.c
 +
 +# Install one of proftpd-mod-mysql,​ proftpd-mod-pgsql or any other
 +# SQL backend engine to use this module and the required backend.
 +# This module must be mandatory loaded before anyone of
 +# the existent SQL backeds.
 +#LoadModule mod_sql.c
 +
 +# Install proftpd-mod-ldap to use this
 +#LoadModule mod_ldap.c
 +
 +#
 +# '​SQLBackend mysql' or '​SQLBackend postgres'​ (or any other valid backend) directives ​
 +# are required to have SQL authorization working. You can also comment out the
 +# unused module here, in alternative.
 +#
 +
 +# Install proftpd-mod-mysql and decomment the previous
 +# mod_sql.c module to use this.
 +#LoadModule mod_sql_mysql.c
 +
 +# Install proftpd-mod-pgsql and decomment the previous ​
 +# mod_sql.c module to use this.
 +#LoadModule mod_sql_postgres.c
 +
 +# Install proftpd-mod-sqlite and decomment the previous
 +# mod_sql.c module to use this
 +#LoadModule mod_sql_sqlite.c
 +
 +# Install proftpd-mod-odbc and decomment the previous
 +# mod_sql.c module to use this
 +#LoadModule mod_sql_odbc.c
 +
 +# Install one of the previous SQL backends and decomment ​
 +# the previous mod_sql.c module to use this
 +#LoadModule mod_sql_passwd.c
 +
 +LoadModule mod_radius.c
 +LoadModule mod_quotatab.c
 +LoadModule mod_quotatab_file.c
 +
 +# Install proftpd-mod-ldap to use this
 +#LoadModule mod_quotatab_ldap.c
 +
 +# Install one of the previous SQL backends and decomment ​
 +# the previous mod_sql.c module to use this
 +#LoadModule mod_quotatab_sql.c
 +LoadModule mod_quotatab_radius.c
 +LoadModule mod_wrap.c
 +LoadModule mod_rewrite.c
 +LoadModule mod_load.c
 +LoadModule mod_ban.c
 +LoadModule mod_wrap2.c
 +LoadModule mod_wrap2_file.c
 +# Install one of the previous SQL backends and decomment ​
 +# the previous mod_sql.c module to use this
 +#LoadModule mod_wrap2_sql.c
 +LoadModule mod_dynmasq.c
 +LoadModule mod_exec.c
 +LoadModule mod_shaper.c
 +LoadModule mod_ratio.c
 +LoadModule mod_site_misc.c
 +
 +LoadModule mod_sftp.c
 +LoadModule mod_sftp_pam.c
 +# Install one of the previous SQL backends and decomment ​
 +# the previous mod_sql.c module to use this
 +#LoadModule mod_sftp_sql.c
 +
 +LoadModule mod_facl.c
 +LoadModule mod_unique_id.c
 +LoadModule mod_copy.c
 +LoadModule mod_deflate.c
 +LoadModule mod_ifversion.c
 +LoadModule mod_tls_memcache.c
 +
 +# Install proftpd-mod-geoip to use the GeoIP feature
 +#LoadModule mod_geoip.c
 +
 +# keep this module the last one
 +LoadModule mod_ifsession.c
 +
 +
 +</​code>​
 +++++
 +
 +++++ /​etc/​proftpd/​ldap.conf |
 +<code - /​etc/​proftpd/​ldap.conf>​
 +#
 +# Proftpd sample configuration for LDAP authentication.
 +#
 +# (This is not to be used if you prefer a PAM-based LDAP authentication)
 +#
 +
 +<​IfModule mod_ldap.c>​
 +#
 +# This is used for ordinary LDAP connections,​ with or without TLS
 +#
 +#LDAPServer ldap://​ldap.example.com
 +#LDAPBindDN "​cn=admin,​dc=example,​dc=com"​ "​admin_password"​
 +#LDAPUsers dc=users,​dc=example,​dc=com (uid=%u) (uidNumber=%u)
 +#
 +# To be set on only for LDAP/TLS on ordinary port, for LDAP+SSL see below
 +#LDAPUseTLS on
 +#
 +
 +#
 +# This is used for encrypted LDAPS connections
 +#
 +#LDAPServer ldaps://​ldap.example.com
 +#LDAPBindDN "​cn=admin,​dc=example,​dc=com"​ "​admin_password"​
 +#LDAPUsers dc=users,​dc=example,​dc=com (uid=%u) (uidNumber=%u)
 +#
 +</​IfModule>​
 +</​code>​
 +++++
 +
 +++++ /​etc/​proftpd/​sql.conf |
 +<code - /​etc/​proftpd/​sql.conf>​
 +#
 +# Proftpd sample configuration for SQL-based authentication.
 +#
 +# (This is not to be used if you prefer a PAM-based SQL authentication)
 +#
 +
 +<​IfModule mod_sql.c>​
 +#
 +# Choose a SQL backend among MySQL or PostgreSQL.
 +# Both modules are loaded in default configuration,​ so you have to specify the backend ​
 +# or comment out the unused module in /​etc/​proftpd/​modules.conf.
 +# Use '​mysql'​ or '​postgres'​ as possible values.
 +#
 +#​SQLBackend mysql
 +#
 +#SQLEngine on
 +#​SQLAuthenticate on
 +#
 +# Use both a crypted or plaintext password ​
 +#​SQLAuthTypes Crypt Plaintext
 +#
 +# Use a backend-crypted or a crypted password
 +#​SQLAuthTypes Backend Crypt 
 +#
 +# Connection ​
 +#​SQLConnectInfo proftpd@sql.example.com proftpd_user proftpd_password
 +#
 +# Describes both users/​groups tables
 +#
 +#​SQLUserInfo users userid passwd uid gid homedir shell
 +#​SQLGroupInfo groups groupname gid members
 +#
 +</​IfModule>​
 +</​code>​
 +++++
 +
 +++++ /​etc/​proftpd/​tls.conf |
 +<code - /​etc/​proftpd/​tls.conf>​
 +#
 +# Proftpd sample configuration for FTPS connections.
 +#
 +# Note that FTPS impose some limitations in NAT traversing.
 +# See http://​www.castaglia.org/​proftpd/​doc/​contrib/​ProFTPD-mini-HOWTO-TLS.html
 +# for more information.
 +#
 +
 +<​IfModule mod_tls.c>​
 +#​TLSEngine ​                              on
 +#​TLSLog ​                                 /​var/​log/​proftpd/​tls.log
 +#​TLSProtocol ​                            ​SSLv23
 +#
 +# Server SSL certificate. You can generate a self-signed certificate using 
 +# a command like:
 +#
 +# openssl req -x509 -newkey rsa:1024 \
 +#          -keyout /​etc/​ssl/​private/​proftpd.key -out /​etc/​ssl/​certs/​proftpd.crt \
 +#          -nodes -days 365
 +#
 +# The proftpd.key file must be readable by root only. The other file can be
 +# readable by anyone.
 +#
 +# chmod 0600 /​etc/​ssl/​private/​proftpd.key ​
 +# chmod 0640 /​etc/​ssl/​private/​proftpd.key
 +
 +#​TLSRSACertificateFile ​                  /​etc/​ssl/​certs/​proftpd.crt
 +#​TLSRSACertificateKeyFile ​               /​etc/​ssl/​private/​proftpd.key
 +#
 +# CA the server trusts...
 +#​TLSCACertificateFile /​etc/​ssl/​certs/​CA.pem
 +# ...or avoid CA cert and be verbose
 +#​TLSOptions ​                     NoCertRequest EnableDiags ​
 +# ... or the same with relaxed session use for some clients (e.g. FireFtp)
 +#​TLSOptions ​                     NoCertRequest EnableDiags NoSessionReuseRequired
 +#
 +#
 +# Per default drop connection if client tries to start a renegotiate
 +# This is a fix for CVE-2009-3555 but could break some clients.
 +#
 +#TLSOptions AllowClientRenegotiations
 +#
 +# Authenticate clients that want to use FTP over TLS?
 +#
 +#​TLSVerifyClient ​                        off
 +#
 +# Are clients required to use FTP over TLS when talking to this server?
 +#
 +#​TLSRequired ​                            on
 +#
 +# Allow SSL/TLS renegotiations when the client requests them, but
 +# do not force the renegotations. ​ Some clients do not support
 +# SSL/TLS renegotiations;​ when mod_tls forces a renegotiation,​ these
 +# clients will close the data connection, or there will be a timeout
 +# on an idle data connection.
 +#
 +#​TLSRenegotiate ​                         required off
 +</​IfModule>​
 +</​code>​
 +++++
 +
 +++++ /​etc/​proftpd/​virtuals.conf |
 +<code - /​etc/​proftpd/​virtuals.conf>​
 +#
 +# Proftpd sample configuration for Virtual Hosts and Virtual Roots.
 +#
 +# Note that FTP protocol requires IP based virtual host, not name based.
 +#
 +
 +
 +# A generic sample virtual host.
 +#
 +#<​VirtualHost ftp.server.com>​
 +#​ServerAdmin ​            ​ftpmaster@server.com
 +#​ServerName ​             "Big FTP Archive"​
 +#​TransferLog ​            /​var/​log/​proftpd/​xfer/​ftp.server.com
 +#​MaxLoginAttempts ​       3
 +#​RequireValidShell ​      no
 +#​DefaultRoot ​            /​srv/​ftp_root
 +#​AllowOverwrite ​         yes
 +#</​VirtualHost>​
 +
 +#
 +# The vroot module is not required, but can be useful for shared
 +# directories.
 +#
 +<​IfModule mod_vroot.c>​
 +#​VRootEngine on
 +
 +#​DefaultRoot ~
 +#VRootAlias upload /​var/​ftp/​upload
 +#
 +#<​VirtualHost a.b.c.d>
 +#​VRootEngine on
 +#​VRootServerRoot /​etc/​ftpd/​a.b.c.d/​
 +#​VRootOptions allowSymlinks
 +#​DefaultRoot ~
 +#</​VirtualHost>​
 +#
 +</​IfModule>​
 +</​code>​
 +++++
 +</​WRAP>​
 +
 +===== - Utilisateurs virtuels =====
 +
 +<WRAP center round info 60%>
 +Le système ne connaît que les uid. Donc ls ne donnera pas forcément le bon nom pour le propriétaire. Pour afficher le gid, utilisez <​cli>​$ ls -n</​cli>​
 +</​WRAP>​
 +
 +==== - Création d'un webmestre pour un site monsite.tld ====
 +
 +<WRAP center round info 60%>
 +Unix n'​utilise pas les noms d'​utilisateurs,​ il ne connaît que les UID et les GID.
 +
 +Il s'​ensuit que proftpd ne fait pas de différence entre un utilisateur système et un utilisateur virtuel : tous les utilisateurs sont les mêmes.
 +
 +Un utilisateur virtuel est un utilisateur qui n'est pas défini dans le système.
 +</​WRAP>​
 +
 +Nous voulons créer l'​utilisateur virtuel **admiweb** pour accéder par ftp au site monsite.tld.
 +
 +Ce site est situé à **/​var/​www/​html/​monsite.tld**
 +
 +Créez avec les droits d'​administration le fichier **/​etc/​proftpd/​conf.d/​global.conf** pour y écrire :
 +<code apache /​etc/​proftpd/​conf.d/​global.conf>​
 +# Tous les utilsateurs seront emprisonnés dans leur home,
 +# sauf l'​utilisateur système xxxxx
 +DefaultRoot ~ !xxxxx
 +
 +# 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
 +</​code>​
 +
 +Vérifiez l'​existence de l'​utilisateur **www-data** et de son groupe :
 +<​cli>​$ id www-data ​
 +uid=33(www-data) gid=33(www-data) groupes=33(www-data)</​cli>​
 +-> L’identifiant du groupe **www-data** est **33**.
 +
 +<WRAP center round tip 60%>
 +Si le groupe **www-data** n'​existe pas, créez-le ainsi que l'​utilisateur **www-data** par :
 +<​cli>​$ sudo groupadd www-data
 +$ sudo useradd -g www-data -d /var/www -s /bin/false www-data</​cli>​
 +</​WRAP>​
 +
 +Créons l'​utilisateur virtuel **admiweb**,​ de home **/​var/​www/​html**,​ avec les uid et gid de www-data en lançant les commandes (fournissez et confirmez le mot de passe du nouveau compte) :
 +<​cli>​$ cd /​etc/​proftpd/​
 +$ sudo ftpasswd --passwd --name=admiweb --uid=33 --gid=33 --home=/​var/​www/​html --shell=/​bin/​false
 +...
 +ftpasswd: creating passwd entry for user admiweb
 +...
 +Password: ​
 +Re-type password: ​
 +
 +ftpasswd: entry created</​cli>​
 +
 +Vérifiez que l'​utilisateur **admiweb** peut se connecter :
 +<​cli>​$ ftp localhost
 +...
 +Name (localhost:​xxxxxx):​ admiweb
 +331 Mot de passe requis pour admiweb
 +Password:
 +230 Utilisateur admiweb authentifié
 +...
 +ftp> ls
 +...
 +-rwxrwsr-x ​  1 admiweb ​ 33            612 Apr 25  2018 index.nginx-debian.html
 +...
 +226 Téléchargement terminé
 +ftp> bye
 +221 Au revoir.</​cli>​
 +
 +L'​utilisateur système xxxxx, lui, peut se connecter et n'est pas emprisonné :
 +<​cli>​$ ftp localhost
 +...
 +Name (localhost:​xxxxxx): ​
 +331 Mot de passe requis pour xxxxxx
 +Password:
 +230 Utilisateur xxxxxx authentifié
 +...
 +ftp> ls
 +...
 +drwxrwxr-x ​  4 xxxxxx ​ 100          4096 Apr 21 14:05 Bureau
 +...
 +226 Téléchargement terminé
 +ftp> cd ..
 +...
 +ftp> ls
 +drwxrwxr-x 289 xxxxxx ​ xxxxxx ​    20480 Apr 21 14:06 xxxxx
 +...
 +ftp> bye
 +221 Au revoir.</​cli>​
 +
 +==== - Création d'un utilisateur virtuel (cas général) ====
 +
 +On peut utiliser n'​importe quels identifiants pour les utilisateurs virtuels (sauf UID 0 (zéro) et GID 0 (zéro) qui sont utilisés pour l'​utilisateur root et le groupe root).
 +
 +Il est judicieux d'​utiliser 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.
 +Toutefois, dans certains cas (comme l’utilisation de ProFTPD pour un accès FTP à des sites Web), vous pouvez souhaiter que tous vos utilisateurs virtuels s’exécutent en tant qu’utilisateur du serveur Web, par exemple. utilisateur **www-data** ou utilisateur **apache**. Utilisez les identifiants qui répondent le mieux aux besoins de votre site.
 +
 +Les utilisateurs virtuels peuvent tous avoir les mêmes identifiants.
 +Les utilisateurs virtuels auront tous exactement les mêmes privilèges.
 +Si vous utilisez cette approche, assurez-vous que ces utilisateurs virtuels sont tous confinés à des répertoires personnels distincts (ou de sites Web) en utilisant :<code - proftpd.conf>​
 +  DefaultRoot ~
 +</​code>​dans proftpd.conf
 +
 +Ainsi, ces utilisateurs virtuels, bien qu'​ayant tous les mêmes privilèges,​ seraient tous séparés dans des répertoires différents.
 +
 +Une fois créés vos AuthUserFile et AuthGroupFile avec l'​outil ftpasswd, configurez votre proftpd pour utiliser ces fichiers en ajoutant les directives suivantes à votre fichier proftpd.conf :
 +<code - proftpd.conf>​
 +  AuthUserFile /​path/​to/​ftpd.passwd
 +  AuthGroupFile /​path/​to/​ftpd.group
 +</​code>​
 +
 +L'​outil ftpasswd est un script Perl.
 +===== - Hôtes virtuels =====
 +
 +Créez avec les droits d'​administration le fichier **/​etc/​proftpd/​conf.d/​global.conf** pour y ajouter les directives :
 +<code - /​etc/​proftpd/​conf.d/​global.conf>​
 +DefaultRoot ~
 +
 +AuthUserFile /​etc/​proftpd/​ftpd.passwd
 +AuthGroupFile /​etc/​proftpd/​ftpd.group
 +</​code>​
 +
 +Vérifiez l'​existence de l'​utilisateur **www-data** et de son groupe :
 +<​cli>​$ getent group www-data ​
 +www-data:​x:​33:​
 +$ getent passwd www-data ​
 +www-data:​x:​33:​33:​www-data:/​var/​www:/​usr/​sbin/​nologin</​cli>​
 +
 +++++ Sinon, créez-le |
 +<​cli>​$ sudo groupadd www-data
 +$ sudo useradd -g www-data -d /var/www -s /bin/false www-data</​cli>​
 +++++
 +
 +On constate que l’identifiant du groupe **www-data** est **33**.
 +
 +Créez l'​utilisateur virtuel **admiweb**,​ de home **/​var/​www/​html**,​ avec les uid et gid de **www-data** en lançant les commandes (le mot de passe du compte vous sera demandé) :
 +<​cli>​$ cd /​etc/​proftpd
 +$ sudo ftpasswd --passwd --name=admiweb --uid=33 --gid=33 --home=/​var/​www/​html --shell=/​bin/​false
 +ftpasswd: creating passwd entry for user admiweb
 +...
 +Password: ​
 +Re-type password: ​
 +...
 +ftpasswd: entry created</​cli>​
 +
 +Vérifiez que l'​utilisateur courant peut se connecter :
 +<​cli>​$ ftp localhost
 +Connected to localhost.localdomain.
 +220 ProFTPD 1.3.4c Server (ProFTPD) [::​ffff:​127.0.0.1]
 +Name (localhost:​xxxxxxx): ​
 +331 Password required for xxxxxxx
 +Password:
 +230 User xxxxxxx logged in
 +Remote system type is UNIX.
 +Using binary mode to transfer files.
 +ftp> ls
 +200 PORT command successful
 +150 Opening ASCII mode data connection for file list
 +-rw-r--r-- ​  1 root     ​root ​        3607 Feb 27  2017 applications.html
 +-rw-r--r-- ​  1 root     ​root ​         177 Feb 27  2017 bitnami.css
 +drwxr-xr-x ​ 21 root     ​root ​        4096 Apr  4 11:48 dashboard
 +-rw-r--r-- ​  1 root     ​root ​       30894 May 11  2007 favicon.ico
 +drwxr-xr-x ​  2 root     ​root ​        4096 Apr  4 11:48 img
 +-rw-r--r-- ​  1 root     ​root ​         260 Jul  9  2015 index.php
 +drwxr-xr-x ​  2 daemon ​  ​daemon ​      4096 Apr  4 11:48 webalizer
 +226 Transfer complete
 +ftp> bye
 +221 Goodbye.</​cli>​
 +
 +De même pour admiweb :
 +<​cli>​$ ftp localhost
 +Connected to localhost.localdomain.
 +220 ProFTPD 1.3.4c Server (ProFTPD) [::​ffff:​127.0.0.1]
 +Name (localhost:​xxxxxxx):​ admiweb
 +331 Password required for admiweb
 +Password:
 +230 User admiweb logged in
 +Remote system type is UNIX.
 +Using binary mode to transfer files.
 +ftp> ls
 +200 PORT command successful
 +150 Opening ASCII mode data connection for file list
 +-rw-r--r-- ​  1 root     ​root ​        3607 Feb 27  2017 applications.html
 +-rw-r--r-- ​  1 root     ​root ​         177 Feb 27  2017 bitnami.css
 +drwxr-xr-x ​ 21 root     ​root ​        4096 Apr  4 11:48 dashboard
 +-rw-r--r-- ​  1 root     ​root ​       30894 May 11  2007 favicon.ico
 +drwxr-xr-x ​  2 root     ​root ​        4096 Apr  4 11:48 img
 +-rw-r--r-- ​  1 root     ​root ​         260 Jul  9  2015 index.php
 +drwxr-xr-x ​  2 daemon ​  ​daemon ​      4096 Apr  4 11:48 webalizer
 +226 Transfer complete
 +ftp> bye
 +221 Goodbye.</​cli>​
 +
 +Vous pouvez maintenant créer tous les utilisateurs nécessaires en répétant cette commande.
 +===== - 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 #)
 +
 +
 +
 +<WRAP center round important 60%>
 +Après chaque changement de configuration,​ pensez à relancer proftpd :<​cli>​$ sudo systemctl restart proftpd</​cli>​
 +</​WRAP>​
 +
 +===== - Premiers réglages =====
 +
 +Créez ou éditez avec les droits d'​administration le fichier **/​etc/​proftpd/​conf.d/​config.conf** pour le modifier comme ceci :
 +  * Dé-commentez la ligne **DefaultRoot** -> Les utilisateurs seront //​chrootés//​ dans leur propre home.
 +  * Vous pouvez aussi personnaliser au besoin :
 +    * **ServerName**,​
 +    * **DisplayLogin**
 +    * et **UseIPv6**
 +===== - 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é :
 +<​cli>​$ 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
 +
 +</​cli>​
 +
 +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é :<​cli>​$ sudo chmod 440 /​etc/​ssl/​private/​proftpd.key</​cli>​
 +
 +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 :
 +<code - /​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>​
 +</​code>​
 +
 +Redémarrez le serveur FTP :<​cli>​$ sudo systemctl restart proftpd</​cli>​
 +
 +Vous pouvez maintenant vous connecter à votre serveur FTP de manière sécurisée ! 
 +===== - Quelques exemples de fichiers de configuration =====
 +
 +  * **Basic** :
 +++++ Basic.conf |
 +<code - 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.
 +<​Directory />
 +  AllowOverwrite on
 +</​Directory>​
 +
 +# A basic anonymous configuration,​ no upload directories. ​ If you do not
 +# want anonymous users, simply delete this entire <​Anonymous>​ section.
 +<​Anonymous ~ftp>
 +  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
 +  <Limit WRITE>
 +    DenyAll
 +  </​Limit>​
 +</​Anonymous>​
 +</​code>​
 +++++
 +
 +  * **Anonymous**
 +++++ anonymous.conf |
 +<code - 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
 +#<Limit LOGIN>
 +#  DenyAll
 +#</​Limit>​
 +
 +# 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"​)
 +<​Anonymous ~ftp>
 +
 +  # Allow logins if they are disabled above.
 +  <Limit LOGIN>
 +    AllowAll
 +  </​Limit>​
 +
 +  # 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
 +  <Limit WRITE>
 +    DenyAll
 +  </​Limit>​
 +
 +  # An upload directory that allows storing files but not retrieving
 +  # or creating directories.
 +  <​Directory uploads/​*>​
 +    <Limit READ>
 +      DenyAll
 +    </​Limit>​
 +
 +    <Limit STOR>
 +      AllowAll
 +    </​Limit>​
 +  </​Directory>​
 +</​Anonymous>​
 +
 +# A second anonymous ftp section. ​ Users can login as "​private"​. ​ Here
 +# we hide files owned by root from being manipulated in any way.
 +
 +<​Anonymous /​usr/​local/​private>​
 +  User bobf
 +  Group users
 +  UserAlias private bobf
 +  UserAlias engineering bobf
 +
 +  # Deny access from *.evil.net and *.otherevil.net,​ but allow
 +  # all others.
 +  <Limit LOGIN>
 +    Order deny,​allow
 +    Deny from .evil.net, .otherevil.net
 +    Allow from all
 +  </​Limit>​
 +
 +  # 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
 +
 +  <Limit WRITE>
 +    DenyAll
 +  </​Limit>​
 +
 +  # Disallow clients from any access to hidden files.
 +  <Limit READ DIRS>
 +    IgnoreHidden on
 +  </​Limit>​
 +
 +  # Permit uploading and creation of new directories in
 +  # submissions/​public
 +
 +  <​Directory submissions/​public>​
 +    <Limit READ>
 +      DenyAll
 +      IgnoreHidden on
 +    </​Limit>​
 +
 +    <Limit STOR MKD RMD XMKD XRMD>
 +      AllowAll
 +      IgnoreHidden on
 +    </​Limit>​
 +  </​Directory>​
 +</​Anonymous>​
 +
 +# The last anonymous example creates a "​guest"​ account, which clients
 +# can authenticate to only if they know the user's password.
 +
 +<​Anonymous ~guest>
 +  User guest
 +  Group nobody
 +  AnonRequirePassword on
 +
 +  <Limit LOGIN>
 +    AllowAll
 +  </​Limit>​
 +
 +  # Deny write access from all except trusted hosts.
 +  <Limit WRITE>
 +    Order allow,​ deny
 +    Allow from 10.0.0.
 +    Deny from all
 +  </​Limit>​
 +</​Anonymous>​
 +</​code>​
 +++++
 +
 +  * **Simple MySQL Authentication**
 +++++ mysql_simple.conf |
 +<code - 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/<​other_name>​.
 +#
 +#​AuthPAMConfig <​other_name>​
 +
 +# 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.
 +<​Directory /*>
 + AllowOverwrite off
 + ​ HideNoAccess on
 + <Limit READ>
 + AllowAll
 + </​Limit>​
 + <Limit Write>
 + DenyAll
 + ​ </​Limit>​
 +</​Directory>​
 +
 +<​Directory /​net/​incoming/​*>​
 +        AllowOverwrite ​  on
 + <Limit STOR CMD MKD WRITE>
 + AllowALL
 + </​Limit>​
 + <Limit RETR DELE>
 + DenyALL
 + </​Limit>​
 +</​Directory>​
 +
 +
 +# 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
 +</​code>​
 +++++
 +
 +  * **Virtual hosts**
 +++++ virtual.conf |
 +<code - 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.
 +
 +<​Global>​
 +  # Umask 022 is a good standard umask to prevent new dirs and files
 +  # from being group and world writable.
 +  Umask 022
 +</​Global>​
 +
 +# 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
 +<​VirtualHost ftp.virtual.com>​
 +  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.
 +  <Limit LOGIN>
 +    DenyAll
 +  </​Limit>​
 +
 +  # Next, create a "​guest"​ account (which could be used
 +  # by a customer to allow private access to their web site, etc)
 +  <​Anonymous ~cust1>
 +    User cust1
 +    Group cust1
 +    AnonRequirePassword on
 +
 +    <Limit LOGIN>
 +      AllowAll
 +    </​Limit>​
 +
 +    HideUser root
 +    HideGroup root
 +
 +    # A private directory that we don't want the user getting in to.
 +    <​Directory logs>
 +      <Limit READ WRITE DIRS>
 +        DenyAll
 +      </​Limit>​
 +    </​Directory>​
 +  </​Anonymous>​
 +</​VirtualHost>​
 +
 +# Another virtual server, this one running on our primary address,
 +# but on port 4000.  The only access is to a single anonymous login.
 +<​VirtualHost our.ip.address>​
 +  ServerName "​Our private FTP server"​
 +  Port 4000
 +  Umask 027
 +
 +  <Limit LOGIN>
 +    DenyAll
 +  </​Limit>​
 +
 +  <​Anonymous /​usr/​local/​ftp/​virtual/​a_customer>​
 +    User ftp
 +    Group ftp
 +    UserAlias anonymous ftp
 +
 +    <Limit LOGIN>
 +      AllowAll
 +    </​Limit>​
 +
 +    <Limit WRITE>
 +      DenyAll
 +    </​Limit>​
 +
 +    <​Directory incoming>​
 +      <Limit WRITE>
 +        AllowAll
 +      </​Limit>​
 +    </​Directory>​
 +  </​Anonymous>​
 +</​VirtualHost>​
 +</​code>​
 +++++
 +
 +  * **Complex Virtual**
 +++++ virtual_authuserfile.conf |
 +<code - virtual_authuserfile.conf>​
 +#
 +# Virtual Hosting Server Configuration
 +# by M.Lowes <​markl@ftech.net>​
 +# 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
 +#
 +<​Global>​
 + 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
 +</​Global>​
 +
 +#
 +# Deny writing to the base server...
 +#
 +<Limit WRITE>
 + DenyAll
 +</​Limit>​
 +
 +
 +# --------------------------------------------
 +# 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
 +#
 +<​VirtualHost 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
 + # --------------------------------------------
 + <​Directory ~/​public_html>​
 + #
 + # Block them from doing anything other than reading...
 + #
 + <Limit STOR RNFR DELE>
 + DenyGroup fpage
 + </​Limit>​
 + </​Directory>​
 + #
 + # ditto for ftp_root if it's there...
 + #
 + <​Directory ~/​ftp_root>​
 + <Limit STOR RNFR DELE>
 + DenyALL
 + </​Limit>​
 + </​Directory>​
 + #
 + # Limit by IP...
 + #
 + <​Directory /​web/​zsl>​
 + <Limit ALL>
 + Order Allow,Deny
 + Allow 195.200.31.220
 + Allow 212.32.17.0/​26
 + Deny ALL
 + </​Limit>​
 + </​Directory>​
 +
 +</​VirtualHost>​
 +
 +# --------------------------------------------
 +#
 +# Legacy server, left in because some people
 +# haven'​t realised it's gone yet.  Shove 'em into 
 +# a dummy $home
 +#
 +<​VirtualHost web-1.ftech.net>​
 +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
 +</​VirtualHost>​
 +
 +# --------------------------------------------
 +#
 +# ftp.ftech.net
 +#
 +<​VirtualHost 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.
 +<​Anonymous /​ftp/​ftp.ftech.net>​
 + 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.
 +
 + <​Directory pub/​incoming>​
 + <Limit STOR>
 + AllowAll
 + </​Limit>​
 + <Limit WRITE DIRS READ>
 + DenyAll
 + </​Limit>​
 + <Limit CWD XCWD CDUP>
 + AllowAll
 + </​Limit>​
 + </​Directory>​
 +
 + <​Directory home>
 + <Limit ALL>
 + DenyAll
 + </​Limit>​
 + </​Directory>​
 +
 +   #
 +   # Limit access to the mirrors to LINX 
 +   # only
 +   #
 +   <​Directory mirrors>
 +      <Limit RETR>
 +         Order Allow,Deny
 +         Allow .uk, .ftech.net
 +         Allow .vom.tm
 +         Deny ALL
 +      </​Limit>​
 +   </​Directory>​
 +
 +  # Limit WRITE everywhere in the anonymous chroot
 +  <Limit WRITE>
 +    DenyAll
 +  </​Limit>​
 +
 +
 +</​Anonymous>​
 +
 +</​VirtualHost>​
 +
 +# ----------------------------------------------------
 +# Virtual ftp with anon access, but no incoming
 +#
 +<​VirtualHost ftp.foo1.com>​
 +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
 +
 +<​Anonymous /​ftp/​ftp.foo1.com>​
 +        User                    ftp
 +        Group                   ftp
 +        UserAlias ​              ​anonymous ftp
 +        RequireValidShell ​      no
 +        MaxClients ​             20
 + <Limit WRITE>
 + DenyAll
 + </​Limit>​
 +</​Anonymous>​
 +</​VirtualHost>​
 +
 +
 +# ----------------------------------------------------
 +# ftp.foo2.com ​
 +# Anon, no incoming, some private access areas 
 +#
 +<​VirtualHost ftp.foo2.com>​
 +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
 +
 +<​Anonymous /​ftp/​ftp.foo2.com>​
 +        User                    ftp
 +        Group                   ftp
 +        UserAlias ​              ​anonymous ftp
 +        RequireValidShell ​      no
 +        MaxClients ​             20
 +
 + <​Directory download>​
 + <Limit ALL>
 + DenyAll
 + </​Limit>​
 + </​Directory>​
 + <Limit WRITE>
 + DenyAll
 + </​Limit>​
 +</​Anonymous>​
 +
 + <​Directory /​ftp/​ftp.foo2.com/​pub>​
 + <Limit WRITE>
 + AllowUser mcres
 + DenyAll
 + </​Limit>​
 + </​Directory>​
 +
 + <​Directory /​ftp/​ftp.foo2.com/​download>​
 + <Limit ALL>
 + AllowUser mcres
 + AllowUser customer
 + DenyAll
 + </​Limit>​
 + </​Directory>​
 +</​VirtualHost>​
 +
 +
 +# ----------------------------------------------------
 +# ftp.foo3.com
 +
 +#
 +<​VirtualHost 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
 +
 +<​Anonymous /​web/​farrukh2/​ftp_root>​
 +        User                    ftp
 +        Group                   ftp
 +        UserAlias ​              ​anonymous ftp
 +        RequireValidShell ​      no
 +        MaxClients ​             20
 +
 + <​Directory pub/​incoming/​*>​
 + <Limit STOR>
 + AllowAll
 + </​Limit>​
 + <Limit WRITE DIRS READ>
 + DenyAll
 + </​Limit>​
 + <Limit CWD XCWD CDUP>
 + AllowAll
 + </​Limit>​
 + </​Directory>​
 +
 +
 + <​Directory pub/​Incoming/​*>​
 + <Limit STOR>
 + AllowAll
 + </​Limit>​
 + <Limit WRITE DIRS READ>
 + DenyAll
 + </​Limit>​
 + <Limit CWD XCWD CDUP>
 + AllowAll
 + </​Limit>​
 + </​Directory>​
 + #
 + # block access to the secure areas by anon...
 + #
 + <​Directory fpub>
 + <Limit ALL>
 + DenyAll
 + </​Limit>​
 + </​Directory>​
 +
 + <​Directory fgroup>
 + <Limit ALL>
 + DenyAll
 + </​Limit>​
 + </​Directory>​
 + <Limit WRITE>
 + DenyAll
 + </​Limit>​
 +</​Anonymous>​
 +
 + #
 + # define user based access
 + #
 + <​Directory /​web/​farrukh2/​ftp_root/​fpub>​
 + <Limit ALL>
 + AllowUser farrukh
 + AllowUser fguest
 + DenyAll
 + </​Limit>​
 + </​Directory>​
 +
 + <​Directory /​web/​farrukh2/​ftp_root/​fgroup>​
 + <Limit ALL>
 + AllowUser farrukh
 + AllowUser fgroup
 + DenyAll
 + </​Limit>​
 + </​Directory>​
 +</​VirtualHost>​
 +
 +
 +# ----------------------------------------------------
 +# ftp.foo4.com ​
 +# anon, with incoming upload ​
 +#
 +<​VirtualHost ftp.foo4.com>​
 +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
 +
 +<​Anonymous /​ftp/​ftp.foo4.com>​
 +        User                    ftp
 +        Group                   ftp
 +        UserAlias ​              ​anonymous ftp
 +        RequireValidShell ​      no
 +        MaxClients ​             20
 +
 + <​Directory pub/​incoming/​*>​
 + <Limit STOR>
 + AllowAll
 + </​Limit>​
 + <Limit WRITE DIRS READ>
 + DenyAll
 + </​Limit>​
 + <Limit CWD XCWD CDUP>
 + AllowAll
 + </​Limit>​
 + </​Directory>​
 +
 +
 + <​Directory pub/​Incoming/​*>​
 + <Limit STOR>
 + AllowAll
 + </​Limit>​
 + <Limit WRITE DIRS READ>
 + DenyAll
 + </​Limit>​
 + <Limit CWD XCWD CDUP>
 + AllowAll
 + </​Limit>​
 + </​Directory>​
 +
 + <Limit WRITE>
 + DenyAll
 + </​Limit>​
 +</​Anonymous>​
 +</​VirtualHost>​
 +
 +# ----------------------------------------------------
 +# The end.... ​
 +# ----------------------------------------------------
 +</​code>​
 +++++
 +
 +===== - Fichier /​etc/​proftpd/​proftpd.conf =====
 +  * **Fichier Proftpd.conf exemple**
 +++++ Proftpd.conf |
 +<code - 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
 +<​IfModule mod_dynmasq.c>​
 +# DynMasqRefresh 28800
 +</​IfModule>​
 +#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 <​Anonymous>​),​ it will use the non-daylight
 +# savings timezone regardless of whether DST is in effect.
 +#SetEnv TZ :/​etc/​localtime
 +<​IfModule mod_quotatab.c>​
 +QuotaEngine off
 +</​IfModule>​
 +<​IfModule mod_ratio.c>​Ratios off
 +</​IfModule>​
 +# Delay engine reduces impact of the so-called Timing Attack described in
 +# http://​www.securityfocus.com/​bid/​11430/​discuss
 +# It is on by default.
 +<​IfModule mod_delay.c>​
 +DelayEngine on
 +</​IfModule>​
 +<​IfModule mod_ctrls.c>​
 +ControlsEngine
 +off
 +ControlsMaxClients 2
 +ControlsLog
 +/​var/​log/​proftpd/​controls.log
 +ControlsInterval
 +5
 +ControlsSocket
 +/​var/​run/​proftpd/​proftpd.sock
 +</​IfModule>​
 +<​IfModule mod_ctrls_admin.c>​
 +AdminControlsEngine off
 +</​IfModule>​
 +#
 +# 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,
 +# <​Anonymous ~ftp>
 +# 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
 +# <​Directory *># <Limit WRITE>
 +#
 +DenyAll
 +# </​Limit>​
 +# </​Directory>​
 +#
 +# # Uncomment this if you're brave.
 +# # <​Directory incoming>​
 +# # # Umask 022 is a good standard umask to prevent new files and dirs
 +# # # (second parm) from being group and world writable.
 +# # Umask
 +022 022
 +# #
 +<Limit READ WRITE>
 +# #
 +DenyAll
 +# #
 +</​Limit>​
 +# #
 +<Limit STOR>
 +# #
 +AllowAll
 +# #
 +</​Limit>​
 +# # </​Directory>​
 +#
 +# </​Anonymous>​
 +Partie SSL/TLS
 +<​IfModule mod_tls.c>​
 +# 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
 +</​IfModule>​
 +# Include other custom configuration files
 +Include /​etc/​proftpd/​conf.d/​
 +</​code>​
 +++++
 +
 +++++ Modèle de fichier proftpd.conf |
 +<code - 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
 +<​IfModule mod_dynmasq.c>​
 +# DynMasqRefresh 28800
 +</​IfModule>​
 +#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 <​Anonymous>​),​ it will use the non-daylight
 +# savings timezone regardless of whether DST is in effect.
 +#SetEnv TZ :/​etc/​localtime
 +<​IfModule mod_quotatab.c>​
 +QuotaEngine off
 +</​IfModule>​
 +<​IfModule mod_ratio.c>​Ratios off
 +</​IfModule>​
 +# Delay engine reduces impact of the so-called Timing Attack described in
 +# http://​www.securityfocus.com/​bid/​11430/​discuss
 +# It is on by default.
 +<​IfModule mod_delay.c>​
 +DelayEngine on
 +</​IfModule>​
 +<​IfModule mod_ctrls.c>​
 +ControlsEngine
 +off
 +ControlsMaxClients 2
 +ControlsLog
 +/​var/​log/​proftpd/​controls.log
 +ControlsInterval
 +5
 +ControlsSocket
 +/​var/​run/​proftpd/​proftpd.sock
 +</​IfModule>​
 +<​IfModule mod_ctrls_admin.c>​
 +AdminControlsEngine off
 +</​IfModule>​
 +#
 +# 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,
 +# <​Anonymous ~ftp>
 +# 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
 +# <​Directory *># <Limit WRITE>
 +#
 +DenyAll
 +# </​Limit>​
 +# </​Directory>​
 +#
 +# # Uncomment this if you're brave.
 +# # <​Directory incoming>​
 +# # # Umask 022 is a good standard umask to prevent new files and dirs
 +# # # (second parm) from being group and world writable.
 +# # Umask
 +022 022
 +# #
 +<Limit READ WRITE>
 +# #
 +DenyAll
 +# #
 +</​Limit>​
 +# #
 +<Limit STOR>
 +# #
 +AllowAll
 +# #
 +</​Limit>​
 +# # </​Directory>​
 +#
 +# </​Anonymous>​
 +Partie SSL/TLS
 +<​IfModule mod_tls.c>​
 +# 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
 +</​IfModule>​
 +# Include other custom configuration files
 +Include /​etc/​proftpd/​conf.d/​
 +</​code>​
 +++++
 +
 +++++ Autre exemple |
 +<code - proftpd.conf>​
 +# 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
 +<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>​
 +</​code>​
 +++++
 +====== - Utilisation ======
 +
 +====== - Désinstallation ======
 +
 +====== - Voir aussi ======
 +
 +  * **(fr)** [[http://​arobaseinformatique.eklablog.com/​mise-en-place-d-un-serveur-ftp-avec-proftpd-a105781016]]
 +  * **(fr)** [[http://]]
 +
 +----
 +//Basé sur << [[http://​|Article]] >> par Auteur.//

Navigation