Revue de la page + ajout d'une section suppression de compte

This commit is contained in:
whirigoyen 2021-10-15 17:04:05 +02:00
parent 18b65362d8
commit 1d7256396b

View file

@ -5,12 +5,14 @@ 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).
[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 (FTP over SSH).
## Installation
~~~
~~~{bash}
# apt install proftpd
# proftpd -v
@ -28,9 +30,16 @@ ProFTPD Version 1.3.5b
└─28267 proftpd: (accepting connections)
~~~
## Configuration
Le fichier de configuration principal est `/etc/proftpd/proftpd.conf`, voici les directives que nous conseillons de changer en général :
### Configuration simple
Le fichier de configuration principal est `/etc/proftpd/proftpd.conf`.
Vous pouvez aussi ajouter des fichiers `.conf` pour customiser la configuration dans `/etc/proftpd/conf.d`, qui sont inclus à la fin de `/etc/proftpd/proftpd.conf` et permettent d'écraser les directives générales.
Voici les directives que nous conseillons de changer :
~~~
ServerName "Foo FTP Server"
@ -51,13 +60,13 @@ AccessGrantMsg "Hey, bienvenue %u sur le serveur FTP example.com !"
AllowStoreRestart on
<Limit LOGIN>
AllowUser foo
AllowGroup ftpusers
DenyAll
AllowUser $ftp_user
AllowGroup $ftp_group
DenyAll
</Limit>
~~~
Avec cette configuration proposée, un utilisateur doit être dans le groupe `ftpusers` (à créer) pour pouvoir utiliser le FTP.
Dans cette configuration, un utilisateur doit être dans le groupe `$ftp_group` (à créer) pour utiliser le FTP.
Si l'IPv6 n'est pas fonctionnel sur votre serveur :
@ -65,53 +74,58 @@ 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 qu'avec [Apache](HowtoApache). Voici un exemple d'une configuration classique, mais avec un port d'écoute différent :
### Configuration dans différents VirtualHost
D'une manière similaire à [Apache](HowtoApache), on peut isoler des configurations FTP dans différents VirtualHost.
Cela permet notamment de faire écouter ProFTPD sur 2 ports différents en même temps.
Ainsi, on peut mettre en place à la fois un FTP classique et un SFTP.
Par exemple, on laisse la configuration par défaut écouter sur le port 21, et on fait écouter un VirtualHost sur le port 8887.
Note : La balise `VirtualHost` accepte les adresses IP et les noms de domaine.
Voici un exemple de configuration classique qui écoute sur un port différent dans un VirtualHost :
~~~
# vim /etc/proftpd/conf.d/my_vhost.conf
<VirtualHost 192.168.1.8>
ServerName "FTP Server"
ServerIdent on "FTP Server Ready"
AccessGrantMsg "Hey, bienvenue %u sur le serveur FTP !"
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
SFTPEngine on
Port 8887
DefaultRoot ~
PassivePorts 60000 61000
UseReverseDNS off
IdentLookups off
TimesGMT off
# Local permissions
DefaultRoot ~
Umask 137 027
RequireValidShell off
UseFtpUsers off
# Local permissions
DefaultRoot ~
Umask 137 027
RequireValidShell off
UseFtpUsers off
# Allow RESUME (REST command)
AllowStoreRestart on
# Allow RESUME (REST command)
AllowStoreRestart on
</VirtualHost>
~~~
Dans la balise VirtualHost on peut mettre soit une adresse 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 aussi 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)
Si l'on veux faire écouter deux VirtualHost sur deux IPs différentes (publique ou LAN) mais sur le même port, il faut utilisé ces options avant la directive `<VirtualHost>` :
Si l'on veux faire écouter deux VirtualHost sur deux IPs différentes (publique ou LAN), mais sur le même port, il faut utiliser ces options avant la directive `<VirtualHost>` :
~~~
Port 0
SocketBindTight on
~~~
Cela va forcer à utiliser l'ip configuré dans la directive `<VirtualHost>` avec le port indiquer dans celui-ci, exemple avec une configuration SFTP :
Cela va forcer à utiliser l'IP configurée dans la directive `<VirtualHost>` avec le port indiqué dans celui-ci. Exemple avec une configuration SFTP :
~~~
Port 0
@ -119,113 +133,167 @@ SocketBindTight on
<VirtualHost 192.168.199.27>
<IfModule mod_sftp.c>
<IfModule mod_sftp.c>
SFTPEngine on
Port 22
DefaultRoot ~
RequireValidShell off
SFTPEngine on
Port 22
DefaultRoot ~
RequireValidShell off
AuthUserFile /etc/proftpd/vpasswd
</IfModule>
AuthUserFile /etc/proftpd/vpasswd
</IfModule>
</VirtualHost>
~~~
## Comptes virtuels
Les VirtualHosts ont de nombreuses autres fonctionnalités, comme les Alias par exemple.
ProFTPD peut utiliser des comptes Unix ou des comptes virtuels définis dans SQL/LDAP ou simplement un fichier.
Voir la documentation : <http://www.proftpd.org/docs/howto/Vhost.html>.
On détaille ici l'utilisation de comptes avec un simple fichier `/etc/proftpd/vpasswd`.
Il faut ajouter dans _/etc/proftpd/proftpd.conf_ :
## Gestion des utilisateurs
ProFTPD permet l'authentification via les comptes Unix, un fichier de configuration simple, PAM, une base de données SQL, LDAP.
Les comptes ont les mêmes attributs qu'un compte Unix : username, password, uid, gid, gecos, homedir, shell.
Lorsqu'un compte FTP utilise un UID et un GID non définis dans `/etc/passwd`, il est dit "virtuel".
On détaille ici l'utilisation de comptes définis dans un 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 :
**Attention:** Le fichier `/etc/proftpd/vpasswd` doit avoir les droits en 600, sinon ProFTPD refuse de se lancer.
~~~
# ftpasswd --file=/etc/proftpd/vpasswd --name=foo --home=/home/example/foo --shell=/bin/false --uid=1664 --gid=1664 --passwd
La gestion des comptes se fait ensuite via le script Perl `ftpasswd` inclu avec ProFTPD.
Documentation :
* <http://www.proftpd.org/docs/howto/Authentication.html>
* <http://www.proftpd.org/docs/howto/VirtualUsers.html>
### Ajouter un compte
#### Avec un répertoire racine existant, appartenant déjà à un utilisateur Unix
Dans ce cas, les `$ftp_uid` et `$ftp_gid` doivent être ceux du compte Unix propriétaire du répertoire :
~~~{bash}
# ftp_home=... # répertoire racine du compte FTP
# ftp_uid=... # UID du compte FTP
# ftp_gid=... # GID du compte FTP
# ftp_user=... # nom du futur utilisateur FTP
# ftpasswd --file=/etc/proftpd/vpasswd --name=$ftp_user --home=$ftp_home --shell=/bin/false --uid=$ftp_uid --gid=$ftp_gid --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éé.
#### Avec un nouveau répertoire racine, dédié à l'utilisateur FTP
### Modifier mot de passe
Dans ce cas, on choisit des `$ftp_uid` et `$ftp_gid` qui ne sont pas utilisés dans `/etc/passwd`.
Pour modifier le mot de passe d'un compte existant :
Puis, on crée le répertoire racine, possédé par les numéros `$ftp_uid` et `$ftp_gid` de l'utilisateur FTP, **et pas leur nom d'utilisateur** (que Unix ne reconnaît pas, car l'utilisateur n'est pas dans `/etc/passwd`).
~~~
# ftpasswd --file /etc/proftpd/vpasswd --name=FTP_user --change-password --passwd
~~~{bash}
# ftp_home=... # répertoire racine du compte FTP
# ftp_uid=... # UID du compte FTP
# ftp_gid=... # GID du compte FTP
# mkdir $ftp_home
# chown $ftp_uid:$ftp_gid -R $ftp_home
# ftp_user=... # nom du futur utilisateur FTP
# ftpasswd --passwd --file=/etc/proftpd/vpasswd --name=$ftp_user --home=$ftp_home --shell=/bin/false --uid=$ftp_uid --gid=$ftp_gid
~~~
Attention: il faut que le fichier `/etc/proftpd/vpasswd` ne soit pas lisible par `other`. ProFTPD refusera de démarrer si ce nest pas le cas.
### Directive Limit
### Changer le mot de passe
Voir <http://www.proftpd.org/docs/howto/Limit.html>
Pour changer le mot de passe d'un compte :
~~~{bash}
# apg -n 1 -m 12
# ftp_user=... # à compléter
# ftpasswd --passwd --file /etc/proftpd/vpasswd --name=$ftp_user --change-password
~~~
### Supprimer un compte
~~~{bash}
# ftp_user=... # à compléter
# ftpasswd --passwd --file=/etc/proftpd/vpasswd --name=ftp_user --delete-user
~~~
### Directive `Limit`
Documentation : <http://www.proftpd.org/docs/howto/Limit.html>
La directive `Limit` permet d'autoriser ou empêcher l'exécution de commande FTP bas niveau.
C'est puissant et dangereux, car on pourrait croire que l'on empêche la lecture d'un fichier, mais il faut avoir en tête qu'il existe plusieurs commandes FTP pour faire cela. Il existe des groupes de commandes : LOGIN, DIRS, READ, WRITE et enfin ALL (tout sauf LOGIN).
**Attention :** C'est puissant et dangereux, car on pourrait croire que l'on empêche la lecture d'un fichier, mais il faut avoir en tête qu'il existe plusieurs commandes FTP pour faire cela. Il existe des groupes de commandes : LOGIN, DIRS, READ, WRITE et enfin ALL (tout sauf LOGIN).
Voici un exemple d'utilisation pour empêcher toutes opérations sauf dans un répertoire :
~~~
<Directory *>
<Limit ALL>
DenyAll
</Limit>
<Limit ALL>
DenyAll
</Limit>
</Directory>
<Directory foo>
<Limit ALL>
AllowAll
</Limit>
<Directory $path>
<Limit ALL>
AllowAll
</Limit>
</Directory>
~~~
ou encore autoriser **uniquement** le dépôt de fichiers dans un répertoire :
Ou encore autoriser **uniquement** le dépôt de fichiers dans un répertoire :
~~~
<Directory foo>
<Limit ALL>
DenyAll
</Limit>
<Limit CDUP CWD XCWD XCUP PWD STOR STOU>
AllowAll
</Limit>
<Directory $path>
<Limit ALL>
DenyAll
</Limit>
<Limit CDUP CWD XCWD XCUP PWD STOR STOU>
AllowAll
</Limit>
</Directory>
~~~
Pour avoir un utilisateur Read-Only chrooter dans un répertoire :
Pour avoir un utilisateur en lecture seule, confiné dans son `$ftp_home` :
~~~
<Directory ~user>
<Directory ~$ftp_user>
<Limit CWD PWD DIRS READ>
AllowUser user
AllowUser $ftp_user
</Limit>
<Limit ALL>
DenyUser user
DenyUser $ftp_user
</Limit>
</Directory>
~~~
Blacklisté les connexions depuis une ip ou hôte, mais en autorisant seulement certains comptes :
Pour blacklister les connexions depuis une IP ou un hôte, mais en autorisant seulement certains comptes :
~~~
<Limit LOGIN>
Deny from 1.2.3.4
AllowUser foo
AllowUser bar
Deny from $IP
AllowUser $ftp_user1
AllowUser $ftp_user2
</Limit>
~~~
Cette configuration refuse toutes les connexions au serveur depuis l'ip 1.2.3.4, mais accepte les connexions aux utilisateur foo et bar, mais refuse pour tous les autres utilisateurs.
Cette configuration refuse toutes les connexions au serveur depuis l'IP $IP, mais accepte les connexions aux utilisateur $ftp_user1 et $ftp_user2, à l'exception de tous les autres utilisateurs.
**Attention :** Dans ce dernier cas, s'il y a plusieurs blocs / directives LOGIN dans la configuration ou le VirtualHost, il faut autoriser les utilisateurs dans toutes ces directives, sinon l'accès sera refusé tout le temps.
Attention, si il y a plusieurs blocs / directives LOGIN dans la configuration / virtualhost, il faut autorisé les utilisateurs dans toutes ces directives, sinon l'accès sera refusée tout le temps.
## Divers
@ -235,16 +303,16 @@ Pour limiter les uploads de fichiers de taille supérieure à 50 Mo :
MaxStoreFileSize 50 Mb
~~~
Forcer les droits 640 en fichier et 750 en dossier avec l'umask:
Forcer les droits 640 en fichier et 750 en répertoire avec l'umask:
~~~
<Directory /home/utilisateur/dossier>
Umask 0137 0027
<Directory $ftp_home>
Umask 0137 0027
<Limit SITE_CHMOD>
<Limit SITE_CHMOD>
DenyAll
</Limit>
</Directory>
</Limit>
</Directory>
~~~
@ -252,7 +320,7 @@ Forcer les droits 640 en fichier et 750 en dossier avec l'umask:
Pour activer les quotas spécifiquement à ProFTPD avec gestion via fichiers :
~~~
~~~{bash}
# cd /etc/proftpd
# ftpquota --create-table --type=limit
# ftpquota --create-table --type=tally
@ -262,27 +330,27 @@ Puis ajouter dans la configuration :
~~~
<IfModule mod_quotatab.c>
QuotaEngine on
QuotaLimitTable file:/etc/proftpd/ftpquota.limittab
QuotaTallyTable file:/etc/proftpd/ftpquota.tallytab
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 :
~~~
~~~{bash}
# 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 :
~~~
~~~{bash}
# 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 :
~~~
~~~{bash}
# ftpquota --show-records --type=tally
-------------------------------------------
Name: foo
@ -294,7 +362,7 @@ On peut lister les données de quota sur le serveur ainsi :
Downloaded files: 0
Transferred files: 0
# ftpquota --show-records --type=limit
# ftpquota --show-records --type=limit
-------------------------------------------
Name: foo
Quota Type: User
@ -310,7 +378,7 @@ On peut lister les données de quota sur le serveur ainsi :
Via FTP, vous pourrez voir les données de quota ainsi :
~~~
~~~{bash}
ftp> quote SITE QUOTA
200-Quota pour la session actuelle [courant / limite]:
200-Nom: foo
@ -328,150 +396,172 @@ ftp> quote SITE QUOTA
Enfin, on peut réinitialiser un compteur (tous les jours par exemple) :
~~~
~~~{bash}
# ftpquota --update-record --type=tally --name=foo --quota-type=user
~~~
Ou même effacer toutes les données de quota d'un utilisateur :
~~~
~~~{bash}
# ftpquota --delete-record --type=limit --name=foo --quota-type=user
# ftpquota --delete-record --type=tally --name=foo --quota-type=user
~~~
## FTPS
## FTPS (FTP over SSL/TLS)
On peut activer SSL/TLS en editant le fichier suivant pour y activer ces directives :
On peut activer SSL/TLS en créant un fichier `/etc/proftpd/tls.conf` contenant les directives suivantes :
~~~
~~~{bash}
# vim /etc/proftpd/tls.conf
~~~
~~~
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSProtocol SSLv23
TLSRSACertificateFile /etc/proftpd/ssl/proftpd.crt
TLSCACertificateFile /etc/proftpd/ssl/proftpd.ca.crt
TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key
TLSRSACertificateFile /etc/proftpd/ssl/proftpd.crt
TLSCACertificateFile /etc/proftpd/ssl/proftpd.ca.crt
TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key
~~~
Il y aura besoin de renseigner les bon certificats et clé privé et il faudra vérifier que le fichier est bien chargé par la configuration principale. Sinon ajouter cette directive :
Vérifiez que les certificats et la clé privé existent bien.
~~~
Il faut vérifier que le fichier est bien chargé par la configuration principale `/etc/proftpd/proftpd.conf` :
~~~{bash}
# vim /etc/proftpd/proftpd.conf
~~~
~~~
Include /etc/proftpd/tls.conf
~~~
Recharger le service et vérifiez que ça fonctionne bien :
Testez la configuration et rechargez la configuration :
~~~{bash}
# proftpd -t && systemctl reload proftpd.service
~~~
# systemctl restart proftpd.service
~~~
~~~
$ lftp domaine.com
lftp domaine.com:~> set ftp:ssl-force true
lftp domaine.com:~> login utilisateur
Testez la connexion :
~~~{bash}
# host=... # IP ou domaine
# lftp $host
lftp host:~> set ftp:ssl-force true
lftp host:~> login $ftp_user
Mot de passe :
lftp utilisateur@domaine.com:~> ls
lftp $ftp_user@host:~> ls
~~~
Si l'on peut lire le contenu du dossier, alors c'est fonctionnel.
Si l'on peut lire le contenu du répertoire, alors la connexion est fonctionnelle.
## SFTP
On peut configurer FTP over SSH ainsi :
## SFTP (FTP over SSH)
On peut configurer SFTP avec les directives suivantes :
~~~
LoadModule mod_tls.c
<IfModule mod_sftp.c>
SFTPEngine on
Port 2222
DefaultRoot ~
SFTPEngine on
Port 2222
DefaultRoot ~
SFTPLog /var/log/proftpd/sftp.log
SFTPAuthMethods password publickey
# ProFTPD doesn't support ed25519 yet
#SFTPHostKey /etc/ssh/ssh_host_ed25519_key
SFTPHostKey /etc/ssh/ssh_host_ecdsa_key
SFTPHostKey /etc/ssh/ssh_host_rsa_key
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
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* :
Généralement, on souhaite conserver un service FTP "classique" en parallèle. On met donc cette configuration dans un VirtualHost, pour pouvoir écouter sur un deuxième port.
Par exemple :
~~~
$ vim /etc/proftpd/conf.d/sftp.conf
LoadModule mod_tls.c
<VirtualHost 0.0.0.0>
<IfModule mod_sftp.c>
<IfModule mod_sftp.c>
SFTPEngine on
Port 2222
DefaultRoot ~
SFTPEngine on
Port 2222
DefaultRoot ~
SFTPLog /var/log/proftpd/sftp.log
SFTPLog /var/log/proftpd/sftp.log
SFTPAuthMethods password publickey
# ProFTPD doesn't support ed25519 yet
#SFTPHostKey /etc/ssh/ssh_host_ed25519_key
SFTPHostKey /etc/ssh/ssh_host_ecdsa_key
SFTPHostKey /etc/ssh/ssh_host_rsa_key
SFTPAuthMethods password publickey
# ProFTPD doesn't support ed25519 yet
#SFTPHostKey /etc/ssh/ssh_host_ed25519_key
SFTPHostKey /etc/ssh/ssh_host_ecdsa_key
SFTPHostKey /etc/ssh/ssh_host_rsa_key
SFTPAuthorizedUserKeys file:/etc/proftpd/sftp.passwd.keys/%u
AuthOrder mod_auth_file.c
AuthUserFile /etc/proftpd/vpasswd
SFTPAuthorizedUserKeys file:/etc/proftpd/sftp.passwd.keys/%u
AuthOrder mod_auth_file.c
AuthUserFile /etc/proftpd/vpasswd
RequireValidShell off
RequireValidShell off
</IfModule>
</IfModule>
</VirtualHost>
~~~
On vérifie que les clés SSH soient correctes:
Les clés SSH doivent être au format de compatibilité défini dans la RFC 4716, qui n'est pas le format par défaut de SSH.
~~~
Pour créer les clés privées compatibles côté serveur :
~~~{bash}
# ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -N '' -m PEM
# ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -t ecdsa -N '' -m PEM
~~~
Ainsi, soit on se connecte par le mot de passe.
Soit via clé ssh au format de la RFC 4716 que l'on placera dans /etc/proftpd/sftp.passwd.keys/ en faisant ainsi :
Testez la configuration et rechargez la configuration :
~~~
# ssh-keygen -e -f ~/.ssh/id_rsa.pub
~~~{bash}
# proftpd -t && systemctl reload proftpd.service
~~~
Ou créé le compte sftp avec la commande classique :
Testez la connexion via un mot de passe :
~~~
# ftpasswd --file=/etc/proftpd/vpasswd --name=foo --home=/home/example/foo --shell=/bin/false --uid=1664 --gid=1664 --passwd
~~~{bash}
# host=... # IP ou domaine
# lftp $host
lftp host:~> set ftp:ssl-force true
lftp host:~> login $ftp_user
Mot de passe :
lftp $ftp_user@host:~> ls
~~~
Le fichier /etc/proftpd/vpasswd doit avoir les droits en 600, sinon Proftpd refuse de se lancer.
Si l'on peut lire le contenu du répertoire, alors la connexion est fonctionnelle.
### Authentification par clé SSH
Pour créer une clé SSH publique compatible RFC 4716 côté client, à partir de la clé publique `~/.ssh/id_rsa.pub` :
~~~{bash}
$ ssh-keygen -e -f ~/.ssh/id_rsa.pub
~~~
Les clés publiques des utilisateurs sont ensuite à copier dans le répertoire `/etc/proftpd/sftp.passwd.keys/`.
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)
## Troubleshooting
### Problème d'envoi de fichier, avec erreur "open for write: permission denied"
### Problème d'envoi de fichier avec erreur `open for write: permission denied`
L'erreur est provoqué lorsque l'on veux écraser un fichier existant, il faut rajouter la directive `AllowOverwrite on` dans le VirtualHost de la configuration, par exemple en sftp.
L'erreur est provoquée lorsque l'on veut écraser un fichier existant, il faut rajouter la directive `AllowOverwrite on` dans le la configuration de ProFTPD ou du VirtualHost concerné.
On la positionne dans une balise `<Directory>` comme ceci :