Dieser Artikel beschreibt, wie Sie einen FTP-Server unter Ubuntu 20.04 installieren und konfigurieren, den Sie zum Freigeben von Dateien zwischen Ihren Geräten verwenden.
FTP (File Transfer Protocol) ist ein Standardnetzwerkprotokoll, das zum Übertragen von Dateien zu und von einem entfernten Netzwerk verwendet wird. Für Linux stehen mehrere Open-Source-FTP-Server zur Verfügung. Die bekanntesten und am weitesten verbreiteten sind PureFTPd, ProFTPD und vsftpd. Wir werden vsftpd (Very Secure Ftp Daemon) installieren, einen stabilen, sicheren und schnellen FTP-Server. Wir zeigen Ihnen auch, wie Sie den Server konfigurieren, um Benutzer auf ihr Home-Verzeichnis zu beschränken und die gesamte Übertragung mit SSL/TLS zu verschlüsseln.
Obwohl FTP ein sehr beliebtes Protokoll ist, sollten Sie für sicherere und schnellere Datenübertragungen SCP oder SFTP verwenden.
Installation von vsftpd auf Ubuntu 20.04 #
Das vsftpd-Paket ist in den Ubuntu-Repositories verfügbar. Um es zu installieren, führen Sie die folgenden Befehle aus:
sudo apt update
sudo apt install vsftpd
Der FTP-Dienst wird automatisch gestartet, sobald der Installationsvorgang abgeschlossen ist. Drucken Sie zur Überprüfung den Dienststatus aus:
sudo systemctl status vsftpd
Die Ausgabe sollte zeigen, dass der vsftpd-Dienst aktiv ist und ausgeführt wird:
● vsftpd.service - vsftpd FTP server
Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2021-03-02 15:17:22 UTC; 3s ago
...
Konfiguriere vsftpd #
Die vsftpd-Serverkonfiguration ist in /etc/vsftpd.conf
gespeichert Datei.
Die meisten Servereinstellungen sind in der Datei gut dokumentiert. Alle verfügbaren Optionen finden Sie auf der vsftpd-Dokumentationsseite.
In den folgenden Abschnitten gehen wir einige wichtige Einstellungen durch, die zum Konfigurieren einer sicheren vsftpd-Installation erforderlich sind.
Öffnen Sie zunächst die vsftpd-Konfigurationsdatei:
sudo nano /etc/vsftpd.conf
1. FTP-Zugang #
Wir erlauben den Zugriff auf den FTP-Server nur den lokalen Benutzern. Suchen Sie nach anonymous_enable
und local_enable
Anweisungen und überprüfen Sie, ob Ihre Konfiguration mit den folgenden Zeilen übereinstimmt:
anonymous_enable=NO
local_enable=YES
2. Uploads aktivieren #
Suchen Sie den write_enable
und kommentieren Sie ihn aus Direktive, um Dateisystemänderungen wie das Hochladen und Entfernen von Dateien zuzulassen:
write_enable=YES
3. Chroot-Gefängnis #
Um zu verhindern, dass lokale FTP-Benutzer auf Dateien außerhalb ihrer Home-Verzeichnisse zugreifen, kommentieren Sie die lne beginnend mit chroot_local_user
aus :
chroot_local_user=YES
Aus Sicherheitsgründen weigert sich vsftpd standardmäßig, wenn Chroot aktiviert ist, Dateien hochzuladen, wenn das Verzeichnis, in das die Benutzer eingesperrt sind, beschreibbar ist.
Verwenden Sie eine der folgenden Lösungen, um Uploads zuzulassen, wenn Chroot aktiviert ist:
-
Methode 1. - Die empfohlene Option ist, die Chroot-Funktion aktiviert zu lassen und FTP-Verzeichnisse zu konfigurieren. In diesem Beispiel erstellen wir ein
/etc/vsftpd.confftp
Verzeichnis im Benutzer-Home, das als Chroot und beschreibbareruploads
dient Verzeichnis zum Hochladen von Dateien:user_sub_token=$USER local_root=/home/$USER/ftp
-
Methode 2. - Eine weitere Option ist die Aktivierung von
/etc/vsftpd.confallow_writeable_chroot
Direktive:allow_writeable_chroot=YES
Verwenden Sie diese Option nur, wenn Sie Ihrem Benutzer Schreibzugriff auf sein Home-Verzeichnis gewähren müssen.
4. Passive FTP-Verbindungen #
Standardmäßig verwendet vsftpd den aktiven Modus. Um den passiven Modus zu verwenden, legen Sie den minimalen und maximalen Portbereich fest:
/etc/vsftpd.confpasv_min_port=30000
pasv_max_port=31000
Sie können jeden Port für passive FTP-Verbindungen verwenden. Wenn der passive Modus aktiviert ist, öffnet der FTP-Client eine Verbindung zum Server auf einem zufälligen Port in dem von Ihnen gewählten Bereich.
5. Benutzeranmeldung einschränken #
Sie können vsftpd so konfigurieren, dass sich nur bestimmte Benutzer anmelden können. Fügen Sie dazu die folgenden Zeilen am Ende der Datei hinzu:
/etc/vsftpd.confuserlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
Wenn diese Option aktiviert ist, müssen Sie explizit angeben, welche Benutzer sich anmelden können, indem Sie die Benutzernamen zur /etc/vsftpd.user_list
hinzufügen Datei (ein Benutzer pro Zeile).
6. Sichern von Übertragungen mit SSL/TLS #
Um die FTP-Übertragungen mit SSL/TLS zu verschlüsseln, müssen Sie über ein SSL-Zertifikat verfügen und den FTP-Server für dessen Verwendung konfigurieren.
Sie können ein vorhandenes SSL-Zertifikat verwenden, das von einer vertrauenswürdigen Zertifizierungsstelle signiert wurde, oder ein selbstsigniertes Zertifikat erstellen.
Wenn Sie eine Domain oder Subdomain haben, die auf die IP-Adresse des FTP-Servers verweist, können Sie schnell ein kostenloses Let’s EncryptSSL-Zertifikat generieren.
Wir generieren einen privaten 2048-Bit-Schlüssel und ein selbstsigniertes SSL-Zertifikat, das zehn Jahre lang gültig ist:
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Sowohl der private Schlüssel als auch das Zertifikat werden in derselben Datei gespeichert.
Sobald das SSL-Zertifikat erstellt ist, öffnen Sie die vsftpd-Konfigurationsdatei:
sudo nano /etc/vsftpd.conf
Suchen Sie die rsa_cert_file
und rsa_private_key_file
Direktiven, ändern Sie ihre Werte in pam
Dateipfad und setzen Sie ssl_enable
Direktive zu YES
:
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
Wenn nicht anders angegeben, verwendet der FTP-Server nur TLS, um sichere Verbindungen herzustellen.
Starten Sie den vsftpd-Dienst neu #
Sobald Sie mit der Bearbeitung fertig sind, sollte die vsftpd-Konfigurationsdatei (ohne Kommentare) etwa so aussehen:
/etc/vsftpd.conflisten=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
Speichern Sie die Datei und starten Sie den vsftpd-Dienst neu, damit die Änderungen wirksam werden:
sudo systemctl restart vsftpd
Öffnen der Firewall #
Wenn Sie eine UFW-Firewall ausführen, müssen Sie FTP-Datenverkehr zulassen.
Um Port 21
zu öffnen (FTP-Befehlsport), Port 20
(FTP-Datenport) und 30000-31000
(Passiver Portbereich), führen Sie die folgenden Befehle aus:
sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp
Stellen Sie sicher, dass Port 22
ist, um nicht gesperrt zu werden ist offen:
sudo ufw allow OpenSSH
Laden Sie die UFW-Regeln neu, indem Sie UFW deaktivieren und erneut aktivieren:
sudo ufw disable
sudo ufw enable
Um die Änderungen zu überprüfen, führen Sie Folgendes aus:
sudo ufw status
Status: active
To Action From
-- ------ ----
20:21/tcp ALLOW Anywhere
30000:31000/tcp ALLOW Anywhere
OpenSSH ALLOW Anywhere
20:21/tcp (v6) ALLOW Anywhere (v6)
30000:31000/tcp (v6) ALLOW Anywhere (v6)
OpenSSH (v6) ALLOW Anywhere (v6)
FTP-Benutzer # erstellen
Um den FTP-Server zu testen, erstellen wir einen neuen Benutzer.
- Wenn der Benutzer, dem Sie FTP-Zugriff gewähren möchten, bereits existiert, überspringen Sie den 1. Schritt.
- Wenn Sie
allow_writeable_chroot=YES
setzen Überspringen Sie in Ihrer Konfigurationsdatei den 3. Schritt.
-
Erstellen Sie einen neuen Benutzer namens
newftpuser
:sudo adduser newftpuser
-
Fügen Sie den Benutzer zur Liste der zugelassenen FTP-Benutzer hinzu:
echo "newftpuser" | sudo tee -a /etc/vsftpd.user_list
-
Erstellen Sie den FTP-Verzeichnisbaum und legen Sie die richtigen Berechtigungen fest:
sudo mkdir -p /home/newftpuser/ftp/upload
sudo chmod 550 /home/newftpuser/ftp
sudo chmod 750 /home/newftpuser/ftp/upload
sudo chown -R newftpuser: /home/newftpuser/ftp
Wie im vorherigen Abschnitt besprochen, kann der Benutzer seine Dateien auf
ftp/upload
hochladen Verzeichnis.
Zu diesem Zeitpunkt ist Ihr FTP-Server voll funktionsfähig. Sie sollten in der Lage sein, sich mit jedem FTP-Client, der für die Verwendung von TLS-Verschlüsselung konfiguriert werden kann, wie FileZilla, mit dem Server zu verbinden.
Shell-Zugriff deaktivieren #
Beim Erstellen eines Benutzers hat der Benutzer standardmäßig SSH-Zugriff auf den Server, wenn dies nicht ausdrücklich angegeben ist. Um den Shell-Zugriff zu deaktivieren, erstellen Sie eine neue Shell, die eine Nachricht ausgibt, die dem Benutzer mitteilt, dass sein Konto nur auf FTP-Zugriff beschränkt ist.
Führen Sie die folgenden Befehle aus, um /bin/ftponly
zu erstellen Datei 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 nur FTP-Zugriff gewähren möchten.