# File Transfer

Das Kommando `ftp` dient der Übertragung von Daten von einem Internetrechner zu einem anderen. Die Besonderheit des zugehörigen Protokolls liegt in den getrennten Kanälen für die Daten und die Steuerung (Abbildung) sowie in der Datenübertragung ohne Verwendung eines Spoolers.

Im RFC 959 ist für FTP TCP-Port 20 als Steuerungskanal und TCP-Port 21 als Datenkanal festgelegt. FTP verwendet als Transportprotokoll immer TCP, da dieses bereits Vorkehrungen für einen sicheren Datentransfer enthält und FTP sich darum nicht zu kümmern braucht.

Abbildung: File Transfer Protokoll

Einrichtung des Servers

Per Voreinstellung sollte das Paket bereits installiert sein: In den Dateien `/etc/inetd.conf` und `/etc/services` müssen die entsprechenden Einträge vorhanden sein:

`user@sonne> less /etc/inetd.conf ... # Option -a bewirkt die Auswertung der Datei /etc/ftpaccess # ftp stream tcp nowait root /usr/sbin/tcpd wu.ftpd -a ... user@sonne> less /etc/services ... ftp 21/tcp ...`

Beeinflusst wird die Arbeit des FTP-Servers durch drei (vier) Dateien:

- `/etc/ftpaccess`: enthält Optionen (Sicherheit), die den Umfang der Dienstleistungen des Servers festlegen.
- `/etc/ftpconversions`: beschreibt die Behandlung komprimierter Daten.

- `/etc/ftpusers`: enthält die Nutzerkennzeichen, die FTP nicht verwenden dürfen:

  `user@sonne> less /etc/ftpusers # # ftpusers # This file describes the names of the users that may # _*NOT*_ log into the system via the FTP server. # This usually includes "root","uucp", "news" and the # like, because those users have too much power to be # allowed to do "just" FTP... # root lp news uucp games man at mdom gnats nobody # End.`

- `/etc/ftpgroups`: analog zu `ftpusers` beschränkt diese Datei den Zugang von Gruppen; diese Datei existiert nicht immer.

Die mit dem Paket installierten Dateien sollten in den meisten Fällen den Ansprüchen genügen. Auf Client-Seite ist keinerlei Konfiguration notwendig. Eine kleine Beispielsitzung soll die Installation testen:

`user@sonne> ftp sonne Connected to sonne.galaxis.de. 220 sonnegalaxis.de FTP server (Version wu-2.4.2-academ[BETA-18](1) Fri Dec 11 19:58:25 /etc/localtime 1998) ready. Name (sonne:user): 331 Password required for user. Password: 230 User user logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd 257 "/home/user" is current directory. ftp> ? Commands may be abbreviated. Commands are: ! debug mdir sendport site $ dir mget put size account disconnect mkdir pwd status append exit mls quit struct ascii form mode quote system bell get modtime recv sunique binary glob mput reget tenex bye hash newer rstatus tick case help nmap rhelp trace cd idle nlist rename type cdup image ntrans reset user chmod lcd open restart umask close ls prompt rmdir verbose cr macdef passive runique ? delete mdelete proxy send ftp> cd /usr/local 250 CWD command successful. ftp> ls 200 PORT command successful. 150 Opening ASCII mode data connection for /bin/ls. total 10 drwxr-xr-x 10 root root 1024 Feb 15 15:52 . drwxr-xr-x 23 root root 1024 Feb 15 15:54 .. drwxr-xr-x 2 root root 1024 Feb 15 15:48 bin drwxr-xr-x 7 root root 1024 Apr 20 13:15 ftp drwxr-xr-x 6 root root 1024 Dec 12 01:20 httpd drwxr-xr-x 4 root root 1024 Feb 15 15:52 httpsd drwxr-xr-x 2 root root 1024 Feb 15 15:48 include drwxr-xr-x 2 root root 1024 Feb 15 15:05 info drwxr-xr-x 2 root root 1024 Feb 15 15:48 lib drwxr-xr-x 12 root root 1024 Apr 19 08:47 man 226 Transfer complete. ftp> bye 221 Goodbye.`

Der einfachste Weg um anonymes FTP zuzulassen (Nutzerkennzeichen `ftp` oder `anonymous`), ist unter SuSE die Installation des Paketes `ftpdir` aus der Serie `n`. Die Schritte zur Realisierung per Hand sollen hier in knapper Form abgehandelt werden.

1. In der `/etc/passwd` muss ein Account unter dem Kennzeichen `ftp` existieren:

   `root@sonne> less /etc/passwd | grep ftp ftp:x:40:2:ftp account:/usr/local/ftp:/bin/bash`

   Das eingetragene Homeverzeichnis ist gleichzeitig die Basis für die anzulegenden Dateien und Verzeichnisse.

2. Im FTP-Basisverzeichnis sind folgende Unterverzeichnisse mit den angegebenen Rechten zu erzeugen:

   `root@sonne> ls -l /usr/local/ftp total 7 drwxr-xr-x 2 root root 1024 Apr 20 15:00 bin drwxr-xr-x 2 root root 1024 Apr 20 15:00 dev drwxr-xr-x 2 root root 1024 Apr 20 15:00 etc drwxr-xr-x 2 root root 1024 Apr 20 15:00 lib drwxr-xr-x 2 root root 1024 Apr 20 15:00 msgs drwxr-xr-x 2 root root 1024 Apr 20 15:00 pub drwxr-xr-x 3 root root 1024 Apr 20 15:00 usr`

3. Ins Unterverzeichnis `./bin` sind die Programme `compress`, `ls` und `tar` zu installieren. Diese Programme werden vom FTP-Dämonen benötigt (minimal reicht bereits `ls`). Achtung: Es werden die statisch gelinkten Versionen der Kommandos benötigt:

   `root@sonne> file ls ls: ELF 32-bit LSB executable, Intel 80386, version 1, statically linked, stripped`

4. Im Unterverzeichnis `./etc` müssen die Dateien `passwd` und `group` mit den Rechten `644` erzeugt werden:

   `root@sonne> vim etc/passwd root:x:0:0:Super User:/root:/bin/bash root@sonne> vim etc/group root:x:0:root users:x:100:root`

   Das Kommando `ls` zeigt anhand dieser Dateien die Zuordnung der UIDs und GIDs für die gespeicherten Dateien an.

5. Das Verzeichnis `./lib` bleibt in den meisten Fällen leer. Sollten im Verzeichnis `./bin` dynamisch gelinkte Programme installiert werden, müssen alle von diesen benötigten shared-object- Bibliotheken hier zu finden sein.
6. In `./msgs` existieren die beiden Dateien `msg.dead` und `welcome.msg`, deren Inhalte bei fehlgeschlagenem Login bzw. als Begrüßung angezeigt werden.
7. Das Verzeichnis `./pub` ist normalerweise die Wurzel für alle Daten, die per FTP der Welt zugänglich gemacht werden.
8. Das Verzeichnis `./usr` enthält ein Unterverzeichnis `bin` mit den beiden Kommandos `ls` und `gzip`. Dieses kann aber auch entfallen.

Neben FTP existiert ein weiteres Datentransfer-Protokoll mit minimalen Anforderungen: Trivial File Transfer Protocol. Im Unterschied zum FTP verwendet TFTP das User Datagram Protocol (UDP) zum Transport der Daten.

Als Folge daraus muss das Protokoll sich selbst um Sicherungsfunktionen kümmern. Auch entfällt das Einloggen auf dem Server, so dass TFTP serverseitig starken Restriktionen unterworfen ist (nur für "weltweit" lesbare und schreibbare Dateien). Einsatzgebiet von TFTP ist das Bootstrapping plattenloser Rechner, da die hierfür notwendigen Daten (Netzwerktreiber, IP, UDP, das Protokoll selbst) in einem EEPROM Platz finden.