Ubuntu Server 22.04 SSH ChrootDirectory verhält sich beim Zugriff über SFTP nicht wie erwartet

Ubuntu Server 22.04 SSH ChrootDirectory verhält sich beim Zugriff über SFTP nicht wie erwartet

Normalerweise erwarte ich, dass meine Datei nach erfolgreicher Anmeldung sftpund Ausführung eines putBefehls in das Verzeichnis des angemeldeten Benutzers übertragen wird $HOME. Das funktioniert sofort, aber ich möchte den sftpBenutzer auf sein Verzeichnis beschränken (damit er beispielsweise $HOMEnicht mehr Ebenen aufsteigen kann ).cd

Hier verwende ich ChrootDirectory- gemäß der Dokumentation (https://linux.die.net/man/5/sshd_config)

ChrootDirectory: Gibt einen Pfad an, zu dem chroot(2) nach der Authentifizierung gehen soll. Dieser Pfad und alle seine Komponenten müssen root-eigene Verzeichnisse sein, die von keinem anderen Benutzer oder keiner anderen Gruppe beschreibbar sind.

Ich glaube, ich habe die Ordner/Berechtigungen richtig eingerichtet. Der nächste Satz der Dokumentation funktioniert meiner Meinung nach nicht oder verhält sich nicht wie erwartet.

Nach dem Chroot ändert sshd(8) das Arbeitsverzeichnis in das Home-Verzeichnis des Benutzers.

Nach der Änderung sshd_configzur Verwendung ChrootDirectoryund dem erfolgreichen Zugriff auf den Server über sftpist das Arbeitsverzeichnis des Benutzers NICHT auf das $HOME-Verzeichnis des Benutzers eingestellt, sondern tatsächlich auf eine Ebene darüber. (z. B. /homeanstelle von /home/userTest) Die offensichtliche Lösung für den Benutzer besteht darin, in das richtige Verzeichnis eine Ebene darunter zu wechseln. Wenn Sie jedoch ein automatisiertes System verwenden, das Daten einfach per FTP in das aktuelle Arbeitsverzeichnis überträgt, kann dies sehr problematisch sein.

Ich werde zuerst den allgemeinen Fall zeigen und ihn dann modifizieren, um zu zeigen, wie sich das Verhalten des Standardarbeitsverzeichnisses ändert, sobald es ChrootDirectoryeingeführt wirdsshd_config

Dies funktioniert wie erwartet:

  1. Erstellen Sie den Benutzer (verwenden Sie ihn, -mum das Home-Verzeichnis dieses Benutzers zu erstellen):sudo useradd -m userTest
  2. Geben Sie dem Benutzer ein Passwort:sudo passwd userTest
  3. Hinweis userTest$HOME-Verzeichnis: cat /etc/passwd->userTest:x:1002:1004::/home/userTest:/bin/sh
  4. Senden Sie für den gerade erstellten Benutzer eine SFTP-Verbindung zu Ihrem Server:sftp userTest@<your-server>
  5. Notieren Sie sich das Arbeitsverzeichnis nach erfolgreicher Anmeldung: pwd->Remote working directory: /home/userTest

Das obige Beispiel funktioniert genau wie erwartet. Das einzige Problem besteht darin, dass userTestes nicht im Arbeitsverzeichnis gesperrt ist und cd ..das Dateisystem zurückgesetzt werden kann.

In mehreren Anleitungen wurde die gleiche grundlegende Lösung für dieses Problem beschrieben (https://linuxconfig.org/wie-man-einen-sftp-server-unter-ubuntu-20-04-focal-fossa-linux-einrichtet)

Ergänzend zu den vorherigen Schritten

  1. Fügen Sie eine SFTP-Gruppe hinzu (diese wird als Schlüssel für unseren MatchBlock in verwendet sshd_config):sudo addgroup sftp
  2. userTestBenutzer zur Gruppe hinzufügen :sudo usermod -a -G sftp userTest
  3. Bearbeiten sshd_config:sudo nano /etc/ssh/sshd_config
  4. Fügen Sie am Ende der Datei die folgenden Zeilen hinzu
Match group sftp
ChrootDirectory /home
ForceCommand internal-sftp

(Das bedeutet grundsätzlich, dass jeder Benutzer, der zu dieser Gruppe gehört, den Regeln sftpunterliegt .)ChrootDirectoryForceCommand

Datei speichern und ssh neu starten: sudo systemctl restart ssh

Überprüfen Sie, ob das angegebene Verzeichnis ChrootDirectorydie Anforderungen aus der obigen Dokumentation erfüllt: ls -ltr-> drwxr-xr-x 4 root root 4096 Jun 10 09:02 home(ich glaube, das ist erfolgreich)

Vergleichen Sie die Ergebnisse der sofort einsatzbereiten Einrichtung mit denen unserer neuen SFTP-Konfiguration, indem Sie userTesterneut Folgendes verwenden:sftp userTest@<your-server>

Notieren Sie das aktuelle Arbeitsverzeichnis: pwd->Remote working directory: /

Dies ist kein sicheres Zeichen dafür, dass etwas nicht stimmt. Wir gehen davon aus, dass sich das Arbeitsverzeichnis ändert. Sehen wir uns dennoch schnell den Inhalt des aktuellen Arbeitsverzeichnisses an:

ls -ltr-> drwxr-x--- 3 1002 1004 4096 Jun 10 09:10 userTest(!!!)

Gemäß der Dokumentation:

Nach dem Chroot ändert sshd(8) das Arbeitsverzeichnis in das Home-Verzeichnis des Benutzers.

ls -ltrzeigt uns, dass sich das Arbeitsverzeichnis NICHT im userTestHome-Verzeichnis befindet, sondern tatsächlich eine Ebene DARÜBER.

Gibt es eine Konfigurationsmöglichkeit ChrootDirectoryoder eine andere Möglichkeit, damit dies wie erwartet funktioniert?

HINWEIS: Das Entfernen ForceCommandaus sshd_config verursacht tatsächlich dieses andere Problem, das vor 11 Jahren als ERRATA geschlossen wurde? https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=681202

verwandte Informationen