est un protocole d'échange de fichiers. Un serveur FTP met à disposition certains répertoires du disque, et gère une authentification par mot de passe.
On se connecte à ce serveur avec un client FTP.
Ce document présente la configuration d'un serveur sous . Sa gestion des droits d'accès et sa configuration sont faits pour ressembler à celles d'Apache.
Installation et lancement.
Sous Debian, ProFTPD est disponible dans un package et peut s'installer avec la commande
apt-get install proftpd
Il est aussi possible de le configurer pour ses propres besoins à partir des sources. Ceci permet de spécifier les modules à utiliser. 
tar zxvf proftpd-1.x.x.tar.gz
cd proftpd-1.x.x
./configure --with-modules=mod_ratio:mod_sql
make
make installproftpd
Il se lance automatiquement à l'installation et au démarrage du système.
Le script qui permet de le lancer, l'arrêter ou le relancer est codice_1.
Fichier de configuration.
Le principal fichier de configuration est /etc/proftpd/proftpd.conf.
L'ensemble des directives sont décrites ProFTPD. Les commandes principales sont les suivantes :
ServerName ""nom""
description = Indique le nom du serveur qui s'affichera sur les clients
AccessGrantMsg ""message""
description = Message de bienvenue.
commentaires = Le message peut contenir des jokers comme %u (ici le nom de l'utilisateur)
<Limit …>…</Limit>
description = Autorise ou refuse l'utilisation de certaines commandes du protocole FTP.
commentaires =
Par exemple la section suivante n'autorise la commande MKDIR qu'aux utilisateurs foo et bar :
<Limit MKDIR>
 Allow foo bar
 Deny All
</Limit>
ServerType "type"
description = Détermine la manière dont le serveur reçoit les connexions réseau.
commentaires = 
Si le type est "standalone", un processus père sera lancé et écoutera sur le réseau. Si le type est "inet", le serveur devra être lancé par inetd (TCP_WRAPPER).
Dans tous les cas il y aura un processus de lancé par connexion FTP.
MaxInstances 30
description = Limite le nombre de processus simultanés autorisés
User nobody
Group nobody
description = indiquent que le serveur doit s'exécuter avec les identifiants de groupe et d'utilisateur nobody
ExtendedLog /var/log/ftp.log
description = spécifie le nom de fichier log
Umask 022
description = précise les droits à enlever aux fichiers créés sur FTP. 022 signifie que les droits d'écriture sont enlevés au groupe et à "others" pour tout nouveau fichier.
AllowOverwrite on
description = autorise un utilisateur à écraser un fichier qui lui appartient.
UseFtpUsers on
description = active l'utilisation du fichier /etc/ftpusers qui donne la liste des utilisateur n'ayant pas accès au serveur ftp.
AllowUser "liste-d'utilisateurs"
description = à placer dans un contexte <Limit ...>...</Limit> définit qui est autorisé à exécuter la commande du bloc "Limit" courant.
DenyUser "liste-d'utilisateurs"
description = à placer dans un contexte <Limit ...>...</Limit> définit qui n'est pas autorisé à exécuter la commande du bloc Limit courant.
AllowStoreRestart
description = autorise les clients à reprendre les uploads vers le serveur.
DefaultChdir /var/ftp
description = Indique le répertoire par défaut du serveur.
commentaires = Les utilisateurs se trouvent placés dans ce répertoire lors de la connexion.
DefaultRoot /var/ftp
description = déclare ce répertoire comme la racine du système de fichiers.
UserRatio
description = permet la gestion des ratios.
commentaires =
UserRatio "nom" 2 10 5 4096</code> indique que l'utilisateur "nom" a le droit de récupérer 2 fichiers sur le serveur à chaque fois qu'il en déposera un.
On lui octroie pour commencer un crédit de 10 fichiers.
Par ailleurs, pour 1 octet déposé, il pourra recevoir 5 octets et il détient un crédit de 4ko. À la place d'un nom on peut aussi utiliser * qui définit des ratios par défaut.
SaveRatios on
description = sert à préciser que nous souhaitons sauvegarder les crédits de chaque utilisateur entre deux sessions.
RatioFile /ratio/RatioFile
RatioTempFile /ratio/RatioTempFile
description = indiquent les noms de fichiers permettant de sauvegarder des informations sur les ratios des utilisateurs.
FileRatioErrMsg "Vous n'avez pas suffisamment télédéchargé de fichiers"
ByteRatioErrMsg "Vous n'avez pas assez télédéchargé d'octets"
description = indiquent qu'un utilisateur a dépassé son quota par des messages.
<Directory "répertoire"> … </Directory>
description = Cette section indique les droits sur le répertoire et sur tout ce qu'il contient.
commentaires =
Par exemple :
<Directory /var/ftp/ratio>
 <Limit ALL>
 Deny ALL
 </Limit>
 HideNoAccess on
</Directory>
Ici, nous interdisons toute opération sur le répertoire ratio grace à la section <Limit ALL>.
HideNoAccess
description = Cache tous les éléments inaccessibles aux utilisateurs.
<Anonymous "répertoire">…</Anonymous>
description = Configure l'accès anonyme
commentaires =
Exemple :
<Anonymous /home/ftp>
 # Après la connexion anonyme, passe sous l'utilisateur/groupe ftp.
 User ftp
 Group ftp
 # Fait correspondre le login "anonymous" au compte unix "ftp"
 UserAlias anonymous ftp
 # Autorise les comptes sans "shell", c'est souvent le cas du compte "ftp"
 RequireValidShell off
 # Interdit l'écriture partout
 <Directory *>
 <Limit WRITE>
 DenyAll
 </Limit>
 </Directory>
 # Autorise l'écriture dans "incoming" mais pas la lecture
 <Directory incoming>
 <Limit READ >
 DenyAll
 </Limit>
 <Limit STOR>
 AllowAll
 </Limit>
 </Directory>
</Anonymous>
Pour que le serveur prenne en compte le nouveau fichier de configuration, il faut recharger le démon avec:
/etc/init.d/proftpd restart
Exemple de fichier proftpd.conf:
ServerName "ProFTPd Linux Service"
ServerType standalone
DefaultServer on
AllowStoreRestart on
Port 45000
Umask 022
RateReadBPS 14000
MaxInstances 30
Group nogroup
MaxLoginAttempts 3
AccessGrantMsg "Bienvenue %u chez moi!"
DeferWelcome off
<Limit MKD RNFR RNTO DELE RMD STOR CHMOD SITE CHMOD SITE XCUP WRITE XRMD PWD XPWD>
 DenyAll
</Limit>
<Global>
 DefaultRoot /var/ftp
 AllowOverwrite yes
 MaxClients 3
 MaxClientsPerHost 1
 UseFtpUsers on
 AllowForeignAddress on
 ServerIdent on "ProFTP DuF’s Server Ready"
 AccessGrantMsg "Bienvenue sur le serveur, %u"
</Global>
<VirtualHost ftp.duf.com>
 ServerName "Mon serveur FTP virtuel numero 1"
 Port 46000
 Maxclients 3
 MaxClientsPerHost 1
 DefaultRoot /var/ftp
 AccessGrantMsg "Bienvenue"
</VirtualHost>
Dans ce fichier on peut rajouter les lignes suivantes :
 # permet à l'utilisateur même si il ne dispose pas d'un shell valide (ex: /bin/false)
 RequireValidShell off
 # Verrouille l'utilisateur dans son répertoire par défaut
 DefaultRoot ~
 # Pour ne pas afficher le nom du serveur FTP et son numéro de version
 ServerIdent off
 # on peut également afficher une autre chaîne de caractères :
 #ServerIdent on "Serveur FTP du Creufop"
Accès FTP anonyme.
Pour faire un serveur FTP anonyme, il suffit de rajouter les lignes suivantes dans /etc/proftpd/proftpd.conf :
 <Anonymous ~ftp>
 User ftp
 Group nogroup
 # We want clients to be able to login with "anonymous" as well as "ftp"
 UserAlias anonymous ftp
 RequireValidShell off
 # Limit the maximum number of anonymous logins
 MaxClients 10
 # We want 'welcome.msg' displayed at login, and '.message' displayed
 # in each newly chdired directory.
 DisplayLogin welcome.msg
 DisplayChdir .message
 # Limit WRITE everywhere in the anonymous chroot
 <Directory *>
 <Limit WRITE>
 DenyAll
 </Limit>
 </Directory>
 # Uncomment this if you're brave.
 # <Directory incoming>
 # # Umask 022 is a good standard umask to prevent new files and dirs
 # # (second parm) from being group and world writable.
 # Umask 022 022
 # <Limit READ WRITE>
 # DenyAll
 # </Limit>
 # <Limit STOR>
 # AllowAll
 # </Limit>
 # </Directory>
 </Anonymous>
Création d'un utilisateur FTP.
Pour créer un utilisateur qui aura uniquement le droit de faire du FTP, on crée l'utilisateur en indiquant comme shell '/bin/false'.
Dans le cas d'un webmaster, l'idéal est de le faire directement atterrir dans le répertoire où est situé le site web qu'il administre. Pour faire ceci, on indique le répertoire contenant le site web comme étant le répertoire de travail de l'utilisateur.
 # adduser --shell /bin/false --home /var/www/site bob
Cacher un dossier / fichier.
Pour rendre un dossier invisible un fichier / dossier(ex Maildir), il faut ajouter au proftpd.conf :
 <Directory ~>
 Hidefiles Maildir
 </Directory>
Clients FTP.
Pour tester le serveur FTP, il convient à présent d'utiliser un logiciel client FTP, si possible depuis une autre machine pour tenir compte du pare-feu.
Il existe de très nombreux clients FTP. Certains sont en mode graphique comme , d'autres en mode texte comme la commande shell codice_2.
Commande ftp.
Le client le plus simple et le plus répandu est la commande codice_2. Elle existe également sous Windows en ligne de commande.
Les commandes disponibles sont décrites dans la page de man. Les principales sont : codice_4...
Navigateurs.
Les navigateurs internet permettent également de se connecter à un serveur FTP, généralement en lecture seule.
SFTP.
Généralement c'est le service SSH qui écoute le port 22. Par exemple sur Ubuntu, configure un avec la même que SSH, dans :
 vim /etc/ssh/sshd_config
Il utilise ainsi la commande :
 /usr/lib/sftp-server
Pour tester s'il fonctionne depuis le serveur, il existe la commande :
 sftp localhost
Toutefois, ProFTPD peut également fournir ce service.
FTPS.
Pour activer le protocole :
 vim /etc/proftpd/proftpd.conf # Décommenter la ligne "Include /etc/proftpd/tls.conf"
 vim /etc/proftpd/tls.conf # Ajouter le code ci-dessous
 <IfModule mod_tls.c>
 TLSEngine on
 TLSRSACertificateFile /etc/proftpd/ssl/proftpd-rsa.pem
 TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd-key.pem
 </IfModule>
 /etc/init.d/proftpd restart
Pour plus d'information sur les certificats .pem, voir Apache/HTTPS.
Problèmes connus.
Logs.
Proftpd stocke ses logs dans les fichiers suivants :
 TransferLog /var/log/proftpd/xferlog
 SystemLog /var/log/proftpd/proftpd.log
En voici un extrait :
 cat /var/log/proftpd/xferlog
 Wed Feb 6 12:16:12 2008 1 lns-bzn-51f-85-78-78-5.adsl.proxad.net 1129 /home/user1/fichier1.txt a _ i r user1 ftp 0 * c
 Thu Feb 6 15:23:49 2008 1 84-74-216-148.dclient.hispeed.ch 11743 /var/www/index.html a _ i r user2 ftp 0 * c
 Fri Feb 6 23:46:02 2008 1 69.183.30.97.adsl.snet.net 4572542 /home/user2/toto.pdf a _ i r user2 ftp 0 * c
 cat /var/log/proftpd/proftpd.log
 2015-10-08 16:17:44,302 ftp.example.com proftpd[21992] ftp.example.com: ProFTPD killed (signal 15)
 2015-10-08 16:17:44,303 ftp.example.com proftpd[21992] ftp.example.com: ProFTPD 1.3.5 standalone mode SHUTDOWN
 2015-10-08 16:17:44,364 ftp.example.com proftpd[28832] ftp.example.com: ProFTPD 1.3.5 (stable) (built Fri May 22 2015 00:17:07 UTC) standalone mode STARTUP
 2015-10-08 16:18:09,365 ftp.example.com proftpd[29111] ftp.example.com (lns-bzn-51f-85-78-78-5.adsl.proxad.net): FTP session opened.
 2015-10-08 16:18:09,575 ftp.example.com proftpd[29111] ftp.example.com (lns-bzn-51f-85-78-78-5.adsl.proxad.net): user1 chdir("/home/user2") failed: Permission non accordée
 2015-10-08 16:18:09,577 ftp.example.com proftpd[29111] ftp.example.com (c233e21e.fsp.oleane.fr[194.51.226.30]): FTP session closed.
FileZilla ne voit pas la clé privée.
Il faut la renommer en .ppk.
530 Authentification incorrecte.
Si les logs renvoient codice_8 (en FTP avec un compte qui peut marcher en SFTP par ailleurs), c'est qu'il faut modifier codice_9 avec codice_10.
Sinon, s'ils donnent codice_11 il faut en définir un valide dans codice_12.
Enfin, si un copié-collé du login et du mot de passe ne fonctionne pas, contacter l'administrateur du serveur pour recréer le compte.
Aucune permission.
Généralement ce phénomène s'accompagne du message "425 Can't open data connection for transfer". Il peut être résolu en cochant le mode passif dans le troisième onglet du site.
"clé de l'hôte inconnue" ou "key fingerprint is xxx. Are you sure you want to continue connecting (yes/no)?".
En SFTP, il s'agit d'un avertissement sur la clé de cryptage qui peut survenir avec ProFTPD ou OpenSSH. Il peut planter certains scripts ou logiciels de transfert comme , qui s'arrêtent sans l'afficher. Mais avec FileZilla il suffit de l'accepter une fois pour ne plus le revoir.
EAI_NODATA - Aucune adresse associée à ce nom de nœud.
Problème de , ou bien codice_13.
ECONNREFUSED - Connexion refusée par le serveur.
Si codice_14 fonctionne, c'est sûrement le certificat qui a expiré ou le pare-feu.
Sinon, si codice_14 ne fonctionne pas sans aucune règle codice_16, mais passe sur le port 22, c'est peut-être la directive codice_17 de codice_9 à refaire. Ou sinon, dans le client FileZilla, préciser le chiffrement pour ce site en "Connexion FTP simple (non sécurisé)".
Handshake failed (40).
Se produit depuis 2016 sur FileZilla quand une connexion FTP (par TLS ou pas) tombe sur un certificat invalide. Mais avec CoreFTP cela fonctionne.
Impossible d'établir une connexion au serveur.
Voir ci-dessous : "#Serveur introuvable".
Refused user root for service proftpd.
Cela peut se produire après l'installation ou une mise à jour. Si un codice_19 renvoie codice_20, commenter l'utilisateur dans ce fichier de blacklist.
Serveur introuvable.
Il s’agit probablement d’une panne de DNS, il faut alors remplacer l'URL par l'IP.
Sinon, il s’agit peut-être d’une règle de pare-feu. Pour le vérifier, taper la commande codice_21. Si c'est bloqué ou affiche "délai d’attente dépassé", ou "connexion refusée" il faut ouvrir le flux FTP du pare-feu client.
Sinon, il faut donc vérifier que le client FTP n’est pas configuré en SFTP (port 22 au lieu de 21) ou vice-versa.
Si un message d’erreur survient après une connexion "PASV" : il faut désactiver le mode passif. Par exemple dans Filezilla : Édition, Paramètres, FTP, décocher la case.
Sinon, il faut regarder les logs du serveur (ex : iptables).