Falls du einen Server betreibst (oder eine VM/LXC/etc.) und anderen Benutzern in bestimmten Verzeichnissen Berechtigungen geben möchstest, damit sie zum Beispiel Dateien hoch-/ oder runterladen können, kann dies sehr einfach mit dem ohnehin schon vorhandenen OpenSSH eingerichtet werden.
Für diese Freigabe nutzen wir SFTP (Secure File Transfer Protocol). Dies basiert auf SSH und ist damit Bestandteil des OpenSSH-Servers, den wir schon für unsere SSH-Verbindungen nutzen.
Um sich per SFTP mit einem Server zu verbinden, gibt es viele Tools mit grafischer Oberfläche, zum Beispiel:
- FileZilla
- Cyberduck
Natürlich kann man auch auf Zusatzprogramme verzichten und den Zugang auf der Kommandozeilenebene nutzen.
Um den jeweilige Benutzer in seinen Ordner einzusperren, nutzen wir die Funktion chroot
von Linux. Damit ist es dem Benutzer nicht möglich, aus diesem definierten Ordner auszubrechen, es sind also nur alle untergeordneten Verzeichnisse sichtbar, nicht die übergeordneten.
Neuen Benutzer anlegen
Zunächst legen wir einen neuen Benutzer an, der für die SFTP-Verbindung genutzt werden soll.
|
|
Nach Ausführung des Befehls erscheint eine Aufforderung, um das Passwort festzulegen. Alle weiteren Abfragen können auch leer bleiben.
Verzeichnis anlegen
Nachdem wir einen neuen Benutzer angelegt haben, kommt jetzt das Verzeichnis, in das sich der Benutzer einloggen können soll. Dies kann jeder beliebige Unterordner sein, für dieses Beispiel legen wir einen neuen Ordner an.
|
|
Jetzt müssen die Besitzer der Ordner richtig definiert werden. Der Ordner in den sich der Benutzer einloggen soll muss root:root
gehören.
|
|
Der Unterordner, in diesem Fall data
, in dem der Benutzer Berechtigungen haben soll, muss dementsprechend auch ebendemselbem gehören.
|
|
SSH-Konfig anpassen
Da wie schon erwähnt SFTP ein Teil von OpenSSH ist, müssen wir auch die schon aus anderen Beiträgen bekannte SSH-Konfig erweitern. Dazu öffnen wir Datei mit:
|
|
und ergänzen diese am Ende der Datei mit folgendem Inhalt:
|
|
Speichern und schließen mit
Win: STRG+O, ENTER, STRG+X
Mac: CONTROL+O, ENTER, CONTROL+X
und dann einmal mit dem Befehl sudo sshd -t
testen ob die Konfiguration in Ordnung ist (keine Ausgabe bedeutet dass es keinen Fehler gibt) und dann den SSH-Server neu starten:
|
|
Die Anpassungen in der Konfiguration führen dazu, dass sobald sich der Benutzer testuser
anmeldet, nach dem Login der Befehl internal-sftp
erzwungen wird. Der Benutzer kann sich also nicht normal per SSH verbinden, sondern ist immer in einer SFTP-Session. ChrootDirectory
definiert dann das Verzeichnis, in dem der Benutzer “eingesperrt” wird. Dieses muss wie schon erwähnt zwingend root:root
gehören.
Verbindung herstellen
Damit ist alles eingerichtet, um eine SFTP-Verbindung für zum Beispiel einen Dateiupload herzustellen. Die nachfolgenden sichtbaren Screenshots zeigen das Tool Cyberduck, welches ich hauptsächlich für SFTP-Verbindungen nutze.
Für den Login schaltet ihr auf “SFTP” um, sofern euer Tool eine solche Option bietet. Dies ändert nur den Port, der genutzt wird, ihr könnt auch manuell die “22” eintragen. Falls ihr euren SSH-Port geändert habt, müsst ihr natürlich diesen benutzen.
Es reicht als die Eingabe von IP des Servers, SSH-Port, Benutzername und Passwort.
Danach befindet ihr euch in dem Verzeichnis, das in der SSH-Konfig angegeben worden ist und seht den Unterordner.
Auf dieser Ebene habt ihr keine Berechtigungen, sondern nur innerhalb des Unterordners. Versucht ihr hier auf der obersten Ebene eine Datei hochzuladen, kommt es zu einem Fehler.
Im Unterordner dagegen hat der Benutzer Berechtigungen und kann problemlos eine Datei hochladen.
Zusatzinfo
Man kann die SSH-Konfig auch so anpassen, dass der Benutzer nach dem Login direkt im Unterverzeichnis landet. Dazu muss die ForceCommand
-Zeile erweitert werden.
SSH-Konfig öffnen:
|
|
ForceCommand
-Zeile gegen nachfolgenden Inhalt tauschen:
|
|
Speichern und schließen mit
Win: STRG+O, ENTER, STRG+X
Mac: CONTROL+O, ENTER, CONTROL+X
Und die Konfig nochmal testen und den SSH-Server neu starten:
|
|
Beim nächsten Login befindet ihr euch nun direkt im Unterverzeichnis data
und müsst nicht erst dort hineinwechseln.