Proftpd sur MacOS

26/04/2018

Installation d'un serveur FTP (proftpd) sur MacOS High Sierra

Depuis la version High Sierra de MacOS, Apple a supprimé le serveur FTP par défaut. Pourtant, même si FTP est un vieux protocole, il reste massivement utilisé, et il peut être utile d'avoir un serveur de test sur son Macbook.

Besoins :

Il s'agit d'une configuration uniquement dédiée aux tests.

Installation

Au lieu de passer par l'App Store et d'installer une application GUI, mon choix s'est porté sur Proftpd, qui présente l'immense avantage d'être un grand classique et disponible sur *nux et MacOS.

Il suffit d'une commande brew pour l'installer :

    brew install proftpd

Pour pouvoir configurer des utilisateurs indépendants du système, il suffit d'utiliser la directive AuthUserFile. Celle-ci permet de faire le lien sur un fichier d'utilisateurs en plus des utilisateurs du système qui seront autorisés à se connecter au serveur FTP. Le format du fichier est le même que le format du fichier /etc/passwd. L'utilitaire fournit avec proftpd, ftpasswd, permet de générer 1 ligne par utilisateur de façon simple.

Pour rajouter un utilisateur toto, il suffit de faire :

      cd /usr/local/Cellar/proftpd/1.3.6/.bottle/etc
ftpasswd --passwd --name=toto --uid=3003 --home=/tmp/ftp --shell=/bin/bash

Modification de la configuration proftpd

Le fichier de configuration par défaut est modifié pour :

L'ajout d'un fichier de Log, se fait via la directive SystemLog

    
      SystemLog   /var/log/proftpd/proftpd.log
    

Le lien vers le fichier des utilisateurs se fait via la directive AuthUserFile, après avoir décommenté DefaultRoot. L'utilitaire ftpasswd produit 1 fichier nommé ftpd.passwd (le nom est modifiable).

DefaultRoot ~
AuthUserFile /usr/local/Cellar/proftpd/1.3.6/.bottle/etc/ftpd.passwd

Pour définir un message d'acceuil, il suffit de créer 1 fichier welcome.msg

Exemple de fichier de configuration :

Bonjour %U [provenance %R].

\o/ - Connexion %T. %N Utilisateur(s) connectés. 

    

La référence au fichier message via la directive DisplayLogin

DisplayLogin /usr/local/Cellar/proftpd/1.3.6/.bottle/etc/welcome.msg
      

Exécution

Le démarrage se fait alors (dans 1 script bash) en exécutant la commande proftpd:

#!/bin/bash
export PROFTDHOME=/usr/local/Cellar/proftpd
export PROFTD_ETC=$PROFTDHOME/1.3.6/.bottle/etc
export PROFTD_BIN=$PROFTDHOME/1.3.6/sbin
      
sudo $PROFTD_BIN/proftpd -c $PROFTD_ETC/proftpd.conf

On peut vérifier que le serveur est démarré :

   	
raspoutine:etc fred$ sudo ps -lx | grep ftp
 -2 14099     1      104   0  31  0  4292052    748 -      Ss                  0 ??         0:00.00 proftpd: (accepting connections)
    

La documentation fournit également la configuration plist pour définir le service FTP comme démarrable avec les services du système.

Test

raspoutine:~ fred$ ftp localhost
ftp: connect to address ::1: Connection refused
ftp: Trying 127.0.0.1 ...
Connected to localhost.
220 ProFTPD Server (ProFTPD Default Installation) [127.0.0.1]
Name (localhost:fred): toto
331 Password required for toto
Password:
230-
 Bonjour toto [provenance localhost].

 \o/ - Connexion Thu Apr 26 08:44:20 2018. 1 Utilisateur(s) connectés.
230 User toto logged in
ftp>