Einführung
SFTP steht fürSSHFileTransferProtocol. Wie der Name schon sagt, ist dies eine sichere Möglichkeit, Dateien über eine verschlüsselte SSH-Verbindung zwischen Computern zu übertragen. Trotz des Namens handelt es sich um ein völlig anderes Protokoll alsFTP (FileTransferProtocol), obwohl es von modernen FTP-Clients weitgehend unterstützt wird.
SFTP ist standardmäßig ohne zusätzliche Konfiguration auf allen Servern verfügbar, auf denen der SSH-Zugriff aktiviert ist. Es ist sicher und einfach zu bedienen, weist jedoch einen Nachteil auf: In einer Standardkonfiguration gewährt der SSH-Server allen Benutzern mit einem Konto auf dem System Zugriff auf die Dateiübertragung und die Terminal-Shell.
In einigen Fällen möchten Sie möglicherweise, dass nur bestimmten Benutzern Dateiübertragungen und kein SSH-Zugriff gewährt werden. In diesem Lernprogramm richten wir den SSH-Dämon so ein, dass der SFTP-Zugriff auf ein Verzeichnis beschränkt wird, wobei pro Benutzer kein SSH-Zugriff zulässig ist.
Voraussetzungen
Um diesem Tutorial folgen zu können, benötigen Sie Zugriff auf einen Ubuntu 18.04-Server. Dieser Server sollte einen Nicht-Root-Benutzer mitsudo
-Berechtigungen sowie eine aktivierte Firewall haben. Befolgen Sie unsereInitial Server Setup Guide for Ubuntu 18.04, um Hilfe beim Einrichten zu erhalten.
[[Schritt-1 - Erstellen eines neuen Benutzers]] == Schritt 1 - Erstellen eines neuen Benutzers
Erstellen Sie zunächst einen neuen Benutzer, dem nur der Dateiübertragungszugriff auf den Server gewährt wird. Hier verwenden wir den Benutzernamensammyfiles, aber Sie können einen beliebigen Benutzernamen verwenden.
sudo adduser sammyfiles
Sie werden aufgefordert, ein Kennwort für das Konto zu erstellen, gefolgt von einigen Informationen zum Benutzer. Die Benutzerinformationen sind optional. Sie können alsoENTER
drücken, um diese Felder leer zu lassen.
Sie haben jetzt einen neuen Benutzer erstellt, dem der Zugriff auf das eingeschränkte Verzeichnis gewährt wird. Im nächsten Schritt erstellen wir das Verzeichnis für die Dateiübertragung und richten die erforderlichen Berechtigungen ein.
[[Schritt-2 - Erstellen eines Verzeichnisses für Dateiübertragungen] == Schritt 2 - Erstellen eines Verzeichnisses für Dateiübertragungen
Um den SFTP-Zugriff auf ein Verzeichnis einzuschränken, müssen wir zunächst sicherstellen, dass das Verzeichnis den sehr speziellen Berechtigungsanforderungen des SSH-Servers entspricht.
Insbesondere müssen das Verzeichnis selbst und alle darüber liegenden Verzeichnisse in der Dateisystemstrukturroot gehören und dürfen von niemand anderem geschrieben werden. Folglich ist es nicht möglich, einfach eingeschränkten Zugriff auf das Home-Verzeichnis eines Benutzers zu gewähren, da Home-Verzeichnisse dem Benutzer gehören und nichtroot.
[.note] #Note: Einige Versionen von OpenSSH stellen keine so strengen Anforderungen an die Verzeichnisstruktur und den Besitz, aber die meisten modernen Linux-Distributionen (einschließlich Ubuntu 18.04) tun dies.
#
Es gibt eine Reihe von Möglichkeiten, um dieses Eigentumsproblem zu umgehen. In diesem Tutorial erstellen und verwenden wir/var/sftp/uploads
als Ziel-Upload-Verzeichnis. /var/sftp
gehörtroot und kann nicht von anderen Benutzern geschrieben werden. Das Unterverzeichnis/var/sftp/uploads
gehörtsammyfiles, sodass der Benutzer Dateien darauf hochladen kann.
Erstellen Sie zunächst die Verzeichnisse.
sudo mkdir -p /var/sftp/uploads
Setzen Sie den Eigentümer von/var/sftp
aufroot.
sudo chown root:root /var/sftp
Geben Sieroot Schreibberechtigungen für dasselbe Verzeichnis und geben Sie anderen Benutzern nur Lese- und Ausführungsrechte.
sudo chmod 755 /var/sftp
Ändern Sie den Besitz im Verzeichnisuploads
insammyfiles.
sudo chown sammyfiles:sammyfiles /var/sftp/uploads
Nachdem die Verzeichnisstruktur eingerichtet wurde, können wir den SSH-Server selbst konfigurieren.
[[Schritt 3 - Einschränkung des Zugriffs auf ein Verzeichnis]] == Schritt 3 - Einschränkung des Zugriffs auf ein Verzeichnis
In diesem Schritt ändern wir die SSH-Serverkonfiguration so, dass der Terminalzugriff fürsammyfiles nicht zulässig ist, der Dateiübertragungszugriff jedoch zulässig ist.
Öffnen Sie die SSH-Serverkonfigurationsdatei mitnano
oder Ihrem bevorzugten Texteditor.
sudo nano /etc/ssh/sshd_config
Scrollen Sie zum Ende der Datei und hängen Sie das folgende Konfigurations-Snippet an:
/etc/ssh/sshd_config
. . .
Match User sammyfiles
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/sftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
Speichern und schließen Sie dann die Datei.
Die einzelnen Richtlinien haben folgende Aufgaben:
-
Match User
weist den SSH-Server an, die folgenden Befehle nur auf den angegebenen Benutzer anzuwenden. Hier geben wirsammyfiles an. -
ForceCommand internal-sftp
zwingt den SSH-Server, den SFTP-Server bei der Anmeldung auszuführen, wodurch der Shell-Zugriff nicht zugelassen wird. -
PasswordAuthentication yes
ermöglicht die Kennwortauthentifizierung für diesen Benutzer. -
ChrootDirectory /var/sftp/
stellt sicher, dass dem Benutzer kein Zugriff auf etwas außerhalb des Verzeichnisses/var/sftp
gewährt wird. -
AllowAgentForwarding no
,AllowTcpForwarding no
. undX11Forwarding no
deaktiviert die Portweiterleitung, das Tunneln und die X11-Weiterleitung für diesen Benutzer.
Dieser Befehlssatz, beginnend mitMatch User
, kann auch für verschiedene Benutzer kopiert und wiederholt werden. Stellen Sie sicher, dass Sie den Benutzernamen in der ZeileMatch User
entsprechend ändern.
[.Hinweis]##
Note: Sie können die ZeilePasswordAuthentication yes
weglassen und stattdessen den SSH-Schlüsselzugriff einrichten, um die Sicherheit zu erhöhen. Befolgen Sie dazu den AbschnittCopying your Public SSH Key im TutorialSSH Essentials: Working with SSH Servers, Clients, and Keys. Stellen Sie sicher, dass Sie dies tun, bevor Sie den Shell-Zugriff für den Benutzer deaktivieren.
Im nächsten Schritt testen wir die Konfiguration durch lokales SSHing mit Kennwortzugriff. Wenn Sie jedoch SSH-Schlüssel einrichten, benötigen Sie stattdessen Zugriff auf einen Computer mit dem Schlüsselpaar des Benutzers.
Starten Sie den Dienst neu, um die Konfigurationsänderungen zu übernehmen.
sudo systemctl restart sshd
Sie haben den SSH-Server jetzt so konfiguriert, dass der Zugriff auf die Dateiübertragung nur fürsammyfiles eingeschränkt wird. Im letzten Schritt wird die Konfiguration getestet, um sicherzustellen, dass sie wie vorgesehen funktioniert.
[[Schritt 4 - Überprüfung der Konfiguration]] == Schritt 4 - Überprüfung der Konfiguration
Stellen wir sicher, dass der Benutzer unseres neuensammyfilesnur Dateien übertragen kann.
Eine Anmeldung am Server alssammyfiles mit normalem Shell-Zugriff sollte nicht mehr möglich sein. Lass es uns versuchen:
ssh sammyfiles@localhost
Die folgende Meldung wird angezeigt, bevor Sie zu Ihrer ursprünglichen Eingabeaufforderung zurückkehren:
Error messageThis service allows sftp connections only.
Connection to localhost closed.
Dies bedeutet, dasssammyfiles nicht mehr mit SSH auf die Server-Shell zugreifen können.
Überprüfen Sie als Nächstes, ob der Benutzer für die Dateiübertragung erfolgreich auf SFTP zugreifen kann.
sftp sammyfiles@localhost
Anstelle einer Fehlermeldung wird mit diesem Befehl eine Meldung zur erfolgreichen Anmeldung mit einer interaktiven Eingabeaufforderung angezeigt.
SFTP promptConnected to localhost.
sftp>
Sie können den Verzeichnisinhalt mitls
in der Eingabeaufforderung auflisten:
ls
Dadurch wird das im vorherigen Schritt erstellte Verzeichnisuploads
angezeigt und Sie kehren zur Eingabeaufforderungsftp>
zurück.
SFTP file list outputuploads
Um zu überprüfen, ob der Benutzer tatsächlich auf dieses Verzeichnis beschränkt ist und nicht auf ein darüber liegendes Verzeichnis zugreifen kann, können Sie versuchen, das Verzeichnis in das darüber liegende zu ändern.
cd ..
Dieser Befehl gibt keinen Fehler aus, aber das Auflisten des Verzeichnisinhalts wie zuvor zeigt keine Änderung an, was beweist, dass der Benutzer nicht in das übergeordnete Verzeichnis wechseln konnte.
Sie haben nun überprüft, ob die eingeschränkte Konfiguration wie beabsichtigt funktioniert. Der neu erstelltesammyfiles-Benutzer kann nur über das SFTP-Protokoll für die Dateiübertragung auf den Server zugreifen und hat keinen Zugriff auf die vollständige Shell.
Fazit
Sie haben einen Benutzer auf den SFTP-Zugriff auf ein einzelnes Verzeichnis auf einem Server ohne vollständigen Shell-Zugriff beschränkt. In diesem Lernprogramm werden aus Gründen der Übersichtlichkeit nur ein Verzeichnis und ein Benutzer verwendet. Sie können dieses Beispiel jedoch auf mehrere Benutzer und mehrere Verzeichnisse ausweiten.
Der SSH-Server ermöglicht komplexere Konfigurationsschemata, einschließlich der Beschränkung des Zugriffs auf Gruppen oder mehrere Benutzer gleichzeitig oder sogar der Beschränkung des Zugriffs auf bestimmte IP-Adressen. Beispiele für zusätzliche Konfigurationsoptionen und Erläuterungen möglicher Anweisungen finden Sie inOpenSSH Cookbook. Wenn Sie auf Probleme mit SSH stoßen, können Sie diese mittroubleshooting SSH series debuggen und beheben.