Zum Thema Grundlagen wurde ja schon einiges gesagt. Get this done!
Zum Thema FTP und Verschlüsselung: Das schließt sich nicht gegenseitig aus.
Zum Thema vsFTP, gebe ich Dir mal ein Konfigurationsbeispiel aus unserer Serverdokumentation (???? oder ..... sind Anonymisierungen, die ich vorgenommen habe). Wir setzen zwar ArchLinux ein, was sich aber nur in der Installation des Grundpaketes unterscheidet.
Anforderungen:
FTP over SSL/TLS (nur verschlüsselte Verbindungen auf Port 21)
Nur Nutzer vom Server dürfen darauf zugreifen (NO ANONYMOUS)
Vorbedingungen
Existenz eines TLS-Zertifikates (abgeleitet von der CA unter Punkt B)
Existenz eines non-privileged Users für den FTPd (damit dieser nicht als root rumläuft)
Installation:
> pacman -S vsftpd
Konfiguration nach /etc/vsftpd.conf kopieren (-> Dateiinhalt s.u.)
Nutzerliste unter /etc/vsftpd.user_list kopieren (-> Dateiinhalt s.u.)
TLS-Zertifikat nach /etc/ssl/certs/ftp.???.de.cert kopieren
Private-Key vom Zertifikat nach /etc/ssl/private/ftp.????.de.key kopieren
Handling
Server starten/stoppen usw.: systemctl start|stop|restart vsftpd
Dienst aktivieren [Autostart beim Systemneustart]
sysctl enable vsftpd
Konfiguration:
/etc/vsftpd.conf
Code:
#Abhören der IPv4-Ports
listen=YES
#Aktivieren des passiven FTP-Modus (benötigt für Clients hinter NAT)
pasv_enable=YES
#minimale und maximale Portrange für PASV-Befehl
# Die Range sollte weder in den Well-Known-Ports (0...1023)
# noch in den der Registered Ports (1024...49151) liegen
# Um genügend gleichzeitige Transfers zu einem NAT-Nutzer
# zu ermöglichen, sollten einige 1000 Ports ausreichen (je Transfer 1 Port)
pasv_min_port=50000
pasv_max_port=55000
#anonymous_enable=NO deaktiviert anonyme Nutzer - realer Nutzer muss vorhanden sein
anonymous_enable=NO
#local_enable=YES - aktiviert lokale *nix-Nutzer
local_enable=YES
#write_enable=YES - aktiviert Schreibbefehle (ansonsten "Read-Only")
write_enable=YES
#local_umask=022 - deaktiviert Schreib- und Ausführungsrechte für
# andere Nutzer/Gruppen bei hochgeladenen Dateien
local_umask=022
#dirmessage_enable=YES - gibt an den Client eine Nachricht über den erfolgten
# Verzeichniswechsel aus
dirmessage_enable=YES
#Anzeige von Zeiten in lokaler Zeitzone statt GMT
use_localtime=YES
#Log für übertragene Dateien - Standardort ist /var/log/vsftpd.log
# Änderung des Speicherortes über xferlog_file
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
#Für aktives FTP - Port 20 verwenden! Ansonsten könnte es zu Problemen kommen…
# Betrifft NUR aktives FTP, NICHT passives FTP.
connect_from_port_20=YES
#User darf über "chroot" in sein Home-Verzeichnis wechseln
# Wenn Nutzer kein Homeverzeichnis hat, gilt das per secure_chroot_dir
# gesetzte Verzeichnis (sollte ein leeres Verzeichnis sein)
# ACHTUNG: Sollte das chroot-Verzeichnis beschreibbar sein, MUSS
# allow_writeable_chroot auf YES gesetzt werden.
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
allow_writeable_chroot=YES
#Name für den PAM-Zugriff
pam_service_name=vsftpd
#Aktivieren von SSL mit hoher Verschlüsselung
ssl_enable=YES
ssl_ciphers=HIGH
require_ssl_reuse=NO
#Erfordernis des SSL-Logins (kein non-SSL-Login)
force_local_data_ssl=YES
force_local_logins_ssl=YES
#SSL-Zertifikat verwenden - besteht aus Zertifikat (rsa_cert_file)
# und dem dazugehörigen privaten Schlüssel (rsa_private_key_file)
rsa_cert_file=/etc/ssl/certs/ftp.????.de.crt
rsa_private_key_file=/etc/ssl/private/ftp.????.de.key
#Nutzerliste einschalten (userlist_enable=YES)
# auf Whitelist-Modus setzen (userlist_deny=NO)
# Nutzerlisten-Ort setzen (userlist_file=/etc/vsftpd.user_list)
# Hinweis: Nur Nutzer, die in der Datei verzeichnet sind, können sich
# anmelden. Natürlich muss ein entsprechender *nix-Nutzer
# existieren
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.user_list
#Nutzer, unter dem vsftp läuft
# Der Haupt-Prozess läuft trotzdem mit root-Rechten (u.a. für chroot benötigt)!
# Jedes Kind läuft dann aber unter den eigenen Nutzerrechten
nopriv_user=ftp
Nutzerliste (Whitelist für alle *nix-Nutzer, die sich am FTP anmelden dürfen)
/etc/vsftpd.user_list
t...
r...
m...
Erklärungen zur Konfiguration:
https://wiki.archlinux.org/index.php/Very_Secure_FTP_Daemon