GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So richten Sie Linux-Chroot-Jails ein

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

Chroot-Grundlagen

Chroot ermöglicht es einem Administrator, den Zugriff auf einen Dienst oder ein Dateisystem zu kontrollieren und gleichzeitig die Exposition gegenüber der zugrunde liegenden Serverumgebung zu kontrollieren. Die beiden häufigsten Beispiele, auf die Sie stoßen könnten, sind während der Startsequenz und der „Notfall-Shell“ auf Red Hat/CentOS/Fedora-Systemen und in Secure FTP (SFTP).

Der Befehl sieht folgendermaßen aus:

chroot <newroot> [[command][arguments]]

Ähnlich dem sudo Befehl, der chroot Der Befehl ändert die Umgebung des folgenden Befehls. Mit anderen Worten, es wird Sie zum newroot ändern Verzeichnis und macht dieses Verzeichnis auch zum "Arbeitsverzeichnis". Der command wird dann an diesem Ort ausgeführt, was nützlich ist, um beispielsweise ein System zu retten, das nicht bootet.

Im Gegensatz zu sudo , befinden Sie sich im Verzeichnis. Auch diese Vorgehensweise ist nützlich, wenn Sie von externen Medien booten, aber auf ein "lokales" Dateisystem oder einen Befehl zugreifen müssen, um zu arbeiten.

Die andere häufige Verwendung von chroot besteht darin, einen Dienst oder Benutzer durch die Verwendung eines Wrappers einzuschränken um den Rest des Dateisystems zu verbergen und somit die Sicht eines entfernten Benutzers auf die Daten anderer Benutzer einzuschränken. Eine beliebte Implementierung, die diesen Ansatz verwendet, ist SFTP.

Beispiel

Bevor Sie dieses Beispiel durcharbeiten, sollten Sie sicherstellen, dass Sie Sicherungskopien haben. Sichern Sie in diesem Fall die /etc/ssh/sshd_config Datei, weil Sie speziell an dieser Datei Änderungen vornehmen werden:

[root@showme1 ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Vorerst beschränken Sie SFTP-Nutzer nur auf ihre Basisverzeichnisse auf dem Server. Diese Anforderung bedeutet, dass Sie Benutzer hinzufügen und sie einer Gruppe zuordnen müssen:

[root@showme1 ~]# useradd -g sftpusers -s /sbin/nologin -p nick nick

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

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

Subsystem sftp internal-sftp

Match Group sftpusers
ForceCommand internal-sftp
ChrootDirectory /home
X11Forwarding no
AllowTcpForwarding no

Es ist wichtig, dass Sie diese Einstellungen als separate Einträge hinzufügen und den Match verwenden Syntax, um anzugeben, dass dieser Abschnitt nur ist gilt für Benutzer in dieser Gruppe. Wenn Sie die Änderungen an den vorhandenen Einträgen vornehmen, gelten sie für alle SSH-Nutzer, die den Fernzugriff unterbrechen könnten.

Die Konfigurationszeilen gliedern sich wie folgt:

  • Der ForceCommand macht ssh Wählen Sie die integrierte Funktion zur Bereitstellung des SFTP-Dienstes aus (die Sie unabhängig steuern können).
  • ChrootDirectory sagt sshd wo der Benutzer eingeschränkt werden soll.
  • Subsystem sftp internal-sftp sagt sshd um das interne sftp zu laden Service und zur Verfügung stellen.

Möglicherweise müssen Sie sicherstellen, dass dieses Subsystem ist nicht bereits durch Auskommentieren dieser Zeile weiter oben in der Konfigurationsdatei definiert:

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

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

[root@showme1 ~]# systemctl restart sshd

Testen Sie den neuen Benutzer:

[skipworthy@milo ~]$ sftp nick@showme
nick@showme's password:
Connected to nick@showme.
sftp> ls
accounting   ansible   fred   jason   kenny   lisa    
nick
sftp> pwd
Remote working directory: /
sftp> exit

Hoppla, warten Sie einen Moment:Anscheinend können Sie auch alle Verzeichnisse der anderen Nutzer sehen. Sie können jedoch nicht zu diesen Verzeichnissen navigieren:

sftp> cd fred
sftp> ls
remote readdir("/fred"): Permission denied

Sie können den Chroot-Benutzer zu seinem eigenen Home-Verzeichnis leiten, indem Sie das ChrootDirectory ändern Zeile in der sshd_config Datei wie folgt:

ChrootDirectory /

Diese schnelle Änderung lässt es für Nick so aussehen, als wäre er in seinem eigenen Home-Verzeichnis und er kann die Dateien anderer Benutzer nicht sehen:

sftp> pwd
Remote working directory: /home/nick
sftp>
sftp> exit
[skipworthy@milo ~]$ touch test.txt
[skipworthy@milo ~]$ sftp nick@showme
nick@showme's password:
Connected to nick@showme.
sftp> put test.txt
Uploading test.txt to /home/nick/test.txt
test.txt 100% 0 0.0KB/s 00:00
sftp> ls
test.txt
sftp>

Wo ist es hin? Sehen Sie sich das an:

[root@showme1 ~]# ls /home/nick
test.txt

Beachten Sie, dass ein chroot jail ist nicht selbst als angemessene Sicherheitsbeschränkung angesehen. Während es einen Benutzer daran hindert, ein eingeschränktes Verzeichnis zu verlassen, gibt es Möglichkeiten, dies zu umgehen (die allgemeine Idee wird in chroot(2) erwähnt Manpage, die Sie sich ansehen sollten, wenn Sie erwägen, diesen Trick in einem produktions- oder geschäftskritischen Kontext einzusetzen.)

Abschluss (vorerst)

Sie können also diese chroot sehen kann ein ziemlich nützliches Werkzeug sein. In Teil 2 werde ich mich mehr damit befassen, Benutzern bestimmte Verzeichnisse zuzuweisen und einem entfernten Benutzer eine Shell-Umgebung bereitzustellen, ohne den Rest des Servers offenzulegen.

Neu bei Containern? Laden Sie die Einführung zu Containern herunter und lernen Sie die Grundlagen von Linux-Containern kennen.


Linux
  1. So legen Sie den System-Hostnamen unter Linux fest oder ändern ihn

  2. Tauchen Sie tiefer in die Linux-Chroot-Gefängnisse ein

  3. So stellen oder ändern Sie die Zeitzone in Linux

  4. So richten Sie einen SFTP-Server unter Arch Linux ein

  5. CentOS / RHEL :So richten Sie das Chroot-Gefängnis SFTP ein

So legen Sie den Hostnamen unter Linux fest oder ändern ihn

So richten Sie Chrooted SFTP unter Linux ein

So ändern oder setzen Sie das Benutzerkennwort in Linux

So richten Sie eine Firewall mit GUFW unter Linux ein

So stellen Sie Datum und Uhrzeit unter Linux ein

Wie aktiviere ich sFTP in einem Linux VPS?