Hin und wieder kommt es vor, dass man einem bestimmten Benutzer erlauben möchte Daten auf oder von einem Server zu kopieren. Hierfür kann klassisch ftp verwendet werden. Das Problem bei ftp ist jedoch, dass die Kommunikation unverschlüsselt abläuft und somit auf dem Netzwerk mit gelesen werden kann. Um dies zu vermeiden kann entweder ein FTP-Server eingesetzt werden welcher SSL-Verschlüsselung unterstützt (hierzu ist dann natürlich auch ein SSL-Zertifikat notwendig), oder einfach auf den SSH-internen ftp-Server aufsetzen.
Zunächst muss der Benutzer auf dem System angelegt werden. Sollte dies noch nicht geschehen sein kann es mit adduser erfolgen.
Der Benutzer soll in einem Verzeichnis eingesperrt werden. Das heißt, dass er lediglich in dem übergebenen Verzeichnis (und darunter) navigieren und agieren darf. In diesem Fall soll dies das Verzeichnis /usr/local/sftp-share sein. Das Verzeichnis muss angelegt und mit den richtigen Rechten versehen werden. So muss es dem Benutzer root gehören, und nur er darf darauf Schreibrechte haben.
drwxr-xr-x 4 root wheel 512B Nov 10 15:14 sftp-share
Falls der Benutzer auch auf den Server schreiben können soll muss innerhalb dieses Ordners dann nochmals ein Ordner angelegt werden in welchem der Benutzer Schreibrechte. Somit ist nach dem Einloggen der Hauptordner nur lesend zugreifbar.
Ein Benutzer mit SSH-Zugang hat automatisch auch SFTP-Zugang. Hier geht es nun darum einen Benutzer ohne SSH-Zugang so einzuschränken, dass es ausschließlich per SFTP Daten kopieren kann.
Hierzu wird die Datei /etc/ssh/sshd_config bearbeitet:
Wird eine AllowUsers-Anweisung verwendet muss der Benutzer hier ergänzt werden.
Um nun im Folgenden dem Benutzer narf Zugriff auf das Verzeichnis /usr/local/sftp-share zu geben wird ans Ende der sshd_config folgendes ergänzt:
Match User narf X11Forwarding no AllowTcpForwarding no PasswordAuthentication yes ChrootDirectory /usr/local/sftp-share ForceCommand internal-sftp
Um den Zugriff auf rein lesenden Zugriff zu beschränken (Read-Only) muss die letzte Zeile modifiziert werden zu:
ForceCommand internal-sftp -R