11 Feb 2024

Dateieingang mit FTP

Vor kurzem kam ich in die Verlagenheit, dass wir auf einem Event einen Ort brauchen, an dem wir Dateien austauschen konnten. Auch wenn das Protokoll in die Tage gekommen zu sein scheint und es heute wenig verbreitet ist, war FTP in dem Fall die einzige Option. Daher brauche ich einen entsprechenden Server mit folgenden Anforderungen:

Bitte beachtet, dass ihr so einen Server nicht öffentlich im Internet betreiben solltet. Jeder kann so eure Dateien herunterladen und jeder kann euch Daten auf den Server hochladen, insbesondere auch höchst illegale Dinge.

Ich habe mich für dieses Projekt für vsftpd entschieden, einen einfach zu konfigurierenden FTP-Server. Installieren kann man ihn beispielsweise unter Debian einfach mit apt install vsftpd. Für den TLS-Part könnt ihr je nach Einsatzzweck ein Zertifikat von einer CA eurer Wahl, beispielsweise Let’s Encrypt, nutzen oder ein self-signed Zertifikat nutzen. Ich nehme an, dass das Zertifikat unter /etc/ssl/private/ftp.crt und der dazugehörende private Schlüssel unter /etc/ssl/private/ftp.key liegt. Passt die Pfade bitte an eure Gegebenheiten an.

Um den Server mit den Anforderungen oben zu beschreiben, müsst ihr folgendes in die Konfigurationsdatei /etc/vsftpd.conf schreiben:

# IPv6 einschalten
listen=NO
listen_ipv6=YES
# TLS Support einrichten
rsa_cert_file=/etc/ssl/private/ftp.crt
rsa_private_key_file=/etc/ssl/private/ftp.key
ssl_enable=YES
# Auch Anonymen Nutzer erlauben sich er TLS mit dem Server zu verbinden.
allow_anon_ssl=YES
# Lokale Nutzer deaktivieren
local_enable=NO
# Anonymen Zugriff erlauben und diesem Schreibrechte einräuen
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
# Generell schreiben erlauben, dies ist zusätzlich notwendig
write_enable=YES

# Im folgenden ein paar generelle Einstellungen, die ich aus der
# Standard-Konfigurationsdatei übernommen habe

# Wenn ein Nutzer einen Ordner betritt,
# soll ihm die Nachricht in der Datei .message angezeigt werden
dirmessage_enable=YES
# Lokale Zeit statt UTC verwenden
use_localtime=YES
# Logs über Uploads und Downloads anlegen
xferlog_enable=YES
# Zur besseren Kompatibilität mit einigen Clients,
# soll der Datenport auf 20 gelegt werden
# Der Kontrollport ist weiterhin auf Port 21
connect_from_port_20=YES
# ein leeres Verzeichnis, in das vsftp ein per chroot sich kapselt,
# wenn es gerade nicht auf die Dateien auf dem Server zugreifen muss
# dies soll die Sicherheit erhöhen
secure_chroot_dir=/var/run/vsftpd/empty
# Der Benutzer mit dem vsftp im System interagiert
pam_service_name=vsftpd

Die Daten, die per FTP angeboten werden, liegen auf dem Server selbst unter /srv/ftp. Damit ihr da einen Ort habt, wo eure Besucher Dateien hochladen können, müsst ihr nur einen Ordner anlegen und jedem dort Schreibrechte geben. Alle anderen Orte, die nicht für “other” schreibbar sind, sind über den FTP-Server schreibgeschützt. Das geht beispielsweise mit folgenden Befehlen:

mkdir -p /srv/ftp/000-Upload
chmod 777 /srv/ftp/000-Upload

In dieser Konfiguration können Nutzer anonym Daten hochladen, jedoch nicht löschen oder überschreiben.