FTP (File Transfer Protocol) ist ein Standard-Client-Server-Netzwerkprotokoll, mit dem Benutzer Dateien zu und von einem Remote-Netzwerk übertragen können.
Für Linux stehen mehrere Open-Source-FTP-Server zur Verfügung. Die beliebtesten und am weitesten verbreiteten sind PureFTPd, ProFTPD und vsftpd.
In diesem Tutorial installieren wir vsftpd (Very Secure Ftp Daemon) auf CentOS 7. Es ist ein stabiler, sicherer und schneller FTP-Server. Wir zeigen Ihnen auch, wie Sie vsftpd konfigurieren, um Benutzer auf ihr Home-Verzeichnis zu beschränken und die gesamte Übertragung mit SSL/TLS zu verschlüsseln.
Verwenden Sie für sicherere und schnellere Datenübertragungen SCP oder SFTP.
Voraussetzungen #
Bevor Sie mit diesem Tutorial fortfahren, vergewissern Sie sich, dass Sie als Benutzer mit sudo-Berechtigungen angemeldet sind.
Installieren von vsftpd unter CentOS 7 #
Das vsftpd-Paket ist in den standardmäßigen CentOS-Repositories verfügbar. Um es zu installieren, geben Sie den folgenden Befehl ein:
sudo yum install vsftpd
Sobald das Paket installiert ist, starten Sie den vsftpd-Daemon und aktivieren Sie ihn so, dass er beim Booten automatisch gestartet wird:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
Sie können überprüfen, ob der vsftpd-Dienst ausgeführt wird, indem Sie seinen Status ausdrucken:
sudo systemctl status vsftpd
Die Ausgabe sieht etwa wie folgt aus und zeigt, dass der vsftpd-Dienst aktiv ist und ausgeführt wird:
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2018-11-22 09:42:37 UTC; 6s ago
Main PID: 29612 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─29612 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Konfiguriere vsftpd #
Die Konfiguration des vsftpd-Dienstes umfasst die Bearbeitung von /etc/vsftpd/vsftpd.conf
Konfigurationsdatei. Die meisten Einstellungen sind in der Konfigurationsdatei gut dokumentiert. Für alle verfügbaren Optionen besuchen Sie die offizielle vsftpdpage.
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/vsftpd.conf
1. FTP-Zugriff #
Wir werden den Zugriff auf den FTP-Server nur den lokalen Benutzern erlauben, finden Sie den 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 #
Entkommentieren Sie write_enable
Einstellung, um Änderungen am Dateisystem wie das Hochladen und Löschen von Dateien zuzulassen.
write_enable=YES
3. Chroot-Gefängnis #
Verhindern Sie, dass FTP-Benutzer auf Dateien außerhalb ihrer Home-Verzeichnisse zugreifen, indem Sie chroot
auskommentieren Richtlinie.
chroot_local_user=YES
Wenn chroot aktiviert ist, weigert sich vsftpd standardmäßig, Dateien hochzuladen, wenn das Verzeichnis, in das die Benutzer eingesperrt sind, beschreibbar ist. Dies soll eine Sicherheitslücke verhindern.
Verwenden Sie eine der folgenden Methoden, um Uploads zuzulassen, wenn Chroot aktiviert ist.
-
Methode 1. - Die empfohlene Methode, um das Hochladen zuzulassen, besteht darin, Chroot aktiviert zu lassen und FTP-Verzeichnisse zu konfigurieren. In diesem Tutorial erstellen wir einen
/etc/vsftpd/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 besteht darin, die folgende Direktive in die vsftpd-Konfigurationsdatei einzufügen. Verwenden Sie diese Option, wenn Sie Ihrem Benutzer Schreibzugriff auf sein Home-Verzeichnis gewähren müssen.
/etc/vsftpd/vsftpd.confallow_writeable_chroot=YES
4. Passive FTP-Verbindungen #
vsftpd kann jeden Port für passive FTP-Verbindungen verwenden. Wir geben den minimalen und maximalen Portbereich an und öffnen den Bereich später in unserer Firewall.
Fügen Sie der Konfigurationsdatei die folgenden Zeilen hinzu:
/etc/vsftpd/vsftpd.confpasv_min_port=30000
pasv_max_port=31000
5. Benutzeranmeldung einschränken #
Um nur bestimmten Benutzern die Anmeldung beim FTP-Server zu erlauben, fügen Sie die folgenden Zeilen nach userlist_enable=YES
hinzu Zeile:
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 ganz einfach ein kostenloses Let’s EncryptSSL-Zertifikat generieren.
In diesem Tutorial generieren wir ein selbstsigniertes SSL-Zertifikat mit openssl
Befehl.
Der folgende Befehl erstellt einen privaten 2048-Bit-Schlüssel und ein selbstsigniertes Zertifikat, das 10 Jahre gültig ist. Sowohl der private Schlüssel als auch das Zertifikat werden in derselben Datei gespeichert:
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
Sobald das SSL-Zertifikat erstellt ist, öffnen Sie die vsftpd-Konfigurationsdatei:
sudo nano /etc/vsftpd/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/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/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/vsftpd.confanonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
tcp_wrappers=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES
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 Firewall betreiben, müssen Sie FTP-Verkehr zulassen.
Um Port 21
zu öffnen (FTP-Befehlsport), Port 20
(FTP-Datenport) und 30000-31000
(Passiver Portbereich), geben Sie die folgenden Befehle ein:
sudo firewall-cmd --permanent --add-port=20-21/tcp
sudo firewall-cmd --permanent --add-port=30000-31000/tcp
Laden Sie die Firewall-Regeln neu, indem Sie Folgendes eingeben:
firewall-cmd --reload
Erstellen eines FTP-Benutzers #
Um unseren FTP-Server zu testen, erstellen wir einen neuen Benutzer.
- Wenn Sie bereits einen Benutzer haben, dem Sie FTP-Zugriff gewähren möchten, überspringen Sie den 1. Schritt.
- Wenn Sie
allow_writeable_chroot=YES
setzen in Ihrer Konfigurationsdatei den 3. Schritt überspringen.
-
Erstellen Sie einen neuen Benutzer namens
newftpuser
:sudo adduser newftpuser
Als nächstes müssen Sie das Benutzerkennwort festlegen:
sudo passwd 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.
An diesem Punkt ist Ihr FTP-Server voll funktionsfähig und Sie sollten sich mit jedem FTP-Client, der für die Verwendung von TLS-Verschlüsselung konfiguriert werden kann, wie FileZilla, mit Ihrem Server verbinden können.
Shell-Zugriff deaktivieren #
Beim Erstellen eines Benutzers hat der Benutzer standardmäßig SSH-Zugriff auf den Server, sofern nicht ausdrücklich angegeben.
Um den Shell-Zugriff zu deaktivieren, erstellen wir eine neue Shell, die einfach 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 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
Verwenden Sie denselben Befehl, um die Shell für andere Benutzer zu ändern, denen Sie nur FTP-Zugriff gewähren möchten.