GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

So installieren und konfigurieren Sie einen FTP-Server (vsftpd) mit SSL/TLS unter Ubuntu 20.04

FTP oder File Transfer Protocol ist ein sehr altes bekanntes Protokoll zum Übertragen von Dateien zwischen einem Client und einem Server. Es ist auch ein unsicheres Protokoll, aber nur, wenn es ohne TLS verwendet wird. In diesem Tutorial konfigurieren wir vsftpd für TLS, wodurch wir FTP sicher verwenden können. FTP wird heutzutage oft durch sicherere Protokolle wie SFTP oder SCP ersetzt.

Wenn Sie jedoch FTP mit Ihrem Server verwenden müssen, ist vsftpd (Very Secure FTP Daemon) die perfekte Wahl.

In diesem Tutorial lernen wir, wie man einen FTP-Server mit vsftpd auf einem Ubuntu 20.04-basierten Server installiert und konfiguriert. Wir werden auch lernen, wie man die Verbindung mit dem SSL/TLS-Protokoll sichert.

Voraussetzungen

  • Ein Ubuntu 20.04-Server mit einem Nicht-Root-Benutzer mit sudo-Berechtigungen.

Schritt 1 - vsftpd installieren

Der erste Schritt ist die Installation von vsftpd.

$ sudo apt update
$ sudo apt install vsftpd

Als nächstes müssen wir die ursprüngliche Konfigurationsdatei sichern, damit wir mit einer neuen Konfiguration beginnen können.

$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

Schritt 2 – Firewall konfigurieren

In diesem Schritt konfigurieren wir die UFW-Firewall, um den Zugriff auf die FTP-Ports zu ermöglichen.

Lassen Sie uns zuerst den Status der Firewall überprüfen.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Wie wir sehen können, sind bisher nur SSH-Ports erlaubt. Lassen Sie uns die Ports 20 (FTP-Befehlsport), 21 (FTP-Datenport), 990 öffnen, wenn wir TLS verwenden, und die Ports 35000-40000 für den Bereich passiver Ports, die wir möglicherweise in Zukunft benötigen.

$ sudo ufw allow 20:21/tcp
$ sudo ufw allow 990/tcp
$ sudo ufw allow 35000:40000/tcp
$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
990/tcp                    ALLOW       Anywhere
20:21/tcp                  ALLOW       Anywhere
35000:40000/tcp            ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
20:21/tcp (v6)             ALLOW       Anywhere (v6)
990/tcp (v6)               ALLOW       Anywhere (v6)
35000:40000/tcp (v6)       ALLOW       Anywhere (v6)

Schritt 3 - Konfigurieren von vsftpd

Wir werden nun einige wichtige Einstellungen durchgehen, damit vsftpd funktioniert.

Öffnen Sie zunächst die Konfigurationsdatei.

$ sudo nano /etc/vsftpd.conf

1. FTP-Zugang

In diesem Tutorial erlauben wir den FTP-Zugriff nur den lokalen Benutzern und deaktivieren jeden anonymen Zugriff. Stellen Sie dazu sicher, dass die folgenden Zeilen vorhanden und wie folgt sind.

anonymous_enable=NO
local_enable=YES

2. Datei-Uploads aktivieren

Der wichtigste Zweck von FTP ist hier, auf den Server schreiben zu können. Kommentieren Sie die folgende Zeile aus, um Dateiuploads zu aktivieren, indem Sie # entfernen davor.

write_enable=YES

3. Chroot-Gefängnis

FTP funktioniert am besten, wenn ein Benutzer auf ein bestimmtes Verzeichnis beschränkt ist. vsftpd erreicht dies durch die Verwendung von Chroot-Jails. Wenn Chroot für lokale Benutzer aktiviert ist, sind sie standardmäßig auf ihre Home-Verzeichnisse beschränkt. Entkommentieren Sie dazu die folgende Zeile.

chroot_local_user=YES

Um Sicherheitslücken zu vermeiden, funktioniert Chroot nicht, wenn es aktiviert ist, solange das Verzeichnis, auf das Benutzer beschränkt sind, beschreibbar ist.

Um diese Einschränkung zu umgehen, haben wir zwei Methoden, um Datei-Uploads zuzulassen, wenn Chroot aktiviert ist.

  1. Methode 1 - Diese Methode funktioniert, indem ein anderes Verzeichnis für FTP-Uploads verwendet wird. Für dieses Tutorial erstellen wir einen ftp Verzeichnis im Haus des Benutzers, das als Chroot dient, und ein zweites beschreibbares Verzeichnis upload zum Hochladen der Dateien. Fügen Sie dazu die folgenden Zeilen am Ende der Datei hinzu.

    user_sub_token=$USER
    local_root=/home/$USER/ftp
    
  2. Methode 2 - Die zweite Methode besteht darin, einfach Schreibzugriff auf das Home-Verzeichnis als Ganzes zu gewähren. Fügen Sie dazu die folgende Zeile hinzu.

    allow_writeable_chroot=YES
    

4. Passives FTP

vsftpd kann jeden Port für passive FTP-Verbindungen verwenden. Wir können einen Bereich für die minimale und maximale Portnummer angeben, die vsftpd verwenden kann. Dies sind die Ports, die wir zuvor in unserer UFW-Firewall konfiguriert haben.

Fügen Sie die folgenden Zeilen hinzu, um passive FTP-Verbindungen zuzulassen.

pasv_min_port=35000
pasv_max_port=40000

5. Benutzer einschränken

Um nur bestimmten Benutzern zu erlauben, sich beim FTP-Server anzumelden, fügen Sie unten die folgenden Zeilen hinzu.

userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

Wenn diese Option aktiviert ist, müssen wir angeben, welche Benutzer FTP verwenden dürfen, und ihre Benutzernamen in /etc/vsftpd.userlist hinzufügen Datei.

Starten Sie vsftpd neu, um die Konfiguration zu aktivieren.

$ sudo systemctl restart vsftpd

Schritt 4 - Konfigurieren des Benutzerverzeichnisses

Für dieses Tutorial erstellen wir ein neues Benutzerkonto für FTP-Transaktionen. Wenn Sie bereits ein Benutzerkonto für diesen Zweck haben, können Sie Schritt 1 überspringen. Auch, wenn Sie allow_writeable_chroot=YES gesetzt hatten in der Konfigurationsdatei zuvor, können Sie Schritt 3 überspringen.

Schritt 1 - Einen neuen Benutzer hinzufügen.

$ sudo adduser testuser

Legen Sie ein starkes Passwort fest und überspringen Sie alle anderen Eingabeaufforderungen.

Schritt 2 – Fügen Sie den Benutzer zur Liste der zugelassenen FTP-Benutzer hinzu.

$ echo "testuser" | sudo tee -a /etc/vsftpd.userlist

Schritt 3 – FTP- und Dateiverzeichnis erstellen

Dieser Schritt ist, wenn Sie ein anderes Verzeichnis als FTP-Root und ein anderes zum Hochladen von Dateien haben möchten, um die Beschränkung des Chroot-Jails zu umgehen.

Erstellen Sie den FTP-Ordner.

$ sudo mkdir /home/testuser/ftp

Legen Sie die Eigentumsrechte fest.

$ sudo chown nobody:nogroup /home/testuser/ftp

Entfernen Sie die Schreibrechte.

$ sudo chmod a-w /home/testuser/ftp

Überprüfen Sie die Berechtigungen, bevor Sie fortfahren.

$ sudo ls -al /home/testuser/ftp
total 8
dr-xr-xr-x 2 nobody   nogroup  4096 Jun  7 13:08 .
drwxr-xr-x 3 testuser testuser 4096 Jun  7 13:08 ..

Lassen Sie uns nun das eigentliche beschreibbare Verzeichnis für die Dateien erstellen.

$ sudo mkdir /home/testuser/ftp/upload
$ sudo chown testuser:testuser /home/testuser/ftp/upload

Testen Sie die Berechtigungen.

$ sudo ls -al /home/testuser/ftp
total 12
dr-xr-xr-x 3 nobody   nogroup  4096 Jun  7 13:10 .
drwxr-xr-x 3 testuser testuser 4096 Jun  7 13:08 ..
drwxr-xr-x 2 testuser testuser 4096 Jun  7 13:10 upload

Zum Schluss fügen wir eine test.txt hinzu Datei zum Testen verwenden.

$ echo "vsftpd test file" | sudo tee /home/testuser/ftp/upload/test.txt

Schritt 5 - FTP-Zugriff testen

Unser FTP-Server ist zu diesem Zeitpunkt voll funktionsfähig. Wir können einen kleinen Test machen, bevor wir fortfahren.

Versuchen wir, uns als anonymer Benutzer anzumelden.

$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): anonymous
530 Permission denied.
ftp: Login failed.
ftp>

Schließen Sie die Verbindung.

ftp> bye

Es funktioniert wie vorgesehen, d. h. anonyme Benutzer sind nicht erlaubt.

Versuchen wir, uns wie jeder andere sudo-Benutzer zu verbinden. Es sollte sich auch nicht verbinden.

$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): sudo_user
530 Permission denied.
ftp: Login failed.
ftp>

Schließen Sie die Verbindung.

ftp> bye

Lassen Sie uns endlich versuchen, uns als testuser zu verbinden die wir für FTP erstellt haben.

$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): testuser
331 Please specify the password.
Password: your_user's_password
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

Wechseln wir zu upload Verzeichnis und verwenden Sie den get Befehl, um die Testdatei auf unseren lokalen Rechner zu übertragen.

ftp> cd upload
250 Directory successfully changed.
ftp> get test.txt
227 Entering Passive Mode (136,244,105,99,165,42).
150 Opening BINARY mode data connection for test.txt (17 bytes).
226 Transfer complete.
16 bytes received in 0.0101 seconds (164.3719 kB/s)
ftp>

Als nächstes laden wir die Datei mit einem neuen Namen mit put hoch Befehl zum Testen der Schreibrechte.

ftp> put test.txt upload.txt
227 Entering Passive Mode (136,244,105,99,163,102).
150 Ok to send data.
226 Transfer complete.
17 bytes sent in 0.000894 seconds (518.7988 kB/s)

Schließen Sie die Verbindung.

ftp> bye

Schritt 6 – Sichern von Übertragungen mit SSL/TLS

Um die FTP-Übertragungen zu verschlüsseln, benötigen wir ein SSL-Zertifikat und müssen vsftpd konfigurieren, um es zu verwenden.

Wenn Sie bereits eine Domain oder Subdomain haben, die auf Ihren FTP-Server verweist, können Sie ein kostenloses SSL-Zertifikat von Let's Encrypt erstellen und dieses verwenden.

Für unser Tutorial verwenden wir ein selbstsigniertes SSL-Zertifikat. Verwenden Sie zum Erstellen eines openssl Befehl.

Der folgende Befehl erstellt einen privaten 2048-Bit-Schlüssel und ein Zertifikat, das 1 Jahr gültig ist. Sowohl das Zertifikat als auch der Schlüssel werden in derselben Datei gespeichert.

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

Sie können entweder die folgenden Eingabeaufforderungen überspringen oder die Werte nach Ihren Wünschen ausfüllen.

Nachdem unser Zertifikat erstellt wurde, ist es an der Zeit, die vsftpd-Konfigurationsdatei erneut zu öffnen.

$ sudo nano /etc/vsftpd.conf

Suchen Sie die folgenden Zeilen und kommentieren Sie sie aus, indem Sie ihnen wie folgt eine Raute voranstellen.

# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

Fügen Sie nun die folgenden Zeilen hinzu.

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem

Ändern Sie auch den Wert von ssl_enable auf YES .

ssl_enable=YES

Lassen Sie uns ein paar weitere Einstellungen hinzufügen, um die SSL-Sicherheit zu verbessern.

allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

Die meisten dieser Einstellungen sind selbsterklärend. Diese deaktivieren SSL für anonyme Benutzer und erfordern SSL sowohl für die Datenübertragung als auch für Anmeldungen. Wir haben auch unsichere SSL-Protokolle deaktiviert und bleiben bei TLSv1.0. Und schließlich haben wir die Wiederverwendung von SSL deaktiviert und erfordern Cipher Suites mit hoher Verschlüsselung.

Starten Sie den Server neu, damit die Einstellungen wirksam werden.

$ sudo systemctl restart vsftpd

Jetzt können Sie FTP nicht mehr über die Befehlszeile verwenden. Sie müssen sich mit einem Client verbinden, der TLS unterstützt.

Schritt 7 – Testen von TLS mit FileZilla

Für unser Tutorial testen wir die TLS-Fähigkeit mit Filezilla.

Wenn Sie Filezilla öffnen, klicken Sie auf das Site Manager-Symbol direkt über dem Wort Host in der obersten Reihe.

Ein neues Fenster wird geöffnet. Klicken Sie auf Neue Website Schaltfläche in der rechten unteren Ecke.

Sie sehen ein neues Symbol mit dem Namen Neue Website . Sie können es mit Umbenennen umbenennen Schaltfläche.

Füllen Sie das Host-Feld mit der IP-Adresse Ihres Servers aus. Da unser FTP-Port 21 ist, was der Standardport für FTP ist, können Sie den Port verlassen Feld leer. Wählen Sie für die Verschlüsselungsoption Explizites FTP über TLS erforderlich aus aus dem Dropdown-Menü.

Geben Sie Ihren FTP-Benutzernamen und Ihr Passwort mit den oben erstellten ein. Klicken Sie auf Verbinden Schaltfläche, um fortzufahren.

Nach erfolgreicher Verbindung sehen Sie ein Serverzertifikat, das wie folgt aussieht.

Sie können die Option Diesem Zertifikat in zukünftigen Sitzungen immer vertrauen. aktivieren damit Sie beim Einloggen nicht jedes Mal gefragt werden. Klicken Sie auf Ok um fortzufahren.

Sie können jetzt normale FTP-Operationen durchführen.

Schritt 8 – Shell-Zugriff deaktivieren

Dieser Schritt ist völlig optional. Beim Erstellen eines FTP-Benutzers hat der Benutzer standardmäßig SSH-Zugriff auf den Server, sofern nicht ausdrücklich angegeben.

Sie sollten den Shell-Zugriff für den FTP-Benutzer deaktivieren, um die Sicherheit zu verbessern. Um es zu deaktivieren, müssen wir eine neue Shell erstellen, die eine Nachricht ausgibt, die besagt, dass das Benutzerkonto nur auf FTP-Zugriff beschränkt ist.

Erstellen Sie /bin/ftponly Shell und ausführbar machen.

$ echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a  /bin/ftponly
$ sudo chmod a+x /bin/ftponly

Hängen Sie die neue Shell an die Liste der gültigen Shells in /etc/shells an Datei.

$ echo "/bin/ftponly" | sudo tee -a /etc/shells

Ändern Sie die Benutzer-Shell in /bin/ftponly .

$ sudo usermod newftpuser -s /bin/ftponly

Sie können denselben Befehl verwenden, um die Shell aller Benutzer zu ändern, denen Sie den FTP-Zugriff gewähren möchten.

Schlussfolgerung

Damit ist unser Tutorial abgeschlossen, in dem wir vsftpd installiert und konfiguriert haben, um einen FTP-Server auf einem Ubuntu 20.04-basierten Server zu installieren. Wir haben auch unsere FTP-Verbindung so konfiguriert, dass sie mit SSL/TLS funktioniert.

Wenn Sie Fragen haben, stellen Sie sie in den Kommentaren unten.


Ubuntu
  1. So installieren Sie einen FTP-Server unter CentOS 7 mit VSFTPD

  2. So installieren Sie einen FTP-Server unter Ubuntu mit vsftpd

  3. So installieren und konfigurieren Sie einen NFS-Server unter Ubuntu 20.04

  4. So installieren Sie den vsftpd-FTP-Server und sichern ihn mit TLS unter Debian 11

  5. Installieren Sie Vsftpd mit SSL/TLS auf Ubuntu 20.04

Installieren Sie Vsftpd mit SSL/TLS auf Ubuntu 20.04

So installieren Sie den vsftpd-FTP-Server mit TLS unter Debian 10

So installieren Sie den VsFTPD-Server mit TLS unter Ubuntu 18.04 LTS

So installieren und konfigurieren Sie Apache mit Let’s Encrypt TLS/SSL unter Ubuntu 20.04

So installieren und konfigurieren Sie den VSFTPD-FTP-Server unter Ubuntu

So installieren und konfigurieren Sie VSFTPD unter Ubuntu 14.04