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:
- die "Fremden" brauchen schreibenden Zugriff auf eine abgeschottete Umgebung (aka Jail) im Server, als Zugang ist SSH geplant.
- Innerhalb des Jail brauchen sie Zugriff auf einen Editor, git und eine mysql-Datenbank um ihre Software einzurichten
- Ä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