So richten Sie Linux Chroot Jails ein

Der Begriff Chroot Jail wurde erstmals 1992 in einem Artikel eines prominenten Sicherheitsforschers, Bill Cheswick, verwendet (was interessant ist, wenn Sie sich für solche Dinge interessieren, finden Sie den Artikel hier). Chroot-Jails tauchten 2003 mit Anwendungen wie IRC und FTP auf. Im Jahr 2005 führte Sun seine “Container” -Technologie namens Zones ein, die wiederum ein Vorläufer des Konzepts der Namespaces war, einer Kerntechnologie, die bei Containern verwendet wird.

Chroot-Grundlagen

Mit Chroot kann ein Administrator den Zugriff auf einen Dienst oder ein Dateisystem steuern und gleichzeitig die Exposition gegenüber der zugrunde liegenden Serverumgebung steuern. Die beiden häufigsten Beispiele, auf die Sie stoßen können, sind während der Startsequenz und der “Notfall-Shell” auf Red Hat / CentOS / Fedora-Systemen sowie in Secure FTP (SFTP).

Der Befehl sieht folgendermaßen aus:

chroot <newroot> ]

Ähnlich wie der Befehl sudo ändert der Befehl chroot die Umgebung des folgenden Befehls. Mit anderen Worten, es wechselt Sie in das Verzeichnis newroot und macht dieses Verzeichnis auch zum “Arbeitsverzeichnis”. Der command wird dann an diesem Speicherort ausgeführt, was beispielsweise für die Rettung eines Systems nützlich ist, das nicht startet.

Im Gegensatz zu sudobefinden Sie sich “in” dem Verzeichnis. Diese Vorgehensweise ist wiederum nützlich, wenn Sie von externen Medien booten, aber auf ein “lokales” Dateisystem oder einen Befehl zugreifen müssen, um die Arbeit auszuführen.

Die andere häufige Verwendung von chroot besteht darin, einen Dienst oder Benutzer einzuschränken, indem ein Wrapper verwendet wird, um den Rest des Dateisystems auszublenden, wodurch die Ansicht der Daten anderer Benutzer durch einen Remote-Benutzer eingeschränkt wird. Eine beliebte Implementierung mit diesem Ansatz SFTP.

Beispiel

Bevor Sie mit der Bearbeitung dieses Beispiels beginnen, sollten Sie sicherstellen, dass Backups vorhanden sind. Sichern Sie in diesem Fall die Datei /etc/ssh/sshd_config, da Sie Änderungen an dieser Datei vornehmen.:

# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Im Moment beschränken Sie SFTP-Benutzer nur auf ihre Home-Verzeichnisse auf dem Server. Diese Anforderung bedeutet, dass Sie Benutzer hinzufügen und in eine Gruppe einfügen müssen:

# useradd -g sftpusers -s /sbin/nologin -p nick nick

Beachten Sie, dass dadurch nick ein Konto ohne Anmeldeshell zugewiesen wird. Diese Technik ist sowohl praktisch als auch eine gute Sicherheitspraxis: Wenn er nur SFTP verwendet, sollte er keine Anmeldeberechtigungen haben. Ich werde im nächsten Artikel die Bereitstellung einer Shell für Remotebenutzer besprechen.

Jetzt müssen Sie dem ssh -Dienst mitteilen, was zu tun ist, wenn sich SFTP-Benutzer anmelden. Öffnen Sie die Datei /etc/ssh/sshd_config und fügen Sie am Ende Folgendes hinzu:

Subsystem sftp internal-sftpMatch Group sftpusersForceCommand internal-sftpChrootDirectory /homeX11Forwarding noAllowTcpForwarding no

Es ist wichtig, dass Sie diese Einstellungen als separate Gruppe von Einträgen hinzufügen und die Syntax Match verwenden, um anzugeben, dass dieser Abschnitt nur für Benutzer in dieser Gruppe gilt. Wenn Sie die Änderungen an den vorhandenen Einträgen vornehmen, gelten sie für alle SSH-Benutzer, wodurch der Remotezugriff unterbrochen werden kann.

Die Konfigurationszeilen gliedern sich wie folgt:

  • Der ForceCommand lässt ssh seine eingebaute Funktion auswählen, um den SFTP-Dienst bereitzustellen (den Sie unabhängig steuern können).
  • ChrootDirectory teilt sshd mit, wo der Benutzer eingeschränkt werden soll.
  • Subsystem sftp internal-sftp weist sshd an, den internen sftp -Dienst zu laden und verfügbar zu machen.

Möglicherweise müssen Sie sicherstellen, dass diese Subsystem nicht bereits definiert ist, indem Sie diese Zeile früher in der Konfigurationsdatei auskommentieren:

# override default of no subsystems# Subsystem sftp /usr/libexec/openssh/sftp-server

Sobald Sie die Änderungen vorgenommen und die Rechtschreibung überprüft haben, speichern Sie die Änderungen. Starten Sie dann neu sshd:

# systemctl restart sshd

Testen Sie den neuen Benutzer:

$ sftp nick@showmenick@showme's password:Connected to [email protected]> lsaccounting ansible fred jason kenny lisa nicksftp> pwdRemote working directory: /sftp> exit

Ups, warte nur eine Minute: Es sieht so aus, als könnten Sie auch alle Verzeichnisse der anderen Benutzer sehen. Sie können jedoch nicht zu diesen Verzeichnissen navigieren:

sftp> cd fredsftp> lsremote readdir("/fred"): Permission denied

Sie können den Chroot-Benutzer in sein eigenes Home-Verzeichnis leiten, indem Sie die Zeile ChrootDirectory in der Datei sshd_config folgendermaßen ändern:

ChrootDirectory /

Durch diese schnelle Änderung sieht es für Nick so aus, als befände er sich in seinem eigenen Home-Verzeichnis, und er kann die Dateien anderer Benutzer nicht sehen:

sftp> pwdRemote working directory: /home/nicksftp>sftp> exit$ touch test.txt$ sftp nick@showmenick@showme's password:Connected to [email protected]> put test.txtUploading test.txt to /home/nick/test.txttest.txt 100% 0 0.0KB/s 00:00sftp> lstest.txtsftp>

Wo ist es hin? Schau dir das an:

# ls /home/nicktest.txt

Beachten Sie, dass ein chroot jail an sich keine ausreichende Sicherheitseinschränkung darstellt. Es verhindert zwar, dass ein Benutzer aus einem eingeschränkten Verzeichnis wechselt, es gibt jedoch Möglichkeiten, dies zu umgehen (auf die allgemeine Idee wird in der Manpage chroot(2) verwiesen, die Sie sich ansehen sollten, wenn Sie diesen Trick in einem produktions- oder geschäftskritischen Kontext verwenden möchten.)

(vorerst)

Sie können also sehen, dass chroot ein ziemlich nützliches Werkzeug sein kann. In Teil 2 gehe ich näher darauf ein, Benutzern bestimmte Verzeichnisse zuzuweisen und einem Remotebenutzer eine Shell-Umgebung bereitzustellen, ohne den Rest des Servers verfügbar zu machen.

Neu bei Containern? Laden Sie den Container Primer herunter und lernen Sie die Grundlagen von Linux-Containern kennen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.