在上一節中,我們講述了如何在路由器上挂載U盤,以及如何通過改造U盤提升路由器的存儲和資料處理能力。通過增加USB挂載,為我們後續進行智能家居建構提供了保障。
在本節中,我将簡單介紹如何在路由器上建立網絡檔案共享服務。
[Openwrt項目開發筆記]系列文章傳送門:http://www.cnblogs.com/double-win/p/3888399.html
正文:
一、為何要建立檔案共享服務:
在智能家居網絡中,一個很重要的需求就是安全。當一個智能家居方案部署之後,使用者往往最先考慮的也是安全問題。那麼怎樣進行安全管理呢?一種常用的解決方法是實時的監控傳感器以及家電的狀态,一旦發生異常,通過郵件、短信甚至打電話的方式通知使用者。當使用者接收到異常之後,往往需要确認出問題的地方,這時候就需要用到檔案共享服務了。
此外,當使用者通過路由器進行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/
可以得到如下結果:
(6) 補充:通過Luci配置Samba
四、如何在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安裝
轉載請注明出處: http://www.cnblogs.com/double-win/ 謝謝!