Login Logout

Howto ProFTPD

ProFTPD est un serveur FTP libre. Il est particulièrement configurable grâce à des modules. Il permet notamment de facilement restreindre un compte dans un répertoire donné (chroot) ou d’utiliser les protocoles FTPS (FTP over SSL/TLS) et SFTP/SCP (issus de SSH).

Installation

# apt install proftpd

Configuration

Le fichier de configuration principal est /etc/proftpd/proftpd.conf, voici les directives que nous conseillons de changer en général :

ServerName    "Foo FTP Server"
PassivePorts  60000 61000
MaxInstances  50
MaxClients    40
MaxClientsPerHost 20
Umask         137  027
UseReverseDNS off
IdentLookups  off
TimesGMT      off
DefaultRoot   ~
RequireValidShell off
UseFtpUsers   off
ServerIdent   on "FTP Server Ready"
AccessGrantMsg    "Hey, bienvenue %u sur le serveur FTP example.com !"
# Allow RESUME (REST command)
AllowStoreRestart on

<Limit LOGIN>
        AllowUser foo
        AllowGroup ftpusers
        DenyAll
</Limit>

Avec cette configuration proposée, un utilisateur doit être dans le groupe ftpusers (à créer) pour pouvoir utiliser le FTP.

Si l’IPv6 n’est pas fonctionnel sur votre serveur :

UseIPv6       off

Comptes virtuels

ProFTPD peut utiliser des comptes Unix ou des comptes virtuels définis dans SQL/LDAP ou simplement un fichier.

On détaille ici l’utilisation de comptes avec un simple fichier /etc/proftpd/vpasswd.

Il faut ajouter dans /etc/proftpd/proftpd.conf :

AuthOrder       mod_auth_file.c
AuthUserFile    /etc/proftpd/vpasswd

On peut alors ajouter un compte FTP avec la commande suivante :

# ftpasswd --file=/etc/proftpd/vpasswd --name=foo --home=/home/example/foo --shell=/bin/false --uid=1664 --gid=1664 --passwd

Si l’on veut que le compte FTP soit une sorte de sous-compte d’un compte existant restreint dans un répertoire, il faut préciser les UID et GID du compte UNIX propriétaire du répertoire dans lequel est le $HOME du compte virtuel créé.

Pour modifier le mot de passe d’un compte existant :

# ftpasswd --file /etc/proftpd/vpasswd --name=FTP_user --change-password --passwd

Divers

Pour limiter les uploads de fichiers de taille supérieure à 50 Mo :

MaxStoreFileSize 50 Mb

Pour changer les droits par défaut (umask) :

<Directory /path/to/dir>
   Umask 022
</Directory>

Quota

Pour activer les quotas spécifiquement à ProFTPD avec gestion via fichiers :

# cd /etc/proftpd
# ftpquota --create-table --type=limit
# ftpquota --create-table --type=tally

Puis ajouter dans la configuration :

<IfModule mod_quotatab.c>
QuotaEngine on
QuotaLimitTable file:/etc/proftpd/ftpquota.limittab
QuotaTallyTable file:/etc/proftpd/ftpquota.tallytab
</IfModule>

On peut ensuite positionner des quotas, par exemple pour limiter les données uploadées à 200 Go :

# ftpquota --add-record --type=limit --bytes-upload=200 --units=Gb --name=foo --quota-type=user

Imaginons que vous positionnez le quota alors que l’utilisateur a déjà 170 Go, vous devez mettre à jour son compteur :

# ftpquota --update-record --type=tally --bytes-upload=170 --units=Gb --name=foo --quota-type=user

On peut lister les données de quota sur le serveur ainsi :

# ftpquota --show-records --type=tally
-------------------------------------------
  Name: foo
  Quota Type: User
    Uploaded bytes:     182536110080.00
    Downloaded bytes:   0.00
    Transferred bytes:  0.00
    Uploaded files:     0
    Downloaded files:   0
    Transferred files:  0

#   ftpquota --show-records --type=limit
-------------------------------------------
  Name: foo
  Quota Type: User
  Per Session: False
  Limit Type: Hard
    Uploaded bytes:     214748364800.00
    Downloaded bytes:   unlimited
    Transferred bytes:  unlimited
    Uploaded files:     unlimited
    Downloaded files:   unlimited
    Transferred files:  unlimited

Via FTP, vous pourrez voir les données de quota ainsi :

ftp> quote SITE QUOTA
200-Quota pour la session actuelle [courant / limite]:
200-Nom: foo
200-Type quota: Utilisateur
200-Par session : Faux
200-Type de limite : matérielle
200-  bytes:    182536110080.00/193273528320.00 envoyés
200-  bytes:    unlimited reçus
200-  bytes:    unlimited téléchargés
200-  files:    unlimited envoyés
200-  files:    unlimited reçus
200-  files:    unlimited téléchargés
200 Veuillez contacter ftpmaster@example.com si ces données sont inexactes

Enfin, on peut réinitialiser un compteur (tous les jours par exemple) :

# ftpquota --update-record --type=tally --name=foo --quota-type=user

Ou même effacer toutes les données de quota d’un utilisateur :

# ftpquota --delete-record --type=limit --name=foo --quota-type=user
# ftpquota --delete-record --type=tally --name=foo --quota-type=user

FTPS

On peut configurer FTP over SSL/TLS ainsi :

LoadModule mod_tls.c

<IfModule mod_tls.c>
TLSEngine                               on
TLSLog                                  /var/log/proftpd/tls.log
TLSProtocol                             TLSv1

TLSRSACertificateFile                   /etc/ssl/certs/ftp.example.com.crt
TLSRSACertificateKeyFile                /etc/ssl/private/ftp.example.com.key
TLSCACertificateFile                    /etc/ssl/certs/ftp.example.com_ca.pem

#TLSOptions                             AllowClientRenegotiations

TLSOptions                              AllowPerUser
TLSVerifyClient                         off
<IfUser ecorner>
TLSVerifyClient                         on
</IfUser>

TLSRequired                             off

TLSRenegotiate                          required off
TLSOptions NoSessionReuseRequired
</IfModule>

SFTP

On peut configurer FTP over SSH ainsi :

LoadModule mod_tls.c

<IfModule mod_sftp.c>
SFTPEngine   on
Port         222
DefaultRoot  ~

SFTPLog      /var/log/proftpd/sftp.log

SFTPAuthMethods password publickey
SFTPHostKey /etc/ssh/ssh_host_dsa_key
SFTPHostKey /etc/ssh/ssh_host_ecdsa_key
SFTPHostKey /etc/ssh/ssh_host_rsa_key

SFTPAuthorizedUserKeys  file:/etc/sftp/authorized_keys/%u

SFTPCompression delayed
</IfModule>

Logs

fichier xferlog