(Nur zu Besuch) im Gefängnis

Posted in Computerkram by galak on 03 February 2021

Neulich im Leben eines ComputerNerds:

Sachma, meine Kollegen wollen ihre coole neue Software auf meinem Server laufen lassen, kannste da was machen ohne das die alles zerschießen?

So ähnlich waren die Voraussetzungen: "Fremde" sollten Zugriff auf einen Server bekommen den ich für einen Freund administriere. Sie sollten ihre coole neue Web-App (basierend auf Laravel, PHP und Mysql) auf dem Server aufspielen, testen und auch pflegen können. Aber ohne Zugriff auf den restlichen Server-Inhalt.

Für solche Sachen gibt es unter Linux chroot, aber eine komplexe Umgebung wie diese ist nicht gerade trivial umzusetzen:

  1. die "Fremden" brauchen schreibenden Zugriff auf eine abgeschottete Umgebung (aka Jail) im Server, als Zugang ist SSH geplant.
  2. Innerhalb des Jail brauchen sie Zugriff auf einen Editor, git und eine mysql-Datenbank um ihre Software einzurichten
  3. Änderungen sollen sich direkt im WebAuftritt des Servers wiederfinden

Nach einiger Recherche fiel meine Wahl auf jailkit Jailkit ansich ist zwar gut dokumentiert, aber erst mit ein paar Blog-Einträgen kommt man auch in weniger als 1 Woche zurecht.

Also hier kommt mein Beispiel für Ubuntu (getestet unter 18.04 und 20.04):

download & compilieren

zum compilieren wird das Paket build-essentials benötigt, das installieren wir per apt

sudo apt-get install build-essential

jetzt können wir jailkit runterladen und bauen (wer wget nicht installiert hat holt dies per "sudo apt-get install wget" nach)

cd /opt
wget https://olivier.sessink.nl/jailkit/jailkit-2.21.tar.gz
tar zxvf jailkit-2.21.tar.gz
cd jailkit-2.21
./configure && make && make install

das Gefängnis vorbereiten

Ich habe mich entschlossen, das jail in das /home-Verzeichnis zu pflanzen, weil es dort von meinen Backup-scripts automatisch mit gesichert wird. Damit das Ganze auch sicher ist, geben wir nur root Besitzrechte

sudo mkdir -p /home/jail
sudo chown root:root /home/jail

Jetzt können wir das Gefängnis einrichten. Wir erlauben schonmal ein paar Programme die im Gefängnis benötigt werden: eine shell, ein paar Editoren und ssh-Zugriff.

jk_init -v -j /home/jail basicshell editors extendedshell netutils ssh sftp scp

Das jail hat noch kein tmp-Verzeichnis - das brauchen aber einige Programme, also legen wir es an

mkdir /home/jail/tmp
chmod a+rwx /home/jail/tmp

Gefängnis-Bewohner anlegen und einsperren

Unser Gefängnisbenutzer erhält den sprechenden Namen "Knastbruder".

adduser knastbruder

Ubuntu fragt ein paar Informationen ab (vor allem ein Passwort). Jetzt wird der neue Benutzer eingesperrt:

jk_jailuser -m -j /home/jail knastbruder

Die Datei "/home/jail/etc/passwd" editieren wir (etwa mit nano) und geben dem neuen Insassen eine shell mit der man auch arbeiten kann (bash):

knastbruder:x:1016:1016::/home/knastbruder:/bin/bash

to be continued