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:

Output
Status: 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″>

Output
total 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.conffestgelegt. Öffnen Sie zunächst die Konfigurationsdatei, um sicherzustellen, dass die Einstellungen in Ihrer Konfiguration mit den folgenden übereinstimmen:

  • sudo nano /etc/vsftpd.conf
/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:

/ etc / vsftpd.,conf
. . .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.

/etc/vsftpd.conf
. . .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.

/etc/vsftpd.,conf
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:

/etc/vsftpd.conf
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:

/etc/vsftpd.,conf
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
Output
sammy

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:

/etc/vsftpd.,conf
# 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:

/etc/vsftpd.conf
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:

/etc/vsftpd.,conf
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:

/etc/vsftpd.conf
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:

/etc/vsftpd.conf
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:

/etc/vsftpd.conf
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:

/etc/shells
. . ./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:

Output
This 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.

Articles

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.