Wenn man im Internet eine Lösung für die Aufgabenstellung sucht, landet man bei vielen sehr komplizierten Anleitungen sowas zu realisieren. Seit OpenSSH 5 geht Chroot für SFTP von Haus aus.
Was ist Chroot? Mit ChangeRoot kann ich das Wurzelverzeichnis des Nutzers der sich anmeldet ändern. Das normale Wurzelverzeichnis (root, /) ist das Wurzelverzeichnis des Systemes. Von dort aus zweigen alle Unterverzeichnisse des Systems. Ändern man das Wurzelverzeichnis für einen Benutzer nun auf z.B. sein eigens Home Verzeichnis, hat dieser nicht mehr die Möglichkeit andere Verzeichnisse außerhalb davon zu erreichen. Der Benutzer ist darin nun eingesperrt und das restliche System vor ihm sicher.
Die Konfiguration
Zuerst legen wir eine Gruppe an, in die alle Benutzer sollen welche sich nicht mehr per SSH und nur noch in der chroot sftp Umgebung anmelden sollen:
groupadd sftpusers
die Benutzer nimmt man mit
usermod -aG sftpusers username
in die Gruppe auf .
Nun folgt die Konfiguration von des ssh Dienstes. Wir ändern das sftp Subsystem, und erstellen eine Regel damit alle Benutzer in der Gruppe sftpusers nur noch sftp verwenden dürfen (/etc/ssh/sshd_config):
Subsystem sftp internal-sftp Match Group sftpusers ChrootDirectory /home/%u ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no
Zuletzt müssen die Datei Berechtigungen der Homeverzeichnisse angepasst werden. Es ist zu beachten das die Benutzer direkt in ihrer Wurzel keine Schreibrechte haben. So muss z.B. ein upload Verzeichnis angelegt werden.
Das Homeverzeichnis selbst muss root überstellt werden, als Gruppe bekommt es sftpusers:
chown root:sftpusers /home/USERNAME
Die Rechte sind 7 (alles) für root, 5 (lesen, ausführen) für die Gruppe:
chmod 750 /home/USERNAME