SFTP (SSH File Transfer Protocol) ist ein sicheres Dateiprotokoll, das für den Zugriff, die Verwaltung und die Übertragung von Dateien über eine verschlüsselte SSH-Transportsitzung verwendet wird. Security first ist eine Faustregel für die Systemadministratoren. In einigen Fällen müssen wir entfernten Benutzern den Zugriff auf das Dateisystem auf unserem System erlauben, aber Sie möchten ihnen nicht erlauben, eine Shell zu erhalten. Dadurch erhalten Sie einen sicheren Kanal, um eingeschränkten Zugriff auf bestimmte Dateien und Verzeichnisse zu gewähren.
Dieses Tutorial hilft Ihnen beim Einrichten des reinen SFTP-Zugriffs (ohne Shell-Zugriff) auf dem Debian 11-System. Es wird eine Chroot-Umgebung auf Ihrem System erstellt, um den SFTP-Benutzer nur auf ein bestimmtes Verzeichnis zu beschränken. Außerdem wird dem Benutzer nur SFTP-Zugriff ohne SSH-Zugriff gewährt.
Voraussetzungen
- Ein laufendes Debian 11 Bullseye Linux-System
- Sie müssen über ein sudo-privilegiertes Konto mit Shell-Zugriff verfügen
Schritt 1 – Erstellen Sie einen neuen Benutzer
Erstellen Sie zunächst einen neuen Benutzer, um sich mit dem sftp-Server zu verbinden. Der folgende Befehl erstellt ein neues Konto namens sftpuser ohne Shell-Zugriff. Sie können einen beliebigen Namen Ihrer Wahl oder Anforderung verwenden.
sudo adduser --shell /bin/false sftpuser
Schritt 2 – Erstellen Sie ein Verzeichnis für den SFTP-Zugriff
Sie haben einen Benutzer für sftp erstellt. Erstellen Sie nun ein Verzeichnis, das als Chroot für sftp konfiguriert werden soll. Für dieses Beispiel erstelle ich ein /var/sftp Verzeichnis. Das Verzeichnis muss Root-Eigentümer sein, um es als Chroot-Verzeichnis zu konfigurieren. Also erstellen wir ein Unterverzeichnis unter /var/sftp mit Schreibzugriff auf das sftp-Konto.
Erstellen Sie die Verzeichnisstruktur mit dem folgenden Befehl:
sudo mkdir -p /var/sftp/files
Als nächstes müssen wir die richtige Berechtigung für Verzeichnisse festlegen, um sie als Chroot-Zugriff mit Schreibzugriff für den Benutzer zu konfigurieren. Hier muss /var/sftp den Root-Besitz und die Gruppe mit der entsprechenden Berechtigung haben. Geben Sie zum Festlegen dieser Berechtigung Folgendes ein:
sudo chown root:root /var/sftp
sudo chmod 755 /var/sftp
Ändern Sie nun die Berechtigung für die "files"
Verzeichnis, um Schreibzugriff auf sftpuser zu ermöglichen. Geben Sie zum Festlegen dieser Berechtigungen Folgendes ein:
sudo chown sftpuser:sftpuser /var/sftp/files
Sobald der sftpuser eine Verbindung zum Server herstellt, erhält er /var/sftp als Stammverzeichnis. Er kann nicht auf das Dateisystem außerhalb zugreifen. Außerdem kann der Benutzer Dateien nur im Verzeichnis „Dateien“ lesen/schreiben.
Schritt 3 – sshd nur für SFTP konfigurieren
Als nächstes müssen Sie den SSH-Server so konfigurieren, dass der „sftpuser“ den Server nur mit sFTP ohne Shell-Zugriff verbinden kann. Bearbeiten Sie die SSH-Konfigurationsdatei, um die erforderlichen Änderungen vorzunehmen.
sudo nano /etc/ssh/sshd_config
und fügen Sie die folgenden Einstellungen am Ende der Datei hinzu.
Match User sftpuser ForceCommand internal-sftp PasswordAuthentication yes ChrootDirectory /var/sftp PermitTunnel no AllowAgentForwarding no AllowTcpForwarding no X11Forwarding no
Überprüfen Sie nochmals, ob alle Einstellungen korrekt sind. Speichern Sie dann die Änderungen und starten Sie den SSH-Dienst neu, um die Änderungen zu übernehmen.
sudo systemctl restart ssh
Alles erledigt, die reine SFTP-Nutzung wurde erfolgreich auf Ihrem Debian-System erstellt. Versuchen Sie nun, sich mit den Anmeldeinformationen des neuen Benutzers beim Remote-System anzumelden, und überprüfen Sie, ob alles ordnungsgemäß funktioniert.
Schritt 4 – Mit SFTP verbinden
Man kann über eine Befehlszeile oder grafische Anwendungen wie Filezilla oder WinSCP eine Verbindung zu einem entfernten SFTP-Server herstellen. In diesem Tutorial zeige ich Ihnen beide Möglichkeiten, SFTP-Server zu verbinden.
Linux-Benutzer können das sftp-Befehlszeilendienstprogramm verwenden, um eine Verbindung zu entfernten sftp-Instanzen herzustellen.
sftp [email protected]
[email protected]'s password:
sftp>
GUI-Schnittstelle oder Windows-Benutzer können grafische SFTP-Clients verwenden. Verwenden Sie beispielsweise den Filezilla-Client, um eine Verbindung zum Remote-SFTP-Konto auf dem Remote-System herzustellen.
Kein Shell-Zugriff bestätigen:
Da dieses Konto nur für SFTP-Verbindungen konfiguriert ist. Wenn also ein Benutzer versucht, sich über SSH zu verbinden, wird die Verbindung sofort nach erfolgreicher Authentifizierung getrennt. Der Benutzer erhält die folgende Nachricht:
ssh [email protected]
[email protected]'s password:
This service allows sftp connections only.
Connection to sftp.tecadmin.net closed.
Schlussfolgerung
In dieser Anleitung haben Sie gelernt, eine Chroot-Jail-Umgebung für SFTP-Benutzer ohne Shell-Zugriff auf den Server zu erstellen. Die Chroot-Umgebung sichert das Dateisystem, indem sie verhindert, dass Benutzer auf Dateien außerhalb des definierten Verzeichnisses zugreifen. Dieses Tutorial wurde mit dem Debian 11 Bullseye-System erstellt und getestet, aber es funktioniert auch mit anderen Debian-Versionen.