tas2580
Blog über Webentwicklung und Linux Server

SSH User in Home einsperren

tas2580  

Ich habe kürzlich die Webseite einer befreundeten Band auf meinen Server umgezogen. Natürlich möchte die Band auch einen (S)FTP Zugang um z.B. Bilder hoch zu laden oder kleine Änderungen am Style zu machen. Erstmal ist das ja kein Problem, man legt einfach einen neuen Benutzer an und schon kann man sich per SSH anmelden. Aber der Benutzer kann eben relativ frei durch die Verzeichnisstruktur des Servers navigieren und Dateien lesen oder bei falsch vergebenen Rechten auch schreiben. Außerdem ist es für jemanden der sich nicht mit der Linux Verzeichnisstruktur auskennt so nicht immer einfach sein Home Verzeichnis wieder zu finden. Es musste also eine Lösung her die den Benutzer in sein Home Verzeichnis einsperrt so, dass er nur den Inhalt des Verzeichnisses sehen kann wenn er sich anmeldet.


Mit Openssh ist das zum Glück recht einfach ohne extra Software möglich auch wenn die Lösung nicht perfekt ist, da der Benutzer mit dieser Lösung direkt in seinem Home Verzeichnis keine Dateien schreiben kann. Man muss also zusätzlich im Home Verzeichnis Ordner anlegen in die der Benutzer dann seine Dateien packen kann. Dazu muss man als erstes seine /etc/ssh/sshd_config etwas bearbeiten.

nano /etc/ssh/sshd_config

Am Ende der Datei trägt man dann folgendes ein:

Match group webuser
    ChrootDirectory %h
    ForceCommand internal-sftp

In der ersten Zeile wird angegeben, dass die folgenden Einstellungen für alle Benutzer die der Gruppe webuser angehören gelten. In der zweiten Zeile wird angegeben, dass ihr Home Verzeichnis (%h) als Chroot benutzt werden kann, sie also nicht auserhalb des Verzeichnisses navigieren können. In der dritten Zeile wird dann noch angegeben, dass immer internal-sftp genutzt werden soll.

Jetzt muss man noch die Gruppe webuser anlegen. Alle Beutzer die später dieser Gruppe angehören werden in ihr Homeverzeichnis eingesperrt, es ist also weiterhin möglich Benutzer anzulegen die sich auf dem kompletten Dateisystem bewegen können.

groupadd webuser

Dann benötigt man natürlich einen Benutzeraccount der eingesperrt werden soll falls man den noch nicht hat kann er ganz einfach mit adduser angelegt werden.

adduser user

Der Benutzer wird jetzt der Gruppe webuser zugeordnet.

usermod -a -G webuser user

Das wars dann auch schon, damit die Änderungen wirksam werden muss noch der SSH Server neu gestartet werden.

service ssh restart

Das Problem ist jetzt allerdings, dass alle Verzeichnisse die im Pfad von ChrootDirectory verwendet werden Root gehören müssen und von niemandem anderen geschrieben werden dürfen. Man muss die Homeverzeichnisse also dem Root User übergeben und die Rechte richtig setzen.

chown root:root /home/user/
chmod 744 /home/user/

Das führt dann wiederum dazu, dass der Benutzer in seinem eigenen Home Verzeichnis keine Dateien und Ordner erstellen darf. Man muss ihm also als Root Ordner vorgeben die er dann nutzen kann.

mkdir /home/user/web/
chown user:user /home/user/web/

In der ersten Zeile wird der Ordner /home/user/web/ erstellt. In der zweiten Zeile wird der Benutzer user zum Eigentümer des Ordners gemacht.

Wenn man sich jetzt mit den Benutzer user anmeldet landet er direkt in /home/user/ und kommt dort auch nicht raus. Der Benutzer bekommt direkt nicht mal mit dass er eingesperrt wurde, für ihn ist der Root Pfad / einfach sein Home Ordner /home/user/.


Kommentare


Bitte warten ...

Kommentar schreiben

URLs werden automatisch umgewandelt.
[b]DEIN TEXT[/b] für Fett gedruckt
[quote]DEIN ZITAT[/quote] für Zitate
[code]DEIN CODE[/code] für Code
captcha