In this post I show how you can do a remote shutdown via the LAN, without hard coding your admin password. Since this tweak could be misused for a remote DOS attack, make sure you put the CH3WNAS behind a NAT router.
Busybox (activated with the fun_plug script) provides a powerful nc (netcat) command that also has a -l listen mode. This listen-mode is ideal for simple lightweight client/server communication.
Steps for enabling remote shutdown from a script:
- make sure telnet (through busybox) is enabled: http://www.aroundmyroom.com/2008/01/03/ch3wnas-enabling-telnet/
- create a shutdown_listener.sh script (e.g. with ftp) on the root of HD_a2 with following contents:
while true
do
/mnt/HD_a2/busybox nc -l -p 1234 | while read line
do
if [ "$line" -eq "0" ]
then
touch /tmp/shutdown
fi
done
done
This scripts on the NAS listens in a loop on port 1234. When it reads a "0" it puts a /tmp/shutdown file that triggers the immediate poweroff. - add the following line to the fun_plug script and restart the CH3WNAS:
/mnt/HD_a2/shutdown_listener.sh & - from the client-side it's enough to create a nc-script that sends a "0" to the NAS.
on Ubuntu I created a Launcher on my desktop with following command :
bash -c "echo 0 | nc 192.168.1.30 1234 -w 1"
If you're stuck with Windows, look out for a Windows version of netcat (nc) and put similar commands in a shortcut (cmd /c "..."). Or better, upgrade to Ubuntu :-)
Not that it matters much here, but note that "-eq" is a numerical (integer) match, while you probably want to do a string match using "=": if [ "$line" = "0" ]
ReplyDeleteI have an idea that *might* make for a simpler solution (I don't have this device to try it out on): If whatever checks for /tmp/shutdown actually checks if /tmp/shutdown is a file (for instance using test -f), you can create a soft link /tmp/shutdown that points to a non-existing file in a shared folder. test -f will try to follow the link and return "false". Once someone creates the file in the shared folder, -f will return true. So no need for netcat, just create the "magic" file to shut it down.
So in the startup script (fun_plug) add rm /mnt/HDXX/your-shared-folder/shutmedownmagic; ln -s /tmp/shutdown /mnt/HDXX/your-shared-folder/shutmedownmagic
Warning: If the link to a non-existing file still triggers the shutdown, it can be tricky to get rid of that line in fun_plug, so try it out by hand before adding it to fun_plug!
Cheers, Tormod