Eigener FTP-Server unter Linux
Datenaustausch

NetzwerkeSoftware

Die Server-Anwendung ProFTPd verschlüsselt Account und Nutzdaten und lässt den Firewall-Administrator dank Passive Mode gezielt Ports öffnen.

Großer Transfer

Eigener FTP-Server unter Linux

Kleine Dateien mit ein paar MByte Größe verschicken Anwender meist als Anhang einer E-Mail. Müssen jedoch Produktionsdaten mit mehreren hundert MByte die Firma wechseln, kommt der User mit einer
E-Mail nicht weiter. Nutzte man früher noch gebündelte ISDN-Kanäle für den Datentransfer, ist heute ein eigener FTP-Server für Unternehmen Pflicht. Das File-Transfer-Protocol (FTP) sorgt für stabile Übertragungen.

Setzt der Administrator auf dem Linux-Server die Anwendung ProFTPd ein, so profitiert er von verschlüsselter Übertragung sowie zahlreichen Möglichkeiten, den Zugang zu beschränken.

ProFTPd (www.proftpd.org) lässt sich sehr schnell und einfach für den Zugriff lokaler Benutzer oder anonymer Anwender aus dem Internet konfigurieren. Der Server kann im Passive Mode laufen, um Anwendern hinter einer Firewall einen unkomplizierten Zugriff zu gewähren. Zudem unterstützt der FTP-Server standardmäßig chroot-Käfige, die Anwenderzugriffe in einem bestimmten Verzeichnis limitieren.


Verschlüsselte Transfers

Eigener FTP-Server unter Linux

Noch mehr Schutz erhält der Administrator mit dem Einsatz von Zertifikaten und Algorithmen, mit denen sich Benutzernamen und Passwort sowie Nutzdaten verschlüsseln lassen. Dazu kompiliert der Verwalter das Modul mod_tls in ProFTPd ein. Zahlreiche weitere Module von der LDAP- oder MySQL-Unterstützung bis hin zur Bandbreitenkontrolle für FTP-Verbindungen stehen zur Verfügung. Damit kann der Verwalter den FTP-Server für die eigene Umgebung maßschneidern. Über die eingebaute Protokollfunktion ist er zudem stets im Bilde, wer wann welche Daten herunter- oder hinauflädt. Für deutschsprachige Anwender ist die Website www.proftpd.de interessant, die neben einem gut besuchten Forum auch Workshops und die Dokumentation hostet. Von dort lassen sich die Quellen der stabilen Version 1.2.10, der Entwicklervariante 1.3.0rc2 sowie CVS-Snapshots herunterladen.

Auf Module, die noch nicht Bestandteil des offiziellen Releases sind, verlinkt die Seite www.proftpd.org/module_news.html.


Module auswählen

Eigener FTP-Server unter Linux

Die meisten Distributionen enthalten ProFTPd standardmäßig. Häufig sind diese Versionen nur mit Basismodulen ausgestattet, die lediglich Standardkonfigurationen abdecken. Für die ersten Schritte eignen sich die Distributions-Binarys jedoch sehr gut.

Die Konfigurationsdatei proftpd.conf befindet sich in der Regel in /etc. Um herauszufinden, welche Module die installierte Version enthält, ruft der Anwender den Server mit der Option -l (list) auf.

/usr/sbin/proftpd -l

Die Ausgabe lässt sich mit der Liste in der Datei README.modules vergleichen oder online auf www.proftpd.org/docs. Wer Unterstützung für verschlüsselte Verbindungen, LDAP oder Antiviren-Software benötigt, kompiliert und installiert diese von Hand. Einige nützliche Module von Drittanbietern befinden sich im Verzeichnis contrib des Quellpakets. Weitere funktionale Module holt sich der User von www.proftpd.org/module_news.html.

Besorgen Sie sich die Quellen von www.proftpd.de. Für den Workshop wurde die aktuell stabile Version 1.2.10 auf Debian 3.1 (Sarge) verwendet. Entpacken Sie die Quellen im lokalen System und stellen Sie eine Liste der gewünschten Module zusammen. Für die Konfiguration und Kompilierung wechseln Sie ins Verzeichnis mit den Quellen. Über den Befehl configure lassen sich die Module für die Übersetzung einbinden:

./configure ?with-modules= mod_tls:mod_ldap

Mehrere Module trennen Sie mit einem Doppelpunkt voneinander. Anschließend übersetzen Sie die Quelldateien mit make und installieren die fertigen Binärdateien als Benutzer root:

make install

Den ProFTP-Daemon proftpd verschiebt der Installer in das Verzeichnis /usr/local/sbin. Das Zielverzeichnis ändert der Verwalter mit der configure-Option ?prefix. Der Befehl

./configure ?prefix=/usr

kopiert den Daemon in das Verzeichnis /usr/sbin/, in dem sich die Server-Dienste auf den meisten Distributionen aufhalten.


Grundkonfiguration erledigen

Eigener FTP-Server unter Linux

Der FTP-Server funktioniert bereits, ohne dass der Administrator die Konfigurationsdatei /etc/proftpd.conf bearbeitet. Allerdings lässt der Server dann nur Anmeldungen von lokalen Benutzern zu, die in /etc/passwd aufgeführt sind.

Um anonyme Benutzer zu erlauben oder die Besucher in einen chroot-Käfig einzusperren, legt der Verwalter selbst Hand an. Eine entsprechende Basiskonfiguration kann so aussehen:


# /etc/proftpd.conf
ServerName "Internet Professionell ProFTP 1.2.10"
ServerType standalone
DefaultServer on
Port 21
Umask 022
MaxInstances 10
User nobody
Group nogroup
DefaultRoot ~

AllowOverwrite on

Jede Zeile leitet eine Direktive ein, die für bestimmte Funktionen steht. Der Direktive folgen ein oder mehrere Optionen. Die deutsche ProFTPd-Website erklärt auf www.proftpd.de/?id=54 alle Direktiven und was die dazu gehörigen Optionen bewirken.

Vergeben Sie zuerst einen Namen für den Server. Diesen bekommen die Benutzer nach der Kontaktaufnahme und vor dem Login zu sehen. Beachten Sie, dass der ServerName in doppelten Hochkommas eingeschlossen sein muss, sofern sich ein Leerzeichen darin befindet.

Den ServerType setzt der Administrator in der Regel auf standalone, denn nur damit lässt sich der Passive Mode nutzen. Steht der FTP-Dienst nur lokalen Benutzern zur Verfügung, so lassen Sie ihn im Active Mode vom Internet-Superserver inetd starten.

Beachten Sie, dass die Benutzer dann einen FTP-Client einsetzen müssen, der mit dem aktiven Modus umgehen kann. Viele aktuelle FTP-Client-Programme unterstützen nur noch den passiven Modus.


FTP nutzt standardmäßig Port 21

Eigener FTP-Server unter Linux

Die Zuordnung der Dienste zu Portnummern befindet sich in /etc/services. Will der Administrator einen anderen Port in Zusammenhang mit inetd verwenden, trägt er diesen in die services-Datei ein. Der Umask-Wert 022 regelt, dass neue Dateien mit den Rechten -rwxr-xr-x angelegt werden. Nur der Eigentümer darf alles. Die Gruppe des Eigentümers sowie alle anderen sind ausschließlich auf Schreib- und Ausführrecht beschränkt.

Die Direktive MaxInstances lässt sich nur in Kombination mit dem ServerType standalone benutzen und erledigt gleich mehrere Aufgaben. Damit legt der Verwalter die maximalen Kindprozesse fest, die der Server starten darf. Es gilt: je ein Kindprozess pro Verbindung. Der Wert 10 lässt also zehn Clients gleichzeitig zu. Nach oben hin ist keine Grenze gesetzt. Mit einem niedrigen Wert kann der Verwalter die Angriffsfläche für Denial-of-Service-Attacken (DoS) verringern.


Auf die Sicherheit achten

Eigener FTP-Server unter Linux

Wie immer soll ein Daemon nicht im Root-Kontext laufen, da dieser alle Rechte im System hat. Über die Anweisungen User und Group setzt der Administrator einen Pseudobenutzer als Besitzer des Serverprozesses ein, der nur wenige Rechte besitzt und nach dem Start die Kontrolle an root übergibt.

Auf den meisten Systemen ist dies der Benutzer nobody, der zur Gruppe nogroup gehört. Mit der Anweisung DefaultRoot bestimmt der Verwalter, dass die Anwender nach dem Login in einem bestimmten Verzeichnis landen. Die Benutzer sind in der Verzeichnishierarchie eingesperrt und können nicht in eine höhere Ebene wechseln. Dies nennt man chroot-Käfig.

Im Konfigurationsbeispiel starten die in /etc/passwd auf dem Server eingetragenen Benutzer im jeweiligen Home-Verzeichnis, was Sie mit dem Tilde-Zeichen ~ festlegen. Ein anderes Verzeichnis tragen Sie mit absoluter Pfadangabe ein, etwa /var/ftp. Optional kann der Verwalter Gruppen einsperren oder Gruppen erlauben, den Käfig zu verlassen. Dazu dient das vorangestellte Ausrufezeichen:

DefaultRoot ~ users,!admin

Die Direktive bestimmt, dass alle Angehörigen der Gruppe users im Käfig bleiben müssen. Wer zur Gruppe admin gehört, darf hingegen auf die über dem Home-Verzeichnis liegende Ebene wechseln.

Die letzte Direktive AllowOverwrite der Basiskonfiguration erlaubt dem Benutzer, Dateien auf dem Server zu überschreiben (on). Standardmäßig lässt ProFTPd dies nicht zu. Die Anweisung ist im Direktiven-Block eingeschlossen.

Damit lassen sich Anweisungen wie AllowOverwrite auf bestimmte Verzeichnisse und Unterverzeichnisse anwenden. Hier ist dies das Root-Verzeichnis , das sich wegen DefaultRoot auf die Home-Verzeichnisse der Benutzer bezieht. Der Block endet mit .


Anonymes FTP erlauben

Eigener FTP-Server unter Linux

Auch den anonymen Zugriff auf den FTP-Server regelt der Administrator über eine solche Direktive, die zum Beispiel so aussehen kann:



User ftp
Group ftp
UserAlias anonymous ftp
MaxClients 10
DisplayLogin welcome.msg

DenyAll

Die Direktive legt fest, dass sich anonyme Benutzer nach dem Login auf dem FTP-Server im Verzeichnis /home/ftp befinden und nicht in eine höhere Ebene wechseln können. Die globale Anweisung DefaultRoot gilt im Anonymous-Block nicht.

Außerdem mappt das System mit UserAlias den Pseudobenutzer anonymous auf den im System vorhandenen Benutzer ftp. Diesen muss der Administrator natürlich vorher anlegen, damit die Direktive überhaupt greifen kann. Das Anlegen eines neuen Users erfolgt mit dem Kommando:

adduser ftp

Das Kommando legt den Benutzer sowie die Gruppe ftp an und erstellt das Home-Directory /home/ftp. Darin landen alle anonymen Benutzer, die sich anmelden. Danach vergeben Sie noch ein Passwort für die lokale Anmeldung auf dem System.


Hinweise für den Benutzer

Eigener FTP-Server unter Linux

Der Benutzer anonymous verwendet als Passwort eine E-Mail-Adresse. Mit den Direktiven User und Group erreicht der Administrator, dass der Dämon nach dem anonymen Login im Kontext des angegebenen Benutzers und dessen Gruppe läuft. Im vorliegenden Fall ist das ebenfalls ftp. Die Direktive MaxClients 10 lässt höchstens zehn gleichzeitige Verbindungen zu. Alle anderen Zugriffswünsche weist der Server mit dem Code 530 ab. Um dem Benutzer ein bisschen mehr Infos zu geben, fügt der Verwalter hinter der Anzahl einen Fehlertext ein, beispielsweise

Zugriff verweigert. Es sind bereits %m Benutzer angemeldet.

Der String muss in doppelten Hochkommas eingeschlossen sein. Den Platzhalter %m ersetzt ProFTPd mit der Anzahl der maximal zulässigen Verbindungen. Mit DisplayLogin präsentiert der Server nach der Anmeldung den Inhalt einer Textdatei, die meist weitere Informationen über den Betreiber des FTP-Dienstes oder den Standort des Servers verrät.

In einer chroot-Umgebung muss sich die Datei in einem vom Benutzer erreichbaren Verzeichnis befinden. In der Regel ist dies das angebliche Root-Verzeichnis. Je nach Ereignis (Login, Logout, erster Verzeichniswechsel) lassen sich auch andere Direktiven wie DisplayLogin oder DisplayFirstChdir benutzen.

Über Platzhalter kann der Administrator zum Beispiel die aktuelle Zeit in den Text einfügen (%T) oder den Benutzer über den zur Verfügung stehenden freien Plattenplatz (%F) informieren.


Schreibzugriffe regeln

Eigener FTP-Server unter Linux

Meist ist es nicht erwünscht, dass die Benutzer in jedem Verzeichnis schreiben dürfen. Um dies genau einzustellen, dient der Direktiven-Block . Der Lesezugriff ist standardmäßig erlaubt.

Die Direktive DenyAll wehrt jeden Schreibversuch ab. Mit dieser leiten Sie die Zugriffsrechte für Verzeichnisse in der Regel ein und geben mit weiteren Limit-Direktiven innerhalb des Directory-Blocks bestimmte Rechte für die Anwender frei. Damit die Benutzer Dateien auf den Server laden können, erlauben Sie für ein bestimmtes Verzeichnis den beschränkten Schreibzugriff für das FTP-Kommando STOR. Als Upload-Verzeichnis dient incoming. Der erste Limit-Block unterbindet generell, Dateien zu lesen oder darin zu schreiben (DenyAll). Der zweite Block erlaubt, dass ein Client Dateien zum Server senden darf (FTP-Befehl STOR) und dieser die Datei anlegen soll, wenn das Ziel das Verzeichnis incoming ist (AllowAll). Dieser Block hat eine höhere Priorität als vorherige Limit-Block, da es sich speziell um die Einschränkung eines FTP-Befehls handelt:


DenyAll

AllowAll


Verschlüsselung

Eigener FTP-Server unter Linux

Ein wesentliches Sicherheitsleck von FTP ist die Übertragung von Passwörtern im Klartext. Mit Hilfe der Bibliothek openssl (www.openssl.org) kann ProFTPd Account- sowie Nutzdaten verschlüsseln. Dieses Verfahren ist unter FTPS (FTP + SSL) bekannt.

Um den Server für FTPS zu konfigurieren, ist jedoch ein bisschen Handarbeit erforderlich, da der Verwalter den Server mit einem digitalen Zertifikat ausstatten muss. Das FTPS-Verfahren ist ideal, um Kunden oder Geschäftpartnern einen sicheren Zugang zum FTP-Server zu verschaffen.

Die meisten Clients für Linux, Windows oder MacOS unterstützen mittlerweile FTPS. Der Client-Anwender muss lediglich die Unterstützung für FTP über SSL für einen Server aktivieren. Bei grafischen Clients funktioniert dies meist über ein Dropdown-Menü oder eine Checkbox.

Damit ProFTPd nur noch SSL/TLS-geschützte Verbindungen erlaubt, kompiliert der Verwalter das Modul mod_tls. Für Pro FTPd 1.2.10 benötigen Sie die Quellen von OpenSSL 0.9.7g, die Sie in einem beliebigen Verzeichnis entpacken. Übersetzen Sie OpenSSL und installieren Sie die Bibliotheken:

./config && make && make install

Dem configure-Skript von ProFTPd teilt der Anwender dann noch mit, wo sich das Verzeichnis mit den Quellcodes von Open SSL befindet. Im folgenden Beispiel für ein configure-Skript ist das /home/joe/sources/openssl-0.9.7g.


./configure
?with-modules=mod_tls
?with-includes=/home/joe/sources/
openssl-0.9.7g/include
?withlibraries=/home/joe/sources/
openssl-0.9.7g

Nun lässt sich ProFTPd mit SSL/TLS-Unterstützung kompilieren (make) und installieren (make install).


Zertifikat erstellen

Eigener FTP-Server unter Linux

Anschließend fertigen Sie ein Zertifikat und einen Schlüssel an. Für kleine Sites reicht es, ein selbst signiertes Zertifikat anzulegen.
Zuerst generieren Sie als Benutzer root die RSA-Parameter und speichern den Schlüssel in der Datei host.key:

openssl genrsa 1024 > host.key

Ändern Sie die Rechte von host.key, so dass diese Datei nur noch der Eigentümer root lesen und schreiben darf. Anschließend erzeugen Sie ein X.509-konformes Zertifikat und signieren dieses mit dem vorher erstellten Schlüssel:

openssl req -new -x509 -nodes -sha1 -key host.key > host.cert

Um das Zertifikat zu erstellen, müssen Sie sich erst durch einige Fragen arbeiten. Wichtig ist vor allem, dass Sie die Frage nach dem Common Name (CN) mit dem FQDN (Fully Qualified Domain Name) beantworten.

Dabei handelt es sich um den Hostnamen inklusive Domain, beispielsweise ftpsrv.example.net. Kopieren Sie host.key und host.cert zum Beispiel in das Verzeichnis /etc/openssl/host. Dann fügen Sie in proftpd.conf eine Modul-Direktive ein, die den Server mit den notwendigen Angaben zu SSL/TLS versorgt:


# SSL/TLS

TLSEngine on
TLSLog /var/log/
proftpd/proftpd_tls.log
TLSProtocol TLSv1
TLSRequired off
TLSVerifyClient off
TLSRSACertificateFile /etc/
openssl/host/host.cert
TLSRSACertificateKeyFile
/etc/openssl/host/host.key

Auch andere Module können Sie als Administrator über das configure-Skript auf Wunsch einbinden. Welche Informationen das Skript für ein bestimmtes Modul benötigt, steht in der Regel in der mitgelieferten HTML-Dokumentation im ProFTPd-Verzeichnis contrib.

Der FTP-Server beherrscht auch interessante Funktionen, die sich bereits mit den Basismodulen realisieren lassen. Mehrere voneinander unabhängige FTP-Server lassen sich zum Beispiel mit der -Direktive konfigurieren.

Dazu ist es nötig, virtuelle Netzwerkschnittstellen zu definieren und diesen eine IP-Adresse zuzuweisen. Die Einstellungen trägt der Administrator dann in einen entsprechenden Block ein, etwa .

Sowohl die englische als auch die deutsche ProFTPd-Website veröffentlichen diverse Anleitungen zur Konfiguration des Servers.