[Openwrt項目開發筆記]系列文章傳送門:http://www.cnblogs.com/double-win/p/3888399.html
正文:
在上一節中,我們講述了如何在路由器上掛載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/
可以得到如下結果:
(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/ 謝謝!