12.6 Der FTP-Dienst
Den FTP-Dienst haben wir unter den Aspekten Funktionsweise, Protokoll und Client bereits in vorhergehenden Kapiteln vorgestellt. Nun werden wir uns mit der Konfiguration eines FTP-Servers auseinandersetzen.
Welche Software?
Wir werden uns im Rahmen dieses Buches den proftpd ansehen. Aber warum ausgerechnet diesen und nicht einen anderen Server? Prinzipiell steht es Ihnen natürlich frei, den 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 nicht die schlechteste Wahl.
Die meisten Systeme verfügen bereits über einen vorinstallierten FTP-Server, den man nur noch in der (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 Daemonprozess laufen lassen, indem man /usr/libexec/ftpd -D aufruft.
12.6.1 Konfigurationsdateien
Dämon vs. (x)inetd
Der proftpd wird hauptsächlich über die /etc/proftpd.conf <Die Datei kann bei Ihrer Distribution natürlich 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 die beste.
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 bzw. die Einträge in der /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?
ServerType inetd
DeferWelcome off
Listing 12.23 Beginn einer proftpd.conf
Wenn wir uns für den Start über inetd entschieden haben, sollte natürlich einerseits eine Zeile in der inetd.conf für unseren FTP-Server angelegt werden, und andererseits 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 12.24 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 Port 21 # 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 12.25 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 12.26 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 schließlich Zugriff auf ihr Homeverzeichnis. Zusätzlich kann man sich anonym einloggen, dann hat man aber nur lesenden Zugriff auf das Homeverzeichnis des ftp-Users.