Pure-FTPd mit virtuellem Benutzer für www-data

Pure-FTPd ist schnell eingerichtet und lässt sich im Vergleich zu anderen FTPd sehr einfach bedienen. Die Administration über die Shell ist simpel, Konfigurationsdateien müssen eigentlich nur bei der erstmaligen Einrichtung bearbeitet werden. Die pure-* Werkzeuge – insbesondere „pure-pw“ – erleichtern dem Admin oft das Leben.

Changelog

  • 29.11.2013 – Formatierung gefixt und SSL hinzugefügt

Erst einmal Pure-FTPd aus dem Repository installieren:

apt-get install pure-ftpd

Eigentlich die Standardeinstellung, sollte jedoch besser noch einmal überprüft werden: Die Datei „/etc/default/pure-ftpd-common“ öffnen und sichergehen, dass „STANDALONE_OR_INETD=standalone“ gesetzt ist. Wer später Symlinks im FTP-Client folgen möchte, der darf jetzt ebenfalls die Option „VIRTUALCHROOT=true“ setzen.
Da unser Pure-FTPd Benutzer sich quasi als www-data ausgeben soll, der in der Regel die UID 33 besitzt, muss folgender Befehl ausgeführt werden, um die Anmeldung zu ermöglichen:

echo "33" > /etc/pure-ftpd/conf/MinUID

Ich möchte die PureDB als Datenbank meiner Benutzer verwenden und außerdem PAM-Auth verbieten:

ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth
echo "no" > /etc/pure-ftpd/conf/PAMAuthentication

Und weil es gerade so Spaß macht, hier noch ein paar weitere Einstellungsmöglichkeiten, die eventuell interessant sind:

echo "20000 21000" > /etc/pure-ftpd/conf/PassivePortRange
echo "yes" > /etc/pure-ftpd/conf/IPV4Only
echo "500" > /etc/pure-ftpd/conf/MaxClientsNumber

Die PassivePortRange muss gegebenenfalls in der Firewall freigeschaltet werden. MaxClientsNumber darf maximal 500 betragen.

SSL (Implicit, AUTH TLS: Der aktuelle Standard) kann bei Bedarf ebenfalls aktiviert werden:

echo "1" > /etc/pure-ftpd/conf/TLS

Wobei 0 bedeuten würde kein TLS, 1 TLS + Klartext, 2 TLS erzwingen, 3 Datenkanal ebenfalls verschlüssen (erzwingen).
Der Schlüssel muss in der Datei „/etc/ssl/private/pure-ftpd.pem“ eingetragen sein. Liegen z.B. .crt, .key und .ca einzeln vor, können diese mit „cat“ zu einer Datei zusammengefügt werden. Ein eigenes self-signed Zertifikat kann alternativ ebenfalls erstellt werden. Vorab das entsprechende Verzeichnis erstellen, falls es nicht vorhanden ist:

mkdir -p /etc/ssl/private/
openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

Den Key absichern vor fremden Zugriff:

chmod 600 /etc/ssl/private/pure-ftpd.pem

Soll beim Login eine eigene Willkommensnachricht angezeigt werden, etwa „Willkommen auf meinem FTP-Server“, müssen folgende Befehle ausgeführt werden:

echo "/etc/ftpwelcome" > /etc/pure-ftpd/conf/FortunesFile
echo "Willkommen auf meinem FTP-Server" > /etc/ftpwelcome

Via FortunesFile wird tatsächlich nur der Pfad zur Datei, die die eigentliche Nachricht enthält angegeben.

Jetzt wird der virtuelle Benutzer, der sich dem System gegenüber als www-data ausgibt erstellt. In diesem Fall erfolgt die Anmeldung am FTP also als Benutzer „ftpuser“, ein Passwort wird im Anschluss abgefragt. Am Ende des Befehls wird das Verzeichnis angegeben, in das der Benutzer sich einloggen wird:

pure-pw useradd ftpuser -u www-data -g www-data -d /var/www

Noch schnell die Datenbank aktualisieren, damit die Änderungen auch aktiv werden und im Anschluss den Pure-FTPd neustarten:

pure-pw mkdb
service pure-ftpd restart

Sind die Ports 20 und 21 (evtl. eben auch die PassivePorts) in der Firewall freigeschaltet, sollte die Verbindung nun hergestellt werden können. Alle Änderungen im Dateisystem werden als Benutzer „www-data“ ausgeführt.

Weitere Benutzer hinzufügen

Soll später ein neuer Benutzer hinzugefügt werden, reicht die Verwendung von „pure-pw useradd …“ im gleichen Format wie oben. Ganz wichtig: Anschließend immer pure-pw mkdb ausführen!