Da ab MacOS X 10.13 kein FTP-Server mehr in das System integriert ist (zuvor war er für ein paar Systemversionen zwar versteckt aber immerhin vorhanden), muss man nun selbst Hand anlegen.

Ich hatte mich an pureFTP, proFTP und vsFTP versucht, da sich alle drei mit Hilfe von Homebrew installieren lassen, wobei ich im Folgenden nur die Installation von pureFTP und proFTP aufführe, da ich vsFTP nicht wirklich zum Funktionieren gebracht hatte (ich bekam keine virtuellen User eingerichtet).

pure-ftpb

brew install pure-ftpd             # Installieren
sudo brew services start pure-ftpd # Beim Systemstart automatisch starten

brew services start pure-ftpd ohne vorangestelltes sudo hatte bei mir nicht funktioniert.
Letztendlich hatte ich dann sowohl in ~/Library/LaunchAgents wie auch in /Library/LaunchDaemons eine Datei homebrew.mxcl.pure-ftpd.plist, was zu ziemlich vielen Fehlern im System-Log führte.
~/Library/LaunchAgents/homebrew.mxcl.pure-ftpd.plist musste gelöscht werden, damit alles fehlerfrei lief.

Nun zur Einrichtung:

# Für Dateiberechtigungen FTP-User und -Gruppe im System anlegen
sudo dscl . -create /User/_ftp
# oder
sudo sysadminctl -addUser _ftp

# Wobei ich feststellen musst, dass es bereits einen FTP-User und eine FTP-Gruppe gab.
# Kann man wie folgt prüfen:
dscl . list /Users | grep -v “^_”
# Hier wird mitunter ein User _ftp mit aufgelistet, sofern bereits vorhanden

# (Virtuellen) FTP-Benutzer erstellen
# (hat nichts mit dem FTP-Benutzer des Systems zu tun)
# und die Benutzerrechte des zuvor erstellten Users _ftp übernehmen
sudo pure-pw useradd myftpuser -u _ftp -d /pfad/zu/ftpverzeichnis/

# Danach 2x das Passwort, welches für diesen User verwendet werden soll, eingeben
# Der System-User _ftp sollte auf dieses Verzeichnis Schreibrechte haben
# Es können beliebig viele virtuelle Benutzer angelegt werden.
# Mit jenen Zugangsdaten kann man sich letztendlich mit einem FTP-Client anmelden

# Datenbank anlegen. Ohne diesen Befehl bekommt man beim Testen an einem
# Client nur "Verbindung geschlossen"-Meldungen
sudo pure-pw mkdb
 

Config- und Passwort-Datei landen in /usr/local/etc/ (sollte man später mal danach suchen)

Eigentlich sollten in meinem Anwendungsfall Daten per FTP übertragen werden und dann automatisch verarbeitet werden, was ich früher immer mit einem launchd-Hotfolder gelöst hatte.
Seltsamerweise merkt launchd aber nicht, dass neue Dateien im Verzeichnis gelandet sind, wenn sie per pureFTP übertragen wurden.
Dies war der Grund, wieso ich noch proFTP getestet hatte (wo es aber leider ebenfalls nicht funktioniert).

Uploadscript

Hoffnungsschimmer war noch, die Uploadscript-Funktion von pureFTP zu verwenden, über die ich noch gestolpert war.
Hatte ich aber leider nicht zum funktionieren gebracht. Sei aber hier mal erwähnt, dass es soetwas gibt. Vielleicht ist ja jemand schlauer als ich und bekommt es hin:

Mit dem Befehl

sudo /usr/local/opt/pure-ftpd/sbin/pure-uploadscript -B -r /pfad/zu/skript

lässt sich ein Skript bestimmen, welches ausgeführt werden soll, sobald eine Datei per FTP übertragen wurde. In der Theorie.

Dafür müsste auf jeden Fall in /usr/local/etc/pure-ftpd.conf folgende Zeile noch hinzugefügt werden und pureFTP neu gestartet werden:

CallUploadScript             yes

pureFTP neustarten:

sudo brew services restart pure-ftpd

Wie gesagt: Hatte ich nicht zum Funktionieren gebracht.

proftp

Im großen und ganzen dasselbe in Grün.
Hatte die Installation gewagt, weil die launchd-Hotfolderfunktion bei pureFTP nicht funktioniert hatte. Hier allerdings leider dasselbe Spiel.
Irgendwas in den Untiefen von MacOS X scheint hier wohl ein Problem mit FTP-Servern zu haben...

brew install proftpd
sudo chown root /usr/local/etc/proftpd.conf

Einrichtung:

# Für Dateiberechtigungen FTP-User und -Gruppe im System anlegen
sudo dscl . -create /User/_ftp
# oder
sudo sysadminctl -addUser _ftp

# Wobei ich feststellen musst, dass es bereits einen FTP-User und eine FTP-Gruppe gab.
# Kann man wie folgt prüfen:
dscl . list /Users | grep -v “^_”
# Hier wird mitunter ein User _ftp mit aufgelistet, sofern bereits vorhanden

# Für proFTP benötigen wir allerdings die numerischen IDs des System-ftp-Users und Gruppe "nobody"
cat /etc/passwd | grep _ftp  # UID des Users _ftp, im folgenden Beispiel 98
cat /etc/group | grep nobody # GID der Gruppe nobody, im folgenden Beispiel -2


# (Virtuellen) FTP-Benutzer erstellen
# (hat nichts mit dem FTP-Benutzer des Systems zu tun)
# und die Benutzerrechte des zuvor erstellten Users _ftp übernehmen

sudo ftpasswd --passwd --name=testuser --uid=98 --gid=-2 --home=/pfad/zu/verzeichnis/ --shell=/bin/false

In der Config hatte ich noch folgende Dinge angepasst:

/usr/local/etc/proftpd.conf
User               _ftp
Group              nobody
DefaultRoot        ~
RequireValidShell  off
AuthUserFile       /usr/local/etc/ftpd.passwd

Bei proFTP hatte ich allerdings noch damit zu kämpfen, dass ich ihn nicht per launchd zum automatischen Starten brachte.

Sowohl sudo brew services start proftpd wie auch brew services start proftpd brachten nur Fehlermeldungen ins Log ein. Ich konnte proFTP ausschließlich manuell starten, was der Grund war, wieso ich wieder zu pureFTP zurückkehrte.
sudo /usr/local/opt/proftpd/sbin/proftpd