--- categories: web title: Howto ProFTPD ... * Documentation : [ProFTPD](http://www.proftpd.org/) est un serveur [FTP](https://fr.wikipedia.org/wiki/File_Transfer_Protocol) 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 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 AllowUser foo AllowGroup ftpusers DenyAll ~~~ 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) : ~~~ Umask 022 ~~~ ## 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 : ~~~ QuotaEngine on QuotaLimitTable file:/etc/proftpd/ftpquota.limittab QuotaTallyTable file:/etc/proftpd/ftpquota.tallytab ~~~ 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 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 TLSVerifyClient on TLSRequired off TLSRenegotiate required off TLSOptions NoSessionReuseRequired ~~~ ## SFTP On peut configurer FTP over SSH ainsi : ~~~ LoadModule mod_tls.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 ~~~ ## Logs [fichier xferlog](http://www.castaglia.org/proftpd/doc/xferlog.html)