So aktivieren Sie SFTP ohne Shell-Zugriff unter CentOS 7

Einführung

SFTP steht für S SH F ile T ransfer P rotocol. Wie der Name schon sagt, ist dies eine sichere Methode, um Dateien über eine verschlüsselte SSH-Verbindung auf einen Server zu übertragen. Trotz des Namens ist es ein völlig anderes Protokoll als FTP ( F ile * * T ransfer P ** rotocol), 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 zu folgen, benötigen Sie:

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 Benutzernamen * sammyfiles *, aber Sie können jeden beliebigen Benutzernamen verwenden.

sudo adduser

Als nächstes weisen Sie dem neuen Benutzer ein Passwort zu:

sudo passwd

Geben Sie ein sicheres Passwort ein und wiederholen Sie es erneut, um es zu überprüfen.

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

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 muss das Verzeichnis selbst und alle darüber liegenden Verzeichnisse in der Dateisystemstruktur im Besitz von * root * sein und darf von niemand anderem beschrieben werden. Infolgedessen ist es nicht möglich, einem Benutzer nur eingeschränkten Zugriff auf das Basisverzeichnis zu gewähren, da die Basisverzeichnisse dem Benutzer und nicht * root * gehören.

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ört * root * und ist für andere Benutzer nicht beschreibbar. Das Unterverzeichnis ` / var / sftp / uploads +` gehört * sammyfiles *, sodass der Benutzer Dateien in dieses Verzeichnis hochladen kann.

Erstellen Sie zunächst die Verzeichnisse.

sudo mkdir -p /var/sftp/uploads

Setzen Sie den Eigentümer von "+ / var / sftp +" auf "root".

sudo chown root:root /var/sftp

Erteilen Sie * root * -Schreibberechtigungen für dasselbe Verzeichnis und erteilen Sie anderen Benutzern nur Lese- und Ausführungsrechte.

sudo chmod 755 /var/sftp

Ändern Sie den Eigentümer des Verzeichnisses + uploads + in * sammyfiles *.

sudo chown sammyfiles:sammyfiles /var/sftp/uploads

Nachdem die Verzeichnisstruktur eingerichtet wurde, können wir den SSH-Server selbst konfigurieren.

Schritt 3 - Beschränken des Zugriffs auf ein Verzeichnis

In diesem Schritt ändern wir die SSH-Serverkonfiguration, um den Terminalzugriff für * sammy-Dateien * zu deaktivieren, aber den Dateiübertragungszugriff zuzulassen.

Öffnen Sie die SSH-Serverkonfigurationsdatei mit "+ vi " oder Ihrem bevorzugten Texteditor (siehe https://www.digitalocean.com/community/tutorials/installing-and-using-the-vim-text-editor-on- A-Cloud-Server # Modal-Editing [kurze Einführung in ` vi +`])

sudo vi /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
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 wir * sammyfiles * an.

  • + ForceCommand internal-sftp + zwingt den SSH-Server, den SFTP-Server bei der Anmeldung auszuführen, wodurch der Shell-Zugriff verhindert wird.

  • + PasswordAuthentication yes + ermöglicht die Kennwortauthentifizierung für diesen Benutzer.

  • + ChrootDirectory / var / sftp / + stellt sicher, dass dem Benutzer kein Zugriff über das Verzeichnis + / var / sftp + hinaus gewährt wird. Weitere Informationen zu Chroot finden Sie unter this Ubuntu- basiertes Chroot-Tutorial.

  • + AllowAgentForwarding no +, + AllowTcpForwarding no +. und + X11 Forwarding no deaktiviert Port Forwarding, Tunneling und X11 Forwarding für diesen Benutzer.

Dieser Befehlssatz, der mit "+ Match User " beginnt, kann auch für andere Benutzer kopiert und wiederholt werden. Stellen Sie sicher, dass Sie den Benutzernamen in der Zeile " Match User +" entsprechend ändern.

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ür * sammyfiles * beschränkt ist. Im letzten Schritt wird die Konfiguration getestet, um sicherzustellen, dass sie wie vorgesehen funktioniert.

Schritt 4 - Überprüfen der Konfiguration

Stellen wir sicher, dass unser neuer * sammyfiles * Benutzer nur Dateien übertragen kann.

Die Anmeldung am Server als * sammyfiles * mit normalem Shell-Zugriff sollte nicht mehr möglich sein. Lass es uns versuchen:

ssh sammyfiles@localhost

Die folgende Meldung wird angezeigt, bevor Sie zur ursprünglichen Eingabeaufforderung zurückkehren:

Error messageThis service allows sftp connections only.
Connection to localhost closed.

Dies bedeutet, dass * sammyfiles * nicht mehr über 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 mit + ls + in der Eingabeaufforderung auflisten:

ls

Dadurch wird das im vorherigen Schritt erstellte Verzeichnis "+ uploads " angezeigt und Sie kehren zur Eingabeaufforderung " sftp> +" 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 erstellte Benutzer * sammy files * kann nur mithilfe des SFTP-Protokolls für die Dateiübertragung auf den Server zugreifen und kann nicht auf die vollständige Shell zugreifen.

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 des Zugriffs auf bestimmte IP-Adressen. Beispiele für zusätzliche Konfigurationsoptionen und Erläuterungen zu möglichen Anweisungen finden Sie in OpenSSH Cookbook. Wenn Sie auf Probleme mit SSH stoßen, können Sie diese mit dieser troubleshusing SSH series debuggen und beheben.