Gemeinsamkeiten
|
|
[ Gemeinsamkeiten ] [ in.ftpd ] [ wu-ftpd ] [ ProFTPD ] [ vsftpd ] [ FTP-Clients ]
Unter Debian wird in der Grundinstallation kein FTP-Server mit installiert,
er muss separat nach installiert werden. Dabei kommen z.B. folgende FTP-Server
in Frage: 'in.ftpd', 'wu-ftpd', 'ProFTPD', 'vsftpd'. Welcher FTP-Server
nachinstalliert wird, hängt von den jeweiligen Anspruch und Gegebenheiten ab. Im
Verlauf dieser Seite werden die Gemeinsamkeiten der erwähnten FTP-Server
erläutert. In den folgenden Unterkapiteln, wird auf die detaillierte
Installation / Konfiguration der einzelnen FTP-Server genauer eingegangen.
Grundlagen FTP-Verbindung
Eine FTP-Verbindung durchläuft vier Phasen: Authentifizierung des Benutzers,
Aufbau einer Kontrollverbindung, Aufbau eines Datenkanals und Beenden der
Verbindung.
Zunächst baut der Client die Verbindung zum FTP-Server auf. Alle
FTP-Implementierungen müssen dabei die Standard-Ports: '20' und
'21' unterstützen.
Verbindungen zu Nicht-Standard-Ports darf nur die Client-Seite initiieren.
Sobald die Verbindung zu Stande gekommen ist, gibt der FTP-Server Informationen
über das System aus. Der Server verlangt vom Client die Übermittlung der
Benutzerkennung, nimmt diese vom Client entgegen und fordert ihn dann auf, das
Passwort zu übermitteln.
Nach erfolgreicher Anmeldung kann sich der Client in der Verzeichnisstruktur
bewegen, Verzeichnisse oder Dateien löschen, und Daten zwischen beiden Rechnern
übertragen. Alle Aktionen sind dabei abhängig von den Rechten des jeweils
eingeloggten Benutzer.
Nachdem der Client alle gewünschten Aktionen ausgeführt hat, schließt der Client
die Verbindung. Auch der Server kann Verbindungen trennen, wenn beispielsweise
die Kontrollverbindung abreißt oder ein 'Timeout' eintrifft.
Bei der eigentlichen Datenübertragung des FTP wird zwischen zwei Modi
unterschieden:
- Active Mode
Beim aktiven Mode baut der Server von seinem Port: '20'
eine Datenverbindung zu einem vom Client gewählten Endpunkt auf. Dieser
Endpunkt ist typischerweise ein Port des Clients der jenseits Port: '1023'
liegt, kann aber auch ein anderer Server sein, der seinerseits in den
Passive Mode geschaltet wurde, also auf eine Verbindung wartet. Die
Kommunikation mit Befehlen erfolgt auf dem Port: '21'.
- Passive Mode
Beim passiven Mode baut der Client eine Datenverbindung zum vom Server
gewünschten Port auf. Hier wird typischerweise von beiden Seiten ein Port
jenseits Port: '1023' benutzt.
Diese Technik wird eingesetzt, wenn der Client z.B. hinter einem Router
sitzt, da ihm nicht eindeutig eine IP-Adresse zugeordnet werden kann.
Vorbereitungen zur FTP-Server Installation
Aus Sicherheitsgründen sollten alle FTP-Server nicht als Dämon, sondern vom
Super-Dämon: 'inetd' gestartet werden. Welchem
FTP-Server der 'inetd' bei Bedarf startet, wird in der '/etc/inetd.conf'
angegeben. Sofern mit dem Debian-Tool: 'apt-get
install ...' gearbeitet wird, werden der entsprechende Eintrag zum Teil
automatisch eingefügt. Er sollte jedoch nach der Installation geprüft werden, ob
der entsprechende Eintag korrekt ist:
Auszug aus: /etc/inetd.conf
(ca. Zeile: 29) |
#:STANDARD: These are standard
services.
ftp
stream tcp nowait root
/usr/sbin/tcpd /usr/sbin/in.ftpd |
Ist der 'in.ftpd' installiert, sollte die gelb markierte Zeile in der 'inetd.conf'
für den Start des FTP-Servers verantwortlich sein. Bei anderen installierten
FTP-Servern steht dafür, je nach installierten FTP-Server:
- Beim 'wu-ftpd':
ftp
stream tcp nowait root
/usr/sbin/tcpd /usr/sbin/wu-ftpd -l
- Beim 'ProFTPD':
ftp
stream tcp nowait root
/usr/sbin/tcpd /usr/sbin/proftpd
- Beim 'vsftpd':
ftp
stream tcp nowait root
/usr/sbin/tcpd
/usr/sbin/vsftpd
Wurden Änderungen in der Konfigurationsdatei des Super-Dämons: 'inetd.conf'
gemacht gemacht, so ist dieser mit: '/etc/init.d/inetd
restart' erneut zu starten.
Weiterhin sollte sichergestellt werden, dass die entsprechenden Ports '20'
und '21' für den FTP-Transfer in der Datei:
'/etc/services' frei geschaltet sind:
Auszug aus: /etc/services
(ca. Zeile: 27) |
chargen
19/tcp ttytst source
chargen 19/udp
ttytst source
ftp-data
20/tcp
ftp 21/tcp
fsp 21/udp
fspd
ssh 22/tcp
# SSH Remote Login Protocol
ssh 22/udp
telnet 23/tcp |
Die gelb markierten Ports: '20' und
'21' sollten frei geschaltet sein.
Erstellung einer 'Changed-Root-Umgebung'
Soll der FTP-Server einen anonymen Zugang ermöglichen, so sollte dem anonymen Benutzern eine so
genannte 'Changed-Root-Umgebung' (chroot) zur Verfügung gestellt werden. Ein
eingeloggter Benutzer bekommt ein verändertes
root-Verzeichnis angeboten und
kann nur von diesem Punkt aus in der Verzeichnisstruktur nur nach unten
navigieren. Er kann somit nicht im ganzen Dateisystem des Systems herumsurfen.
Die Erstellung einer solchen Umgebung sollte mit Bedacht erfolgen, da der Aufbau
aufwendig und mit vielen Rechten behaftet ist.
Wie eine solche 'Changed-Root-Umgebung' erstellt werden kann, wird
anhand eines Beispiels im Folgenden vorgestellt. Ausgangspunkt der 'Changed-Root-Umgebung' ist in diesem Fall das Verzeichnis:
'/var/ftp'.
mkdir /var/ftp/
useradd -d /var/ftp ftp
chown root.root /var/ftp
chmod 555 /var/ftp
Zunächst ist das Basis-Verzeichnis für die Umgebung zu
erstellen. Anschließend ist ein Benutzer: 'ftp'
mit home-Verzeichnis des zuvor erstellten
Basis-Verzeichnisses anzulegen. Das Basis-Verzeichnis ist mit entsprechenden
Eigentümer und Rechten zu versehen.
Nach der Erstellung des Basis-Verzeichnisses und des Benutzers, ist unter diesem
eine minimale Struktur, ähnlich wie bei einen Unix-Systems anzulegen. Die
Zahlenwerte in den Klammern entsprechen der chmod-Berechtigung.
/var/ftp+--
(555)
| welcome.msg
(644)
| .message
(644)
| HEADER
(644)
| README
(644)
|
/---bin
(511)
| ls
(111)
| tar
(111)
| gzip
(111)
|
/---dev
(511)
| null
(666)
|
/---etc
(511)
|
passwd
(444)
| group
(444)
|
/---lib
(511)
|
librt.so.1 (555)
|
libacl.so.1 (555)
|
libc.so.6 (555)
|
libpthread.so.0 (555)
|
ld-linux.so.2 (555)
|
libattr.so.1 (555)
|
|---msgs
(511)
|
msg.dead
(644)
|
welcome.msg (644)
|
/---pub
(555)
|
HEADER
(644)
|
README
(644)
| /---(incomming)
(733)
Da der anonyme Benutzer in seiner 'Changed-Root-Umgebung' noch nicht mal auf
Basis-Kommandos wie z.B. 'ls', 'tar'
oder 'gzip' vom System aus zugreifen kann,
müssen diese ihm im Verzeichnis: '/bin'
separat bereitgestellt werden. Die Kommandos brauchen nur kopiert und mit
entsprechenden Rechten versehen werden.
Das gleiche muss mit den notwendigen lib-Dateien
für die wenigen Kommandos geschehen. Die notwendigen
lib-Dateien für ein Kommando können wie
folgt bestimmt werden:
experimental:~# ldd /bin/ls
librt.so.1 => /lib/tls/librt.so.1
(0x4001b000)
libacl.so.1 => /lib/libacl.so.1
(0x40021000)
libc.so.6 => /lib/tls/libc.so.6
(0x40029000)
libpthread.so.0 => /lib/tls/libpthread.so.0
(0x40164000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2
(0x40000000)
libattr.so.1 => /lib/libattr.so.1
(0x40173000)
Das Bestimmen der notwendigen lib-Dateien
sollte mit jedem der angebotenen Kommando unter '/bin'
erfolgen. Die lib-Dateien können dann
auch einfach in das Verzeichnis: '/lib'
kopiert und mit Dateirechten versehen werden.
Im Verzeichnis: '/pub' können die
bereitzustellenden Dateien des FTP-Servers abgelegt werden.
Soll dem anonymen Benutzer auch erlaubt werden Daten auf den Server abzulegen,
so ist innerhalb der 'Changed-Root-Umgebung' ein Verzeichnis: '/incomming'
anzulegen. Damit die anonymen Benutzer nur Dateien in diesem Verzeichnis ablegen
können, jedoch keine Verzeichnisstruktur abrufen können, sollte das
/incomming-Verzeichnis mit den Recht 'chmod
733' versehen werden.
Unter weitere Infos kann eine Skript zur Erstellung einer chroot-Umgebung
geladen werden (mk_chroot_env.tar). Die Datei ist zu entpacken und das Script
ist auszuführen. Weiterhin ist dort eine komplette Umgebung zu findet (chroot_env.tar),
die nur ausgepackt werden brauch. Beide Dateien sind für Debian-Sarge
abgestimmt. In den Dateien für eine chroot-Umgebung befinden sich auch Beispiele
für die Message-Dateien ('welcome.msg','HEADER','README'...),
die je nach eingesetzten FTP-Server, anders benutzt werden.
Anmerkungen
Soll in einer chroot-Umgebung
automatisch eine Übersicht aller vorhanden Dateien und deren Checksumme erstellt
werden, so hilft dieses Skript evtl. weiter:
./mk_ano_ftp_files.sh |
#!/bin/sh
##############################################################################
# PATH: /<HOME-ROOT>/bin/mk_anon_ftp_files.sh
#
# DESCRIPTION: Create the files "ls-lR, ls-lR.gz, MD5SUMS and
MD5SUMS.gz #
# in an anonymous ftp chroot enviroment.
#
# USAGE: via cron-job: /<HOME-ROOT>/bin/mk_anon_ftp_files.sh
#
# AUTHOR: Norbert Eusterholz, NE, <norbert@eusterholz.com>
#
# HISTORY:
#
#
+------------+----------------------------------------------------+------+
#
# | DATE | CHANGES | NAME |
#
#
+============+====================================================+======+
#
# | 2003.12.29 | creation | NE |
#
#
+------------+----------------------------------------------------+------+
#
##############################################################################
# Path to chroot enviroment
DIR_FTP_PUB='/var/ftp/pub'
# create 'ls-lR' and 'ls-lR.gz'
TZ=CET LANG= ls -lR $DIR_FTP_PUB > $DIR_FTP_PUB/ls-lR
gzip -9c $DIR_FTP_PUB/ls-lR > $DIR_FTP_PUB/ls-lR.gz
# create 'md5sums' and 'md5sum.gz'
find $DIR_FTP_PUB -type f -exec md5sum {} \; > $DIR_FTP_PUB/MD5SUMS
gzip -9c $DIR_FTP_PUB/MD5SUMS > $DIR_FTP_PUB/MD5SUMS.gz |
Das Skript kann als cron-Job zyklisch ausgeführt werden und erstellt so
aktuell die Dateien: 'ls-lR', 'ls-lR.gz', 'MD5SUMS', 'MD5SUMS.gz'.
Weitere Infos
[ Home ] [ Nach oben ] [ Gemeinsamkeiten ] [ in.ftpd ] [ wu-ftpd ] [ ProFTPD ] [ vsftpd ] [ FTP-Clients ]
letzte Änderung:
07. März 2006 |