So aktivieren Sie SFTP ohne Shell-Zugriff unter Ubuntu 18.04

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 Verzeichnisuploadsinsammyfiles.

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/sftpgewä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 Userentsprechend ä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 Verzeichnisuploadsangezeigt 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.