wiki/HowtoProFTPD.md

349 lines
9.6 KiB
Markdown
Raw Normal View History

2017-04-21 16:03:52 +02:00
---
categories: web
title: Howto ProFTPD
...
2016-12-29 11:25:39 +01:00
2017-04-21 16:03:52 +02:00
* Documentation : <http://www.proftpd.org/docs/>
2017-05-02 22:04:56 +02:00
[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).
2016-12-29 11:25:39 +01:00
## Installation
~~~
2017-04-21 16:03:52 +02:00
# apt install proftpd
2018-11-06 02:10:55 +01:00
# proftpd -v
ProFTPD Version 1.3.5b
# systemctl status proftpd
● proftpd.service - LSB: Starts ProFTPD daemon
Loaded: loaded (/etc/init.d/proftpd; generated; vendor preset: enabled)
Docs: man:systemd-sysv-generator(8)
Process: 28249 ExecStop=/etc/init.d/proftpd stop (code=exited, status=0/SUCCESS)
Process: 22916 ExecReload=/etc/init.d/proftpd reload (code=exited, status=0/SUCCESS)
Process: 28259 ExecStart=/etc/init.d/proftpd start (code=exited, status=0/SUCCESS)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/proftpd.service
└─28267 proftpd: (accepting connections)
2016-12-29 11:25:39 +01:00
~~~
## Configuration
2017-04-21 16:03:52 +02:00
Le fichier de configuration principal est `/etc/proftpd/proftpd.conf`, voici les directives que nous conseillons de changer en général :
2016-12-29 11:25:39 +01:00
~~~
2017-04-21 16:03:52 +02:00
ServerName "Foo FTP Server"
PassivePorts 60000 61000
MaxInstances 50
MaxClients 40
MaxClientsPerHost 20
Umask 137 027
2016-12-29 11:25:39 +01:00
UseReverseDNS off
2017-04-21 16:03:52 +02:00
IdentLookups off
2017-08-17 14:50:22 +02:00
TimesGMT off
2017-04-21 16:03:52 +02:00
DefaultRoot ~
RequireValidShell off
UseFtpUsers off
ServerIdent on "FTP Server Ready"
AccessGrantMsg "Hey, bienvenue %u sur le serveur FTP example.com !"
2016-12-29 11:25:39 +01:00
# Allow RESUME (REST command)
AllowStoreRestart on
<Limit LOGIN>
AllowUser foo
AllowGroup ftpusers
DenyAll
</Limit>
~~~
2017-04-21 16:03:52 +02:00
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
~~~
2016-12-29 11:25:39 +01:00
2017-11-10 14:39:05 +01:00
### Configuration par VirtualHost
2018-11-06 02:10:55 +01:00
Dans un fichier de configuration de ProFTPD, on peut isoler certaine configuration par VirtualHost, la balise `<VirtualHost>` s'utilise de la même façon qu'avec [Apache](HowtoApache). Voici un exemple d'une configuration classique, mais avec un port d'écoute différent :
2017-11-10 14:39:05 +01:00
~~~
<VirtualHost 192.168.1.8>
ServerName "FTP Server"
ServerIdent on "FTP Server Ready"
AccessGrantMsg "Hey, bienvenue %u sur le serveur FTP !"
SFTPEngine on
Port 8887
DefaultRoot ~
PassivePorts 60000 61000
UseReverseDNS off
IdentLookups off
TimesGMT off
# Local permissions
DefaultRoot ~
Umask 137 027
RequireValidShell off
UseFtpUsers off
# Allow RESUME (REST command)
AllowStoreRestart on
</VirtualHost>
~~~
2018-11-06 02:10:55 +01:00
Dans la balise VirtualHost on peut mettre soit une adresse IP, soit un nom de domaine.
2017-11-10 14:39:05 +01:00
2018-11-06 02:10:55 +01:00
Cela permet notamment de faire écouter ProFTPD sur 2 ports différents en même temps, dans ce cas-là, la configuration par défaut écoute sur le port 21, et la configuration dans le VirtualHost écoute sur le port 8887.
2017-11-10 14:39:05 +01:00
2018-11-06 02:10:55 +01:00
On peut aussi utiliser les VirtualHost pour faire du SFTP et du FTP classique, sur deux ports différents.
2017-11-10 14:39:05 +01:00
2018-11-06 02:10:55 +01:00
Il y a plusieurs types d'autres options dans les virtalhost de ProFTPD, comme notamment les alias, on peut voir tout ce qu'on peut faire dans la doc [ProFTPD Virtual Servers](http://www.proftpd.org/docs/howto/Vhost.html)
2016-12-29 11:25:39 +01:00
2017-04-21 16:03:52 +02:00
## 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_ :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
2017-04-21 16:03:52 +02:00
AuthOrder mod_auth_file.c
AuthUserFile /etc/proftpd/vpasswd
2016-12-29 11:25:39 +01:00
~~~
2017-04-21 16:03:52 +02:00
On peut alors ajouter un compte FTP avec la commande suivante :
2016-12-29 11:25:39 +01:00
~~~
2017-04-21 16:03:52 +02:00
# ftpasswd --file=/etc/proftpd/vpasswd --name=foo --home=/home/example/foo --shell=/bin/false --uid=1664 --gid=1664 --passwd
2016-12-29 11:25:39 +01:00
~~~
2017-04-21 16:03:52 +02:00
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éé.
2016-12-29 11:25:39 +01:00
Pour modifier le mot de passe d'un compte existant :
~~~
# ftpasswd --file /etc/proftpd/vpasswd --name=FTP_user --change-password --passwd
~~~
2017-04-21 16:03:52 +02:00
## Divers
2016-12-29 11:25:39 +01:00
Pour limiter les uploads de fichiers de taille supérieure à 50 Mo :
~~~
MaxStoreFileSize 50 Mb
~~~
2017-04-21 16:03:52 +02:00
Pour changer les droits par défaut (umask) :
2016-12-29 11:25:39 +01:00
~~~
<Directory /path/to/dir>
Umask 022
</Directory>
~~~
2017-04-21 16:03:52 +02:00
2016-12-29 11:25:39 +01:00
## 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
~~~
2017-04-21 16:03:52 +02:00
On peut lister les données de quota sur le serveur ainsi :
2016-12-29 11:25:39 +01:00
~~~
# 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
~~~
2017-04-21 16:03:52 +02:00
Enfin, on peut réinitialiser un compteur (tous les jours par exemple) :
2016-12-29 11:25:39 +01:00
~~~
# 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
~~~
2017-04-21 16:03:52 +02:00
## FTPS
On peut configurer FTP over SSL/TLS ainsi :
~~~
LoadModule mod_tls.c
<IfModule mod_tls.c>
TLSEngine on
2018-07-04 17:26:18 +02:00
TLSLog /var/log/proftpd/ftps.log
2017-04-21 16:03:52 +02:00
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
2018-07-04 17:26:18 +02:00
TLSOptions NoSessionReuseRequired
RequireValidShell off
Port 990
AuthUserFile /etc/proftpd/vpasswd
2018-07-19 10:09:39 +02:00
DefaultRoot ~
2018-07-04 17:26:18 +02:00
PassivePorts 61000 62000
2017-04-21 16:03:52 +02:00
</IfModule>
~~~
2017-04-21 16:04:16 +02:00
## SFTP
2017-04-21 16:03:52 +02:00
On peut configurer FTP over SSH ainsi :
~~~
LoadModule mod_tls.c
<IfModule mod_sftp.c>
SFTPEngine on
2018-01-24 11:24:38 +01:00
Port 2222
2017-04-21 16:03:52 +02:00
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>
~~~
2017-11-09 16:31:18 +01:00
Si on veut faire du SFTP over SSH avec les comptes virtuels, on crée une configuration comme celle-ci dans */etc/proftpd/conf.d/sftp.conf* :
~~~
LoadModule mod_tls.c
<IfModule mod_sftp.c>
SFTPEngine on
Port 2222
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/proftpd/sftp.passwd.keys/%u
AuthUserFile /etc/proftpd/vpasswd
2018-01-24 11:24:38 +01:00
RequireValidShell off
2017-11-09 16:31:18 +01:00
</IfModule>
~~~
2018-03-14 11:58:54 +01:00
Note: Il faudra sans doute mettre en place un VirtualHost car proftpd écoute sur un port en plus.
2017-11-09 16:31:18 +01:00
On peut soit se connecter avec le mot de passe du compte virtuel, soit ajouté une clé ssh dans /etc/proftpd/sftp.passwd.keys/
2018-01-24 11:24:38 +01:00
Il faut créé le compte sftp avec la commande classique :
~~~
# ftpasswd --file=/etc/proftpd/vpasswd --name=foo --home=/home/example/foo --shell=/bin/false --uid=1664 --gid=1664 --passwd
~~~
2018-02-22 15:56:37 +01:00
Il faut vérifier que le dossier racine possède les bons droits (775), sinon il y a une erreur d'authentification dans les logs proftpd.
2017-11-09 16:31:18 +01:00
2017-05-15 16:09:16 +02:00
## Logs
2018-11-06 02:10:55 +01:00
[fichier xferlog](http://www.castaglia.org/proftpd/doc/xferlog.html)