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

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

In Teil eins, So richten Sie Linux-Chroot-Jails ein, habe ich die chroot behandelt Befehl und Sie haben gelernt, den Chroot-Wrapper in sshd zu verwenden um die sftpusers zu isolieren Gruppe. Wenn Sie sshd_config bearbeiten um den Chroot-Wrapper aufzurufen und ihm übereinstimmende Eigenschaften zu geben, sshd führt bestimmte Befehle innerhalb des Chroot-Gefängnisses oder -Wrappers aus. Sie haben gesehen, wie diese Technik möglicherweise nützlich sein könnte, um einen geschlossenen statt sicheren Zugriff für Remotebenutzer zu implementieren.

Erweitertes Beispiel

Ich beginne damit, das zu erweitern, was ich zuvor getan habe, teilweise als Rückblick. Beginnen Sie mit der Einrichtung eines benutzerdefinierten Verzeichnisses für Remotenutzer. Ich verwende die sftpusers erneut gruppieren.

Erstellen Sie zunächst das benutzerdefinierte Verzeichnis, das Sie verwenden möchten, und legen Sie die Eigentumsrechte fest:

# mkdir -p /sftpusers/chroot
# chown root:root /sftpusers/chroot

Machen Sie dieses Mal root zum Eigentümer und nicht zu den sftpusers Gruppe. Auf diese Weise erhalten Nutzer beim Hinzufügen nicht die Berechtigung, das gesamte Verzeichnis anzuzeigen.

Erstellen Sie als Nächstes den Nutzer, den Sie einschränken möchten (in diesem Fall müssen Sie dies für jeden Nutzer tun), und fügen Sie den neuen Nutzer zu den sftpusers hinzu Gruppe und verweigern eine Anmelde-Shell, weil diese sftp sind Benutzer:

# useradd sanjay -g sftpusers -s /sbin/nologin
# passwd sanjay

Erstellen Sie dann das Verzeichnis für sanjay und legen Sie den Besitz und die Berechtigungen fest:

# mkdir /sftpusers/chroot/sanjay
# chown sanjay:sftpusers /sftpusers/chroot/sanjay
# chmod 700 /sftpusers/chroot/sanjay

Bearbeiten Sie als Nächstes die sshd_config Datei. Kommentieren Sie zuerst den vorhandenen Subsystemaufruf aus und fügen Sie den internen hinzu:

#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp

Fügen Sie dann unseren Match-Case-Eintrag hinzu:

Match Group sftpusers
ChrootDirectory /sftpusers/chroot/
ForceCommand internal-sftp
X11Forwarding no
AllowTCPForwarding no

Beachten Sie, dass Sie wieder ein Verzeichnis angeben, aber dieses Mal haben Sie bereits die Eigentümerschaft festgelegt, um sanjay zu verhindern davon ab, die Sachen anderer zu sehen. Das nachgestellte / ist auch wichtig.

Starten Sie dann sshd neu und testen:

[skipworthy@milo ~]$ sftp sanjay@showme
sanjay@showme's password:
Connected to sanjay@showme.
sftp> ls
sanjay
sftp> pwd
Remote working directory: /
sftp> cd ..
sftp> ls
sanjay
sftp> touch test
Invalid command.

So. Sanjay kann nur seinen eigenen Ordner sehen und muss cd hinein, um irgendetwas Nützliches zu tun.

Isolieren eines Dienstes oder eines bestimmten Benutzers

Was ist nun, wenn Sie einem Remote-Nutzer eine nutzbare Shell-Umgebung bereitstellen oder eine Chroot-Jail-Umgebung für einen bestimmten Dienst erstellen möchten? Erstellen Sie dazu das Jailed-Verzeichnis und das Root-Dateisystem und erstellen Sie dann Links zu den benötigten Tools und Bibliotheken. All dies ist etwas kompliziert, aber Red Hat stellt ein Skript und grundlegende Anweisungen bereit, die den Vorgang einfacher machen.

Hinweis: Ich habe Folgendes in Red Hat Enterprise Linux 7 und 8 getestet, obwohl ich davon ausgegangen bin, dass diese Funktion in Red Hat Enterprise Linux 6 verfügbar war. Ich habe keinen Grund zu der Annahme, dass dieses Skript in Fedora, CentOS oder anderen nicht funktionieren würde Red Hat-Distribution, aber Ihr Kilometerstand (wie immer) kann variieren.

Erstellen Sie zuerst Ihr Chroot-Verzeichnis:

# mkdir /chroot

Führen Sie dann das Skript von yum aus das die notwendigen Bits installiert:

# yum --releasever=/ --installroot=/chroot install iputils vim python

Der --releasever=/ Flag übergibt die aktuellen lokalen Release-Informationen, um ein Repo im neuen --installroot zu initialisieren , definiert, wo sich der neue Installationsort befindet. Theoretisch könnten Sie ein Chroot-Gefängnis erstellen, das auf einer beliebigen Version der yum- oder dnf-Repos basiert (das Skript wird jedoch immer noch mit den aktuellen System-Repos beginnen).

Mit diesem Tool installieren Sie grundlegende Netzwerkdienstprogramme wie den VIM-Editor und Python. Sie könnten zunächst andere Dinge hinzufügen, wenn Sie möchten, einschließlich des Dienstes, den Sie in diesem Gefängnis ausführen möchten. Das ist auch eines der coolen Dinge an yum und Abhängigkeiten. Als Teil der Abhängigkeitsauflösung yum nimmt zusammen mit den Bibliotheken die notwendigen Ergänzungen zum Dateisystembaum vor. Es lässt jedoch ein paar Dinge aus, die Sie als nächstes hinzufügen müssen. Darauf komme ich gleich noch.

Inzwischen wurden die Pakete und Abhängigkeiten installiert und ein neuer GPG-Schlüssel für dieses neue Repository in Bezug auf dieses neue Root-Dateisystem erstellt. Hängen Sie als Nächstes Ihre kurzlebigen Dateisysteme ein:

# mount -t proc proc /chroot/proc/
# mount -t sysfs sys /chroot/sys/

Und richten Sie Ihre Entwicklerbindungen ein:

# mount -o bind /dev/pts /chroot/dev/pts
# mount -o bind /dev/pts /chroot/dev/pts

Beachten Sie, dass diese Reittiere nicht überleben einen Neustart auf diese Weise, aber mit dieser Einrichtung können Sie eine Chroot-Gefängnisumgebung testen und damit spielen.

Testen Sie jetzt, ob alles wie erwartet funktioniert:

# chroot /chroot
bash-4.2# ls
bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr

Sie können sehen, dass das Dateisystem und die Bibliotheken erfolgreich hinzugefügt wurden:

bash-4.2# pwd
/
bash-4.2# cd ..

Von hier aus sehen Sie den richtigen Stamm und können nicht nach oben navigieren:

bash-4.2# exit
exit
#

Jetzt haben Sie den Chroot-Wrapper beendet, was erwartet wird, weil Sie ihn von einer lokalen Login-Shell als root aufgerufen haben. Normalerweise sollte ein entfernter Benutzer dazu nicht in der Lage sein, wie Sie im sftp gesehen haben Beispiel:

[skipworthy@milo ~]$ ssh root@showme
root@showme's password:
[root@showme1 ~]# chroot /chroot
bash-4.2#

Beachten Sie, dass diese Verzeichnisse alle von root erstellt wurden, also sind sie der Besitzer. Fügen Sie nun diese Chroot zur sshd_config hinzu , weil Sie dieses Mal nur diesen Benutzer finden:

Match User leo
ChrootDirectory /chroot

Starten Sie dann sshd neu .

Sie müssen auch den /etc/passwd kopieren und /etc/group Dateien vom Hostsystem in /chroot Verzeichnis:

[root@showme1 ~]# cp -vf /etc/{passwd,group} /chroot/etc/

Hinweis: Wenn Sie den obigen Schritt überspringen, können Sie sich anmelden, aber das Ergebnis ist unzuverlässig und Sie sind anfällig für Fehler im Zusammenhang mit widersprüchlichen Anmeldungen

Nun zum Test:

[skipworthy@milo ~]$ ssh leo@showme
leo@showme's password:
Last login: Thu Jan 30 19:35:36 2020 from 192.168.0.20
-bash-4.2$ ls
-bash-4.2$ pwd
/home/leo

Es sieht gut aus. Können Sie jetzt etwas Nützliches finden? Lass uns Spaß haben:

[root@showme1 ~]# yum --releasever=/ --installroot=/chroot install httpd

Sie könnten löschen Sie releasever=/ , aber ich lasse das gerne drin, weil es weniger Chancen für unerwartete Ergebnisse lässt.

[root@showme1 ~]# chroot /chroot
bash-4.2# ls /etc/httpd
conf conf.d conf.modules.d logs modules run
bash-4.2# python
Python 2.7.5 (default, Aug 7 2019, 00:51:29)

Also httpd ist da, wenn Sie es möchten, aber nur um zu demonstrieren, dass Sie einen kurzen Einzeiler von Python verwenden können, das Sie auch installiert haben:

bash-4.2# python -m SimpleHTTPServer 8000
Serving HTTP on 0.0.0.0 port 8000 ...

Und jetzt haben Sie einen einfachen Webserver, der in einem Chroot-Gefängnis läuft. Theoretisch können Sie eine beliebige Anzahl von Diensten innerhalb des Chroot-Gefängnisses ausführen und sie "eingedämmt" und von anderen Diensten fernhalten, sodass Sie nur einen Teil einer größeren Ressourcenumgebung verfügbar machen können, ohne die Erfahrung Ihrer Benutzer zu beeinträchtigen.

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


Linux
  1. Termux verwandelt Android in eine Linux-Entwicklungsumgebung

  2. So richten Sie Linux-Chroot-Jails ein

  3. So verschieben Sie Request Tracker in einen Linux-Container

  4. Wie führt man Chroot mit Linux-Namespaces durch?

  5. sftp-Befehlsbeispiele in Linux

So führen Sie SSH in ein bestimmtes Verzeichnis unter Linux aus

So richten Sie Chrooted SFTP unter Linux ein

Meine Reise in die Linux-Systemadministration

Anleitung zum Einrichten eines SFTP-Servers unter Linux

Ein praktischer Leitfaden für den Chroot-Befehl unter Linux

Wie aktiviere ich sFTP in einem Linux VPS?