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