Linux Server - FTP

> Linux Server - FTP-Server

> > # Zugriffssteuerung und Konfiguration

> > Der wu.ftpd ermöglicht eine komplexe Form der Steuerung der Zugriffskontrolle und anderer Einstellungen in der Datei /etc/ftpaccess. Diese Einstellungmöglichkeiten sollen hier noch dargestellt werden. Damit der FTP-Daemon diese Datei überhaupt interpretiert, muß er mit der Kommandozeilenoption -a gestartet werden.

> > Neben den beiden Zugriffsarten perönlich (real) und anonym (anonymous) kennt der wu.ftpd noch den Gastmodus (guest). In diesem Modus muß sich ein User mit echtem Usernamen und Passwort einloggen, er bekommt dann aber auch eine chroot-Umgebung in einem bestimmten Verzeichnis, als wäre er der anonyme User. Auch er kann sich also nicht im System frei bewegen. Das wird z.B. gerne benutzt, um den Usern eines Webspace-Servers FTP-Zugang auf ihre Verzeichnisse zu geben. Der Eintrag in der /etc/passwd sieht dann genauso aus wie beim anonymen User (Homeverzeichnis/./aktuelles Verzeichnis).

> > ### Klassenbildung

> > Der wu.ftpd erlaubt es, verschiedene Klassen von Clients zu bilden. Als Klassen werden Zusammenfassungen verschiedener IP-Adressen oder DNS-Domainnamen gewertet. Die Adressen dürfen mit Shell-Jokerzeichen (`*?[]{}`) in Mustern angegeben werden. Durch einen Eintrag in der Datei /etc/ftpaccess werden solche Klassen gebildet. Die grundsätzliche Form ist:

> >       class Klassenname Typenliste Adressenmuster

> > Der Klassenname ist dabei frei wählbar. In der Typenliste stehen eine beliebige - durch Kommas getrennte - Liste, die aus den Begriffen `real, anonymous` und `guest` bestehen. Wenn ein Host in keine Klasse eingeteilt werden kann, dann wird ihm der Zugriff verweigert. Sollten auf einen Rechner mehrere Klassen anwendbar sein, so wird die erste passende gewählt. Das heißt, bei der Formulierung der Klassen sollte Wert auf die richtige Reihenfolge gelegt werden.

> > Durch spätere Befehle, die sich auf diese Klassen beziehen, können dann bestimmte Dinge erlaubt oder verboten werden. Ein einfaches Beispiel:

> >       class admin    real              10.230.1.{100,107,129}
> >       class eigene   real,anonymous    *.mydomain.de
> >       class kunden   real,guest        *
> >       class alle     anonymous         *

> > definiert vier Klassen. Die Klasse admin besteht aus den Rechnern 10.230.1.100, 10.230.1.107 und 10.230.1.129. Mitglieder dieser Klasse können sich mit realem Usernamen einloggen. Die Klasse eigene besteht aus allen Mitgliedern der Domain mydomain.de, auch die Mitglieder dieser Klasse dürfen sich mit realem Namen einloggen. Ihnen steht aber auch der anonyme Modus zur Verfügung. Ist ein Rechner sowohl Mitglied der Domain mydomain.de, als auch Träger einer der drei genannten IP-Adressen und der User will sich real anmelden, so wird der der Klasse admin zugeteilt, weil die zuerst definiert wurde.

> > Der Klasse kunden können alle Rechner der Welt angehören, sie dürfen sich real und als Gast anmelden. Alle die, die sich weltweit anonym einloggen gehören der Klasse alle an.

> > ### Eigenschaften der Klassen

> > Jeder definierten Klasse können im weiteren Verlauf der Datei /etc/ftpaccess bestimmte Eigenschaften und Einschränkungen zugewiesen werden. Gehen wir die wichtigsten der Reihe nach durch:

> > `autogroup Gruppenname Klasse [Klasse ...]`
> >   Wenn ein anonymer User Mitglied einer der genannten Klassen ist, dann bekommt er automatisch die Mitgliedschaft in der genannten Gruppe. Die Gruppe ist eine normale Unix-Gruppe. Somit ist es möglich, bestimmten Klassen Zugriffsrechte auf Dateien zu geben, die andere anonyme User nicht haben.
> > `limit Klasse Zahl Zeit Datei`
> >   Beschränkt den Zugriff von Usern der genannten Klasse während der genannten Zeit auf die genannte Zahl. Wird einem User der Zugriff aufgrund dieser Regel verweigert, so wird ihm der Inhalt der genannten Datei übermittelt.

> >   Wird für die Zahl eine -1 eingegeben, so gilt dies als Synonym für unendlich, es werden also keine Einschränkungen gemacht.

> >   Die Zeitangabe hält sich an das UUCP-Time Format, das hier kurz beschrieben werden soll:

> >   Eine Zeitangabe beginnt grundsätzlich entweder mit Su, Mo, Tu, We, Th, Fr oder Sa und meint damit einen bestimmten Tag. Wk steht für einen beliebigen Arbeitstag (Mo-Fr) und Any meint jeden Tag. Der Angabe des Tages kann eine Zeitangabe in der Form hhmm-hhmm folgen, die dann den Bereich definiert. Mehrere Zeitangaben können durch Kommas voneinander getrennt werden. Die Angabe `never` bedeutet nie.

> >   Existieren mehrere anwendbare limit-Anweisungen, so wird die erste passende angewandt.

> > `compress yes|no Klasse [Klasse ...]`
> >   Erlaubt (yes) oder verbietet (no) den Gebrauch von Kompressionsprogrammen für bestimmte Klassen
> > `tar yes|no Klasse [Klasse ...]`
> >   Erlaubt (yes) oder verbietet (no) den Gebrauch von tar für bestimmte Klassen

> > Wir könnten jetzt also z.B. für unsere oberen Beispielklassen folgende Regeln setzen. Ich habe die einzelnen Regeln kommentiert, so dass eigentlich klar sein sollte, was sie bewirken.

> >       # Mitglieder der Klasse eigene bekommen beim anonymen Login
> >       # Gruppenmitgliedschaft in der Gruppe users
> >       autogroup users eigene

> >       # Mitglieder der Klasse alle bekommen die Gruppenmitgliedschaft
> >       # in der Gruppe ftpuser
> >       autogroup ftpuser alle

> >       # Mitglieder der Klasse admin dürfen immer soviel sie wollen
> >       limit admin    -1   Any  /usr/local/ftp/msgs/msg.dead

> >       # Maximal 20 User des lokalen Netzes
> >       limit eigene   20   Any  /usr/local/ftp/msgs/msg.dead

> >       # Maximal 5 User der Klassen kunden und alle zur Geschäftszeit. Zwischen
> >       # 17 und 8 Uhr dürfen 20 jeder Klasse.
> >       limit kunden    5    Any0800-1700 /usr/local/ftp/msgs/msg.dead
> >       limit alle      5    Any0800-1700 /usr/local/ftp/msgs/msg.dead
> >       limit kunden   20    Any1700-0800 /usr/local/ftp/msgs/msg.dead
> >       limit alle     20    Any1700-0800 /usr/local/ftp/msgs/msg.dead

> >       # tar und compress für alle
> >       tar        yes  admin eigene kunden alle
> >       compress   yes  admin eigene kunden alle

> > Mit Klassen sind also verschiedene Einstellungen möglich, die die Auslastung des FTP-Servers zu bestimmten Zeiten regeln oder grundsätzlich Dinge verbieten oder erlauben. So werden viele Server zwar persönliches FTP für z.B. ihre Kunden erlauben, jedoch keine öffentlichen anonymen Zugänge anbieten. Über die Klassen ist das ganz einfach möglich.

> > ### Andere Zugriffsregeln

> > Neben den Klassen können bestimmte andere Regeln auch einfach für Adressenmuster erstellt werden. So existieren etwa die folgenden Regeln:

> > `deny Adressenmuster Dateiname`
> >   Rechner mit Adressen, die auf das genannte Muster passen, wird grundsätzlich jeder Zugriff verweigert. Der Inhalt der genannten Datei wird ihnen übermittelt. Statt eines Adressenmusters kann auch ein Domain-Namensmuster (*.mydomain.de) oder der Begriff `!nameserved` (ohne Nameservereintrag) benutzt werden.
> > `guestgroup Gruppenname [Gruppenname ...]`
> >   Ist ein User im real-Modus ein Mitglied einer der genannten Gruppen, so wird der guest-Modus auf ihn angewandt.
> > `noretrieve Dateiname [Dateiname ...]`
> >   Die genannten Dateien werden grundsätzlich nie übertragen. Ist die Angabe absolut (beginnt sie mit einem Slash), so gilt das Verbot für genau die genannte Datei. Ist der Dateiname nur ein Name ohne Pfad, so gilt das Verbot für alle Dateien dieses Namens. Achtung, hier sind keine Namensmuster erlaubt.
> > `chmod yes|no Typliste`
> > `delete yes|no Typliste`
> > `overwrite yes|no Typliste`
> > `rename yes|no Typliste`
> > `umask yes|no Typliste`
> >   Erlaubt (yes) oder verbietet (no) die jeweilige Aktion für die entsprechenden Typlisten. Typliste ist wie schon oben eine durch Kommas getrennte Liste der Begriffe `real, anonymous` und `guest`.

> > ### Globale Einstellungen

> > Neben den Zugriffsrechten werden in /etc/ftpaccess auch globale Einstellungen geregelt. Dazu stehen die folgenden Befehle zur Verfügung:

> > `email E-Mail-Adresse`
> >   Die E-Mail Adresse des FTP-Verwalters
> > `passwd-check none|trivial|rfc822 [ enforce|warn ]`
> >   Legt fest, welcher Art die Passwörter für anonyme User sein müssen. none heißt es wird keine Passwortüberprüfung gemacht, trivial heißt, es muß ein @ im Passwort auftauchen und rfc822 fordert eine echte RFC822 kompatible e-mail Adresse. Die optionalen Anhängsel enforce oder warn legen fest, ob diese Regelung zwingend (enforce) ist, oder ob nur gewarnt werden soll.

> > ### Messages

> > Der FTP-Server kann zu verschiedenen Gelegenheiten verschiedene Nachrichten an den User zurückgeben. Diese Nachrichten liegen jeweils in Dateien, die dann an den FTP-User geschickt werden. Der FTP-Server bietet verschiedene Variablen-Substitutionen an, die in diese Dateien geschrieben werden und die er dann durch die entsprechenden Variableninhalte ersetzt. Gültig sind folgende Substitutionen:

> > Substitution | Bedeutung
> > --- | ---
> > `%T` | Lokale Zeit des Servers in der Form: Thu Nov 15 17:12:42 1990
> > `%F` | Freier Plattenplatz auf der aktuellen Partition in Kilobyte.
> > `%C` | Aktuelles Verzeichnis
> > `%E` | Die E-Mail Adresse des Systemverwalters (definiert in /etc/ftpaccess)
> > `%R` | Der Hostname des Client-Rechners
> > `%L` | Der Hostname des FTP-Servers
> > `%U` | Der Username, der beim LogIn ermittelt wurde
> > `%M` | Die maximale erlaubte Anzahl Clients dieser Klasse
> > `%N` | Die aktuelle Anzahl Clients dieser Klasse

> > Meldungen werden zu verschiedenen Anlässen ausgegeben. Wir haben oben schon gesehen, dass eine Meldung ausgegeben wird, wenn

> > - ein limit für eine Klasse erreicht wurde
> > - ein Zugriff mit deny abgelehnt wird
> > Daneben gibt es die Möglichkeit, bestimmte Dateien zur Anzeige zu bringen, wenn bestimmte Aktionen ausgeführt werden. Das geschieht mit dem Kommando
> > `message Dateiname Gelegenheit [Klasse]`
> >   Die bezeichnete Datei wird an den User ausgegeben, wenn die genannte Gelegenheit eintritt. Gelegenheit kann sein:
> >   - `login`
> >     Beim Login
> >   - `cwd=`Verzeichnis
> >     Beim Wechsel in das genannte Verzeichnis. Verzeichnis darf auch ein Muster sein, so dass cwd=* jeden Verzeichniswechsel meint. Bei Verzeichniswechsel wird die Datei immer nur beim ersten Mal angezeigt, um den User nicht durch zu viel Daten zu ärgern. Ist der angegebene Dateiname ein relativer Pfad, so beziegt er sich auf das neue Verzeichnis, in das gewechselt wurde.
> >   So ist es also möglich, verschiedenen Klassen verschiedene Meldungen zukommen zu lassen, wenn sie sich einloggen oder Verzeichnisse wechseln. Eine sehr übliche Einstellung ist:

> >         message  .message  cwd=*

> >   Das bewirkt also, dass bei einem Wechsel in ein beliebiges Verzeichnis die Datei .message an den User geschickt wird, sofern diese Datei im Verzeichnis existiert. Meist enthalten diese Dateien eine Kurzbeschreibung, was in dem Verzeichnis zu finden ist.

> > ### Virtuelle FTP-Server

> > Zu guter Letzt unterstützt der FTP-Server auch noch virtuelle FTP-Server. Ein Rechner, der mehrere IP-Adressen hat, kann für jede Adresse einen eigenen FTP-Server laufen haben. Der Befehl lautet
> > `virtual` IP-Adresse `root` Verzeichnis
> >   Gibt das Wurzelverzeichnis des virtuellen Servers für die angegebene IP-Adresse an.
> > `virtual` IP-Adresse `banner` Dateiname
> >   Gibt den Dateinamen der Datei an, die als Willkommensmeldung gezeigt werden soll
> > `virtual` IP-Adresse `logfile` Dateiname
> >   Gibt den Dateinamen der Logdatei an, in die das Logbuch geschrieben werden soll. Wird diese Angabe weggelassen, so wird die normale Logdatei benutzt.
> > Wie einem Linux-Rechner mehrere IP-Adressen vergeben werden können, wurde bei der Installation virtueller Webserver bereits beschrieben.

> > [Zurück zur FTP-Seite]