RSS| 首页| 山顶道| 布珞阁¹| GoodUI| 土产| 关于

给MyBook WD网络硬盘加上个门户
2009.07.7 20:57 bruce:

hack了半天,还是因为linux不熟造成,还好有google

参考 将西数WD MY BOOK网络硬盘改造成个人数据服务器 文件共享、FTP、Subversion

要打造自己的NAS,当然不必要再多开以前的lighttpd了,用跑svn的apache就够了。

要实现一些设备的控制功能,如:取硬盘温度、重启、关机、开LED灯、关LED灯

都只能自己去hack了。

因为apache没开php mysql什么的,所以只能用cgi,httpd.conf中配置好ScriptAlias中的cgi-bin目录

建shell脚本,依然要注意目录权限,和apache用户daemon的可访问性


实现1:显示硬盘温度

参考了lighttpd里sw的admin.php中的实现,sudo /usr/sbin/smartctl -d ata -A /dev/sda|grep Tempera|cut -c 88-90

新建cgi temp.sh

#!/bin/sh

echo “Content-type: text/plain; charset=iso-8859-1″

echo
echo `sudo /usr/sbin/smartctl -d ata -A /dev/sda|grep Tempera|cut -c 88-90`

sudo列表中没有apache的后台用户

编辑/etc/sudoers

加一行 daemon ALL=(root) NOPASSWD:/usr/sbin/smartctl

允许daemon用户权限执行smartctl

在首页index.html中嵌入个iframe,显示这个脚本


实现2:实现重启和关机功能

新建一个 run.sh的cgi脚本

通过get时带的参数来执行命令,

case $QUERY_STRING in
 reboot)
  reboot
  ;;
 poweroff)
  sudo /sbin/poweroff
  ;;
esac

这里暴露出了盒子比较严重的安全问题,

因为所有用户,都可以通过reboot服务器,不需要什么root权限

poweroff则需要sudo运行,cgi中poweroff命令一直不成功,也不返回错误。

后来折腾半天,是因为sudo列表中没有apache的后台用户

编辑/etc/sudoers

加一行 daemon ALL=(root) NOPASSWD:/sbin/poweroff,/usr/sbin/smartctl

允许daemon用户权限执行poweroff

通过url  /cgi-bin/run.sh?reboot 或 ?poweroff 就可以重启和关机了


实现3:实现开关LED功能

防止晚上影响睡觉,也是参考了lighttpd里sw的admin.php中的实现

也用刚才的run.sh,参数给on 和 off来控制灯亮和熄

/sys/class/leds/wdc-leds:power/brightness 文件是一个通道文件,修改这个文件,设备读取变化后可以设置灯的强度(0-255)

我们设置255表示亮,设置0表示熄灭

开灯指令 echo 256 > /sys/class/leds/wdc-leds:power/brightness

熄灯指令 echo 0 > /sys/class/leds/wdc-leds:power/brightness


大功告成,我的NAS就更容易操作了

分类  日经| 暂无评论


垃圾太厉害了
说几句吧






*注意: 回复可能需要审查.您不必重复提交.