D-Link DNS-323

Hardware

Dies ist /proc/cpuinfo:
Processor       : ARM926EJ-Sid(wb) rev 0 (v5l)
BogoMIPS        : 331.77
Features        : swp half thumb fastmult edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant     : 0x0
CPU part        : 0x926
CPU revision    : 0
Cache type      : write-back
Cache clean     : cp15 c7 ops
Cache lockdown  : format C
Cache format    : Harvard
I size          : 32768
I assoc         : 1
I line length   : 32
I sets          : 1024
D size          : 32768
D assoc         : 1
D line length   : 32
D sets          : 1024

Hardware        : MV-88fxx81
Revision        : 0000
Serial          : 0000000000000000

Umrüstung

Die Umrüstung erfolgte anhand der Informationen auf dem DNS-323-Wiki. Die Maßnahmen wurde auf einem System mit Firmware Version 1.03 durchgeführt. Das System heißt im Netzwerk DNS-323.

Ziel ist ein abgesicherter Telnet-Zugang zu dem Original-System und ein abgesicherter SSH-Zugang zu einer chroot Umgebung. In der chroot Umgebung können zusätzliche Dienste (z.B. Apache) oder Dienste in aktueller Version gestartet werden (z.B. Samba). Ggf. müssen vorher die Original-Dienste gestoppt werden (z.B. Samba).

root

Die "Eintrittsöffnung" ist folgende: Beim Boot-Vorgangs wird das Skript fun_plug als root auf dem als Volume_1 freigegebenen Verzeichnis /mnt/HD_a2 ausgeführt (Bild vom DNS-323-Wiki):

DNS-323 Boot-Ablauf

Ein einfacher Test hierfür kann mit folgendem fun_plug durchgeführt werden:
#!/bin/sh
#
# fun_plug
#

dmesg > /mnt/HD_a2/dmesg.out

Der Code muss als fun_plug auf /mnt/HD_a2 kopiert werden, dieses Verzeichnis ist als \\DNS-323\Volume_1 freigegeben. Die Date fun_plug muss mit Unix-üblicher Zeilentrennung erzeugt werden. Nach einem Neustart des Systems sollte dmesg.out auf \\DNS-323\Volume_1 vorhanden sein.

Absicherung

Da das System nicht im Flashspeicher geändert wird, sondern lediglich über fun_plug mit chroot Debian gestartet wird, ist die Absicherung nicht problematisch. Zum einen ist ein fun_plug nur gefährlich, wenn es die Funktionalität des Basis-Systems ändert (z.B. Dienste beendet). Zum anderen kann das ursprüngliche System problemlos wieder gestartet werden. Hierfür muss für das System das fun_plug wieder unzugänglich gemacht werden.

Das geht über einen einfachen Austausch der Festplatten, hierfür sollten die Festplatte aber als einzelne Volumes konfiguriert sein. Dann kann man das fun_plug korrigieren oder entfernen und anschließend die Festplatten wieder zurücktauschen.

Mit dem Skript fpe.sh können im fun_plug andere Kommandos gestartet werden. Dabei wird das Kommando nur ausgeführt, wenn keine Lock-Datei vorhanden ist. Die Lock-Datei wird von fpe.sh erzeugt, wenn keine mit dem Kommando identische Unlock-Datei vorhanden ist. Damit können Kommandos ausgetestet werden, weil sie beim nächsten Start des Systems nicht wieder ausgeführt werden, es sei denn die Lock-Datei wird vorher manuell entfernt.

Telnet-Zugriff

Der einfachste Zugang ist die Einrichtung eines Telnet-Zugriffs. Hierzu werden die dafür nötigen Programme auf /mnt/HD_a2 kopiert und mit einem entsprechenden fun_plug der Telnet-Dämon gestartet.

Auspacken von utelnet-kit.tar.gz nach \\DNS-323\Volume_1:
  • \\DNS-323\Volume_1\fun_plug
  • \\DNS-323\Volume_1\starttelnet.sh
  • \\DNS-323\Volume_1\lnx_bin\utelnetd
  • \\DNS-323\Volume_1\lnx_bin\busybox3

Optional (aber für die weiter unten folgenden Schritte Voraussetzung!):
  • Speichern von fpe.sh nach \\DNS-323\Volume_1
  • Überschreiben von \\DNS-323\Volume_1\fun_plug mit fun_plug4telnet
  • Neustart
  • nach erfolgreichem Test
    • Löschen von \\DNS-323\Volume_1\starttelnet.sh.lock
    • Kopieren von \\DNS-323\Volume_1\starttelnet.sh nach \\DNS-323\Volume_1\starttelnet.sh.unlock

Das DNS-323-Gerät in diesem Zustand ist von allen, die mit Telnet eine Verbindung aufbauen können als "root" benutzbar! Daher sollte unbedingt die unter root-Kennwort beschriebene Sicherung erfolgen.

Die Absicherung dieses Telnet-Zugangs mit einem Kennwort für root hat bei mir nicht funktioniert.

chroot Debian

Hierfür werden die bei Einrichtung des Telnet-Zugriffs mit installierten Werkzeuge in /mnt/HD_a2/lnx_bin benötigt.

Hierfür wird ein vorgefertigtes kleines Debian Image verwendet: http://dev.skcserver.de/dns323/etch.tar. Diese Image wird automatisch von dem fun_plug_etch augepackt und mit chroot aktiviert. Damit ein Zugang zu Debian vorhanden ist, wird chroot mit /mnt/HD_a2/etch/linuxrc aufgerufen. In linuxrc wird zum Beispiel der SSH-Dämon aufgerufen. Das Archiv wird nur ausgepackt, wenn das Verzeichnis etch noch nicht vorhanden ist. Daher kann vorher /mnt/HD_a2/etch/linuxrc nicht angelegt werden. Hierfür ist in fun_plug_etch integriert, dass /mnt/HD_a2/linuxrc.etch nach /mnt/HD_a2/etch/linuxrc kopiert wird, falls die /mnt/HD_a2/linuxrc.etch neuer ist. In linuxrc.etch wird der SSH-Dämon gestartet, allerdings ist zum einen der SSH-Dämon in dem kleinen Debian-Image noch nicht enthalten, zum anderen hat root kein Kennwort, so dass man sich nicht anmelden könnte. Daher muss einmalig chroot "von Hand" aufgerufen werden, um den SSH-Dämon zu installieren und ein Kennwort für root in der chroot Umgebung zu setzen.

  • Speichern von http://dev.skcserver.de/dns323/etch.tar nach \\DNS-323\Volume_1
  • Speichern von fun_plug_etch nach \\DNS-323\Volume_1
  • Speichern von linuxrc.etch nach \\DNS-323\Volume_1
  • Überschreiben von \\DNS-323\Volume_1\fun_plug mit fun_plug4telnetetch
  • Neustart
  • Verbinden mit Telnet
    • cd /mnt/HD_a2
    • ./lnx_bin/busybox3 chroot etch
    • apt-get update ausführen (dieser Schritt kann auch weggelassen werden, er soll nur den nächsten plausibel machen, da er die Warnung W: There is no public key available for the following key IDs: B5D0C804ADB11277)
    • apt-key advanced --keyserver subkeys.pgp.net --recv-keys B5D0C804ADB11277 ausführen
    • apt-get update ausführen
    • apt-get install openssh-server ausführen
    • passwd
      • Kennwort eingeben und wiederholen
  • Löschen von \\DNS-323\Volume_1\fun_plug_etch.lock
  • Neustart
  • nach erfolgreichem Test
    • Löschen von \\DNS-323\Volume_1\fun_plug_etch.lock
    • Kopieren von \\DNS-323\Volume_1\fun_plug_etch nach \\DNS-323\Volume_1\fun_plug_etch.unlock

Das DNS-323-Gerät in diesem Zustand ist weiterhin von allen, die mit Telnet eine Verbindung aufbauen können als "root" benutzbar! Daher sollte unbedingt die unter root-Kennwort beschriebene Sicherung erfolgen.

Wie bereits unter Telnet-Zugriff erwähnt, hat die Absicherung dieses Telnet-Zugangs mit einem Kennwort für root bei mir nicht funktioniert.

fun_plug Paket

Unter http://www.inreto.de/dns323/fun-plug/0.5/ gibt es ein umfangreiches fun_plug Paket mit diversen Werkzeugen, die dann unter dem Telnet-Zugriff zur Verfügung stehen. Die Installation wird hier mit Verwendung von fpe.sh beschrieben. Unter http://wiki.dns323.info/howto:ffp steht eine allgemeine Beschreibung.

  • Speichern von fun_plug.tgz nach \\DNS-323\Volume_1
  • Speichern von fun_plug_inreto nach \\DNS-323\Volume_1
  • Überschreiben von \\DNS-323\Volume_1\fun_plug mit fun_plug4etchinreto
  • Neustart
  • nach erfolgreichem Test
    • Löschen von \\DNS-323\Volume_1\fun_plug_inreto.lock
    • Kopieren von \\DNS-323\Volume_1\fun_plug_inreto nach \\DNS-323\Volume_1\fun_plug_inreto.unlock

Das DNS-323-Gerät in diesem Zustand ist von allen, die mit Telnet eine Verbindung aufbauen können als "root" benutzbar! Daher sollte unbedingt die unter root-Kennwort beschriebene Sicherung erfolgen.

root Kennwort

Hier wird die Absicherung des Telnet-Zugriffs für das fun_plug-Paket beschrieben.

Der Telnet-Dämon wird mit sh gestartet und nicht mit login, daher ist man sofort als root auf dem System. Da für root kein Kennwort vorhanden ist, nützt es auch nichts, den Telnet-Dämon mit login zu starten: In diesem Fall kann man sich nur noch mit anderen Benutzern anmelden. Um root abzusichern , muss pwconv ausgeführt werden, um etc/shadow zu aktualisieren, ein Kennwort gesetzt werden und die Shell geändert werde.

  • Verbinden mit Telnet
    • Aktualisierung von /etc/shadow mit pwconv
    • Setzen des Kennworts für root mit passwd
    • Ändern der Shell mit usermod -s /ffp/bin/sh root

Wenn die Shell nicht geändert wird, wird die Firmware-Shell /bin/sh gestartet. Diese erwartet einen Unlock-Code (5784468).

In diesem Zustand wird das Kennwort bei jedem Neustart wieder gelöscht, was den Zugriff verhindert. Vor dem dauerhaften Speichern des Kennworts ist es sinnvol, ein paar Prüfungen durch zu führen:
  • Verbinden mit Telnet
    • Prüfen der Kennwort-Dateien mit pwck
    • Prüfen der Gruppen-Dateien mit grpck

Warnungen über fehlenden home-Verzeichnisse und ungültige Gruppennamen können ignoriert werden. Jetzt werden die Änderungen ausporbiert und die Kennwort-Dateien in den Flash-Speicher gesichert:
  • Ausprobieren der Anmeldung mit login
  • nach erfolgreichem Test
    • Speichern der Kennwort-Dateien in den Flash-Speicher mit store-passwd.sh

Damit Telnet mit login gestartet wird, muss noch /ffp/start/telnetd.sh geändert werden. Von der Kommando-Zeile geht das so:
  • cd /ffp/start
  • sed -i '/flags/ s@^@#@' telnetd.sh

Nach einem Neustart muss man sich beim Telnet-Zugriff anmelden und kann dies mit root durchführen.

Samba

In der chroot Umgebung kann die aktuelle Samba-Version installiert werden. Der Start hierfür muss dann in /mnt/HD_a2/etc/linuxrc bzw. /linuxrc aus Sicht der chroot Umgebung eingefügt werden. Vorher muss in dem fun_plug Samba der Standard-Umgebung gestoppt werden. Hierfür wird der Aufruf stopsamba.sh in fun_plug vor dem Aufruf von fun_plug_etch (!) eingefügt:
#
# Stop Samba
#
${VOL1}/fpe.sh ${VOL1}/stopsamba.sh

Sonstiges

Damit nicht regelmäßig die Festplatte am schlafen gehindert wird, ist noch folgendes sinnvoll:
  • die Markierungszeitstempel von syslogd auszuschalten, hierfür ist die entsprechende Zeile in /etc/default/sysklogd wie folgt zu ändern:
    SYSLOGD="-m 0"
    und anschließend der syslogd mit /etc/init.d/sysklogd restart neu zu starten
  • cron.hourly deaktivieren, hierfür ist die entsprechende Zeile in /etc/crontab auszukommentieren, sonst erfolgt stündlich ein Eintrag in /var/log/syslog

ToDo

Installationen

  • Apache
  • TwonkyMedia
  • MediaTomb

-- LarsWith - 15,16,20-24 Sep 2007
-- LarsWith - 03 Oct 2007
-- LarsWith - 26,27,28 Apr 2008
Topic attachments
I AttachmentSorted ascending Action Size Date Who Comment
fpe.shsh fpe.sh manage 691 bytes 20 Sep 2007 - 17:25 LarsWith fun_plug executer
fun_plug_etchEXT fun_plug_etch manage 1 K 07 Feb 2009 - 06:16 LarsWith fun_plug chroot Debian etch
fun_plug_inretoEXT fun_plug_inreto manage 1 K 15 Feb 2009 - 12:02 LarsWith fun_plug inreto
fun_plug.tgztgz fun_plug.tgz manage 10 MB 06 Feb 2009 - 15:03 LarsWith fun_plug Paket
fun_plug4etchEXT fun_plug4etch manage 227 bytes 24 Sep 2007 - 16:55 LarsWith fun_plug etch (Telnet)
fun_plug4etchinretoEXT fun_plug4etchinreto manage 300 bytes 24 Sep 2007 - 18:00 LarsWith fun_plug etch, fun_plug-Paket
fun_plug4etchrootpwdinretoEXT fun_plug4etchrootpwdinreto manage 377 bytes 24 Sep 2007 - 18:05 LarsWith fun_plug etch, root-Kennwort, fun_plug-Paket
fun_plug4telnetEXT fun_plug4telnet manage 146 bytes 23 Sep 2007 - 15:17 LarsWith fun_plug Telnet
fun_plug4telnetetchEXT fun_plug4telnetetch manage 210 bytes 15 Feb 2009 - 10:40 LarsWith fun_plug telnet, etch
funplug-0.3.tar.gzgz funplug-0.3.tar.gz manage 1 MB 20 Sep 2007 - 18:15 LarsWith fun_plug Paket
linuxrc.etchetch linuxrc.etch manage 681 bytes 27 Apr 2008 - 17:25 LarsWith linuxrc etch (rsync auskommentiert)
root2shadow.shsh root2shadow.sh manage 52 bytes 28 Apr 2008 - 17:02 LarsWith auf Unix Zeilentrenner geändert
starttelnet.shsh starttelnet.sh manage 412 bytes 23 Sep 2007 - 15:23 LarsWith Start Telnet
stopsamba.shsh stopsamba.sh manage 20 bytes 28 Apr 2008 - 17:11 LarsWith Unix Zeilenumbrüche
utelnet-kit.tar.gzgz utelnet-kit.tar.gz manage 476 K 20 Sep 2007 - 17:36 LarsWith Telnet-Paket
Topic revision: r30 - 02 Nov 2015, UnknownUser
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback