Jailkit: Rechte für SSH- und SFTP-Benutzer regeln
Einen SSH- oder SFTP-Zugang per Chroot einzuschränken, ist mit Bordmitteln ziemlich schwierig. Ein Jailkit hilft dem Administrator, die Rechte des Benutzers zu regeln. Wie das geht, verrät dieser Artikel.
Was nützt eine verschlüsselte Datenübertragung per SSH, wenn der Benutzer nur ein schwaches Zugangspasswort gewählt hat? Ohne weitere Absicherung wird ein Server so trotz Secure Shell leicht das Ziel von Brute-Force-Attacken. Nicht nur der Zugriff von außen ist gefährlich. Zwar können viele Dienste können über Proxys internen Nutzern zur Verfügung gestellt und deshalb die direkte Verbindung am entsprechenden Port gesperrt werden. Aber es gibt immer noch Ausnahmen, für die keine Proxy-Lösung existiert: SFTP, direkte Konsolenzugriffe (»ssh«, »telnet«) und so weiter. Die Lösung dafür lautet meistens NAT, das den direkten Zugriff der Nutzer auf die große weite Internet-Welt ermöglicht. Mehr Kontrolle bringt ein Gateway, das Zugriffe nur in einer Chroot-Umgebung zulässt.
Die Einrichtung einer Chroot-Umgebung für Serverdienste oder Zugriffe ist mit reichlich Aufwand verbunden. Hier hilft Jailkit, ein Open-Source-Projekt von Olivier Sessink, das eine intelligente Verknüpfung von Skripten zur Erstellung und für den Betrieb von Chroot-Umgebungen an die Hand gibt.
Installation
Für die Testumgebung kommt die aktuelle Version 2.7 zum Einsatz, die unter [1] zum Download bereit steht. Da Jailkit zum großen Teil in C und Python programmiert ist, benötigt es lediglich Libc, Libpthreads und Python -- welche auf nahezu jedem Linuxsystem vorhanden sind -- sowie einen C-Compiler. Entsprechend einfach gestaltet sich die Installation nach dem Entpacken des Tar-Files:
./configure make make install
Die im Paket enthaltene Datei »INSTALL.txt« gibt uns noch nützliche Informationen, wie wir Jailkit als Daemon betreiben können (siehe Kasten ,,Daemon``).
| Daemon |
|---|
|
Die Init-Skripte sind im Paket enthalten. Sie müssen nur noch den richtigen Ort kopieren und die Rechte setzen: cp extra/jailkit /etc/init.d/jailkit # Kopieren des Init-Skriptes chmod a+x /etc/init.d/jailkit # Korrektur der Rechte update-rc.d jailkit defaults # Installation der Init-Skripte |
Erstellung eines Jails
Nach erfolgreicher Installation legen Sie nun den ersten Knast an. Jailkit ist modular aufgebaut, das heißt neben dem reinem Jail können Sie beliebige Programme hinzufügen -- eine genauere Erklärung finden Sie im Artikel weiter unten. Dies ermöglicht es auch zu einem späteren Zeitpunkt weitere Programme zur Verfügung zu stellen, ohne daß ein neuer Jail erzeugt werden muss.
Um einen Jail einzurichten, verwenden Sie »jk_init« mit folgenden Parametern:
jk_init -v -j /srv/jail jk_lsh basicshell
Der Befehl »jk_init« erfährt über den Parameter »-j« den Standort des Jails, die Option »-v« lässt Jailkit alles anzeigen, was es so treibt. Anschließend folgen die Programme, welche innerhalb des Jails zur Verfügung stehen sollen. Das Programm »jk_lsh« stellt die zentrale Shell des Jails dar -- ohne es ist kein Login auf dem Jail möglich. Hinter »basicshell« verbirgt sich eine abgespeckte Bash-Shell mit den nötigsten Programmen (»cd«, »mv«, »cp«, »pwd« und so weiter).
Falls das Verzeichnis nicht existiert, legt Jailkit es an. Anschließend erstellen Sie ein Temp-Verzeichnis für den Jail.
mkdir /srv/jail/tmp chmod a+rwx /srv/jail/tmp
Denken Sie daran: Ohne »jk_lsh« und einem Tmp-Verzeichnis im Chroot ist kein Login möglich!
Benutzer
Falls noch nicht vorhanden, richten Sie nun die Benutzer ein, die sich im Jail anmelden dürfen. Im Beispielfall die Benutzer »max« und »moritz«. Die Benutzer müssen über ein Passwort verfügen:
useradd -m max useradd -m moritz passwd max passwd moritz
Bevor Sie die Benutzer hinter Gitter bringen, sei angemerkt, dass nicht nur die Anmeldung in den Jail verschoben wird, sondern ebenso das Home-Verzeichnis. Abschließend passt Jailkit noch die Rechte an, damit die Benutzer ihre Dateien auch bearbeiten dürfen.
jk_jailuser -m -j /srv/jail max jk_jailuser -m -j /srv/jail moritz
Der Befehl »jk_jailuser« verschiebt wegen »-m«die Home-Verzeichnisse, »-j« zeigt wieder auf den Jail und zu guter letzt folgt der entsprechende Benutzer.
Ein Blick in die lokale Passwort-Datei »/etc/passwd« zeigt die Änderungen, die Jailkit durchgeführt hat:
max:x:1016:1016::/srv/jail/./home/max:/usr/sbin/jk_chrootsh moritz:x:1017:1017::/srv/jail/./home/moritz:/usr/sbin/jk_chrootsh
Hier wird deutlich, daß die Benutzer direkt in die Chroot-Umgebung umgeleitet werden. In der Passwort-Datei innerhalb des Jails sieht das ganze dann wie folgt aus:
max:x:1003:1003::/home/max:/usr/sbin/jk_lsh moritz:x:1004:1004::/home/moritz:/usr/sbin/jk_lsh
Damit sich der Benutzer »max« auch in der Chroot-Umgebung via SSH anmelden kann, muss die Shell geändert werden, zum Beispiel »/bin/bash«. Bei der standardmäßig gesetzten »jk_lsh« handelt es sich um eine nicht interaktive Shell, welche lediglich zu Protokollzwecken und als Sprungbrett dient. Falls gewünscht, können Sie in der »/srv/jail/etc/jailkit/jk_lsh.ini« entsprechend Nutzern oder Gruppen Freigaben einrichten. Soll zum Beispiel der »moritz« den Jail nur als SFTP-Gateway benutzen dürfen, so würde die »jk_lsh.ini« innerhalb des Jails wie folgt aussehen:
[moritz] paths= /usr/bin/ executables= /usr/bin/sftp
Nun kann der Nutzer »moritz« lediglich über ein Terminal den Befehl »sftp« starten:
ssh -t moritz@sftp-gateway.example.com sftp secure.example.com
Selbstverständlich landen alle Login-Versuche in der lokalen Log-Datei »auth.log«, ebenfalls die Sprungbetter -- »jk_lsh« sei Dank.
Modifikationen, Updates und Prüfungen
Wie bereits erwähnt, können Sie prinzipiell alle Programme des lokalen Systems in die Jails installieren. Jailkit sieht hierfür »jk_init« vor, das die Informationen der Programme (Pfade, Abhängigkeiten und so weiter) aus der Konfigurationsdatei »/etc/jailkit/jk_init.ini« bezieht und entsprechend installiert. Selbstverständlich sind nicht alle Programme hinterlegt. Wenn Sie zum Beispiel einen SFTP-client im Jail zur Verfügung stellen wollen, müssen Sie die jk_init.ini entsprechend erweitern (siehe Kasten ,,Erweiterungen``).
| Erweiterungen |
|---|
|
Um weitere Programme für unsere Jails zur Verfügung stellen zu können, müssen diese über die »/etc/jailkit/jk_init.ini« bekannt gemacht werden. Hier ein Beispiel für einen SFTP-Client: [sftp-client] comment = sftp-client paths = /usr/bin/sftp includesections = netbasics, uidbasics devices = /dev/urandom, /dev/null Nun kann mittels »jk_init -j /srv/jail sftp-client« das Programm jedem Jail hinzufügt werden. |
Um Updates, die eventuell zwischenzeitlich auf dem Host-System eingespielt wurden, auch innerhalb des Jails anzuwenden, stellt Jailkit das Skript »jk_update« zur Verfügung. Dieses prüft auf Neuerungen und spielt sie gegebenenfalls ein, sodass der Jail mit dem lokalen System auf dem gleichen Stand bleibt. Mittels »jk_check« stößt der Administrator eine Prüfung aller angelegten Jails an. Alle Unstimmigkeiten werden gnadenlos protokolliert.
Auf der Internetseite des Programmierers stehen noch vielen weitere Anwendungsmöglichkeiten und -beispiele zur Verfügung. Jailkit stellt eine solide Struktur zur Absicherung unserer Systeme da -- selbst Ede kann sich nur noch die Zähne ausbeißen. (ofr)
Infos
- [1] Jailkit: [http://olivier.sessink.nl/jailkit]

Kommentare
Kommentar hinzufügen