正文:

在上一节中,我们讲述了如何在路由器上挂载U盘,以及如何通过改造U盘提升路由器的存储和数据处理能力。通过增加USB挂载,为我们后续进行智能家居构建提供了保障。

在本节中,我将简单介绍如何在路由器上建立网络文件共享服务。

一、为何要建立文件共享服务:

   在智能家居网络中,一个很重要的需求就是安全。当一个智能家居方案部署之后,用户往往最先考虑的也是安全问题。那么怎样进行安全管理呢?一种常用的解决方法是实时的监控传感器以及家电的状态,一旦发生异常,通过邮件、短信甚至打电话的方式通知用户。当用户接收到异常之后,往往需要确认出问题的地方,这时候就需要用到文件共享服务了。

  此外,当用户通过路由器进行BT脱机下载之后,不能直接在路由器上播放音视频文件,需要通过PC、手机、pad等设备进行访问。这时候也需要路由器提供文件共享服务。

二、什么是网络文件共享服务

  在了解如何搭建网络文件共享服务之前,我们有必要先了解什么是网络文件共享。本文所提到的“网络文件共享服务”是指一系列为分布在不同网络主机上的文件提供访问、修改、增加以及删除操作的服务集合。从功能上,我们可以简单地将这些服务分成两个部分,文件访问服务以及文件传输服务。

1. 文件传输服务

  文件传输服务是基于文件传输协议的,对于这么文绉绉的称呼有些人可能比较陌生,不过相信大家都听过其英文简称FTP(File Transfer Protocol)。该协议用于Internet上,控制文件的双向传输。

  优点:安全,可靠。

  缺点:上传下载每一个文件都需要鉴权操作,效率低。

2.文件访问服务

  准确来说呢,应该称为网络文件访问服务。该服务主要用于网络中不同主机对某一个主机上的文件进行访问和读取。常用的网络文件访问服务有NFS和Samba。

(1)NFS(Network File System)

  NFS是一种使用于分散式文件系统的协定。其功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。

  

  (图片摘自《鸟哥的Linux私房菜》NFS篇)

  NFS是一个独立的系统,对NFS进行访问和处理,需要通过NFS系统提供的RPC(Remote Procedure Call)操作。

  优点:集中存储数据,大大节省本地存储资源。相当于Linux下的网络邻居。

  缺点:安全性差,仅支持Linux,扩展性差。

(2)Samba

  在百度百科上的介绍极为精简:Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。

  那么什么又是“SMB协议”呢?SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务

  在Samba的官方网站上,有如下描述:Since 1992, Samba has provided secure, stable and fast file and print services for all clients using the SMB/CIFS protocol, such as all versions of DOS and Windows, OS/2, Linux and many others.

  从描述中我们可以看出,Samba与NFS在功能上是相仿的,不同点在于其跨平台性质,Samba支持DOS、Windows、OS/2,Linux以及其他平台访问。

  Tips: 今天特地尝试了一下,在没有取得root权限的Android手机上貌似无法使用Samba访问。如果有哪位亲,知道如何使用,请在回帖中指导指导~

 

3. Samba,Ftp以及NFS区别:

 

从跨平台角度说
samba和ftp都支持跨平台操作, 而nfs不支持windows平台

从挂载角度说, 
samba, nfs可以把远程目录挂载到本地目录上, 对用户是透明的. 而ftp则不行

从使用范围上说,
samba, nfs安全性比较差,最好是限定在局域网内.
而ftp则不同,其提供了鉴权机制,既可以面向内网, 也可以面向公网.

从面向对像来说,
三者都支持文件, 但samba还支持打印机, 以及作windows域管理器.

从性能的角度说,
Samba,nfs要优于Ftp。

 

  路由器作为智能家居的控制中心,其具有跨平台,跨网络的特性。而从上面的比较可以看出,单独使用Samba或者Ftp都不足以满足我们进行文件服务的目的。因此,在本项目中,我们通过搭建Samba和Ftp服务器,从而提供局域网与广域网文件共享服务。

 

三、如何在Openwrt系统中搭建Samba服务器

  我在搭建Samba服务器的时候,参考了http://www.openwrt.org.cn/bbs/forum.php?mod=viewthread&tid=4543&highlight=

  (1)安装Samba软件以及浏览器支持

opkg update
opkg install samba3
opkg install luci-app-samba


  (2)修改Samba template configuration文件(/etc/samba/smb.conf.template)


 

[global]
        netbios name = |NAME|
        workgroup = |WORKGROUP|
        server string = |DESCRIPTION|
        syslog =10
        encrypt passwords = true
        passdb backend = smbpasswd
        obey pam restrictions = yes
        socket options = TCP_NODELAY
        #unix charset = ISO-8859-1
        display charset = UTF-8    #添加字符集支持,允许中文
        unix charset = UTF-8
        dos charset = UTF-8
        preferred master = yes
        os level =20
        security = user
        guest accout = nobody
     #invalid users = root   #系统默认不允许root用户访问
        smb passwd file = /etc/samba/smbpasswd

 

  Tips: Samba服务器本身是无法解析openwrt UCI的。为了与Openwrt兼容,Samba提供了一个配置模版,允许用户进行简单的参数设置。

  在启动Samba服务器的时候,Samba会通过读取/etc/config/samba以及/etc/samba/smb.conf.template生成一个能够被Samba解析的临时配置文件/tmp/smb.conf,用于Samba服务器使用。  

  修改/etc/config/samba 文件,添加共享文件夹的访问权限:

 

config ‘samba’
  option ‘homes’ ’1′
  option ‘name’ ‘openwrt’
  option ‘description’ ‘nas’
  option ‘workgroup’ ‘openwrt’

config ‘sambashare’
  option ‘read_only’ ‘no’        
  option ‘create_mask’ ’0700′
  option ‘dir_mask’ ’0700′
  option ‘guest_ok’ ‘yes’
  option ‘path’ ‘/mnt/sda3’     # 我本人USB有三个分区,第三个分区用于Samba、FTP以及Transmission 脱机下载目录
  option ‘name’ ‘root’

 

(3)给Samba创建用户访问:


使用如下命令给访问Samba服务器的用户创建密码,建议创建新的密码,不要 smbpasswd root XXXX #为root用户创建Samba访问密码XXXX。如果成功创建好的密码,会存放在 /etc/samba/smbpasswd 文件下


Tips:从Samba创建密码的方式可以看出,密码是在本地有存储的。当用户忘记密码时,可以提请Admin用户(root)进行密码修改。

(4) 启动Samba服务

/etc/init.d/samba restart     #重启Samba服务
/etc/init.d/samba enable     #允许开机自启动

(5)通过终端访问 

  在web浏览器,或者文件浏览器地址栏输入:

file://192.168.1.1/

可以得到如下结果:

samba脱机 samba服务开启_文件传输

(6) 补充:通过Luci配置Samba

samba脱机 samba服务开启_服务器_02

 

四、如何在Openwrt系统中搭建vsFtp服务器

 相比于之前复杂的操作,vsFTP的安装则相当简单。参考http://www.wirelesser.net/index.php/tag/openwrt-vsftp/

(1)安装vsFTP,使用如下命令:

opkg update
opkg install vsftpd

(2) 配置/etc/vsftpd.conf

根据是否允许anonymous登录,选择不同的配置文件:

允许anonymous:

 

background=YES
listen=YES
chown_uploads=YES
chown_username=root
ftp_username=nobody
#enable anonymous user
anonymous_enable=YES
anon_upload_enable=YES
anon_root=/mnt/anonymous
anon_mkdir_write_enable=YES
anon_max_rate=512000
local_enable=YES
write_enable=YES
local_umask=022
check_shell=NO
local_root=/mnt
chroot_local_user=yes
accept_timeout=60
idle_session_timeout=300
max_clients=600
max_per_ip=5
#dirmessage_enable=YES
ftpd_banner=Welcome to vsFTP service.
session_support=NO
syslog_enable=YES

 

不允许匿名访问的话:

 

secure_chroot_dir=/mnt/sda3/ftpdir   #创建对应的文件夹
  ftp_username=root        #允许的用户名root 
  nopriv_user=root    
  background=YES
  listen=YES
  anonymous_enable=NO
  local_enable=YES
  write_enable=YES
  local_umask=022
  check_shell=NO
  dirmessage_enable=YES
  ftpd_banner=Welcome to vsFTP service.
  syslog_enable=YES
  max_clients=600
  max_per_ip=5
  accept_timeout=60    #设置连接超时

 

(4) 启动vsftpd服务

/etc/init.d/vsftpd restart     #重启vsftpd服务
/etc/init.d/vsftpd enable     #允许开机自启动

五、补充说明

  一般情况下,Samba文件共享服务是在局域网环境下使用的,这样较为安全。我们可以将Samba服务器挂载到本地文件系统中,用户可以将其当成系统的一个分区使用,简单而方便。

  对于ftp文件传输服务器来说,建议使用匿名访问机制,允许用户访问以及下载,限制用户的上传以及修改权限,这样更为安全。

 

---------------------------------------------------------------

预告:下一节将介绍DDNS安装