Die FRITZ!Box als Rootserver

Die hier beschriebene Vorgehensweise lässt sich mit aktueller Firmware nicht mehr durchführen. Ich rate daher zur Verwendung von Freetz zur Erstellung modifizierter Firmware-Images.

Ich gebe es zu: So ganz passt die FRITZ!Box nicht in das übliche Beuteschema dieses Blogs. Doch neuere Boxen mit USB-Anschluss lassen sich in einen per DynDNS ständig erreichbaren Server umbauen. Als Webserver kann sogar ein Apache mit PHP dienen und auf Wunsch lädt der Bittorrent-Client ctorrent auch nachts ohne aktivem PC im Netz selbständig Linux-ISOs aus dem Netz.

Wie es funktioniert? Eine uClibc-Chroot-Umgebung auf USB-Festplatte und ein Script, das die Umgebung mountet und einen Dropbear SSH-Server in ihr startet, genügt. Ich habe alle Komponenten vorbereitet und biete sie zum Download an.

Gehen Sie wie folgt vor, um die Chroot-Umgebung zu starten:

  • Partitionieren und formatieren Sie eine USB-Festplatte mit wenigstens zwei Partitionen, Linux Swap mit 128MB oder mehr und Linux Ext2, mindestens 800MB, besser Rest der Platte. Freien Speicher können Sie einer FAT32-Partition zuweisen.
  • Laden Sie den Tarball ucchroot-0927-fritz7170.tar.gz herunter. Mounten Sie die USB-Festplatte, wechseln Sie das Arbeitsverzeichnis und entpacken Sie den Tarball:

    mount /dev/sdx1 /media/sdx1
    cd /media/sdx1
    tar xvzPf /tmp/ucchroot-0927-fritz7170.tar.gz

  • Unmounten Sie die Festplatte und entfernen Sie diese vom PC und verbinden Sie sie mit der FRITZ!Box. Achtung: Notebook-Festplatten ohne externer Stromversorgung müssen via Hub angeschlossen werden!
  • Aktivieren Sie mit einem angeschlossenen Telefon und der Rufnummer #96*7* den Telnet Daemon der FRITZ!Box. Sie können sich jetzt mit dem Befehl

    telnet fritz.box

    auf der FRITZ!Box einloggen.

  • Für das Laden des Ext2-Kernelmoduls, das anschließende Mounten der USB-Festplatte und den Start des SSH-Servers habe ich ein kleines Shellscript erstellt. Laden Sie es auf die Fritzbox

    wget -O /var/tmp/chroot.sh \
    http://fbh.mattiasschlenker.de/7170/chroot.sh

    Wenn Sie mehrere USB-Festplatten an der Fritzbox verwenden, müssen Sie die enthaltenen Variablen für Chroot- und Swap-Partition anpassen. Führen Sie das Script aus:

    sh /var/tmp/chroot.sh

    Während der Ausführung blinkt die Update-LED. Insgesamt läuft das Script ca. 45 Sekunden.

  • Für erste Tests und zum späteren Setzen des Passwortes benötigen Sie eine Shell in der Chroot-Umgebung:

    /var/tmp/chroot/bin/busybox_static chroot \
    /var/tmp/chroot /bin/bash

    Der Prompt ändert sich von einem “#” zu “bash-3.00#”. Setzen Sie das Root-Passwort mit dem Befehl

    passwd

    ACHTUNG: Ohne Root-Passwort können Sie sich später nicht per SSH einloggen!

  • Der SSHD erlaubt es nun, sich mit dem SSH-Protokoll von einem anderen Rechner im lokalen Netz aus mit dem im letzten Schritt vergebenen Passwort in der Chroot-Umgebung anzumelden.
  • Damit Sie die Chroot-Umgebung nicht nach jedem Start der Fritzbox manuell aktivieren müssen, können Sie das Startscript für die Chroot-Umgebung beim Systemstart ausführen lassen. Es genügt, in der per Telnet gestarteten Shell das Script “chroot.sh” an Ihre “debug.cfg” anzuhängen:

    cat /var/tmp/chroot/start_chroot.sh \
    >> /var/flash/debug.cfg

    Starten Sie die Fritzbox über das Webinterface neu und überzeugen Sie sich per SSH-Login davon, dass die Chroot-Umgebung zur Verfügung steht.

In der Chroot-Umgebung steht der bekannte GNU-Compiler genauso zur Verfügung wie viele zur Kompilation benötigter Header-Dateien. Der Bittorrent-Client (in /usr/src) kann beispielsweise mit einem normalen “./configure” für die Kompilation vorbereitet werden.

Sollten Sie weitere Programme installieren, die als Daemon gestartet werden (Webserver, Mailserver), können Sie diese in der Datei “/etc/chroot.sh” eintragen um sie beim Start zu aktivieren.

Viel Spaß!

PS: Bitte keine Fragen in Kommentaren sondern per Mail, ich erweitere ggf. diesen Artikel um eine Art FAQ!