SFTP/SCP-Server / Jail
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:
- bin
- bash
- rsync
- lib64
- cmov (Verzeichnis)
- i686 (Verzeichnis)
- ld-linux-x86-64.so.2
- libacl.so.1
- libattr.so.1
- libc.so.6
- libdl.so.2
- libncurses.so.5
- libopt.so.0
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.