327 lines
8.7 KiB
Markdown
327 lines
8.7 KiB
Markdown
---
|
|
categories: web
|
|
title: Howto ProFTPD
|
|
...
|
|
|
|
* Documentation : <http://www.proftpd.org/docs/>
|
|
|
|
[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
|
|
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
|
|
~~~
|
|
|
|
### Configuration par VirtualHost
|
|
|
|
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 que dans apache, exemple d'une configuration classique, mais avec un port d'écoute différent :
|
|
|
|
~~~
|
|
<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>
|
|
~~~
|
|
|
|
Dans la balise VirtualHost on peut mettre soit une ip, soit un nom de domaine.
|
|
|
|
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.
|
|
|
|
On peut utiliser les VirtualHost pour faire du SFTP et du FTP classique, sur deux ports différents.
|
|
|
|
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)
|
|
|
|
## 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 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/sftp/authorized_keys/%u
|
|
|
|
SFTPCompression delayed
|
|
</IfModule>
|
|
~~~
|
|
|
|
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
|
|
|
|
RequireValidShell off
|
|
|
|
</IfModule>
|
|
~~~
|
|
|
|
Note: Il faudra sans doute mettre en place un VirtualHost car proftpd écoute sur un port en plus.
|
|
|
|
On peut soit se connecter avec le mot de passe du compte virtuel, soit ajouté une clé ssh dans /etc/proftpd/sftp.passwd.keys/
|
|
|
|
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
|
|
~~~
|
|
|
|
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.
|
|
|
|
## Logs
|
|
|
|
[fichier xferlog](http://www.castaglia.org/proftpd/doc/xferlog.html) |