21x9.org

SFTP/SCP-Server / Jail

Categories: [blog]
Tags: [imported]

Um einen SFTP-Zugang einzurichten sind zunächst Änderungen an der SSH-Konfiguration notwendig. Diese sind natürlich nur einmalig vorzunehmen.

Aber was ist ein SFTP-Zugang eigentlich? Hierbei handelt es sich um einen Zugang zur Dateiübertragung per SSH. Jeder Benutzer der sich per SSH mit dem Server verbinden kann (z.B. System- oder LDAP-Benutzer) können SFTP nutzen, selbst dann, wenn Sie keinen Shellzugang besitzen.

Damit diese Benutzer nicht die Dateien auf dem ganzen Server erreichen können kann man sie in ein sog. Jail einsperren. Dies ist im folgenden Beschrieben.## SSH-Konfiguration ##

In der Datei /etc/ssh/sshd_config muss der Eintrag:

Subsystem sftp /usr/lib/openssh/sftp-server

auskommentiert werden, stattdessen wird folgendes Subsystem verwendet:

Subsystem sftp internal-sftp

Um die Einrichtung von Benutzern zu vereinfachen sollte noch eine Gruppenregel eingefügt werden:

Match group sftponly
    ChrootDirectory /home/%u
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp

Die Einstellungen werden für alle Benutzer aktiv, die der Gruppe sftponly angehören.

Die Änderungen müssen dann aktiviert werden: /etc/init.d/ssh restart## Einrichten von Benutzern ##

Ein neuer SFTP-Benutzer wird als normaler Linuxbenutzer angelegt:

adduser --shell /bin/false sftpusername

Das Kennwort des Benutzers entspricht dem Kennwort für den SFTP-Zugang.

Anschließend wird der Benutzer in die Gruppe sftponly aufgenommen:

addgroup sftpusername sftponly

Das Benutzerverzeichnis wurde bereits bei der Erstellung des Benutzers angelegt. Damit der Zugang funktioniert ist es zwingend notwendig, dass das Homeverzeichnis und alle Unterverzeichnisse (auch /) dem Benutzer und der Gruppe root gehören, die Rechte sind hierbei egal.

Innerhalb des Homeverzeichnisses wird nun noch das Verzeichnis incoming angelegt. Nur in diesem Verzeichnis erhält der SFTP-Benutzer Schreibrechte.

Das Verzeichnis incoming und die Dateien im Homeverzeichnis müssen dem Benutzer und seiner Gruppe gehören.### Beispiel /~ ###

drwxr-xr-x  4 root   root       4.0K 2010-10-18 11:53 .
drwxr-xr-x 11 root   root       4.0K 2010-12-23 15:39 ..
-rw-------  1 sftpuser sftpuser    5 2010-09-24 14:09 .bash_history
-rw-r--r--  1 sftpuser sftpuser  220 2010-09-24 11:15 .bash_logout
-rw-r--r--  1 sftpuser sftpuser 3.1K 2010-09-24 11:15 .bashrc
drwxr-xr-x 28 sftpuser sftpuser 4.0K 2010-12-30 17:53 incoming
-rw-r--r--  1 sftpuser sftpuser  675 2010-09-24 11:15 .profile

Erweiterte chroot-Konfiguration

Soll der Benutzer spezielle Befehle wie z.B. rsync verwenden dürfen, so müssen weitere Vorkehrungen getroffen werden.

Zunächst werden im Home des entsprechenden Benutzers folgende Verzeichnisse und Dateien angelegt:

WICHTIG: Dies gilt nur für ein 64-Bit-System, bei einem 32-Bit-System heißt lib64 einfach lib, außerdem muss die entsprechende ld-linux-x86.so.2 verwendet werden. Es können jeweils die bereits auf dem System installierten Versionen der Dateien kopiert werden, ein Symlink ist jedoch nicht möglich.

Die oben genannten Dateien und Verzeichnisse werden dem Benutzer/der Gruppe root zugewiesen. Verzeichnisrechte werden auf rwxr-xr-x gesetzt. Die Dateirechte werden von der Originalquelle übernommen.

WICHTIG: Damit die freigegebenen Programm genutzt werden können muss die Shell von /bin/false auf /bin/bash geändert werden (/etc/passwd).

Sollen andere Programme als rsync zur Verfügung gestellt werden, kann die Liste der erforderlichen Libs (lib64) natürlich abweichen. Welche Libs benötigt werden kann mit ldd ermittelt werden.