17.6 Der FTP-Dienst 

Den FTP-Dienst haben wir unter den Aspekten »Funktionsweise«, »Protokoll« und »Client« bereits in vorhergehenden Kapiteln vorgestellt. Im Folgenden werden wir uns mit der Konfiguration eines FTP-Servers auseinandersetzen.
Welche Software?
Wir werden uns im Rahmen dieses Buches den Server ProFTPd ansehen – aber warum ausgerechnet diesen und nicht einen anderen Server? Prinzipiell steht es Ihnen natürlich frei, jeden Server Ihrer Wahl zu nutzen. ProFTPd ist aber ein einfacher, kleiner Server. Er wurde entwickelt, um sicherer und schneller als andere Programme zu sein. Inwieweit das Projekt nun im Einzelnen diese Ziele erreicht hat, sei einmal dahingestellt; für ein Heimnetzwerk ist ProFTPd aber sicher eine gute Wahl.
Die meisten Systeme verfügen bereits über einen vorinstallierten FTP-Server, den man nur noch in der Datei (x)inetd.conf freischalten muss. Oftmals steht auch die Alternative eines Standalone-Dienstes zur Verfügung. So kann man unter OpenBSD den FTP-Server auch permanent als Dämonprozess laufen lassen, indem man /usr/libexec/ftpd -D aufruft. |
17.6.1 Konfigurationsdateien 

Dämon vs. (x)inetd
Der Server ProFTPd wird hauptsächlich über die Datei /etc/proftpd.conf [Die Datei kann bei Ihrer Distribution natürlich auch an einem anderen Ort liegen.] gesteuert. Bevor man ans Konfigurieren geht, muss man sich aber entscheiden, ob man den Dienst standalone oder über den inetd starten will – in einem Heimnetzwerk ist meistens die inetd-Variante vorzuziehen.
Sollten Sie den ProFTPd über Ihren Paketmanager installiert haben, brauchen Sie also nur noch die Konfigurationsdatei zu suchen und zu editieren. Eventuelle Startskripts im init.d-Verzeichnis und die Einträge in der Datei /etc/inetd.conf sollten dann schon vorhanden sein.
Das folgende Listing zeigt eine Beispielkonfiguration für die Software. Beachten Sie bitte, dass für anonymes FTP ein Benutzer names ftp mit gültigem Homeverzeichnis auf Ihrem System vorhanden sein muss.
# Dies ist eine einfache Konfiguration für den
# ProFTPd. Sie realisiert einen einfachen, durch
# inetd gestarteten Server mit anonymous Login.
# Der Servername
ServerName "FTP Server"
# inetd oder standalone?
ServerTypeinetd
DeferWelcome off
Listing 17.22 Beginn einer proftpd.conf
Wenn wir uns für den Start über inetd entschieden haben, sollte erstens eine Zeile in der inetd.conf für unseren FTP-Server angelegt werden, und zweitens sollte der inetd auch laufen – sonst wird's nix mit FTP.
# Standardoptionen MultilineRFC2228 on DefaultServer on ShowSymlinks on AllowOverwrite on # Verbindungstimeouts... TimeoutNoTransfer 600 TimeoutStalled 600 TimeoutIdle 1200 # Diese Dateien im Homeverzeichnis der User werden # bei den entsprechenden Aktionen angezeigt: DisplayLogin welcome.msg DisplayFirstChdir .message # Langes Listing bei "ls" ListOptions "-l" # Hier kann man "böse" Befehle blockieren. DenyFilter \*.*/
Listing 17.23 Fortsetzung von proftpd.conf
In diesem Abschnitt wurden nun einige Optionen zum Verhalten des Dienstes konfiguriert. Dazu gehören verschiedene Timeouts ebenso wie Banner, also Textdateien, die beim Eintritt in bestimmte Verzeichnisse ausgegeben werden.
# Port 21 ist der Standard-FTP-Port
Port21
# Um Denial-of-Service-Attacken gegen den Server
# vorzubeugen, werden hier nicht mehr als 30
# Verbindungen zu einem bestimmten Zeitpunkt
# erlaubt. Das funktioniert allerdings nur bei
# "ServerType standalone", ansonsten muss dies über
# den inetd geregelt werden.
MaxInstances 30
# Benutzer- und Gruppenrechte für den Server setzen
User nobody
Group nogroup
Listing 17.24 Port und Rechte
Die Wahl des Ports spielt allerdings nur bei Standalone-Servern eine Rolle. Wird der Dienst durch den inetd gestartet, so legt man in der entsprechenden Zeile der Konfigurationsdatei den Port fest, zu dem der Client anschließend eine Verbindung aufbauen kann. Der FTP-Dienst selbst wird dann erst aufgerufen, wenn die Verbindung bereits besteht.
# Standardeinstellung für Benutzerverzeichnisse <Directory /*> # Die umask für Dateien und Verzeichnisse setzen Umask 022 022 # Dateien sollen überschreibbar sein AllowOverwrite on </Directory> # Eine einfache Konfiguration für anonymes FTP <Anonymous ~ftp> User ftp Group nogroup # Benutzer sollen sich sowohl mit "ftp" als auch # mit "anonymous" einloggen können. UserAlias anonymous ftp # Benutzer "ftp" braucht keine Shell in der # /etc/passwd RequireValidShell off # Maximale Anzahl von anonymen Logins MaxClients 10 DisplayLogin welcome.msg DisplayFirstChdir .message # Überall das Schreiben verbieten <Directory *> <Limit WRITE> DenyAll </Limit> </Directory> # Für ein Upload-Verzeichnis sollten Sie die # folgenden Zeilen entkommentieren. # <Directory incoming> # Umask 022 022 # # Lesen und Ändern verboten... # <Limit READ WRITE> # DenyAll # </Limit> # # ...aber Hochladen erlaubt # <Limit STOR> # AllowAll # </Limit> # </Directory> </Anonymous>
Listing 17.25 Die Freigaben
Mit diesen Freigaben hat man folgendes Szenario definiert: Alle lokal existierenden Benutzer können sich auch via FTP mit ihrer Benutzerkennung samt Passwort einloggen und erhalten so Zugriff auf ihr Home-Verzeichnis. Zusätzlich kann man sich anonym einloggen, hat dann aber nur lesenden Zugriff auf das Home-Verzeichnis des ftp-Users.