Xmlftp implementierungs Details

Aus II-Wiki
Wechseln zu: Navigation, Suche

Details

Konfiguration

Die Konfiguration des XMLFTP Servers soll, wie in der Einleitung bereits erwähnt, so einfach wie möglich werden. Um diesen Anspruch gerecht zu werden gibt es bereits ein grafisches Konfigurationstool namens XMLFTP Konfiguration.
Für anspruchsvollere Anwender gibt es natürlich auch die Möglichkeit die Konfigurationsdateien mit der Hand zu editieren.
Die Konfigurationsdateien unterteilen sich in zwei Gebiete. Einmal die Datei welche die Information über die Benutzer enthält und welche im weiteren auch die allgemeine Serverkonfiguration enthalten wird. Die anderen Konfigurationsdateien, die im Weiteren als DirFiles bezeichnet werden, enthalten die verschiedenen Verzeichnisstruckturen.
Alle Konfigurationsdateien sind, um sie übersichtlicher zu machen, in einer XML ähnlichen Syntax gehalten.

Die Allgemeine und Benutzerkonfiguration

Die Dateien für die Benutzerkonfiguration sollten die Endung ".conf" tragen. Dies ist zwar nicht zwingend notwendig erleichtert aber den Umgang mit den Konfigurationsdateien.

Befehl Funktion
<userdb> </userdb> Diese Tag-Kombination umschließt eine ganze Benutzerkonfigurationsdatei und markiert sie damit als solche.
<user> </user> Hiermit wird ein neuer Benutzer angelegt.
<name> </name> Hiermit wird der Name des Benutzers festgelegt. Dieses Tag darf pro Benutzer nur einmal verwendet werden.
<password> </password> Dies legt das Benutzerpasswort fest. Wird dieses Tag für diesen Benutzer nicht angegeben dann handelt es sich bei diesem Benutzer um einen Anonymousbenutzer. Auch dieser Befehl darf pro Benutzer nur einmal benutzt werden.
<dirfile> </dirfile> Hiermit legt man den Dateinamen für des oder der DirFiles fest die die Verzeichnisstruktur für den Benutzer definieren sollen.
<global> </global> Dieses Tag leitet die globalen Einstellungen ein
<interface> </interface> Dies legt fest auf welcher Netzwerkkarte der FTP Server lauschen soll. 0.0.0.0 sind dabei alle Netzwerkkarten
<user_name> </user_name> Diese Einstellung gibt an unter welchem Benutzer der FTP Server laufen soll. Dieser Benutzer muss natürlich real im System existieren.
<welcome_message> </welcome_message> Dies legt die Wilkommensnachricht fest die der FTP server an den Client senden soll. Dabei ist auf die FTP spezifikation zu achten für diese Nachricht. Desweiteren darf die Nachricht keine Zeilenumbrüche enthalten. Um trozdem eine neue Zeile der Nachricht hinzuzufügen kann man "\n" verwenden. Jede Zeile muss mit "220-" beginnen. Der Server fügt automatisch das abschließende "220 " ein.
<timeout> </timeout> Zwischen diesen Tags kann man die Zeit in Sekunden angeben, die zwischen zwei Befehlen verstreichen muss, bis ein Timeout auftritt. Die Minimale hier einzustellende Zeit beträgt 20s. Ausserdem garantiert der Server kein hartes Timing. Das Timout trit, bei wenig Last auf dem Server, spätestens nach der doppelten Timeoutzeit auf. Bei hoher Last auf dem Server kommt es zum Timeout bereits nach dem Ablaufen der angegebenen Zeit. Wird das Tag nicht angegeben so nimmt der Server 20s Timeout an.
<ip_allow> </ip_allow>
<ip_deny> </ip_deny>
Diese beiden Tags definieren eine IP Regel und können sowohl unter <global> als auch <user> notiert werden
<ip></ip> Mit diesem Tag ist es möglich die IP-Adresse oder die Netzwerke zu definieren auf die die Regel angewendet werden soll.
<network> </network> Dieses Tag dient dazu die Netzwerkmaske anzugeben, wenn die Regel auf ein Netzwerk angewendet werden soll. Will man das die Regel nur auf eine IP Adresse zutrifft dann kann man dieses Tag auch weg lassen.
<default_allow/>
<default_deny/>
Diese beiden Tags definieren was passieren soll, wenn keine der angegebenen Regel auf eine IP Adresse zutrifft. Auch diese beiden Tags können sowohl unter <global> als auch <user> notiert werden


Beispiel für eine Konfigurationsdatei

<userdb>
       <user>
              <name>test</name>
              <password>strenggeheim</password>
              <dirfile>dirfile.xml</dirfile>
              <dirfile>test.xml</dirfile>
              <dirfile>upload.xml</dirfile>
       </user>
       <user>
              <name>anonymous</name>
              <dirfile>anonymous.xml</dirfile>
              <dirfile>upload.xml></dirfile>
       </user>
       <global>
               <default_allow/>
               <ip_deny>
                 <ip>10.0.0.0</ip>
                 <metwork>255.0.0.0</network>
               </ip_deny>
               <ip_allow>
                  <ip>10.0.0.1</ip>
               </ip_allow>
               <interface>0.0.0.0</interface>
               <user_name>ftp</user_name>
               <welcome_message>220-Testversion\n</welcome_message>
               <timeout>120</timeout>
       </global>
</userdb>

Die Dirfiles

Ein Dirfile sollte als Endung ".dir" haben um es von den Konfigurationsdateien unterscheiden zu können.

Befehl Funktion
<dirfile> </dirfile> Diese Tag-Kombination umschließt eine ganze DirFiledatei und markiert sie damit als solche.
<dir> </dir> Mit diesem Tag erstellt man ein Verzeichnis. Diese Tags können verschachtelt werden um Verzeichnisbäume zu repräsentieren
<file> </file> Hiermit definiert man virtuelle Dateien
<name> </name> Mit diesem Tag legt man den Namen des Verzeichnisses oder der Datei fest.
<path> </path> Hiermit kann man ein Virtuellesverzeichnis auf ein beliebiges Realesverzeichnis mappen.

Das heißt das der real existierende Verzeichnisbaum an dieser Stelle in den virtuellen Verzeichnisbaum eingebunden wird. Wird diese Tag angegeben wenn es sich um eine virtuelle Datei handelt dann gibt diese Tag das Plugin an welches verwendet werden soll.

<perm_read/> Das erlaubt es das Verzeichnis zu lesen (anzeigen und Dateien Downloaden)
<perm_write/> Hiermit kann man das Hochladen der Dateien erlauben
<perm_delete/> Das erlaubt das Löschen von Dateien. Das Recht ist nur wirksam wenn auch gleichzeitig <perm_write/> mit angegeben wurde
<perm_rename/> Hiermit kann das umbenennen von Dateien erlaubt werden. Auch dieses Recht ist nur wirksam wenn zusätzlich auch <perm_write/> mit angegeben wurde.
<perm_csub/> Dieses Recht erlaubt es Unterverzeichnisse zu erstellen. Diese Unterverzeichnisse haben dann alle Rechte wie das Verzeichnis in dem sie erstellt wurden. Diese Recht ist nur gültig wenn auch <perm_write/> mit angegeben wurde.


Beispiel für ein DirFile

<dirfile>
  <dir>
     <name>Bilder</name>
     <path>/home/benutzer/bilder</path>
     <perm_read/>
  </dir>
  <dir>
     <name>Upload</name>
     <path>/home/ftp/upload</path>
     <perm_read/>
     <perm_write/>
     <perm_rename/>
     <perm_csub/>
  </dir>
  <dir>
     <name>Virtuelles_Verzeichniss1</name>
     <perm_read/>
     <dir>
        <name>Unterverzeichniss</name>
        <perm_read/>
        <dir>
           <name>Sub1</name>
        </dir>
     </dir>
     <dir>
        <name>Unterverzeichniss2</name>
     </dir>
  </dir>
  <dir>
    <name>VirtualFiles</name>
    <perm_read/>
    <file>
       <name>rcon_plugin</name>
       <perm_read/>
       <path>plugins/rcon.so</path>
    </file>
  </dir>
</dirfile>

Die Startparameter des FTP Servers

Befehl Funktion
-u [Name der Konfigurationsdatei] Mit diesem Parameter kann man den Server mit einer anderen Konfigurationsdatei starten. Windowsbenutzer müssen diesen Parameter angeben.
-l [Name des Logfile] Mit diesem Parameter leitet man die Ausgabe des FTP-Logs in eine Datei um. Wird dieser Parameter nicht angegeben so erscheint der Log im Stdout.

Wie funktioniert der IP Filter

Der IP Filter wird auf jede IP Adresse angewendet die sich zum Server verbinden will. Dabei wird für jede IP Adresse entschieden "erlauben" oder "verweigern" und genau das macht der Server in dem er die ihm angegebenen Regeln auswertet.
Zuerst überprüft der Server ob überhaupt Regeln angegeben wurden. Wenn keine einzige Regel angegeben wurde, dann kommt der Server immer zu dem Schluss "erlauben".
Das Feature der IP Adressen Filterrung kann auf diese weiße abgeschaltet werden. Zu beachten ist das wenigstens die default Regel angegeben wird, weil sonst der Server zugriff durch den DOS filter ganz deaktiviert werden kann.
Sollte der Server feststellen das Regeln angegeben wurden dann überprüft er für jede Regel ob diese für die IP Adresse anwendbar ist.
Stellt der Server fest das genau für diese IP Adresse eine Regel existiert, dann wird diese sofort angewendet. Sollte der Server feststellen das nur eine Netzwerkregel auf die IP Adresse zutrifft sucht er weiter bis er alle Regeln durchsucht hat oder noch eine genau zutreffende Regel findet und führt erst dann die Regel aus.
Im Falle das für eine IP Adrese keine Regel zutrifft wird geschaut was als "default" Regel angegeben wurde und der Server entscheidet dann danach.
Sollten sich zwei Regel widersprechen, gilt bei IP Regeln die erste und bei Netzwerkregeln die letzte. Damit ergibt sich eine große Kombinationsvielfalt für die Regeln hier ein paar Beispiele:
1. Sperren einer IP Adresse

<default_allow/>
<ip_deny>
   <ip>10.0.0.1</ip>
</ip_deny>

2. Erlauben einer IP Adresse

<default_deny/>
<ip_allow>
   <ip>10.0.0.1</ip>
</ip_allow>

3. Sperren eines Netzwerkes und erlauben des Zugriffs einer bestimmten IP Adresse aus diesem Netzwerk

<default_allow/>
<ip_deny>
  <ip>10.0.0.0</ip>
  <network>255.0.0.0</network>
</ip_deny>
<ip_allow>
  <ip>10.0.0.1>
</ip_allow>