Wie man den SSH-Benutzerzugriff auf bestimmte Verzeichnisse mit Chrooted Jail einschränkt

Es gibt mehrere Gründe, eine SSH-Benutzersitzung auf ein bestimmtes Verzeichnis zu beschränken, insbesondere auf Webservern, aber der offensichtlichste ist die Systemsicherheit. Um SSH-Benutzer in einem bestimmten Verzeichnis einzusperren, können wir den Chroot-Mechanismus verwenden.

Das Ändern des Wurzelverzeichnisses (chroot) in Unix-ähnlichen Systemen wie Linux ist eine Möglichkeit, bestimmte Benutzeroperationen vom Rest des Linux-Systems zu trennen. Es ändert das scheinbare Wurzelverzeichnis für den aktuell laufenden Benutzerprozess und seinen Kind-(Eltern-)Prozess mit einem neuen Wurzelverzeichnis, das als chrooted jail bezeichnet wird.

In diesem Tutorial zeigen wir Ihnen, wie Sie den SSH-Benutzerzugriff auf ein bestimmtes Verzeichnis in Linux beschränken. Beachten Sie, dass wir alle Befehle als Root ausführen werden. Verwenden Sie den sudo-Befehl, wenn Sie als normaler Benutzer auf dem Server angemeldet sind.

1. Beginnen Sie mit der Erstellung des Chroot-Gefängnisses mit dem folgenden mkdir-Befehl:

1. Beginnen Sie mit der Erstellung des chroot-Gefängnisses unter Verwendung des mkdir-Befehls unten:

# mkdir -p /home/test

2. Als nächstes identifizieren Sie die erforderlichen Dateien gemäß der sshd_config Handbuchseite, der ChrootDirectory -Option gibt den Pfadnamen des Verzeichnisses an, in das nach der Authentifizierung gechrooted wird. Das Verzeichnis muss die erforderlichen Dateien und Verzeichnisse enthalten, um eine Benutzer*innensitzung zu unterstützen.

Für eine interaktive Sitzung benötigt dies mindestens eine Shell, üblicherweise sh, und grundlegende /dev Knoten wie null, zero, stdin, stdout, stderr und tty-Geräte:

# ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}
Listing Required Files

3. Erstellen Sie nun die /dev -Dateien wie folgt unter Verwendung des mknod-Befehls. In der folgenden Befehlszeile wird die -m -Flag verwendet, um die Dateiberechtigungsbits anzugeben, c bedeutet Zeichen-Datei und die beiden Zahlen sind die Haupt- und Nebennummern, auf die die Dateien zeigen.

# mkdir -p /home/test/dev/		
# cd /home/test/dev/
# mknod -m 666 null c 1 3
# mknod -m 666 tty c 5 0
# mknod -m 666 zero c 1 5
# mknod -m 666 random c 1 8
Create /dev and Required Files

4. Danach stellen Sie die geeigneten Berechtigungen für das chroot-Gefängnis ein. Beachten Sie, dass das chroot-Gefängnis und seine Unterverzeichnisse und Unterdateien vom root Benutzer*innen besessen sein müssen und von keiner normalen Benutzer*innen oder Gruppe beschreibbar sind:

# chown root:root /home/test
# chmod 0755 /home/test
# ls -ld /home/test
Set Permissions on Directory

Schritt 2: Einrichten einer interaktiven Shell für SSH Chroot Jail

5. Zuerst erstellen Sie das Verzeichnis bin und kopieren dann die Dateien /bin/bash in das Verzeichnis bin mithilfe des cp-Befehls wie folgt:

# mkdir -p /home/test/bin
# cp -v /bin/bash /home/test/bin/
Copy Files to bin Directory

6. Identifizieren Sie nun die für das gemeinsam genutzte libs erforderliche bash und kopieren Sie sie in das Verzeichnis lib:

# ldd /bin/bash
# mkdir -p /home/test/lib64
# cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/test/lib64/
Copy Shared Library Files

Schritt 3: Erstellen und Konfigurieren des SSH-Benutzers

7. Erstellen Sie nun den SSH-Benutzer mit dem useradd-Befehl und legen Sie ein sicheres Passwort für den Benutzer fest:

# useradd tecmint
# passwd tecmint

8. Erstellen Sie das Verzeichnis für die allgemeinen Konfigurationen der chroot-Gefängnis, /home/test/etc, und kopieren Sie die aktualisierten Konto-Dateien (/etc/passwd und /etc/group) in dieses Verzeichnis wie folgt:

# mkdir /home/test/etc
# cp -vf /etc/{passwd,group} /home/test/etc/
Copy Password Files
Note: Each time you add more SSH users to the system, you will need to copy the updated account files into the /home/test/etc directory.

Schritt 4: Konfigurieren von SSH zur Verwendung von Chroot-Gefängnis

9. Öffnen Sie nun die Datei sshd_config.

# vi /etc/ssh/sshd_config

und fügen Sie/ändern Sie die folgenden Zeilen in der Datei.

#define username to apply chroot jail to
Match User tecmint
#specify chroot jail
ChrootDirectory /home/test
Configure SSH Chroot Jail

Speichern Sie die Datei und beenden Sie sie, und starten Sie die SSHD-Dienste neu:

# systemctl restart sshd
OR
# service sshd restart

Schritt 5: Testen von SSH mit Chroot-Gefängnis

10. Überprüfen Sie an dieser Stelle, ob die chroot-Gefängnis-Einrichtung wie erwartet funktioniert:

# ssh [email protected]
-bash-4.1$ ls
-bash-4.1$ date
-bash-4.1$ uname
Testing SSH User Chroot Jail

Aus dem Screenshot oben können wir sehen, dass der SSH-Benutzer im chroot-Gefängnis gesperrt ist und keine externen Befehle ausführen kann (ls, date, uname, usw.).

Der Benutzer kann nur bash und seine integrierten Befehle wie (pwd, history, echo, usw.) ausführen, wie unten zu sehen ist:

# ssh [email protected]
-bash-4.1$ pwd
-bash-4.1$ echo "Tecmint - Fastest Growing Linux Site"
-bash-4.1$ history
SSH Built-in Commands

Schritt 6. Erstellen Sie das Heimatverzeichnis des SSH-Benutzers und fügen Sie Linux-Befehle hinzu

11. Aus dem vorherigen Schritt können wir feststellen, dass der Benutzer im Stammverzeichnis gesperrt ist. Wir können ein Heimatverzeichnis für den SSH-Benutzer wie folgt erstellen (tun Sie dies für alle zukünftigen Benutzer):

# mkdir -p /home/test/home/tecmint
# chown -R tecmint:tecmint /home/test/home/tecmint
# chmod -R 0700 /home/test/home/tecmint
Create SSH User Home Directory

12. Als nächstes installieren Sie einige Benutzerbefehle wie ls, date und mkdir im Verzeichnis bin:

# cp -v /bin/ls /home/test/bin/
# cp -v /bin/date /home/test/bin/
# cp -v /bin/mkdir /home/test/bin/
Add Commands to SSH User

13. Als nächstes überprüfen Sie die freigegebenen Bibliotheken für die oben genannten Befehle und verschieben Sie sie in das chrooted Gefängnis-Bibliotheksverzeichnis:

# ldd /bin/ls
# cp -v /lib64/{libselinux.so.1,libcap.so.2,libacl.so.1,libc.so.6,libpcre.so.1,libdl.so.2,ld-linux-x86-64.so.2,libattr.so.1,libpthread.so.0} /home/test/lib64/
Copy Shared Libraries

Schritt 7. SFTP-Test mit Chroot Jail

14. Führen Sie einen abschließenden Test mit sftp durch und überprüfen Sie, ob die soeben installierten Befehle funktionieren.

Fügen Sie die folgende Zeile im /etc/ssh/sshd_config-Datei ein:

#Enable sftp to chrooted jail 
ForceCommand internal-sftp

Speichern Sie die Datei und schließen Sie sie. Starten Sie anschließend den SSHD-Dienst neu:

# systemctl restart sshd
OR
# service sshd restart

15. Testen Sie nun mithilfe von SSH, und Sie erhalten die folgende Fehlermeldung:

# ssh [email protected]
Test SSH Chroot Jail

Versuchen Sie es stattdessen mit SFTP:

# sftp [email protected]
Testing sFTP SSH User

Das war’s für jetzt! In diesem Artikel haben wir Ihnen gezeigt, wie Sie einen SSH-Benutzer in einem bestimmten Verzeichnis (chroot Jail) unter Linux einschränken können. Verwenden Sie den Kommentarbereich unten, um uns Ihre Gedanken zu dieser Anleitung mitzuteilen.

Source:
https://www.tecmint.com/restrict-ssh-user-to-directory-using-chrooted-jail/