Einführung
FTP, kurz für File Transfer Protocol, ist ein Netzwerkprotokoll, das einst häufig zum Verschieben von Dateien zwischen einem Client und einem Server verwendet wurde. Es wurde seitdem durch schnellere, sicherere und bequemere Möglichkeiten zur Bereitstellung von Dateien ersetzt. Viele gelegentliche Internetnutzer erwarten, dass sie mit https
direkt von ihrem Webbrowser herunterladen, und Befehlszeilenbenutzer verwenden eher sichere Protokolle wie scp
oder sFTP.,
FTP wird weiterhin verwendet, um ältere Anwendungen und Workflows mit sehr spezifischen Anforderungen zu unterstützen. Wenn Sie die Wahl haben, welches Protokoll verwendet werden soll, sollten Sie die moderneren Optionen erkunden. Wenn Sie jedoch FTP benötigen, ist vsftpd eine ausgezeichnete Wahl. vsftpd wurde für Sicherheit, Leistung und Stabilität optimiert und bietet starken Schutz vor vielen Sicherheitsproblemen, die auf anderen FTP-Servern auftreten, und ist der Standard für viele Linux-Distributionen.,
In diesem Tutorial zeigen wir Ihnen, wie Sie vsftpd so konfigurieren, dass ein Benutzer Dateien über FTP mit durch SSL/TLS gesicherten Anmeldeinformationen in sein Heimatverzeichnis hochladen kann.
Voraussetzungen
Um diesem Tutorial zu folgen, benötigen Sie:
- Einen Ubuntu 16.04-Server mit einem Nicht-Root-Benutzer mit
sudo
– Berechtigungen: In unserem ersten Server-Setup mit Ubuntu 16.04-Handbuch erfahren Sie mehr darüber, wie Sie einen Benutzer mit diesen Berechtigungen einrichten.
Sobald Sie einen Ubuntu-Server installiert haben, können Sie beginnen.,
Schritt 1-Installieren von vsftpd
Zunächst aktualisieren wir unsere Paketliste und installieren den vsftpd-Daemon:
Wenn die Installation abgeschlossen ist, kopieren wir die Konfigurationsdatei, damit wir mit einer leeren Konfiguration beginnen und das Original als Backup speichern können.
- sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
Mit einer Sicherung der Konfiguration sind wir bereit, die Firewall zu konfigurieren.
Schritt 2 – Öffnen der Firewall
Wir überprüfen den Firewall-Status, um festzustellen, ob er aktiviert ist., In diesem Fall stellen wir sicher, dass FTP-Datenverkehr zulässig ist, sodass Sie beim Testen nicht auf Firewall-Regeln stoßen, die Sie blockieren.
- sudo ufw status
In diesem Fall ist nur SSH erlaubt durch:
OutputStatus: activeTo Action From-- ------ ----OpenSSH ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)
Möglicherweise sind andere Regeln vorhanden oder überhaupt keine Firewall-Regeln. Da in diesem Fall nur ssh
– Datenverkehr zulässig ist, müssen wir Regeln für den FTP-Datenverkehr hinzufügen.,
Wir müssen die Ports 20 und 21 für FTP öffnen, Port 990 für später, wenn wir TLS aktivieren, und Ports 40000-50000 für den Bereich der passiven Ports, die wir in der Konfigurationsdatei festlegen möchten:
- sudo ufw allow 20/tcp
- sudo ufw allow 21/tcp
- sudo ufw allow 990/tcp
- sudo ufw allow 40000:50000/tcp
- sudo ufw status
Jetzt sehen unsere Firewall-Regeln so aus:
Wenn vsftpd
installiert und die erforderlichen Ports geöffnet sind, können wir mit dem nächsten Schritt fortfahren..
Schritt 3-Vorbereiten des Benutzerverzeichnisses
Für dieses Tutorial erstellen wir einen Benutzer, möglicherweise haben Sie jedoch bereits einen Benutzer, der FTP-Zugriff benötigt., Wir achten darauf, den Zugriff eines vorhandenen Benutzers auf seine Daten in den folgenden Anweisungen beizubehalten. Trotzdem empfehlen wir Ihnen, mit einem neuen Benutzer zu beginnen, bis Sie Ihr Setup konfiguriert und getestet haben.
Zuerst fügen wir einen Testbenutzer hinzu:
- sudo adduser sammy
Weisen Sie bei Aufforderung ein Kennwort zu und drücken Sie die EINGABETASTE über die anderen Eingabeaufforderungen.
FTP ist im Allgemeinen sicherer, wenn Benutzer auf ein bestimmtes Verzeichnis beschränkt sind.vsftpd
erreicht dies mit chroot
Jails., Wenn chroot
für lokale Benutzer aktiviert ist, sind sie standardmäßig auf ihr Heimatverzeichnis beschränkt. Aufgrund der Art und Weise, wie vsftpd
das Verzeichnis sichert, darf es jedoch nicht vom Benutzer beschreibbar sein. Dies ist in Ordnung für einen neuen Benutzer, der nur über FTP eine Verbindung herstellen sollte, aber ein vorhandener Benutzer muss möglicherweise in seinen Home-Ordner schreiben, wenn er auch Shell-Zugriff hat.,
In diesem Beispiel erstellen wir, anstatt Schreibrechte aus dem Home-Verzeichnis zu entfernen, ein ftp
– Verzeichnis, das als chroot
und ein beschreibbares files
– Verzeichnis für die tatsächlichen Dateien dient.,33″>
Outputtotal 84 dr-xr-xr-x 2 nobody nogroup 4096 Aug 24 21:29 .4 drwxr-xr-x 3 sammy sammy 4096 Aug 24 21:29 ..
Als nächstes erstellen wir das Verzeichnis, in das Dateien hochgeladen werden können, und weisen dem Benutzer den Besitz zu:
- sudo mkdir /home/sammy/ftp/files
- sudo chown sammy:sammy /home/sammy/ftp/files
Eine Berechtigungsprüfung für das Verzeichnis files
sollte Folgendes zurückgeben:
- sudo ls -la /home/sammy/ftp
Schließlich werden fügen Sie eine test.txt
– Datei hinzu, die beim späteren Testen verwendet werden soll:
- echo "vsftpd test file" | sudo tee /home/sammy/ftp/files/test.txt
Nachdem wir nun das Verzeichnis ftp
gesichert und dem Benutzer Zugriff auf das Verzeichnis files
ermöglicht haben, wenden wir uns der Konfiguration zu.,
Schritt 4-Konfigurieren des FTP-Zugriffs
Wir planen, einem einzelnen Benutzer mit einem lokalen Shell-Konto die Verbindung mit FTP zu ermöglichen. Die beiden Schlüsseleinstellungen hierfür sind bereits in vsftpd.conf
festgelegt. Öffnen Sie zunächst die Konfigurationsdatei, um sicherzustellen, dass die Einstellungen in Ihrer Konfiguration mit den folgenden übereinstimmen:
- sudo nano /etc/vsftpd.conf
Als nächstes müssen wir einige Werte in der Datei ändern. Um dem Benutzer das Hochladen von Dateien zu ermöglichen, kommentieren wir die Einstellung write_enable
aus, sodass wir Folgendes haben:
. . .write_enable=YES. . .
Wir kommentieren auch die chroot aus, um zu verhindern, dass der mit FTP verbundene Benutzer auf Dateien oder Befehle außerhalb des Verzeichnisbaums zugreift.
. . .chroot_local_user=YES. . .
Wir fügen eine user_sub_token
hinzu, um den Benutzernamen in unseren local_root directory
Pfad einzufügen, damit unsere Konfiguration für diesen Benutzer und alle zukünftigen Benutzer funktioniert, die hinzugefügt werden könnten.
user_sub_token=$USERlocal_root=/home/$USER/ftp
Wir beschränken den Bereich der Ports, die für passives FTP verwendet werden können, um sicherzustellen, dass genügend Verbindungen verfügbar sind:
pasv_min_port=40000pasv_max_port=50000
Hinweis: Wir haben die Ports, die wir hier für den passiven Portbereich festgelegt haben, vorab geöffnet. Wenn Sie die Werte ändern, aktualisieren Sie unbedingt Ihre Firewall-Einstellungen.
Da wir nur den FTP-Zugriff von Fall zu Fall zulassen möchten, richten wir die Konfiguration so ein, dass einem Benutzer nur dann Zugriff gewährt wird, wenn er explizit zu einer Liste hinzugefügt wird und nicht standardmäßig:
userlist_enable=YESuserlist_file=/etc/vsftpd.userlistuserlist_deny=NO
userlist_deny
schaltet die Logik. Wenn es auf „JA“ gesetzt ist, wird Benutzern in der Liste der FTP-Zugriff verweigert. Wenn es auf „NEIN“ gesetzt ist, haben nur Benutzer in der Liste Zugriff. Wenn Sie mit der Änderung fertig sind, speichern und beenden Sie die Datei.
Schließlich erstellen und fügen wir unseren Benutzer der Datei hinzu., Wir verwenden das Flag -a
zum Anhängen an die Datei:
- echo "sammy" | sudo tee -a /etc/vsftpd.userlist
Überprüfen Sie, ob es wie erwartet hinzugefügt wurde:
cat /etc/vsftpd.userlist
Outputsammy
Starten Sie den Daemon neu, um die Konfigurationsänderungen zu laden:
- sudo systemctl restart vsftpd
Jetzt sind wir bereit zum Testen.
Schritt 5 – Testen des FTP-Zugriffs
Wir haben den Server so konfiguriert, dass nur der Benutzer sammy
eine Verbindung über FTP herstellen kann. Stellen wir sicher, dass das der Fall ist.
Anonyme Benutzer sollten keine Verbindung herstellen: Wir haben den anonymen Zugriff deaktiviert., Hier testen wir das, indem wir versuchen, anonym eine Verbindung herzustellen. Wenn wir es richtig gemacht haben, sollte anonymen Benutzern die Berechtigung verweigert werden:
- ftp -p 203.0.113.0
Schließen Sie die Verbindung:
- bye
Andere Benutzer als sammy
sollten keine Verbindung herstellen: Als nächstes versuchen wir, eine Verbindung herzustellen, da unser sudo
Benutzer. Auch ihnen sollte der Zugriff verweigert werden, und dies sollte geschehen, bevor sie ihr Passwort eingeben dürfen.,und Dateien schreiben: Hier stellen wir sicher, dass unser designierter Benutzer canconnect:
- ftp -p 203.0.113.0
Wir wechseln in das Verzeichnis files
und verwenden dann den Befehl get
, um die zuvor erstellte Testdatei auf unseren lokalen Computer zu übertragen:
- cd files
- get test.txt
right back around and try to upload the file with a new name to test write permissions:
- put test.txt upload.txt
Close the connection:
- bye
Now that we ‚ve tested our configuration, we‘ ll take steps to further secure our server.,
Schritt 6-Transaktionen sichern
Da FTP keine Daten während der Übertragung verschlüsselt, einschließlich Benutzeranmeldeinformationen, aktivieren wir TTL / SSL, um diese Verschlüsselung bereitzustellen. Der erste Schritt besteht darin, die SSL-Zertifikate für die Verwendung mit vsftpd zu erstellen.
Wir verwenden openssl
, um ein neues Zertifikat zu erstellen, und verwenden das Flag -days
, um es für ein Jahr gültig zu machen. Im selben Befehl fügen wir einen privaten 2048-Bit-RSA-Schlüssel hinzu., Wenn Sie dann sowohl die Flags -keyout
als auch -out
auf denselben Wert setzen, befinden sich der private Schlüssel und das Zertifikat in derselben Datei.
Wir tun dies mit folgendem Befehl:
- sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Sie werden aufgefordert, Adressdaten für Ihr Zertifikat anzugeben., Ersetzen Sie Ihre eigenen Informationen für die folgenden Fragen:
Weitere Informationen zu den Zertifikatflags finden Sie unter OpenSSL Essentials: Arbeiten mit SSL-Zertifikaten, privaten Schlüsseln und CSRs
Sobald Sie die Zertifikate erstellt haben, öffnen Sie die Konfigurationsdatei vsftpd
erneut:
- sudo nano /etc/vsftpd.conf
Zum Ende der Datei sollten Sie zwei Zeilen mit rsa_
. Kommentieren Sie sie aus, damit sie so aussehen:
# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
Fügen Sie unter ihnen die folgenden Zeilen hinzu, die auf das Zertifikat und den privaten Schlüssel verweisen, die wir gerade erstellt haben:
rsa_cert_file=/etc/ssl/private/vsftpd.pemrsa_private_key_file=/etc/ssl/private/vsftpd.pem
Danach erzwingen wir die Verwendung von SSL, wodurch Clients, die sich nicht mit TLS befassen können, daran gehindert werden, eine Verbindung herzustellen. Dies ist erforderlich, um sicherzustellen, dass der gesamte Datenverkehr verschlüsselt ist, kann Ihren FTP-Benutzer jedoch dazu zwingen, die Clients zu ändern. Ändern Sie ssl_enable
zu YES
:
ssl_enable=YES
Fügen Sie danach die folgenden Zeilen hinzu, um anonyme Verbindungen über SSL explizit zu verweigern und SSL sowohl für die Datenübertragung als auch für die Anmeldung zu benötigen:
allow_anon_ssl=NOforce_local_data_ssl=YESforce_local_logins_ssl=YES
Danach konfigurieren wir den Server für die Verwendung von TLS, dem bevorzugten Nachfolger von SSL, indem wir die folgenden Zeilen hinzufügen:
ssl_tlsv1=YESssl_sslv2=NOssl_sslv3=NO
Schließlich werden wir zwei weitere Optionen. Erstens benötigen wir keine SSL-Wiederverwendung, da dies viele FTP-Clients beschädigen kann., Wir werden „hohe“ Verschlüsselungs-Verschlüsselungssuiten benötigen, was derzeit Schlüssellängen gleich oder größer als 128 Bit bedeutet:
require_ssl_reuse=NOssl_ciphers=HIGH
Wenn Sie fertig sind, speichern und schließen Sie die Datei.
Jetzt müssen wir den Server neu starten, damit die Änderungen wirksam werden:
- sudo systemctl restart vsftpd
Zu diesem Zeitpunkt können wir keine Verbindung mehr zu einem unsicheren Befehlszeilenclient herstellen. Wenn wir es versuchen würden, würden wir Folgendes sehen:
Als nächstes überprüfen wir, ob wir eine Verbindung mit einem Client herstellen können, der TLS unterstützt.,
Schritt 7-Testen von TLS mit FileZilla
Die meisten modernen FTP-Clients können für die Verwendung der TLS-Verschlüsselung konfiguriert werden. Wir werden zeigen, wie Sie eine Verbindung mit FileZilla aufgrund seiner plattformübergreifenden Unterstützung herstellen können. Konsultieren Sie die Dokumentation für andere Kunden.
Wenn Sie FileZilla zum ersten Mal öffnen, finden Sie das Site Manager-Symbol direkt unter der Word-Datei, das Symbol ganz links in der oberen Zeile. Klicken Sie es:
Ein neues Fenster öffnet sich., Klicken Sie unten rechts auf die Schaltfläche „Neue Site“:
Unter“ Meine Sites „erscheint ein neues Symbol mit den Worten“ Neue Site“. Sie können es jetzt benennen oder später zurückkehren und die Schaltfläche Umbenennen verwenden.
Sie müssen das Feld „Host“ mit dem Namen oder der IP-Adresse ausfüllen. Wählen Sie im Dropdown-Menü“ Verschlüsselung „die Option“Explicit FTP über TLS erfordern“.
Für“ Anmeldetyp „wählen Sie“ Nach Passwort fragen“. Geben Sie den von Ihnen erstellten FTP-Benutzer in das Feld „Benutzer“ein:
Klicken Sie unten in der Benutzeroberfläche auf“ Verbinden“., Sie werden nach dem Kennwort des Benutzers gefragt:
Klicken Sie auf“ OK“, um eine Verbindung herzustellen. Sie sollten nun mit Ihrem Server mit TLS/SSL-Verschlüsselung verbunden sein.
Wenn Sie das Zertifikat akzeptiert haben, doppelklicken Sie auf den Ordner files
und ziehen Sie den Upload.txt nach links, um zu bestätigen, dass Sie Dateien herunterladen können.
Wenn Sie dies getan haben, klicken Sie mit der rechten Maustaste auf die lokale Kopie und benennen Sie sie in upload-tls um.txt` und ziehen Sie es zurück auf den Server, um zu bestätigen, dass Sie Dateien hochladen können.,
Sie haben nun bestätigt, dass Sie Dateien mit aktiviertem SSL/TLS sicher und erfolgreich übertragen können.
Schritt 8-Deaktivieren des Shell-Zugriffs (optional)
Wenn Sie TLS aufgrund von Clientanforderungen nicht verwenden können, können Sie Sicherheit erlangen, indem Sie die Möglichkeit des FTP-Benutzers deaktivieren, sich auf andere Weise anzumelden. Eine relativ einfache Möglichkeit, dies zu verhindern, besteht darin, eine benutzerdefinierte Shell zu erstellen. Dies bietet keine Verschlüsselung, beschränkt jedoch den Zugriff eines kompromittierten Kontos auf Dateien, auf die per FTP zugegriffen werden kann.,
Öffnen Sie zunächst eine Datei mit dem Namen ftponly
im Verzeichnis bin:
- sudo nano /bin/ftponly
Wir fügen dem Benutzer eine Nachricht hinzu, warum er sich nicht anmelden kann.,/p>
#!/bin/shecho "This account is limited to FTP access only."
Ändern Sie die Berechtigungen, um die Datei ausführbar zu machen:
- sudo chmod a+x /bin/ftponly
Öffnen Sie die Liste der gültigen Shells:
- sudo nano /etc/shells
Fügen Sie unten hinzu:
. . ./bin/ftponly
Aktualisieren Sie die Shell des Benutzers mit folgendem Befehl:
- sudo usermod sammy -s /bin/ftponly
Versuchen Sie nun, sich als sammy anzumelden:
Sie sollten Folgendes sehen:
OutputThis account is limited to FTP access only.Connection to 203.0.113.0 closed.
Dies bestätigt, dass der Benutzer nicht mehr ssh
zum Server und ist nur auf FTP-Zugriff beschränkt.,
Fazit
In diesem Tutorial haben wir das Einrichten von FTP für Benutzer mit einem lokalen Konto behandelt. Wenn Sie eine externe Authentifizierungsquelle verwenden müssen, sollten Sie sich die Unterstützung virtueller Benutzer durch vsftpd ansehen. Dies bietet eine Vielzahl von Optionen durch die Verwendung von PAM, den steckbaren Authentifizierungsmodulen, und ist eine gute Wahl, wenn Sie Benutzer in einem anderen System wie LDAP oder Kerberos verwalten.