SFTP oder SSH File Transfer Protocol ist eine Methode zum sicheren Übertragen von Daten zwischen zwei Computern und mehr. Es ist FTP, das auf dem SSH-Protokoll läuft und dessen Sicherheit nutzt und seine Authentifizierung vollständig unterstützt.
Heutzutage wird empfohlen, SFTP anstelle des alten FTP- oder FTP/S-Protokolls zu verwenden. SFTP ist standardmäßig sicher, da SSH so funktioniert. Aus Sicherheitssicht schützt Sie SFTP auch vor Passwort-Sniffing und Man-in-the-Middle-Angriffen (MiTM).
Genau wie SSH schützt auch SFTP Ihre Datenintegrität mithilfe der Verschlüsselungs- und kryptografischen Hash-Funktion. Außerdem unterstützt es mehrere sichere Authentifizierungsmethoden, einschließlich passwort- und schlüsselbasierter Authentifizierung. Außerdem reduziert es den offenen Port des Servers zum externen Netzwerk, da es auf demselben Port wie das SSH-Protokoll ausgeführt wird.
Voraussetzungen
In dieser Anleitung erfahren Sie, wie Sie einen SFTP-Server auf einem Linux-System einrichten. Außerdem lernen Sie die grundlegenden Befehle des sftp-Clients kennen.
Unten ist die aktuelle Umgebung für die Implementierung:
- Ein Linux-Server – Sie können Debian, Ubuntu, CentOS, Fedora, Rocky oder jede andere Linux-Distribution verwenden.
- Stellen Sie sicher, dass OpenSSH-Pakete auf Ihrem Linux-System verfügbar sind.
- SFTP-Client - sftp-Befehlszeile oder ein beliebiger GUI-Client, wie Sie es bevorzugen.
OpenSSH-Pakete verifizieren
Um einen SFTP-Server einzurichten, müssen Sie OpenSSH-Pakete auf Ihrem Linux-System installiert haben. Auf fast allen Linux-Distributionsservern sind die OpenSSH-Pakete standardmäßig installiert. Aber falls Sie das OpenSSH-Paket nicht auf Ihrem System haben, können Sie es aus dem offiziellen Repository installieren.
1. Um sicherzustellen, dass OpenSSH-Pakete auf Ihrem Linux-System installiert sind, verwenden Sie den folgenden Befehl.
Für Debian- oder Ubuntu-Server können Sie den folgenden dpkg-Befehl verwenden.
dpkg -l | grep ssh
Unten ist die Ausgabe unseres Debian-Systems.
ii libssh2-1:amd64 1.9.0-2 amd64 SSH2 client-side library
ii openssh-client 1:8.4p1-5 amd64 secure shell (SSH) client, for secure access to remote machines
ii openssh-server 1:8.4p1-5 amd64 secure shell (SSH) server, for secure access from remote machines
ii openssh-sftp-server 1:8.4p1-5 amd64 secure shell (SSH) sftp server module, for SFTP access from remote machines
Die erste Spalte „ii ' bedeutet, dass das Paket installiert ist. Das Paket 'openssh-sftp-server ' ist auf dem Debian/Ubuntu-System installiert.
Benutzer von RHEL/CentOS/Fedora/Rocky Linux/AlmaLinux können den Befehl rpm wie folgt verwenden.
rpm -qa | grep ssh
Gruppe und Benutzer erstellen
In diesem Schritt erstellen Sie eine neue Gruppe und einen neuen Benutzer für den SFTP-Server. Benutzer innerhalb dieser Gruppe dürfen auf den SFTP-Server zugreifen. Und aus Sicherheitsgründen können SFTP-Benutzer nicht auf den SSH-Dienst zugreifen. SFTP-Benutzer greifen nur auf den SFTP-Server zu.
1. Führen Sie den folgenden Befehl aus, um eine neue Gruppe „sftpgroup“ zu erstellen '.
sudo groupadd sftpgroup
2. Erstellen Sie einen neuen Benutzer 'sftpuser ' mit dem folgenden Befehl.
sudo useradd -G sftpgroup -d /srv/sftpuser -s /sbin/nologin sftpuser
Detaillierte Optionen:
- -G :Benutzer automatisch zur 'sftpgroup hinzufügen '.
- -d :Geben Sie das Home-Verzeichnis für den neuen Benutzer an.
- -s :Setzen Sie den Standardwert für den neuen Benutzer auf „/sbin/nologin ', was bedeutet, dass der Benutzer nicht kann Zugriff auf den SSH-Server.
3. Als nächstes erstellen Sie das Passwort für den Benutzer 'sftpuser ' mit dem folgenden Befehl.
passwd sftpuser
Geben Sie Ihr starkes Passwort ein und wiederholen Sie es, und drücken Sie dann die Eingabetaste ' zu bestätigen.
Um weitere Nutzer hinzuzufügen, wiederholen Sie die Schritte 2 und 3, und vor allem müssen alle SFTP-Benutzer in der Gruppe 'sftpgroup sein ' ohne Shell-Zugriff über SSH.
Chroot Jail-Verzeichnis einrichten
Nachdem Sie eine neue Gruppe und einen neuen Benutzer erstellt haben, müssen Sie das Chroot-Verzeichnis für SFTP-Benutzer erstellen und konfigurieren.
1. Für den Benutzer „sftpuser“ befindet sich das neue Home-Verzeichnis unter „/srv/sftpuser“ . Führen Sie den folgenden Befehl aus, um es zu erstellen.
mkdir -p /srv/sftpuser
2. Um Chroot für den Benutzer 'sftpuser einzurichten ' müssen Sie den Besitz des Verzeichnisses auf den Benutzer root ändern, aber die Gruppe zum Lesen und Ausführen ohne Schreibzugriff beibehalten.
Ändern Sie den Eigentümer des Verzeichnisses mit dem folgenden Befehl auf den Benutzer „root“.
sudo chown root /srv/sftpuser
Geben Sie der Gruppe die Berechtigung zum Lesen und Ausführen, aber nicht zum Schreiben.
sudo chmod g+rx /srv/sftpuser
3. Als nächstes erstellen Sie ein neues ‚data‘-Verzeichnis innerhalb des ‚/srv/sftpuser '-Verzeichnis und ändern Sie den Besitz dieser 'Daten ' Verzeichnis an den Benutzer 'sftpuser '.
mkdir -p /srv/sftpuser/data
chown sftpuser:sftpuser /srv/sftpuser/data
Bis hierher, unten detailliert die Konfiguration für das SFTP-Benutzerverzeichnis.
- Das Verzeichnis '/srv/sftuser' ist das Standard-Home-Verzeichnis.
- Der Benutzer 'sftpuser ' kann nicht in das Verzeichnis '/srv/sftpuser schreiben ', kann aber in diesem Verzeichnis lesen.
- Der Benutzer 'sftpuser ' kann Dateien auf den SFTP-Server in das Verzeichnis '/srv/sftpuser/data hochladen '.
SFTP auf SSH-Server aktivieren
Um den SFTP-Server auf OpenSSH zu aktivieren, müssen Sie die SSH-Konfiguration „/etc/ssh/sshd_config“ bearbeiten.
1. Bearbeiten Sie die SSH-Konfiguration '/etc/ssh/sshd_config ' mit nano oder vim.
sudo nano /etc/ssh/sshd_config
2. Kommentar die folgende Konfiguration, um den eigenständigen 'sftp-server zu deaktivieren '-Funktion.
#Subsystem sftp /usr/lib/openssh/sftp-server
3. Fügen Sie die folgende Konfiguration am Ende der Zeile ein.
Subsystem sftp internal-sftp
Match Group sftpgroup
ChrootDirectory %h
X11Forwarding no
AllowTCPForwarding no
ForceCommand internal-sftp
Speichern Sie die Konfiguration und beenden Sie.
Detaillierte Konfiguration:
- Statt den Unterprozess 'sftp-server zu verwenden ' verwenden wir das 'internal-sftp '.
- Der für die Gruppe 'sftpgroup aktivierte SFTP-Server '.
4. Um eine neue Konfiguration anzuwenden, starten Sie den ssh-Dienst mit dem folgenden Befehl neu.
sudo systemctl restart sshd
Der SFTP-Server ist bereit und zugänglich und läuft auf demselben Port wie der SSH-Dienst.
Greifen Sie auf den SFTP-Server zu
Auf der Clientseite verwenden wir die sftp-Befehlszeile, die standardmäßig auf den meisten Linux-Distributionen installiert ist. Sie können aber auch einen anderen Befehlszeilen-Client oder GUI-FTP-Client wie FileZilla verwenden , Cyberduck usw.
1. Um eine Verbindung zum SFTP-Server herzustellen, führen Sie den sftp-Befehl wie folgt aus.
sftp [email protected]
Wenn Ihr SFTP- und/oder SSH-Server auf dem benutzerdefinierten Port läuft, können Sie den sftp-Befehl wie unten verwenden.
sftp -P PORT [email protected]
Geben Sie das Passwort für den 'sftpuser ein '.
2. Sobald Sie mit dem SFTP-Server verbunden sind, führen Sie den folgenden Befehl aus.
Aktuellen Pfad Arbeitsverzeichnis anzeigen und alle verfügbaren Dateien und Verzeichnisse auflisten.
pwd
ls
3. Laden Sie eine lokale Datei auf den SFTP-Server in das Verzeichnis '/ hoch ', was zu 'Berechtigung verweigert führt ', weil es das Chroot-Verzeichnis ist.
put /path/to/file/on/local /
4. Laden Sie eine lokale Datei in das Verzeichnis '/data/ hoch ' auf dem SFTP-Server. Wenn Ihre Konfiguration korrekt ist, wird Ihre Datei in den Ordner „/data/ hochgeladen ' Verzeichnis.
put /path/to/file1/on/local1 /data/
put /path/to/file2/on/local /data/
5. Überprüfen Sie nun die verfügbaren Dateien auf dem Verzeichnis '/data ' Verzeichnis mit dem folgenden Befehl.
ls /data/
Und Sie sehen, wie Ihre Datei auf den SFTP-Server hochgeladen wird.
Schlussfolgerung
Herzliche Glückwünsche! Sie haben den SFTP-Server erfolgreich auf dem Linux-System konfiguriert. Diese Art der Konfiguration kann auf den meisten Linux-Systemen angewendet werden, auf denen OpenSSH installiert ist. Außerdem haben Sie gelernt, wie Sie das Chroot-Verzeichnis für SFTP-Benutzer einrichten und den grundlegenden sftp-Client-Befehl kennengelernt.