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就更容易操作了

