So richten Sie vsftpd für einen Benutzer ein's Verzeichnis unter Ubuntu 18.04

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 konfigurieren Sie vsftpd so, dass ein Benutzer Dateien über FTP mit SSL/TLS gesicherten Anmeldeinformationen in sein Heimatverzeichnis hochladen kann.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

  • Einen Ubuntu 18.04-Server und einen Nicht-Root-Benutzer mit sudo-Berechtigungen: Sie können mehr darüber erfahren, wie Sie einen Benutzer mit diesen Berechtigungen in unserem anfänglichen Server-Setup mit Ubuntu 18.04-Handbuch einrichten.,

Schritt 1 — Installieren von vsftpd

Beginnen wir mit der Aktualisierung unserer Paketliste und der Installation des vsftpd Daemon:

  • sudo apt update
  • sudo apt install vsftpd

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

Überprüfen wir den Firewall-Status, um zu sehen, ob er aktiviert ist., Wenn ja, stellen wir sicher, dass FTP-Datenverkehr zulässig ist, damit Firewall-Regeln unsere Tests nicht blockieren.

Überprüfen Sie den Firewall-Status:

  • sudo ufw status

In diesem Fall ist nur SSH zulässig 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.,

Öffnen wir die Ports 20 und 21 für FTP, port 990 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

Unsere Firewall-Regeln sollten nun so aussehen:

Wenn vsftpd installiert und die erforderlichen Ports geöffnet sind, erstellen wir einen dedizierten FTP-Benutzer.,

Schritt 3-Vorbereiten des Benutzerverzeichnisses

Wir erstellen einen dedizierten FTP-Benutzer, aber Sie haben möglicherweise 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.

Fügen Sie zunächst einen Testbenutzer hinzu:

  • sudo adduser sammy

Weisen Sie bei Aufforderung ein Kennwort zu. Fühlen Sie sich frei, ENTER durch die anderen Eingabeaufforderungen zu drücken.,

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.,

Anstatt Schreibrechte aus dem Home-Verzeichnis zu entfernen, erstellen wir in diesem Beispiel einftp – Verzeichnis, das alschroot und als beschreibbaresfiles – Verzeichnis für die tatsächlichen Dateien dient.,beispiel:

  • sudo ls -la /home/sammy/ftp
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 für Datei-Uploads 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 ftp sollte Folgendes zurückgeben:

  • sudo ls -la /home/sammy/ftp

Schließlich fügen wir eine test.txt – Datei hinzu, die beim 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 gewährt haben, ändern wir unsere Konfiguration.,

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 aktivieren wir dem Benutzer das Hochladen von Dateien, indem wir die Einstellung write_enable auskommentieren:

/ etc / vsftpd.,conf
. . .write_enable=YES. . .

Wir kommentieren auch die chroot, 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. . .

Fügen wir auch 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 weiteren zukünftigen Benutzer funktioniert. Fügen Sie diese Einstellungen irgendwo in der Datei hinzu:

/ etc / vsftpd.,conf
. . .user_sub_token=$USERlocal_root=/home/$USER/ftp

Begrenzen wir auch 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: In Schritt 2 haben wir die Ports geöffnet, die wir hier für den passiven Portbereich festgelegt haben. Wenn Sie die Werte ändern, aktualisieren Sie unbedingt Ihre Firewall-Einstellungen.

Um den FTP-Zugriff von Fall zu Fall zu ermöglichen, legen wir die Konfiguration so fest, dass Benutzer nur dann Zugriff haben, wenn sie explizit zu einer Liste hinzugefügt werden, und nicht standardmäßig:

/etc/vsftpd.,conf
. . .userlist_enable=YESuserlist_file=/etc/vsftpd.userlistuserlist_deny=NO

userlist_deny schaltet die Logik um: Wenn sie auf YES gesetzt ist, wird Benutzern in der Liste der FTP-Zugriff verweigert. Wenn es auf NO gesetzt ist, haben nur Benutzer in der Liste Zugriff.

Wenn Sie mit den Änderungen fertig sind, speichern Sie die Datei und beenden Sie den Editor.

Schließlich fügen wir unseren Benutzer zu /etc/vsftpd.userlisthinzu., Verwenden Sie 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

Wenn die Konfiguration vorhanden ist, fahren wir mit dem Testen des FTP-Zugriffs fort.

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 dies wie erwartet funktioniert.,

Anonyme Benutzer sollten keine Verbindung herstellen: Wir haben den anonymen Zugriff deaktiviert. Testen wir das, indem wir versuchen, uns anonym zu verbinden. Wenn unsere Konfiguration ordnungsgemäß eingerichtet ist, sollte anonymen Benutzern die Berechtigung verweigert werden. Öffnen Sie ein anderes Terminalfenster und führen Sie den folgenden Befehl aus. Stellen Sie sicher, dass Sie 203.0.113.0 durch die öffentliche IP-Adresse Ihres Servers ersetzen:

  • 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 als Sudo-Benutzer herzustellen.,> sollte Dateien verbinden, lesen und schreiben können: Stellen wir sicher, dass unser designierter Benutzer eine Verbindung herstellen kann:

  • ftp -p 203.0.113.0

Wechseln wir in das Verzeichnis files und verwenden Sie den Befehl get, um die zuvor erstellte Testdatei auf unseren lokalen Computer zu übertragen:

  • cd files
  • get test.txt

Als nächstes laden wir die Datei mit einem neuen Namen hoch, um die Schreibberechtigungen zu testen:

  • put test.txt upload.txt

Schließen Sie die Verbindung:

  • bye

Nachdem wir unsere Konfiguration getestet haben, ergreifen wir Schritte, um unseren Server weiter zu sichern.,

Schritt 6-Transaktionen sichern

Da FTP keine Daten während der Übertragung verschlüsselt, einschließlich Benutzeranmeldeinformationen, aktivieren wir TLS / SSL, um diese Verschlüsselung bereitzustellen. Der erste Schritt besteht darin, die SSL-Zertifikate für die Verwendung mit vsftpdzu erstellen.

Verwenden wir openssl, um ein neues Zertifikat zu erstellen, und verwenden Sie 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 sowohl die Flaggen -keyout als auch -out auf denselben Wert setzen, befinden sich der private Schlüssel und das Zertifikat in derselben Datei:

  • 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, Adressinformationen für Ihr Zertifikat anzugeben., Ersetzen Sie Ihre eigenen Informationen durch die markierten Werte unten:

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

Am Ende der Datei sehen Sie zwei Zeilen, die 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 verhindert wird, dass Clients, die nicht mit TLS umgehen können, eine Verbindung herstellen. Dies ist notwendig, um sicherzustellen, dass der gesamte Datenverkehr verschlüsselt ist, aber es kann Ihren FTP-Benutzer zwingen, 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. . .

Konfigurieren Sie danach den Server für die Verwendung von TLS, dem bevorzugten Nachfolger von SSL, indem Sie 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. . .

Der fertige Dateiabschnitt sollte so aussehen:

/etc/vsftpd.conf

Wenn Sie fertig sind, speichern und schließen Sie die Datei.

Starten Sie den Server neu, 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 stellen wir sicher, dass 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 sich aufgrund der plattformübergreifenden Unterstützung mit FileZilla verbinden können. Konsultieren Sie die Dokumentation für andere Kunden.

Wenn Sie FileZilla zum ersten Mal öffnen, finden Sie das Site Manager-Symbol direkt über dem Wort Host, 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 wird ein neues Symbol mit den Worten Neue Site angezeigt. Sie können es jetzt benennen oder später zurückkehren und die Schaltfläche Umbenennen verwenden.

Füllen Sie das Feld Host mit dem Namen oder der IP-Adresse aus. Wählen Sie im Dropdown-Menü Verschlüsselung die Option Explicit FTP über TLS erfordern aus.

Für Anmeldetyp, wählen Sie Nach Passwort fragen. Geben Sie Ihren FTP-Benutzer in das Benutzerfeld 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.,das sieht folgendermaßen aus:

Wenn Sie das Zertifikat akzeptiert haben, doppelklicken Sie auf den Ordner files und ziehen Sie 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, benennen Sie sie in upload-tls.txt um und ziehen Sie sie zurück auf den Server, um zu bestätigen, dass Sie Dateien hochladen können:

Sie haben jetzt 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

Fügen Sie dem Benutzer eine Nachricht hinzu, warum er sich nicht anmelden kann:

/bin/ftponly
#!/bin/shecho "This account is limited to FTP access only."

Speichern Sie die Datei und beenden Sie Ihren Editor.,Ä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

Unten hinzufügen:

/etc/shells
. . ./bin/ftponly

Aktualisieren Sie die Shell des Benutzers mit dem folgenden Befehl:

  • sudo usermod sammy -s /bin/ftponly

Versuchen Sie nun, sich als sammyauf Ihrem Server 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 auf den Server nur auf FTP-Zugriff.,

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 vsftpdansehen. 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.

Schreibe einen Kommentar

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