NAS Pionier: My Book World Edition II

2494 Wörter 12 Minuten Lesezeit

My Book World Edition II

Die My Book World Edition II (“White Light”) ist ein 2010 gebautes NAS von Western Digital, mit Gigabit Netzwerk, 128MB RAM sowie mit 1 (Modell “WDH1NC”) oder 2 Festplatten (Modell “WDH2NC”) mit jeweils 1TB oder 2TB Kapazität. Ich hatte hier ein Gerät zum Entsorgen, aber da das Teil in pre-Raspi-Zeiten sehr populär war hab ich zuvor noch ein bisserl damit rumgespielt… ;)

Bildmaterial

NAS…

…und Netzteil

Originaldokumentation

Via WayBackMachine ist die Produktseite abrufbar, und dort auch ein Quick-Installation-Guide.

Firmware

Überraschenderweise hat das Firmware-Update via Webinterface noch geklappt - ich hätte eigentlich erwartet dass hier WD das Update-Portal bereits abgedreht hat.

Im Endeffekt ruft das NAS die URL http://websupport.wdc.com/firmware/list.asp?type=WDH2NC&fw=01.00.16 auf und erhält in einem minimalistischen HTML Dokument die URL zur aktuellen Firmware (01.02.14).

<html>
<head>
<title>WD My Book World Edition - Firmware Updates</title>
</head>
<body>

<a href="http://download.wdc.com/nas/wdhxnc-01.02.14.img">upgrade file</a>

</body>
</html>

Ich habe ein paar bekannte Firmware-Versionen probiert, im Endeffekt konnte ich mit Stand 03/2021 noch 3 Firmware Versionen herunterladen: 01.02.14, 01.02.12 und 01.02.06.

Leider sind die 01.01.xx-Versionen nicht downloadbar (der initiale Release der Edition II war mit Firmware 01.00.16) - im Gegensatz zum GPL Sourcecode, der runter bis zu 01.00.02 downloadbar ist. Das Changelog ist bis 01.02.14 verfügbar.

Übrigens hat der ursprüngliche Hack für die Aktivierung vom root Account von Martin Hinner auch über dieses Firmware-Update funktioniert - nur wurde der NAS im HTML anstelle einer offiziellen URL ein anderes Skript untergejubelt.

Software

SSH

Während man in den ersteren Modellen den SSH-Zugang via Hack aktivieren musste kann man bei den aktuelleren Firmware-Versionen dies via Webinterface erledigen. Leider ist die SSH Verschlüsselung derart veraltet dass man bei einem modernen System die verwendeten Algorithmen manuell aktivieren muss. Das initiale Passwort für den root User lautet (wie auch im Webinterface angegeben) welc0me.

ssh -l root 10.0.0.238

Unable to negotiate with 10.0.0.238 port 22: no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
ssh -l root -oKexAlgorithms=+diffie-hellman-group1-sha1 10.0.0.238

World Book Modell WDH2NC (WXLXN) mit Kernel 2.6.24.4 und Firmware 01.02.14

Das System basiert auf einem OXE810SE/OXE810DSE SoC Chop von PLX Technology (2014 von Broadcom geschluckt).

~ # uname -a
Linux nas 2.6.24.4 #1 Thu Apr 1 16:43:58 CST 2010 armv5tejl unknown

~ # cat /proc/cpuinfo 
Processor	: ARM926EJ-S rev 5 (v5l)
BogoMIPS	: 183.09
Features	: swp half thumb fastmult edsp java 
CPU implementer	: 0x41
CPU architecture: 5TEJ
CPU variant	: 0x0
CPU part	: 0x926
CPU revision	: 5
Cache type	: write-back
Cache clean	: cp15 c7 ops
Cache lockdown	: format C
Cache format	: Harvard
I size		: 32768
I assoc		: 4
I line length	: 32
I sets		: 256
D size		: 32768
D assoc		: 4
D line length	: 32
D sets		: 256

Hardware	: Oxsemi NAS
Revision	: 0000
Serial		: 00000b753XXXXXXX

~ # cat /etc/model* 
WXLXN
WDH2NC

~ # cat /etc/version
01.02.14

~ # free
              total         used         free       shared      buffers
  Mem:       126828        72112        54716            0         3040
 Swap:       256888            0       256888
Total:       383716        72112       311604

Harddisks

In dem vorhandenen Gerät sind noch die Originalfestplatten verbaut.

~ # hdparm -I /dev/sda
Device Model:     WDC WD10EADS-11M2B2
Serial Number:    WD-WMAV52XXXXXX
Firmware Version: 80.00A80

~ # hdparm -I /dev/sdb
Device Model:     WDC WD10EADS-11M2B2
Serial Number:    WD-WMAV52XXXXXX
Firmware Version: 80.00A80

Ein Austausch der Platten ist möglich, allerdings sollte man bei den Ersatzplatten aufpassen dass sie auch vom Gerät unterstützt werden. Eine Skriptsammlung zur Installation der Firmware auf einer nackten Festplatte findet sich hier

MAC

~ # ip addr
1: lo: <LOOPBACK,UP,10000> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:90:a9:70:c9:39 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.238/24 brd 10.0.0.255 scope global eth0

Die MAC-Adresse mit Prefix 00:90:A9 ist in den Sektoren 274 und 32416 auf der Festplatte gespeichert, entsprechende Skripts zum Auslesen bzw. Schreiben finden sich unter /usr/local/wdc/uboot_env/. Das Setzen einer neuen MAC sollte mit /usr/local/wdc/uboot_env/mac_set.sh 00:90:A9:01:02:03 && reboot erledigt sein.

Shares und RAM-Drive

~ # mount
/dev/root on / type ext3 (rw,noatime,data=ordered)
proc on /proc type proc (rw)
sys on /sys type sysfs (rw)
/dev/pts on /dev/pts type devpts (rw)
securityfs on /sys/kernel/security type securityfs (rw)
/dev/md3 on /var type ext3 (rw,noatime,data=ordered)
/dev/ram0 on /mnt/ram type tmpfs (rw)
/dev/md2 on /DataVolume type xfs (rw,noatime,usrquota)
/dev/md2 on /shares/Download type xfs (rw,noatime,usrquota)
/dev/md2 on /shares/Public type xfs (rw,noatime,usrquota)
/dev/md2 on /shares/Data type xfs (rw,noatime,usrquota)
/dev/md2 on /shares/Media type xfs (rw,noatime,usrquota)

~ # df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/md0                  1.8G    158.1M      1.6G   9% /
/dev/md3                949.6M    120.5M    780.8M  13% /var
/dev/ram0                61.9M     16.0k     61.9M   0% /mnt/ram
/dev/md2                928.3G     19.4M    928.3G   0% /DataVolume
/dev/md2                928.3G     19.4M    928.3G   0% /shares/Download
/dev/md2                928.3G     19.4M    928.3G   0% /shares/Public
/dev/md2                928.3G     19.4M    928.3G   0% /shares/Data
/dev/md2                928.3G     19.4M    928.3G   0% /shares/Media

~ # ls /dev/ram*
/dev/ram   /dev/ram0  /dev/ram1  /dev/ram2  /dev/ram3

Nicht nur der Root-Zugang wurde seitens WD von der Community übernommen: in älteren Blog- bzw. Foreneinträgen (z.B. kyyhkynen.net) sind Optimierungen angeführt die damals ungenutzten RAM-Drives für die Auslagerung von diversen Dateien zu nutzen und so ein Spin-Off der der Harddisks zu ermöglichen - offensichtlich wurde das in der letzten Firmware-Version bereits werkseitig optimiert oder hat möglicherweise eine alte 10 Jahre alte Optimierung das Firmware-Upgrade überlebt? (z.B. überleben Inhalte im /root und /opt das Upgrade).

Samba 3.0.34

Leider unterstützt das NAS nur das extrem sicherheitskritische SMBv1 Protokoll. Microsoft deaktivierte die Untersütztung von SMBv1 mit Windows 10 1709, Apple 2 Jahre später mit macOS Catalina. Out-of-the-Box ist das NAS somit nutzlos, kein aktuelles Endgerät will freiwillig damit kommunizieren.

Ein Blick auf die installierte Samba-Version zeigt auch dass hier der erste Handlungsbedarf ist: ein Upgrade von Samba 3.0.34 müsste uns auch SMBv2 bringen und das NAS etwas beschleunigen.

~ # smbstatus | head -n 2

Samba version 3.0.34

PHP 4.4.2

Das Webinterface der WD World Book Edition ist interessanterweise in PHP geschrieben. Der in keiner Weise verschlüsselte oder entstellte Quellcode (Zend Guard o.ä.) findet sich im Verzeichnis /proto/SxM_webui/ und würde sich sicher gut für eine Analyse der Funktionsweise des NAS-Systems eignen. Sicherlich findet sich dort auch die eine oder andere Sicherheitslücke ;). Das NAS selbst wurde 2010 hergestellt, das Web-Interface datiert offensichtlich von 2004 und wurde von Wistron, einem taiwanesischem OEM Auftragshersteller ähnlich Foxconn und Spin-Off von Acer, programmiert.

~ # php -v
PHP 4.4.2 (cgi) (built: Oct 13 2009 17:32:17)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies

~ # head -n 7 /proto/SxM_webui/index.php  
#!/usr/bin/php
<?php

/**
 * @version $Id: index.php,v 1.23.4.7.2.4 2009/09/10 09:20:36 weber Exp $
 * @author Wiley Li <wileyli@wistron.com.tw>
 * @copyright Copyright (c) 2004 Wistron Corporation.

Leds (“White-Light”)

Die World Edition aka “White-Light” hat an der Front 6 Status LEDs, die z.B. den Kapazitätsstand des NAS anzeigen können. Die LEDs können via /sys/class/leds/oxnas-wd810-leds einfach gesteuert werden (ac=activity, ca=capacity, st=state, sw=switch). Eine schöne Übersicht über die Werte findet sich hier, inklusive eines Beispiels zum Abschalten mittels Cronjob in der Nacht.

~ # echo 2 > /sys/class/leds/oxnas-wd810-leds\:st/brightness
~ # echo 3 > /sys/class/leds/oxnas-wd810-leds\:st/brightness    
~ # echo 7 > /sys/class/leds/oxnas-wd810-leds\:st/brightness
~ # echo 252 > /sys/class/leds/oxnas-wd810-leds\:sw/brightness

Debian

Das geschickteste wäre eigentlich - neben der Entsorgung des Geräts - statt des WD Systems einfach Debian Linux für ARM zu installieren. Sowohl Lenny als auch Squeeze sollten sich installieren lassen (z.B. Debian-on-Mybook-White-Light) und uns möglicherweise Samba4 ermöglichen, aber wenn man ein Debian Gerät betreiben will kann man sich eigentlich gleich einen Raspi anschaffen ;)

Optimierungen

Optware

Via Optware haben wir die bequeme Möglichkeit, ein paar Tools auf dem NAS zu installieren. Der Stand von Optware ist ~2014, möglicherweise würden die Nachfolgerprojekte Optware-NG oder Entware auch funktionieren und uns neuere Versionen bescheren.

wget http://mybookworld.wikidot.com/local--files/optware/setup-whitelight.sh
sh setup-whitelight.sh
echo "export PATH=$PATH:/opt/bin:/opt/sbin" >> /root/.bashrc
echo "export PATH=$PATH:/opt/bin:/opt/sbin" >> /etc/profile
/opt/bin/ipkg update

Wir verwenden das Repo http://ipkg.nslu2-linux.org/feeds/optware/cs05q1armel/cross/stable/ bzw das idente(?) http://ipkg.nslu2-linux.org/feeds/optware/cs05q1armel/cross/unstable/.

~ # /opt/bin/ipkg install autossh bash bash-completion bzip2 gconv-modules grep gzip htop iftop iperf less lsof mc mlocate nano ncdu openssh screen tmux unzip
~ # /opt/bin/updatedb
~ # /opt/bin/ipkg list_installed
adduser - 1.10.3-1 - a multi-call binary for login and user account administration
autossh - 1.4b-1 - Automatically restart SSH sessions and tunnels.
bash - 3.2.54-1 - A bourne style shell
bash-completion - 1.2-1 - Programmable completion for the bash shell
bzip2 - 1.0.6-1 - Very high-quality data compression program
e2fslibs - 1.40.3-1 - Ext2 Filesystem Libraries
gconv-modules - 2.3.4-1 - Provides gconv modules missing from the firmware.  These are used by glibc iconv() implementation.
glib - 2.20.4-1 - The GLib library of C routines.
grep - 2.12-1 - Global regular expression parser
gzip - 1.5-1 - GNU Zip data compression program
htop - 1.0.1-2 - An interactive process viewer.
iftop - 0.17-4 - Display bandwidth usage on an interface by host
iperf - 2.0.4-1 - A tool for measuring TCP and UDP bandwidth performance.
less - 444-1 - Less file browser
libevent - 2.0.20-1 - libevent to implement an event loop
libpcap - 1.3.0-1 - PCAP Library
libstdc++ - 6.0.3-6 - Standard C++ library, needed for dynamically linked C++ programs
lsof - 4.82-1 - LiSt Open Files - a diagnostic tool.
mc - 4.7.5.5-1 - Midnight Commander File Manager
mlocate - 0.24-1 - A merginging locate program to find files fast
nano - 2.2.6-1 - A pico like editor
ncdu - 1.7-1 - NCurses Disk Usage.
ncurses - 5.7-3 - NCurses libraries
ncursesw - 5.7-2 - NCurses libraries with wide char support
openssh - 5.9p1-1 - a FREE version of the SSH protocol suite of network connectivity tools.
openssl - 0.9.8v-2 - Openssl provides the ssl implementation in libraries libcrypto and libssl, and is needed by many other applications and librari
pcre - 8.31-1 - Perl-compatible regular expression library
readline - 6.1-2 - The GNU Readline library provides a set of functions for use by applications that allow users to edit command lines as they are
screen - 4.0.3-2 - A screen manager that supports multiple logins on single terminal
slang - 2.2.3-2 - S-Lang is a multi-platform library designed to allow a developer to create robust multi-platform software.
termcap - 1.3.1-2 - Terminal emulation library
tmux - 1.6-1 - A terminal multiplexer.
unzip - 6.0-2 - A (de)compression library for the ZIP format
zlib - 1.2.5-1 - zlib is a library implementing the 'deflate' compression system.
Successfully terminated.

Wichtig zu wissen ist, dass Optware-Binaries nur via Pfad aufgerufen werden wenn sie weder im Pfad vorher existieren noch in Busybox (vgl. grep vs /opt/bin/grep -V).

iperf: auf einem Gigabit-Interface erreicht das NAS einen Durchsatz von ca. 300 Mbits/sec. Während wir hier ~37 Megabyte/sec vorliegen haben sprechen andere Quellen im Internet von realen Werten im NAS-Betrieb von ~5 MByte pro Sekunde - Samba dürfte hier die CPU so lahmlegen dass einfach nicht mehr geht.

Mionet und Fernzugriff

Auf dem NAS ist MioNet 4.3.0.8 installiert. MioNet bzw. nach dem Aufkauf von Hersteller Senvid 2007 nun “WD Anywhere Access” war ein Dienst von Western Digital um einen Remote Zugriff auf das NAS zu ermöglichen und wurde 2016 stillgelegt. Mionet kann in der Weboberfläche unter Advanced > Network > Remote Access ganz einfach deaktiviert werden (“Enable MioNet on Startup”).

Um dennoch einen Wartungszugriff zu haben installiere ich einen “Reverse SSH Tunnel” mittels autossh und einem virtuellen Server (VPS) im Internet.

Einen (passwortlosen) SSH Key zu generieren dauert auf der CPU etwas länger. Danach händisch auf die VPS in die authoried_keys kopiert - sorry, ssh-copy-id hat das NAS nicht ;) - und getestet.

~ # ssh-keygen -t rsa -b 4096
...
~ # ssh -l anyuser secret.example.com
Linux secret 4.19.0-14-amd64 #1 SMP Debian 4.19.171-2 (2021-01-30) x86_64
...
~ # autossh -M 17778 -i ~/.ssh/id_rsa  -R "17123:localhost:22" -NT anyuser@secret.example.com
anyuser@secret.example.com:~$ ssh -l root -p 17123 localhost
root@localhost's password: 

~ # hostname
nas

Da das wunderbar funktioniert ändern wir aus Sicherheitsgründen dringenst das Default-Passwort von root (“welc0me”) und installieren danach einen rudimentären Dienst zum automatisierten Start von autossh.

cat <<'EOF' >/etc/init.d/S99autossh
#!/bin/sh
umask 011

case "$1" in
  start)
    echo "[`date`] Starting..." >>/var/log/autossh.log
    AUTOSSH_LOGFILE=/var/log/autossh.log /opt/bin/autossh -M 17124 -i /root/.ssh/id_rsa  -R "17123:localhost:22" -NT anyuser@secret.example.com &
	  ;;
  stop)
    echo "[`date`] Stopping..." >>/var/log/autossh.log
    killall autossh
	  ;;
  restart)
	  ;;
  status)
    ps aux | /opt/bin/grep autossh
	  ;;
  *)
	  echo "Usage: $0 {start|stop|restart|status}"
	  exit 1
esac
exit $?
EOF
chmod 755 /etc/init.d/S99autossh
~ # /etc/init.d/S99autossh start
~ # /etc/init.d/S99autossh stop 
~ # cat /var/log/autossh.log

Medien Server: TwonkyMedia, minidlna

Im Webinterface deaktivieren wir unter Medien > iTunes den “iTunes” Dienst. Mit dem “Medienserver” geht das leider nicht - der Button leitet zum Webinterface von “TwonkyMedia Server” weiter - der in Version 5.1.9 installiert ist. Ein Upgrade auf einen neueren Twonky-Server ist zwar möglich, allerdings muss man eine Lizenz kaufen (die OEM Lizenz von WD berechtigt leider nicht zu einem Update auf Twonky 6+) - die Kosten sind dzt. $19,95 und via twonky.com erhältlich.

Nun, einerseits sollte man wissen das Twonky laut Wikipedia eine bewegte Geschichte hinter sich hat und der letzte Vertrieb 10/2018 geschlossen hat, und andererseits: ich will den Twonky eh nicht verwenden und lieber abdrehen. Man könnte ihn ja später z.B. durch minidlna/ReadyMedia ersetzen, wobei ich bezweifle dass das schwache System gut dafür nutzbar ist. Besser ein Raspi 4 mit Kodi, Plex, o.ä.

~ # /etc/init.d/S97twonkyserver stop
~ # mv /etc/init.d/S97twonkyserver /etc/init.d/_S97twonkyserver
~ # /opt/bin/ipkg list | grep minidlna
minidlna - cvs20090413-2 - The MiniDLNA daemon is an UPnP-A/V and DLNA service which serves multimedia content to compatible clients on the network.

Samba

Samba 3.0.34 ist schon wirklich alt. Ein Upgrade auf eine neuere Samba-Version sollte uns nicht nur einen kleinen Speedboost geben sondern auch das dringend benötigte SMBv2 Protokoll. Via Optware haben wir die Versionen 3.2.15, Samba 3.4.17, 3.5.22 und 3.6.23 verfügbar.

~ # /opt/bin/ipkg list | grep samba
samba - 3.2.15-5 - Samba suite provides file and print services to SMB/CIFS clients.
samba2 - 2.2.12-4 - Lightweight Samba suite provides file and print services to SMB/CIFS clients.
samba3-dev - 3.2.15-5 - development files for samba3
samba3-swat - 3.2.15-5 - the Samba Web Admin Tool for samba3
samba34 - 3.4.17-1 - Samba suite provides file and print services to SMB/CIFS clients. This is a newer version.
samba34-dev - 3.4.17-1 - development files for samba34
samba34-swat - 3.4.17-1 - the Samba Web Admin Tool for samba34
samba35 - 3.5.22-1 - Samba suite provides file and print services to SMB/CIFS clients. This is a newer version.
samba35-dev - 3.5.22-1 - development files for samba35
samba35-swat - 3.5.22-1 - the Samba Web Admin Tool for samba35
samba36 - 3.6.23-1 - Samba suite provides file and print services to SMB/CIFS clients. This is a newer version.
samba36-dev - 3.6.23-1 - development files for samba36
samba36-swat - 3.6.23-1 - the Samba Web Admin Tool for samba36

Resourcen im Netz

Je mehr ich über die WD MyBook World Edition II im Internet suche desto mehr alte Resourcen finde ich - leider überwiegend via WayBackMachine.

Ein wichtiger Fakt ist dass man hier besonders Acht geben muss um welche Hardware-Revision es sich handelt (“Blue Ring” vs “White Light”) oder um welche Firmware (zB “lighthttp” vs “mini_httpd”).