Hallo, heute erstellen wir einen inhaftierten ssh-Benutzer mit Jailkit auf einer Debian Wheezy-Box. Jailkit ist eine Reihe von Dienstprogrammen, um Benutzerkonten mithilfe von chroot() und/oder bestimmten Befehlen auf bestimmte Dateien zu beschränken. Das Einrichten einer Chroot-Shell, einer Shell, die auf einen bestimmten Befehl beschränkt ist, oder eines Daemons in einem Chroot-Gefängnis ist viel einfacher und kann mit diesen Dienstprogrammen automatisiert werden.
Jailkit wird bekanntermaßen in Netzwerksicherheitsgeräten mehrerer führender IT-Sicherheitsfirmen, Internetservern mehrerer großer Unternehmensorganisationen, Internetservern von Internetdienstanbietern sowie vielen kleineren Unternehmen und Privatanwendern verwendet, die cvs, sftp und Shell sichern müssen oder Daemon-Prozesse.
1. JailKit installieren
Zuerst werden wir das Jailkit herunterladen und installieren.
$ cd /tmp
$ wget http://olivier.sessink.nl/jailkit/jailkit-2.17.tar.gz
$ tar xvfz jailkit-2.17.tar.gz
$ cd jailkit-2.17
Hinweis:Bitte ersetzen Sie jailkit-2.17 durch die Version von Jailkit, die Sie installieren werden.
Da Jailkit vor seiner Installation einige Pakete benötigt, werden wir sie wie folgt installieren:
$ sudo apt-get install build-essential autoconf automake1.9 libtool flex bison debhelper binutils-gold python
Jetzt ist unser System bereit, das Jailkit zu installieren, installieren Sie es wie folgt:
$ ./debian/rules binary
$ cd ..
$ dpkg -i jailkit_2.17-1_i386.deb
Es wird das Jailkit in Debian Server installieren, wir können die zusätzlichen Pakete aus /tmp:
entfernen$ rm -rf /tmp/jailkit*
2. Konfigurieren der Jail-Umgebung
Es muss ein Verzeichnis vorhanden sein, in dem die gesamte Jail-Umgebung eingerichtet wird. Machen wir es in /opt/jail. Das kann alles sein.
$ sudo mkdir /opt/jail
Root sollte dieses Verzeichnis besitzen. Also chown es raus.
$ sudo chown root:root /opt/jail
3. Aktivieren, dass die Programme innerhalb des Jails verfügbar sind
Alle Programme, die im Jail verfügbar sein müssen, müssen mit dem Befehl jk_init hineinkopiert werden.
Beispiel
$ sudo jk_init -v /opt/jail netutils basicshell jk_lsh openvpn ssh sftp
Die Namen wie basicshell , editors , netutils sind Gruppen, die mehrere Programme enthalten. Jede Gruppe ist ein Satz ausführbarer Dateien, Bibliotheken usw., die in die Shell kopiert werden sollen. Zum Beispiel stellt die Sektion basicshell viele Programme wie bash, ls, cat, chmod, mkdir, cp, cpio, date, dd, echo, egrep usw. im Gefängnis bereit.
Eine vollständige Liste der Abschnitte, die eingerichtet werden können, finden Sie unter /etc/jailkit/jk_init.ini.
4. Erstellen Sie den Benutzer, der inhaftiert wird
Benötigen Sie einen Benutzer, um ihn in das Gefängnis zu stecken. Lassen Sie uns eine erstellen
$ sudo adduser arun
Beachten Sie, dass dies ein normaler Benutzer ist, der im eigentlichen Dateisystem und nicht im Jail erstellt wird.
Im nächsten Schritt soll dieser User im Gefängnis eingesperrt werden.
Wenn Sie an dieser Stelle einen Blick auf /etc/passwd werfen, sehen Sie am Ende einen Eintrag, der so aussieht
arun:x:1006:1005:,,,:/home/arun:/bin/bash
Dies ist unser neuer Benutzer und der letzte Teil /bin/bash zeigt an, dass der Benutzer einen normalen Shell-Zugriff auf das System hat, wenn er sich anmeldet.
5. Sperren Sie den Benutzer
Jetzt ist es an der Zeit, den Benutzer ins Gefängnis zu stecken.
$ sudo jk_jailuser -m -j /opt/jail/ arun
Dadurch wurde der Benutzer arun nun gejailt.
Wenn Sie nun einen Blick auf /etc/passwd werfen, würde der letzte Eintrag so aussehen
arun:x:1006:1005:,,,:/opt/jail/./home/arun:/usr/sbin/jk_chrootsh
Beachten Sie, dass sich die letzten beiden Teile, die den Heimbenutzer und den Shell-Typ angeben, geändert haben. Das Home-Verzeichnis des Benutzers befindet sich nun innerhalb der Jail-Umgebung unter /opt/jail. Die Shell des Benutzers ist jetzt ein spezielles Programm namens jk_chrootsh, das die eingesperrte Shell bereitstellt.
Es ist diese spezielle Shell namens jk_chrootsh, die den Benutzer jedes Mal, wenn er sich in das System einloggt, in das Gefängnis führt.
Die Einrichtung des Gefängnisses ist nun fast abgeschlossen. Aber wenn Sie versuchen, sich von ssh aus mit id zu verbinden, schlägt dies folgendermaßen fehl:
$ ssh arun@localhost
Die Verbindung wird geschlossen. Dies geschieht, weil der Benutzer tatsächlich eine eingeschränkte Shell hat.
6. Geben Sie dem Benutzer innerhalb des Gefängnisses eine Bash-Shell
Das Wichtigste, was wir jetzt tun müssen, ist, dem Benutzer eine richtige Bash-Shell zur Verfügung zu stellen, aber innerhalb des Gefängnisses.
Öffnen Sie die folgende Datei
$ sudo nano /opt/jail/etc/passwd
Es ist die Passwortdatei im Gefängnis. Es würde in etwa so aussehen
root:x:0:0:root:/root:/bin/bash
arunp:x:1006:1001:arun pyasi,001,,:/home/arunp:/usr/sbin/jk_lsh
Ändern Sie /usr/sbin/jk_lsh in /bin/bash
root:x:0:0:root:/root:/bin/bash
arun:x:1006:1005:,,,:/home/arun:/bin/bash
Speichern Sie die Datei und beenden Sie sie.
7. Melden Sie sich im Gefängnis an
Jetzt ist es also an der Zeit, sich erneut im Jail anzumelden
$ ssh arun@localhost
Jetzt haben wir eine voll funktionsfähige Bash-Shell, aber innerhalb des Gefängnisses. Überprüfen Sie jetzt die Umgebung, indem Sie sich bewegen. Das Stammverzeichnis / der Jail-Umgebung ist /opt/jail des realen Dateisystems. Aber das wissen nur wir, nicht der inhaftierte Benutzer.
Außerdem sind nur die Befehle, die über jk_cp-Abschnitte kopiert wurden, in diesem Jail verfügbar . Wenn die Anmeldung fehlschlägt, überprüfen Sie /var/log/auth.log auf Fehlermeldungen.
Versuchen Sie nun, einen Netzwerkbefehl wie wget oder etwas Ähnliches auszuführen.
$ wget http://www.google.com/
Wenn Sie eine Fehlermeldung wie diese erhalten:
$ wget http://www.google.com/
--2012-06-23 12:56:43-- http://www.google.com/
Resolving www.google.com (www.google.com)... failed: Name or service not known.
wget: unable to resolve host address `www.google.com'
Beheben Sie es, indem Sie die folgenden 2 Befehle ausführen:
$ sudo jk_cp -v -j /opt/jail /lib/x86_64-linux-gnu/libnss_files.so.2
$ sudo jk_cp -v -j /opt/jail /lib/x86_64-linux-gnu/libnss_dns.so.2
Der genaue Speicherort von libnss_files.so und libnss_dns.so kann variieren, prüfen Sie dies daher.
8. Ausführen von Programmen oder Diensten im Jail
Jetzt ist die Einrichtung abgeschlossen. Jails sind nützlich, um Programme oder Dienste in eingeschränkten/sicheren Umgebungen auszuführen. Um ein Programm oder einen Daemon innerhalb des Gefängnisses zu starten, verwenden Sie den Befehl jk_chrootlaunch.
$ sudo jk_chrootlaunch -j /opt/jail -u arun -x /some/command/in/jail
Das Dienstprogramm jk_chrootlaunch kann verwendet werden, um einen bestimmten Prozess innerhalb der Jail-Umgebung mit den Rechten des angegebenen Benutzers zu starten. Wenn der Daemon nicht gestartet werden kann, überprüfen Sie /var/log/syslog auf Fehlermeldungen.
Um das Programm innerhalb des Jails laufen zu lassen, muss das Programm zuerst mit dem jk_cp-Befehl vollständig in das Jail kopiert werden.
jk_cp - ein Dienstprogramm zum Kopieren von Dateien einschließlich Berechtigungen und Bibliotheken in ein Jail
Schlussfolgerung
Schließlich haben wir mit Hilfe von Jailkit in unserem Debian/Ubuntu-Server ein funktionierendes jailed ssh erstellt. Es ist auf einen bestimmten Befehl oder einen Daemon in einem Chroot-Gefängnis mit automatisierten Dienstprogrammen beschränkt. Weitere Informationen zu verschiedenen Jailkit-Befehlen finden Sie in der Dokumentation auf der Olivier-Website. Wenn Sie irgendwelche Fragen oder Fragen haben, kommentieren Sie bitte.