Chroot Manager

Aus verschiedenen Gründen muss man ab und zu eine komplette chroot für einen Benutzer erstellen. Meistens ist dieses einzusetzen wenn man noch eine alte Distribution benutzt neuere Möglichkeiten einfach nicht anbietet.

Vor ein paar Monaten hatte ich die Idee chrooted shells auf Servern die auf der ganzen Welt verteilt sind zu vermieten. Das ist ganz hilfreich wenn man seine Dienste aus anderen Ländern wie China testen möchte. Leider habe ich das Projekt nie komplett abgeschlossen und released. Zustande kam jedoch ein kleines Script das automatisch eine chroot für einen Benutzer erstellt. Zusätzlich wurde der Traffic limitiert, damit andere Benutzer nicht komplett ausgebremst werden und ein paar MB auf dem der Benutzer Scripte ablegen kann.

Getestet ist das Script auf Ubuntu 12.04, aber sollte auch auf nachfolgenden Versionen funktionieren. Als erstes muss man auf dem Server ein paar Programme installieren und Konfiguration für ssh und Limitierungen für die Benutzer setzen.

$ create_chroot.sh init_server

Anschließend kann man loslegen und einen Benutzer ‘u007’ erstellen:

$ create_chroot.sh create_user u007

Normalerweise wird eth0 benutzt und die Traffic Limitierung ist auf ca. 100kb/s. Falls etwas anderes gewünscht ist muss dieses im Script angepasst werden. Dieses gilt auch für die Programme die in der Chroot zur Verfügung gestellt sein sollen.

Gerade das Traffic Shaping für jeden einzelnen Benutzer einzugrenzen war etwas kniffelig, aber nach viel ausprobieren dann doch hinbekommen. Vielleicht kann ich damit jemanden viel Zeit sparen:

NEWUSERID=$(id -u $NEWUSER)
IF=eth0
DNLD=1kbps

iptables -t mangle -A OUTPUT -m owner --uid-owner $NEWUSER -j MARK --set-mark $NEWUSERID
tc qdisc add dev $IF root handle 1: htb default 30 >/dev/null 2>&1
tc class add dev $IF parent 1: classid 1:1 htb rate $DNLD >/dev/null 2>&1
tc filter add dev $IF protocol ip parent 1:0 prio 1 handle $NEWUSERID fw flowid 1:1 >/dev/null 2>&1

Mehr Optionen und das Script gibt es auf github.com.

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.

This site uses Akismet to reduce spam. Learn how your comment data is processed.