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):
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