Wie beschränke ich einen SFTP-Benutzer auf ein Verzeichnis?
Verwenden Sie auf einem Server, den Sie verwalten, die Option ChrootDirectory von
OpenSSH mit dessen internem SFTP-Server. Das eingeschränkte Konto sieht sein zugewiesenes Verzeichnis
als /, während ein separates Unterverzeichnis für Uploads beschreibbar
bleibt. Das Konto erhält dadurch weder Shell-Zugriff noch die Möglichkeit zur Weiterleitung.
Das folgende Linux-Beispiel setzt ein vorhandenes, dediziertes Konto namens
transloadit, eine primäre Gruppe namens transloadit und das
Home-Verzeichnis /home/transloadit voraus. Prüfen Sie zunächst, ob sich dieses Konto
unter Ihrer bestehenden Authentifizierungsrichtlinie mit seinem SSH-Schlüssel anmelden kann.
Verwenden Sie kein Administratorkonto. Ändern Sie das Home-Verzeichnis des eingeschränkten Kontos
nicht zu /.
Lassen Sie eine Administratorsitzung geöffnet, während Sie die SSH-Einstellungen ändern. Stellen Sie sicher, dass Sie auf anderem Weg auf den Server zugreifen können, falls die neue Konfiguration abgelehnt wird.
Verzeichnisse vorbereiten
Erstellen Sie das eingeschränkte Stammverzeichnis, darin eine leere Kopie des Home-Pfads des Kontos sowie das Upload-Verzeichnis. SSH liest weiterhin die vorhandenen autorisierten Schlüssel des Kontos, bevor es in das eingeschränkte Dateisystem wechselt. Kopieren Sie keine privaten Schlüssel hinein.
sudo install -d -o root -g root -m 755 /srv/sftp/transloadit
sudo install -d -o root -g root -m 755 /srv/sftp/transloadit/home/transloadit
sudo install -d -o transloadit -g transloadit -m 750 /srv/sftp/transloadit/uploads
Jede Komponente von /srv/sftp/transloadit, einschließlich /srv
und /srv/sftp, muss root gehören und darf für andere Benutzer oder Gruppen
nicht beschreibbar sein. Nur das Unterverzeichnis uploads gehört dem
eingeschränkten Konto. Machen Sie das eingeschränkte Stammverzeichnis nicht beschreibbar, um einen
Upload-Fehler zu beheben.
Konto einschränken
Ersetzen Sie in /etc/ssh/sshd_config die vorhandene Zeile mit
Subsystem sftp durch die folgende Zeile. Belassen Sie sie im globalen Abschnitt,
vor allen Blöcken mit Match. Fügen Sie keine zweite Deklaration für das
SFTP-Subsystem hinzu.
Subsystem sftp internal-sftp
Fügen Sie diesen kontospezifischen Block am Ende der Konfiguration hinzu:
Match User transloadit
ChrootDirectory /srv/sftp/%u
ForceCommand internal-sftp -d /uploads
DisableForwarding yes
PermitTunnel no
PermitTTY no
ForceCommand startet SFTP in /uploads, statt Shell-Befehle
anzunehmen. DisableForwarding blockiert außerdem SSH-Weiterleitungen, die ein
erzwungener SFTP-Befehl allein nicht verhindert. Die bestehenden Authentifizierungsanforderungen
des Kontos gelten weiterhin. Passen Sie Kontoname und Home-Pfad an, falls Ihre Angaben abweichen,
und prüfen Sie alle zuvor greifenden Regeln oder eingebundenen Konfigurationsdateien.
Vor dem Neuladen validieren
Prüfen Sie die Syntax und die wirksame Konfiguration für das eingeschränkte Konto:
sudo sshd -t
sudo sshd -T -C user=transloadit,host=localhost,addr=127.0.0.1
Verwenden Sie im zweiten Befehl die tatsächliche Client-Adresse und den Hostnamen, wenn Ihre
Konfiguration adress- oder hostspezifische Regeln enthält. Stellen Sie sicher, dass die wirksamen
Einstellungen die vorgesehenen Werte für chrootdirectory,
forcecommand, disableforwarding yes, permittunnel no und
permittty no enthalten. DisableForwarding setzt einzelne
Weiterleitungsoptionen außer Kraft, die in dieser Ausgabe möglicherweise weiterhin als aktiviert
erscheinen. Laden Sie keine Konfiguration neu, deren Validierung fehlschlägt. Verwenden Sie den in
der Dokumentation Ihres Betriebssystems angegebenen Befehl zum Neuladen des SSH-Dienstes. Prüfen Sie
anschließend sowohl eine neue Administratorverbindung als auch eine neue SFTP-Verbindung, bevor
Sie die ursprüngliche Sitzung schließen.
Verbinden Sie sich von Ihrem Client aus mit sftp transloadit@your-server.example und prüfen Sie das
Verzeichnis:
sftp> pwd
Remote working directory: /uploads
sftp> cd /
sftp> pwd
Remote working directory: /
sftp> cd ..
sftp> pwd
Remote working directory: /
Laden Sie eine harmlose Testdatei in /uploads hoch und anschließend wieder
herunter. Das Anlegen einer Datei direkt in / muss fehlschlagen.
Prüfen Sie außerdem, ob ein Shell-Befehl und eine Portweiterleitung abgelehnt werden. Der SFTP-Pfad
/uploads verweist auf /srv/sftp/transloadit/uploads auf dem Server, nicht
auf das servereigene /uploads.
Verwenden Sie das Konto mit /sftp/import oder /sftp/store und beachten Sie dabei die Dokumentation des Robots zur Authentifizierung und zu Pfaden. Ein chroot beschränkt den Dateisystemzugriff; es ersetzt weder die Kontoauthentifizierung noch Dateisystemberechtigungen oder Netzwerkrichtlinien. Die vollständige Semantik der Direktiven finden Sie im OpenSSH-Konfigurationshandbuch und Hinweise zur Dienstverwaltung in der Dokumentation Ihrer Distribution.