Chroot SFTP Zugang ohne Shell für Datenübertragung einrichten
Getestet unter Debian 12 Bookworm
In diesem Beispiel möchten wir einen Benutzer (genannt “test”) auf einem Linux-System anlegen der nur Dateiübertragungen per SFTP durchführen kann, und das zusätzlich nur innerhalb eines bestimmten Verzeichnisses. Er ist also in diesem Verzeichnis “gefangen” und kann nicht in höher gelegene Verzeichnisse wechseln.
Zuerst fügen wir einen neuen Benutzer hinzu. Dieser braucht keinen Shell-Zugang:
sudo adduser test --shell=/bin/false
Jetzt wird die SSH-Konfigurationsdatei bearbeitet
sudo nano /etc/ssh/sshd_config
Diesen Block (z.B. ganz unten) einfügen:
Match User betestrnd
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
PermitTunnel no
PasswordAuthentication yes
Der Teil mit “PasswordAuthentication yes” ist ggf. optional, falls ihr ihn schon global gesetzt habt.
SSH-Dienst neu starten:
sudo systemctl restart sshd
Jetzt muss root der Besitzer des Home-Pfads von test werden, sonst gelingt die Anmeldung nicht:
sudo chown root:root /home/test/
sudo chmod 0755 /home/test/
Damit der Benutzer Dateien hoch- und runterladen kann, benötigen wir jetzt noch einen Unterordner:
sudo mkdir /home/test/daten
sudo chown test:test /home/test/daten
Nun kann man sich mit dem Benutzer test mit einem SFTP-Client am Server anmelden. Der Benutzer kann nun Dateien im Ordner “daten” anlegen, aber sein Home-Verzeichnis nicht verlassen.