Vsftpd ist das Akronym für Very Secure FTP Daemon:Es ist einer der am häufigsten verwendeten FTP-Server unter Linux und anderen Unix-ähnlichen Betriebssystemen. Es ist Open Source und unter der GPL-Lizenz veröffentlicht und unterstützt virtuelle Benutzer und SSL für die Datenverschlüsselung. In diesem Tutorial werden wir sehen, wie man es unter Linux installiert und konfiguriert.
In diesem Tutorial lernen Sie :
- Wie man vsftpd unter Debian 10 installiert
- Wie man vsftpd konfiguriert
- So richten Sie die anonyme Nutzung ein
- So richten Sie die Anmeldung mit lokalen Benutzern ein
- So richten Sie virtuelle Benutzer ein
- So richten Sie ufw ein, um eingehenden Datenverkehr zuzulassen

Softwareanforderungen und verwendete Konventionen
Kategorie | Anforderungen, Konventionen oder verwendete Softwareversion |
---|---|
System | Debian 10 (Buster) |
Software | vsftpd, openssl, libpam-pwdfile |
Andere | Root-Berechtigungen zum Installieren und Konfigurieren von vsftpd |
Konventionen | # – erfordert, dass bestimmte Linux-Befehle mit Root-Rechten ausgeführt werden, entweder direkt als Root-Benutzer oder durch Verwendung von sudo Befehl$ – erfordert, dass gegebene Linux-Befehle als normaler nicht-privilegierter Benutzer ausgeführt werden |
Installation
Vsftpd ist in den offiziellen Debian-Repositories verfügbar, daher können wir zur Installation unseren bevorzugten Paketmanager verwenden; Es ist nur eine Frage der Synchronisierung der Repositories und der Installation des Pakets. Beide Dinge können erreicht werden, indem
die folgenden Befehle ausgeführt werden:
$ sudo apt-get update && sudo apt-get install vsftpd
Wenige Sekunden und das Paket wird auf unserem Debian-System installiert. Die im Paket enthaltenen Installationsskripte kümmern sich auch um den Start des vsftpd Dienst automatisch, aber wir müssen daran denken, den Dienst jedes Mal neu zu starten oder neu zu laden, wenn wir die Konfigurationsdatei ändern. Um die virtuellen Benutzer verwenden zu können Funktion, die vom vsftpd bereitgestellt wird, müssen wir auch ein anderes Paket installieren:
$ sudo apt-get install libpam-pwdfile
Wir werden seine Verwendung im entsprechenden Abschnitt dieses Tutorials sehen.
Sobald die benötigten Pakete installiert sind, können wir fortfahren und vsftpd konfigurieren:Wir werden im nächsten Abschnitt dieses Tutorials sehen, wie das geht.
Vsftpd-Setup
Die vsftpd-Konfigurationsdatei ist /etc/vsftpd.conf
. Wenn wir es öffnen, sehen wir die verschiedenen Anweisungen, die bereits darin enthalten sind. Mal sehen, was für die häufigsten Fälle am relevantesten ist.
Anonyme Anmeldung aktivieren
Der nicht authentifizierte Zugriff auf den Server als anonymer Benutzer ist standardmäßig deaktiviert. Um es zu aktivieren, müssen wir den anonymous_enable
verwenden Direktive, die in der Konfigurationsdatei in Zeile 25
platziert wird . Alles, was wir tun müssen, ist es auf YES
zu setzen :
muss die Anweisung ändern in:
anonymous_enable=YES
Eine weitere Anweisung, die wir möglicherweise ändern möchten, ist diejenige, die es uns ermöglicht, ein Verzeichnis festzulegen, in dem vsftpd versucht, nach einem anonymen Zugriff zu navigieren. Die Direktive, mit der wir diese Einstellung steuern können, ist anon_root
. Angenommen, wir möchten, dass ein anonymer Benutzer auf /srv/ftp
zugreift Standardmäßig würden wir schreiben:
anon_root=/srv/ftp
Alle anonymen Anmeldungen werden intern einem bestimmten Benutzer zugeordnet, der standardmäßig ftp
ist . Um diese Zuordnung zu ändern, müssen wir den ftp_username
verwenden Option und setzen Sie sie auf den Namen des Benutzers, dem wir anonyme Benutzer zuordnen möchten.
Standardmäßig darf ein anonymer Benutzer aus offensichtlichen Sicherheitsgründen nichts auf dem Server schreiben. Wenn Sie dieses Verhalten ändern möchten (nicht empfohlen), gibt es einige Optionen, die geändert werden müssen. Zunächst einmal das allgemeine write_enable
Direktive muss auf YES
gesetzt werden . Diese Direktive ist in Zeile 31
kommentiert der Konfigurationsdatei, Sie müssen also nur den Kommentar entfernen.
# Uncomment this to enable any form of FTP write command. write_enable=YES
Sobald diese Direktive aktiviert ist, müssen wir nur noch an zwei weiteren Optionen arbeiten:anon_upload_enable
und anon_mkdir_write_enable
. Wenn Ersteres auf YES
gesetzt ist ein anonymer Benutzer kann hochladen Dateien, aber nur, wenn der Benutzer, dem es zugeordnet ist (wie gesagt standardmäßig ftp), Schreibrechte für das Zielverzeichnis hat. Um diese Option zu aktivieren, müssen wir lediglich den Kommentar aus der Zeile 40
entfernen der Konfigurationsdatei:
# Uncomment this to allow the anonymous FTP user to upload files. This only # has an effect if the above global write enable is activated. Also, you will # obviously need to create a directory writable by the FTP user. anon_upload_enable=YES
Der anon_mkdir_write_enable
stattdessen, wenn sie auf YES
gesetzt ist erlaubt anonymen Benutzern, neue Verzeichnisse auf dem Server zu erstellen, unter den gleichen Bedingungen, die wir oben gesehen haben (der zugrunde liegende Benutzer auf dem Server muss Schreibberechtigungen für das übergeordnete Verzeichnis haben). Die Direktive befindet sich in Zeile 44
der Konfigurationsdatei:
# Uncomment this if you want the anonymous FTP user to be able to create # new directories. anon_mkdir_write_enable=YES
Noch einmal, da die Variable bereits auf YES
gesetzt ist , damit es relevant ist, müssen wir nur den Kommentar daraus entfernen.
Damit anonyme Benutzer auch andere Arten von Schreibvorgängen durchführen können, wie zum Beispiel Umbenennung oder löschen ein Verzeichnis, müssen wir eine andere Direktive verwenden, die nicht in der Konfigurationsdatei vorhanden ist, anon_other_write_enable
und setzen Sie es auf YES
wenn das obige unser gewünschtes Verhalten ist:
anon_other_write_enable=YES
Authentifizierte Anmeldungen
Damit die Benutzer des lokalen Systems mit ihrem Systemkennwort auf den FTP-Server zugreifen können, muss der local_enable
Direktive muss auf YES
gesetzt werden :Dies ist die Standardeinstellung auf dem Debian-System. Die Direktive befindet sich in Zeile 28
der
Daemon-Konfigurationsdatei:
# Uncomment this to allow local users to log in. local_enable=YES
Wenn sich ein lokaler Benutzer erfolgreich authentifiziert, hat er/sie standardmäßig sein eigenes Home-Verzeichnis als root. Es ist jedoch möglich, mit local_root
einen alternativen Startpunkt anzugeben Richtlinie. Diese Direktive ist nicht in der Konfigurationsdatei vorhanden, daher müssen wir sie hinzufügen, wenn wir sie verwenden möchten. Um den /srv/ftp
einzustellen Verzeichnis als lokales Root-Verzeichnis würden wir beispielsweise schreiben:
local_root=/srv/ftp
Lokale Chroot-Benutzer
Als Sicherheitsmaßnahme ist ein Chroot möglich jeder authentifizierte Benutzer in seinem eigenen Home-Verzeichnis. Um diese Aufgabe zu erfüllen, müssen wir den chroot_local_user
verwenden Direktive:
chroot_local_user=YES
Wenn diese Funktion aktiviert ist, ist es möglich, eine Liste von Ausschlüssen anzugeben (eine Liste von Benutzern, die nicht chrooted werden sollen), indem die folgenden Direktiven verwendet werden:
chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list
Die erste Anweisung wird benötigt, um die Funktion zu aktivieren, die andere, um den Speicherort der Datei anzugeben, die die Ausschlussliste enthält . Die Datei muss erstellt werden, falls sie noch nicht existiert, sonst schlägt die Anmeldung fehl.
Als Sicherheitsmaßnahme sollte ein Benutzer, der chrooted ist, nicht in der Lage sein, in das oberste Verzeichnis der Chroot zu schreiben. Wenn dies der Fall ist, kann sich ein Benutzer in den neuesten Versionen von vsftpd nicht anmelden, und der Server antwortet mit der folgenden Nachricht:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Dieses Problem kann grundsätzlich auf zwei Arten gelöst werden. Dieser erste besteht offensichtlich darin, die Berechtigungen zu korrigieren , indem Sie dem Benutzer den Schreibzugriff auf das oberste Verzeichnis der Chroot verweigern und ihn nur auf Unterverzeichnisse schreiben lassen.
Die zweite Möglichkeit, das Problem zu lösen, wenn Sie sich nicht um die möglichen Auswirkungen auf die Sicherheit kümmern, ist diese Einschränkung umgehen , indem Sie die folgende Direktive verwenden:
allow_writeable_chroot=YES
Apropos Berechtigungen, es ist wichtig zu bedenken, dass die Standard-Umask für lokale Benutzer auf 077
eingestellt ist . Wenn diese Einstellung als zu restriktiv angesehen wird, ist es möglich, sie mit local_umask
zu ändern Richtlinie. Diese Direktive ist in Zeile 35
kommentiert der Konfigurationsdatei:
# Default umask for local users is 077. You may wish to change this to 022, # if your users expect that (022 is used by most other ftpd's) #local_umask=022
Anmeldung mit virtuellen Benutzern
Eine nette Funktion, die vsftpd bietet, ist die Möglichkeit, sich mit virtuellen Benutzern anzumelden . Ein virtueller Benutzer ist ein Benutzer, der nicht wirklich auf dem System existiert, sondern nur im Kontext der sftpd-Anwendung. Um diese Funktion zu aktivieren, müssen wir die folgende Direktive verwenden:
guest_enable=YES
Wenn die Funktion aktiv ist, werden alle nicht anonymen Anmeldungen (also sogar echte/lokale Benutzer) dem Benutzer zugeordnet, der mit dem guest_username
angegeben ist Direktive, die standardmäßig, wie wir bereits gesehen haben, ftp ist .
Der nächste Schritt besteht darin, eine Datei zu erstellen, die die Benutzernamen und Passwörter der virtuellen Benutzer enthält. Um ein gehashtes Passwort zu generieren, können wir openssl
verwenden und geben Sie den folgenden Befehl ein:
$ openssl passwd -1 Password: Verifying - Password: $1$pfwh3Jou$DQBiNjw8bBtDqys7ezTpr.
Das Passwort Befehl von openssl wird verwendet, um gehashte Passwörter (md5) zu generieren. Im obigen Beispiel wurden wir nach dem zu hashenden Passwort und seiner Bestätigung gefragt. Schließlich wird das gehashte Passwort generiert und auf dem Bildschirm angezeigt.
Der Benutzername muss zusammen mit dem Passwort in eine Datei geschrieben werden, sagen wir mal /etc/virtual_users.pwd
, im folgenden Format:
username:hashed_password
Angenommen, unser virtueller Benutzer heißt „linuxconfig“, würden wir schreiben:
linuxconfig:$1$pfwh3Jou$DQBiNjw8bBtDqys7ezTpr.
Der Vorgang muss für jeden virtuellen Benutzer, den wir konfigurieren möchten, wiederholt werden.
Jetzt müssen wir die pam erstellen Dienst, der von vsftpd verwendet wird, um virtuelle Benutzer zu authentifizieren. Wir nennen die Datei vsftpd_virtual
und platzieren Sie es in /etc/pam.d
Verzeichnis. Sein Inhalt wird folgender sein:
#%PAM-1.0 auth required pam_pwdfile.so pwdfile /etc/vsftpd/virtual_users.pwd account required pam_permit.so
Wie Sie sehen können, haben wir in der ersten Zeile den Pfad der Datei angegeben, die den Benutzernamen und die Passwörter der virtuellen Benutzer enthält. Alles, was wir jetzt tun müssen, ist, vsftpd anzuweisen, diesen pam-„Dienst“ zu verwenden. Wir können dies mit dem pam_service_name
tun Direktive:
pam_service_name=vsftpd_virtual
An diesem Punkt können wir die Konfigurationsdatei speichern, den Daemon neu starten und überprüfen, ob wir uns mit dem gerade erstellten virtuellen Benutzer anmelden können.
SSL-Unterstützung für Datenverschlüsselung aktivieren
Standardmäßig ist die SSL-Unterstützung auf vsftpd deaktiviert, sodass übertragene Daten nicht verschlüsselt werden. Um die SSL-Unterstützung zu aktivieren, müssen wir die folgenden Anweisungen verwenden, die sich in den Zeilen 149
befinden bis 151
der Konfigurationsdatei:
# This option specifies the location of the RSA certificate to use for SSL # encrypted connections. rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=YES
Die erste Direktive, rsa_cert_file
wird verwendet, um den Pfad des RSA-Zertifikats anzugeben, das für SSL-verschlüsselte Verbindungen verwendet werden soll. Der zweite, rsa_private_key
, wird stattdessen verwendet, um den Speicherort des privaten RSA-Schlüssels anzugeben. Schließlich das ssl_enable
Direktive wird verwendet, um die Verwendung von SSL-Verschlüsselung zu ermöglichen.
Das Beispiel verwendet /etc/ssl/certs/ssl-cert-snakeoil.pem
und /etc/ssl/private/ssl-cert-snakeoil.key
Dateien, aber Sie möchten mit ziemlicher Sicherheit eine dedizierte verwenden.
Angeben des Portbereichs für den passiven Modus
Der passive FTP-Modus ist die Standardeinstellung bei einer Neuinstallation von vsftpd, aber wenn wir ihn explizit aktivieren möchten, können wir die folgende Direktive verwenden:
# Set to NO if you want to disallow the PASV method of obtaining a data connection # (passive mode). Default: YES pasv_enable=YES
Wenn der Server im passiven Modus arbeitet , sendet es eine IP-Adresse und einen Port an den Client, die er auf eine Verbindung überwachen soll. Diese Ports werden standardmäßig zufällig ausgewählt, da wir jedoch eine Firewall auf unserem Server verwenden müssen, müssen wir wissen, welche Ports wir den Datenverkehr vollständig zulassen sollten. Der Bereich der zu verwendenden Ports kann mit pasv_min_port
angegeben werden und pasv_max_port
Direktiven, zum Beispiel:
# The minimum port to allocate for PASV style data connections. Can be used to # specify a narrow port range to assist firewalling. pasv_min_port=10090 # The maximum port to allocate for PASV style data connections. Can be used to # specify a narrow port range to assist firewalling. Default: 0 (use any port) pasv_max_port=10100
Mit der folgenden Konfiguration verwendet der Server einen Bereich von Ports, der von 10090
geht bis 10100
.
Firewall-Setup
Damit unser vsftpd-Server richtig funktioniert, müssen wir Datenverkehr durch die erforderlichen Ports zulassen, einige müssen wir die entsprechenden Regeln für unsere Firewall einrichten. In diesem Tutorial gehe ich von der Verwendung des ufw aus Firewall-Manager (unkomplizierte Firewall).
Der erste Port, durch den Datenverkehr zugelassen werden soll, ist Port 21
, das ist der vom FTP-Protokoll verwendete Standardport:
$ sudo ufw allow in 21/tcp
Als zweites müssen wir eingehenden Datenverkehr über den angegebenen Portbereich zulassen, den wir im vorherigen Abschnitt eingerichtet haben. Um eine Reihe von Ports anzugeben, können wir Folgendes ausführen:
$ sudo ufw allow in 10090:10100/tcp
Schlussfolgerungen
In diesem Artikel haben wir gesehen, wie man vsftpd unter Debian 10 Buster installiert und konfiguriert. Wir haben gesehen, wie man die anonyme Nutzung und die Nutzung durch lokale Benutzer einrichtet und wie wir die Vorteile der virtuellen Benutzer nutzen können vom Dienst bereitgestellte Funktion. Da FTP keine Datenverschlüsselung bietet, haben wir gesehen, wie die SSL-Unterstützung aktiviert und schließlich die Firewall so eingerichtet wird, dass eingehender Datenverkehr über die erforderlichen Ports zugelassen wird. Eine vollständige Liste der möglichen Anweisungen, die in der vsftpd-Konfigurationsdatei verwendet werden können, finden Sie in der vsftpd.conf Manpage (VSFTPD.CONF(5)). Möchten Sie wissen, wie Sie programmgesteuert mit einem FTP-Server arbeiten? Sehen Sie sich unseren Artikel zum Herstellen einer Verbindung zu einem FTP-Server mit Python an.