Linux: OpenSSH – Chroot von SFTP-Benutzern

Mit dieser Anleitung wollen wir am Ende erreichen das SFTP-Benutzer in ihr /home Verzeichnis eingeschlossen werden.
Als Beispiel soll hier der benutzer „sftptest“ mit dem /home verzeichnis „/home/sftptest“.

Vorweg eine Wichtige Information:
Die OpenSH-Config erlaubt es nicht das ein benutzer in ein Verzeichnis chrootet wird in das er hineinschreiben darf.
Dies bedeutet das das /home verzeichnis dem root User gehören muss und niemand anderes dort hinein schreiben darf.
Der Benutzer der in dieses Verzeichnis chrootet wird, darf dann aber in alle unterverzeichnisse schreiben.

Vorbereitung

Diese Unterverzeichnisse legen wir hier einmal exemplarisch an:

1
2
mkdir /home/sftptest/in
mkdir /home/sftptest/out

Diese Verzeichnisse sollen dem Benutzer „sftptest“ gehören

1
2
chown sftptest:sftptest /home/sftptest/in
chown sftptest:sftptest /home/sftptest/out

Das /home verzeichnis des benutzes MUSS root gehören und nur dieser darf darin schreiben

1
2
chown root:root /home/sftptest
chmod 755 /home/sftptest



Editieren der /etc/ssh/sshd_config

Subsystem für SFTP ändern:

1
2
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem       sftp    internal-sftp

Dann unten in der Datei folgendes eintragen:

1
2
3
4
5
6
Match Group sftponly
   ChrootDirectory %h
   ForceCommand internal-sftp
   AllowTcpForwarding no
   PermitTunnel no
   X11Forwarding no

Danach muss der SSH-Server einmal neu gestartet werden:

1
/etc/init.d/ssh restart



Änderungen an dem Benutzer

In der sshd_config haben wir das Matching für die SFTP-Benutzer auf die Benutzerguppe „sftponly“ angewendet.
Diese Benutzergruppe muss nun erstellt werden

1
2
3
# addgroup sftponly
Lege Gruppe »sftponly« (GID 1002) an ...
Fertig.

Und dem Benutzer „sftptest“ zugewiesen werden

1
2
3
4
# adduser sftptest sftponly
Füge Benutzer »sftptest« der Gruppe »sftponly« hinzu ...
Benutzer sftptest wird zur Gruppe sftponly hinzugefügt.
Fertig.

Soll der Benutzer keinen normalen SSH login machen dürfen, muss die Shell noch auf /usr/bin/false gesetzt werden

1
sudo usermod -s /usr/bin/false sftptest



Test und Fehlerbehebung

Nun kann man sich mit dem Benutzer „sftptest“ anmelden und den SFTP-Zufriff testen.

Für Eventuelle Fehler oder Fehlgeschlagene Logins kann man in der Datei /var/log/auth.log nachschauen.
Wenn dort z.B. folgender Fehler drin steht:

1
Dec 9 10:47:19 scm01 sshd[22814]: fatal: bad ownership or modes for chroot directory "/home/sftptest"

Dann liegt dies an dem oben erwähnten Problem mit den Rechten der verzeichnisse.
Hier muss darauf geachtet werden das /home/sftptest NUR dem root Benutzer gehört und niemand anders dort hineinschreiben darf.

1
2
3
4
ls -la /home/
drwxr-xr-x  4 root        root        4096 Nov 20 14:58 .
drwxr-xr-x 25 root        root        4096 Okt  7 14:10 ..
drwxr-xr-x  4 root        root        4096 Dez  5 15:08 sftptest

Die verzeichnisse in /home/sftptest dürfen wiederum vom Benutzer „sftptest“ beschrieben werden

1
2
3
4
5
ls -la /home/sftptest/
drwxr-xr-x 4 root     root     4096 Dez  5 15:08 .
drwxr-xr-x 4 root     root     4096 Nov 20 14:58 ..
drwxrwxrwx 4 sftptest sftponly 4096 Dez  9 09:20 in
drwxrwxrwx 2 sftptest sftponly 4096 Dez  9 10:49 out

leave your comment


*

Unterstütze den Frickelblog!