Wie man SFTP auf Linux-Servern installiert und nutzt
SFTP oder SSH File Transfer Protocol ist eine Methode zur sicheren Übertragung von Daten zwischen zwei Computern und mehr. Es ist ein FTP, das auf dem SSH-Protokoll aufbaut, dessen Sicherheit nutzt und dessen Authentifizierung vollständig unterstützt.
Heutzutage wird empfohlen, SFTP anstelle des alten FTP- oder FTP/S-Protokolls zu verwenden. SFTP ist standardmäßig sicher, weil SSH auf diese Weise funktioniert. Aus Sicherheitsgründen schützt dich SFTP auch vor Passwort-Sniffing und Man-in-the-Middle-Angriffen (MiTM).
Genau wie SSH schützt auch SFTP die Integrität deiner Daten durch Verschlüsselung und kryptografische Hash-Funktionen. Außerdem unterstützt es mehrere sichere Authentifizierungsmethoden, darunter die passwort- und schlüsselbasierte Authentifizierung. Außerdem reduziert es die Anzahl der offenen Ports des Servers nach außen, da es auf demselben Port wie das SSH-Protokoll läuft.
Voraussetzungen
In diesem Leitfaden erfährst du, wie du den SFTP-Server auf einem Linux-System einrichtest. Außerdem lernst du die grundlegenden Befehle des sftp-Clients kennen.
Im Folgenden findest du die aktuelle Umgebung für die Implementierung:
- Ein Linux Server – du kannst Debian, Ubuntu, CentOS, Fedora, Rocky oder eine andere Linux Distribution verwenden.
- Stelle sicher, dass OpenSSH-Pakete auf deinem Linux-System verfügbar sind.
- SFTP-Client – sftp-Kommandozeile oder ein beliebiger GUI-Client, je nachdem, was du bevorzugst.
Überprüfe die OpenSSH-Pakete
Um einen SFTP-Server einzurichten, musst du die OpenSSH-Pakete auf deinem Linux-System installiert haben. Bei fast allen Linux-Distributionsservern sind die OpenSSH-Pakete standardmäßig installiert. Falls du das OpenSSH-Paket jedoch nicht auf deinem System hast, kannst du es aus dem offiziellen Repository installieren.
1. Um sicherzustellen, dass die OpenSSH-Pakete auf deinem Linux-System installiert sind, verwende den folgenden Befehl.
Für Debian- oder Ubuntu-Server kannst du den unten stehenden dpkg- unf grep-Befehl verwenden.
dpkg -l | grep ssh
Unten siehst du die Ausgabe von unserem Debian-System.
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.
Für RHEL/CentOS/Fedora/Rocky Linux/AlmaLinux-Benutzer kannst du den rpm-Befehl wie unten beschrieben verwenden.
rpm -qa | grep ssh
Gruppe und Benutzer erstellen
In diesem Schritt erstellst du eine neue Gruppe und einen neuen Benutzer für den SFTP-Server. Die Benutzer dieser Gruppe können auf den SFTP-Server zugreifen. Aus Sicherheitsgründen können SFTP-Benutzer nicht auf den SSH-Dienst zugreifen. SFTP-Benutzer haben nur Zugriff auf den SFTP-Server.
1. Führe den folgenden Befehl aus, um eine neue Gruppe„sftpgroup“ zu erstellen.
sudo groupadd sftpgroup
2. Erstelle einen neuen Benutzer„sftpuser“ mit dem folgenden Befehl.
sudo useradd -G sftpgroup -d /srv/sftpuser -s /sbin/nologin sftpuser
Detaillierte Optionen:
- -G: fügt den Benutzer automatisch zur„sftpgroup“ hinzu.
- -d: gib das Heimatverzeichnis für den neuen Benutzer an.
- -s: Setze den Standard für den neuen Benutzer auf„/sbin/nologin„, was bedeutet, dass der Benutzer keinen Zugriff auf den SSH-Server hat.
3. Als Nächstes erstellst du das Passwort für den Benutzer„sftpuser“ mit dem folgenden Befehl.
passwd sftpuser
Gib dein sicheres Passwort ein und wiederhole es, dann bestätige es mit„Enter„.
Um weitere Benutzer hinzuzufügen, wiederholst du die Schritte 2 und 3. Wichtig ist, dass alle SFTP-Benutzer in der Gruppe„sftpgroup“ sind und keinen Shell-Zugang über SSH haben.
Chroot-Gefängnisverzeichnis einrichten
Nachdem du eine neue Gruppe und einen neuen Benutzer angelegt hast, musst du das Chroot-Verzeichnis für die SFTP-Benutzer erstellen und konfigurieren.
1. Für den Benutzer „sftpuser“ wird das neue Heimatverzeichnis „/srv/sftpuser“ sein. Führe den folgenden Befehl aus, um es zu erstellen.
mkdir -p /srv/sftpuser
2. Um chroot für den Benutzer„sftpuser“ einzurichten, musst du die Eigentümerschaft des Verzeichnisses auf den Benutzer „root“ ändern, aber der Gruppe weiterhin Lese- und Ausführungsrechte ohne Schreibrechte einräumen.
Ändere die Eigentümerschaft des Verzeichnisses mit folgendem Befehl auf den Benutzer „root“.
sudo chown root /srv/sftpuser
Gib der Gruppe die Berechtigung zum Lesen und Ausführen, aber nicht zum Schreiben.
sudo chmod g+rx /srv/sftpuser
3. Als Nächstes erstellst du ein neues Verzeichnis „data“ innerhalb des Verzeichnisses„/srv/sftpuser“ und änderst den Besitzer dieses Verzeichnisses auf den Benutzer„sftpuser„.
mkdir -p /srv/sftpuser/data chown sftpuser:sftpuser /srv/sftpuser/data
Im Folgenden wird die Konfiguration für das SFTP-Benutzerverzeichnis beschrieben.
- Das Verzeichnis„/srv/sftuser“ ist das Standard-Home-Verzeichnis.
- Der Benutzer„sftpuser“ kann nicht in das Verzeichnis„/srv/sftpuser“ schreiben, aber er kann in diesem Verzeichnis lesen.
- Der Benutzer„sftpuser“ kann Dateien auf den SFTP-Server in das Verzeichnis„/srv/sftpuser/data“ hochladen.
Aktivieren von SFTP auf dem SSH-Server
Um den SFTP-Server auf OpenSSH zu aktivieren, musst du die SSH-Konfiguration „/etc/ssh/sshd_config“ bearbeiten.
1. Bearbeite die ssh-Konfiguration„/etc/ssh/sshd_config“ mit nano oder vim.
sudo nano /etc/ssh/sshd_config
2. Kommentiere die folgende Konfiguration, um die eigenständige Funktion„sftp-server“ zu deaktivieren.
#Subsystem sftp /usr/lib/openssh/sftp-server
3. Füge die folgende Konfiguration am Ende der Zeile ein.
Subsystem sftp internal-sftp
Match Group sftpgroup
ChrootDirectory %h
X11Forwarding no
AllowTCPForwarding no
ForceCommand internal-sftp
Speichere die Konfiguration und beende sie.
Detaillierte Konfiguration:
- Statt des Unterprozesses„sftp-server“ verwenden wir den„internal-sftp„.
- Der SFTP-Server wird für die Gruppe„sftpgroup“ aktiviert.
4. Um eine neue Konfiguration anzuwenden, starte den ssh-Dienst mit dem unten stehenden Befehl neu.
sudo systemctl restart sshd
Der SFTP-Server ist bereit und erreichbar und läuft auf demselben Port wie der SSH-Dienst.
Zugriff auf den SFTP-Server
Auf der Client-Seite werden wir die sftp-Befehlszeile verwenden, die bei den meisten Linux-Distributionen standardmäßig installiert ist. Du kannst aber auch einen anderen Kommandozeilen-Client oder einen GUI-FTP-Client wie FileZilla, Cyberduck usw. verwenden.
1. Um dich mit dem SFTP-Server zu verbinden, führe den Befehl sftp wie folgt aus.
sftp ftpuser@SERVER-IP
Wenn dein SFTP- und/oder SSH-Server auf einem benutzerdefinierten Port läuft, kannst du den sftp-Befehl wie folgt verwenden.
sftp -P PORT ftpuser@SERVER-IP
Gib das Passwort für den„sftpuser“ ein.
2. Sobald du mit dem SFTP-Server verbunden bist, führe den folgenden Befehl aus.
Zeigt den aktuellen Pfad zum Arbeitsverzeichnis an und listet alle verfügbaren Dateien und Verzeichnisse auf.
pwd ls
3. Lade eine lokale Datei auf den SFTP-Server hoch, und zwar in das Verzeichnis ‚/‚, was als ‚Berechtigung verweigert‚, weil es das chroot-Verzeichnis ist.
put /path/to/file/on/local /
4. Lade eine lokale Datei in das Verzeichnis‚/data/‚ auf dem SFTP-Server hoch. Wenn deine Konfiguration korrekt ist, wird deine Datei in das Verzeichnis„/data/“ hochgeladen.
put /path/to/file1/on/local1 /data/ put /path/to/file2/on/local /data/
5. Überprüfe nun die verfügbaren Dateien im Verzeichnis„/data“ mit dem folgenden Befehl.
ls /data/
Du wirst sehen, dass deine Datei auf den SFTP-Server hochgeladen wurde.
Fazit
Herzlichen Glückwunsch! Du hast 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 hast du gelernt, wie du das chroot-Verzeichnis für SFTP-Benutzer einrichtest und den grundlegenden sftp-Client-Befehl beherrschst.