Jailed Shell und Jailkit
Eine Jailed-Shell ist eine Art eingeschränkte Shell, die dem Benutzer eine sehr real aussehende Shell bietet, ihm aber nicht erlaubt, irgendwelche Teile der realen Dateisysteme zu manipulieren/anzusehen/zu modifizieren. Das Dateisystem innerhalb der Shell unterscheidet sich vom tatsächlichen Dateisystem des zugrunde liegenden Systems. Eine solche Funktionalität wird durch Chroot erreicht und findet viele Arten von Anwendungen. Zum Beispiel, um eine Linux-Shell einzurichten, mit der Benutzer einfach "spielen" können. Oder führen Sie ein Programm mit voller Funktionalität, aber in einer eingeschränkten Umgebung aus und so weiter.
In diesem Tutorial werden wir über das schnelle Einrichten einer Jailed-Shell mit Jailkit auf Ubuntu sprechen. Jailkit ist ein Hilfsprogramm, das es ermöglicht, schnell eine Jailed-Shell einzurichten, Benutzer darin zu Jailen und Programme so zu konfigurieren, dass sie von der Jailed-Umgebung ausgeführt werden.
Jailkit kann von
http://olivier.sessink.nl/jailkit/
Wir haben bereits über die Installation von Jailkit auf Ubuntu gesprochen, also schau dir diesen Beitrag an.
Inhaftierte Shell einrichten
1. Richten Sie die Jail-Umgebung ein
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
2. Richten Sie die Programme ein, die im Gefängnis verfügbar gemacht werden sollen
Alle Programme, die im Jail verfügbar sein müssen, müssen mit dem Befehl jk_init hineinkopiert werden.
Beispiel
$ sudo jk_init -v /jail basicshell $ sudo jk_init -v /jail editors $ sudo jk_init -v /jail extendedshell $ sudo jk_init -v /jail netutils $ sudo jk_init -v /jail ssh $ sudo jk_init -v /jail sftp $ sudo jk_init -v /jail jk_lsh
Oder auf einmal
$ 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 der Abschnitt basicshell stellt viele Programme wie bash, ls, cat, chmod, mkdir, cp, cpio, date, dd, echo, egrep etc im Gefängnis bereit.
Eine vollständige Liste der Abschnitte, die eingerichtet werden können, finden Sie unter /etc/jailkit/jk_init.ini
.
jk_lsh (Jailkit limited shell) - is an important section, and must be added.
3. 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 robber Adding user `robber' ... Adding new group `robber' (1005) ... Adding new user `robber' (1006) with group `robber' ... Creating home directory `/home/robber' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for robber Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y
Beachten Sie, dass dies ein normaler Benutzer ist, der im eigentlichen Dateisystem erstellt wird und nicht im Jail.
Im nächsten Schritt soll dieser Benutzer im Jail eingesperrt werden.
Wenn Sie an dieser Stelle einen Blick auf /etc/passwd werfen, sehen Sie am Ende einen Eintrag, der so aussieht
robber:x:1006:1005:,,,:/home/robber:/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.
4. Sperren Sie den Benutzer
Jetzt ist es an der Zeit, den Benutzer ins Gefängnis zu stecken.
$ sudo jk_jailuser -m -j /opt/jail/ robber
Damit wurde der Benutzerräuber nun gejailt.
Wenn Sie sich jetzt /etc/passwd ansehen, würde der letzte Eintrag so aussehen
robber:x:1006:1005:,,,:/opt/jail/./home/robber:/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 [email protected] [email protected]'s password: Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-25-generic x86_64) * Documentation: https://help.ubuntu.com/ 13 packages can be updated. 0 updates are security updates. *** /dev/sda7 will be checked for errors at next reboot *** *** /dev/sda8 will be checked for errors at next reboot *** Last login: Sat Jun 23 12:45:13 2012 from localhost Connection to localhost closed. $
Die Verbindung wird geschlossen. Dies geschieht, weil der Benutzer tatsächlich eine eingeschränkte Shell hat.
5. Geben Sie dem Benutzer innerhalb des Gefängnisses eine Bash-Shell
Als nächstes müssen Sie dem Benutzer eine richtige Bash-Shell geben, aber innerhalb des Gefängnisses.
Öffnen Sie die folgende Datei
/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 robber:x:1006:1005:,,,:/home/robber:/usr/sbin/jk_lsh
Ändern Sie /usr/sbin/jk_lsh in /bin/bash
root:x:0:0:root:/root:/bin/bash robber:x:1006:1005:,,,:/home/robber:/bin/bash
Speichern Sie die Datei und beenden Sie sie.
6. Melden Sie sich im Gefängnis an
Jetzt ist es also an der Zeit, sich erneut im Jail anzumelden
$ ssh [email protected] [email protected]'s password: Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-25-generic x86_64) * Documentation: https://help.ubuntu.com/ 13 packages can be updated. 0 updates are security updates. *** /dev/sda7 will be checked for errors at next reboot *** *** /dev/sda8 will be checked for errors at next reboot *** Last login: Sat Jun 23 12:46:01 2012 from localhost bash: groups: command not found I have no [email protected]:~$
Das Gefängnis sagt 'Ich habe keinen Namen!' , ha ha. Jetzt haben wir eine voll funktionsfähige Bash-Shell, aber innerhalb des Gefängnisses.
Überprüfen Sie nun 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.
I have no [email protected]:~$ cd / I have no [email protected]:/$ ls bin dev etc home lib lib64 run usr var I have no [email protected]:/$
Außerdem sind in diesem Jail nur die Befehle verfügbar, die über jk_cp-Abschnitte kopiert wurden.
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.
Ausführen von Programmen oder Diensten im Gefängnis
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 jk_chrootlaunch Befehl.
$ sudo jk_chrootlaunch -j /opt/jail -u robber -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 - a utility to copy files including permissions and libraries into a jail
Weitere Informationen zu verschiedenen Jailkit-Befehlen finden Sie in der Dokumentation unter
http://olivier.sessink.nl/jailkit/