王樂欣
(武漢郵電科學(xué)研究院,湖北武漢 430073)
當(dāng)今,國內(nèi)NAS(Network Attached Storage)市場主要被臺灣企業(yè)占據(jù)[1],市場上的NAS 存儲系統(tǒng)專業(yè)性強(qiáng)、存儲容量大,未能在家庭中廣泛使用。家用NAS 的普及并不理想,一方面它存在專業(yè)操作性太強(qiáng)、價格高昂、能耗大等問題,另一方面人們更熱衷于通過硬盤和網(wǎng)盤備份。硬盤僅能滿足用戶的數(shù)據(jù)存儲需求,網(wǎng)盤雖然具備強(qiáng)大的文件管理與共享功能,但是用戶數(shù)據(jù)最終存儲于服務(wù)器商,存在一定的風(fēng)險,可能會導(dǎo)致用戶數(shù)據(jù)泄露或者丟失[2-3]。
該文設(shè)計和實現(xiàn)的局域網(wǎng)下基于智能路由器的NAS 應(yīng)用系統(tǒng),以“傻瓜式”、輕量級、低成本為核心進(jìn)行開發(fā),普通用戶訪問系統(tǒng)地址,輸入賬號和密碼即可進(jìn)行文件操作,用戶數(shù)據(jù)通過路由器存儲在本地。系統(tǒng)具備文件管理與共享的功能,解決了家庭用戶數(shù)據(jù)存儲、共享問題。所開發(fā)系統(tǒng)基于家庭已有智能路由器設(shè)備,減輕了設(shè)備冗余,減少了用戶多設(shè)備開銷,使用簡單,擴(kuò)展靈活。
系統(tǒng)整體框架如圖1 所示,路由操作系統(tǒng)為Linux,利用其擴(kuò)展USB 接口掛載存儲設(shè)備作為存儲介質(zhì),部署Samba 服務(wù),連接路由器與應(yīng)用系統(tǒng)之間的通信。系統(tǒng)采用B/S 結(jié)構(gòu),用戶在瀏覽器中輸入系統(tǒng)地址,登錄成功后即可上傳文件或獲取服務(wù)器數(shù)據(jù),其共分為三層:瀏覽器、Web 服務(wù)器和數(shù)據(jù)庫服務(wù)器[4]。
根據(jù)家庭用戶對數(shù)據(jù)存儲與分享的日常需求,系統(tǒng)需要實現(xiàn)數(shù)據(jù)上傳、下載、分享、刪除等功能。為了進(jìn)一步方便用戶管理文件,系統(tǒng)增加分類、排序、收藏、搜索等功能,同時用戶也可以查看文件被分享、收藏和下載的次數(shù)。系統(tǒng)功能模塊設(shè)計如圖2所示。
數(shù)據(jù)庫設(shè)計的合理與否,直接影響到系統(tǒng)的效能及拓展性[5]。所構(gòu)建系統(tǒng),主要使用數(shù)據(jù)庫存儲以下幾方面的數(shù)據(jù)。
用戶信息表(users):用于存放用戶信息。包括用戶ID(uid)、用戶名(name)、密碼(password)、注冊時間(time)以及最后一次退出系統(tǒng)的時間(lastLogin Time)、token、用戶文件數(shù)量(fileNumbers)、文件大?。╢ilesize)。
總文件表(allInfo):用于存放所有上傳文件信息。包括uid、文件名(filename)、path(存儲地址)、mime、文件類型(type)、size、上傳時間。
共享文件表(share):用于存放共享文件信息。包括分享者uid、type、文件在allInfo 中的id、鏈接密碼(可選)、分享時間、過期時間(可選)。
回收表(recycle):用于存放被刪除文件信息。包括文件在文件信息表中的id、被刪除文件的用戶id、filename、path、type、文件大小、刪除時間。
文件信息表(info):用于存放文件信息、hash、type、path、md5、filesize,上傳多次的重復(fù)文件只保存一條信息。
收藏表(collection):用于存放uid、文件在allInfo中的id、path、filesize 和收藏時間。
系統(tǒng)采用B/S 架構(gòu)進(jìn)行設(shè)計,用戶不需要安裝客戶端,通過瀏覽器即可操作。采用Xampp 集成環(huán)境,不需要單獨(dú)搭建Apache、MySQL、PHP 和PERL。項目采用Navicat 數(shù)據(jù)庫管理工具,Navicat 自帶圖形用戶界面,數(shù)據(jù)庫的創(chuàng)建、管理簡易快捷,如用戶權(quán)限設(shè)置、數(shù)據(jù)庫備份或移植,數(shù)據(jù)查看也更直觀[6-7]。后臺業(yè)務(wù)邏輯開發(fā)采用PHP 的ThinkPHP 框架,前端使用了Javascript、HTML、Ajax 等Web 編程技術(shù)。
客戶端和服務(wù)器之間的通信使用SMB(Server Message Block)協(xié)議,在Linux 系統(tǒng)上采用免費(fèi)軟件Samba 來實現(xiàn)SMB 協(xié)議。為了在NAS 系統(tǒng)中引入Samba 服務(wù),選取Samba 軟件包用于提供相關(guān)開源服務(wù),Samba 啟動的關(guān)鍵服務(wù)是smbd 和nmbd,同時也需要其他服務(wù)程序[8]。smbd 管理Samba 主機(jī)分享的目錄,nmbd 管理如NetBIOS name 和群組等的解析。linux 主機(jī)需要設(shè)定一個架構(gòu)在NetBIOS 協(xié)議上的名稱NetBIOS Name。Linux 主機(jī)必需要加入Windows主機(jī)的群組,才能使用Windows 提供的檔案數(shù)據(jù),在同一個群組當(dāng)中,NetBIOS Name 具有唯一性[9]。Samba 服務(wù)的核心在于smb.conf 配置,如下所示:
消息頭用[]表示,參數(shù)格式Parameter=value。重點(diǎn)配置參數(shù)工作群組workgroup,確保群組在所在局域網(wǎng)內(nèi)相同。netbios name 是主機(jī)名。security 用來規(guī)定Samba 主機(jī)的安全登入項目,security 等于share 時,不進(jìn)行安全登入,亦即沒有設(shè)定賬號與密碼,security 等于user 時,設(shè)定主機(jī)的密碼文件作為登入的驗證檔案[10]。usb1 表示共享目錄,writable 表示是否可以寫入,public 表示是否讓所有可以登錄的使用者看到這個項目。
用戶可在路由器管理界面配置Samba 的開啟、是否允許匿名操作、用戶名和密碼。路由器開啟Samba 后,管理系統(tǒng)便可通過用戶名和密碼建立與路由器共享盤之間的連接。
系統(tǒng)主要頁面包括用戶登錄頁面、系統(tǒng)主頁面和個人設(shè)置界面。用戶注冊或者登錄后到主頁面才可使用系統(tǒng)相關(guān)功能,主頁面同時提供個人設(shè)置界面的入口以及退出系統(tǒng)的出口。
用戶登錄模塊用于實現(xiàn)用戶初次注冊、二次登錄的權(quán)限認(rèn)證。用戶初次登錄需要用戶名和密碼,認(rèn)證成功后便可獲取token 信息,后續(xù)的認(rèn)證可直接通過token 進(jìn)行。用戶登錄流程如圖3 所示。
該模塊實現(xiàn)對用戶基本信息進(jìn)行查看和維護(hù)功能。用戶基本信息包括手機(jī)號、郵箱、昵稱、頭像等。同時該模塊會記錄用戶的活動信息(比如最近登錄時間)。用戶設(shè)置流程如圖4 所示。
文件上傳功能是文件管理系統(tǒng)的核心,用于傳輸用戶本地數(shù)據(jù),文件的管理也是基于用戶所上傳的文件來實現(xiàn)的[11]。文件上傳采用Plupload 插件,上傳方式有flash、HTML5 和silverlight 等。Plupload 會根據(jù)所屬環(huán)境,選擇最適合的方式進(jìn)行文件傳輸,HTML5 有最大優(yōu)先級。支持大文件切割成小塊上傳,如果上傳列表中存在文件大小大于chunk_size 但是小于max_file_size 的文件,Plupload 會將其分解成最大為chunk_size 的幾個小塊,然后再將文件中的各個文件(包括分解后的小塊)依次上傳給服務(wù)器[12-13]。
文件上傳、下載過慢是文件傳輸中常碰到的難題之一。該應(yīng)用系統(tǒng)針對這一問題,采用MD5 消息摘要算法。用戶上傳的文件通過MD5 消息摘要算法處理后生成唯一的MD5 碼,二次上傳文件會查詢對比MD5 碼,若文件的MD5 已存在,則只需復(fù)制服務(wù)器上的文件,即可實現(xiàn)文件秒傳。
MD5 消息摘要算法具體過程如下:
1)數(shù)據(jù)填充
對信息進(jìn)行數(shù)據(jù)填充,使信息的長度對512 取模得448,如果信息長度為L,則需滿足Lmod 512=448[14]。
填充方法:在信息后面添加一個1,1 后面添加多個0,添加后的信息長度為(N×512+448)。
2)記錄信息長度
以64 位為間隔來存儲填充前的信息長度。將這64 位加在第一步結(jié)果的后面,若信息長度大于264 位,則只使用低64 位的值(Lmode 264),這樣信息長度就變?yōu)?12 的整數(shù)倍,即N×512+448+64=(N+1)×512 位[15]。
3)初始化四個32 位鏈接變量
A=0X01234567,B=0X89ABCDEF,
C=0XFEDCBA98,D=0X76543210。
4)四輪循環(huán)運(yùn)算
循環(huán)N+1 次,A 復(fù)制到a,B 復(fù)制到b,C 復(fù)制到c,D 復(fù)制到c,這樣就得到了8 個初始變量。共有四輪主循環(huán),一輪操作16 次,每一輪運(yùn)算含一個非線性函數(shù)。每次操作對復(fù)制后的初始變量執(zhí)行非線性函數(shù)運(yùn)算。非線性函數(shù)為:
繼續(xù)定義四個分別用于四輪變換的函數(shù),每輪只使用FF、HH、GG 和II 中的一種操作。將512 bit 的數(shù)據(jù)子段拆分為Mj(j=0,1,2,…,15)子塊。<<<s表示循環(huán)左移s位,四個函數(shù)為FF(a,b,c,d,Mj,s,ti),GG(a,b,c,d,Mj,s,ti),HH(a,b,c,d,Mj,s,ti),II(a,b,c,d,Mj,s,ti),用公式分別表示如下:
經(jīng)過多步計算,輸出四組32 位長度的散列值,通過級聯(lián)得到128 位長度的數(shù)字簽名[16]。
文件分類:根據(jù)每個文件的mime 劃分為相對應(yīng)的type 類型存儲在數(shù)據(jù)庫中,根據(jù)不同type 值把文件分為圖片、音樂、文檔、視頻、其他。從數(shù)據(jù)庫中選擇所對應(yīng)的type 值實現(xiàn)文件分類。
文件下載:用戶將上傳到系統(tǒng)中的文件、其他用戶共享文件下載到本地的操作,下載功能利用fileDown()函數(shù)實現(xiàn)[17]。
文件排序:文件排序支持根據(jù)文件名、文件上傳日期和文件大小三種方式排序,用戶根據(jù)自己的需求選擇對應(yīng)方式對文件排序,方便用戶更直觀地查看文件。
文件刪除:文件刪除包括單文件刪除和多文件刪除,可以利用搜索功能對指定文件進(jìn)行刪除,文件刪除功能利用fileDel()函數(shù)實現(xiàn),所刪除的文件還會在回收站中記錄。
文件共享:文件共享包括分享給我和我的分享,用于存儲他人分享給所屬賬戶,以及所屬賬戶分享給他人的文件。用戶既可以實現(xiàn)一對一文件共享,又可以實現(xiàn)一對多的文件共享。
文件收藏:文件收藏用來存儲用戶收藏的重要文件,用戶可把一些重要的文件點(diǎn)擊收藏,再次訪問便可直接到收藏文件夾快速訪問文件。
回收站:回收站存儲已經(jīng)刪除的文件信息,防止用戶誤刪文件。用戶可在回收站模塊選擇還原資料和徹底刪除文件,刪除后不能再找回。
該文提出并實現(xiàn)了一種局域網(wǎng)下基于智能路由器的NAS 應(yīng)用系統(tǒng),普通用戶訪問系統(tǒng)地址,輸入賬號和密碼即可進(jìn)行文件操作,解決了現(xiàn)有NAS 專業(yè)性操作強(qiáng)的問題。支持用戶上傳文件至路由器外掛的存儲設(shè)備,并對上傳的文件進(jìn)行分類式、精細(xì)化管理,在實現(xiàn)現(xiàn)有網(wǎng)盤文件管理功能的同時解決現(xiàn)有網(wǎng)盤數(shù)據(jù)存儲在云端的安全性問題。系統(tǒng)具備文件共享功能,用戶既可以實現(xiàn)一對一文件共享,又可以實現(xiàn)一對多的文件共享。所開發(fā)系統(tǒng)基于家庭已有設(shè)備智能路由器,減輕設(shè)備冗余,減少用戶多設(shè)備開銷,同時對NAS 應(yīng)用今后的發(fā)展方向具有很大的意義。所實現(xiàn)的系統(tǒng)雖然具備基本的用戶數(shù)據(jù)存儲、共享、管理功能,性能尚可,出于安全考慮,應(yīng)用系統(tǒng)只提供了局域網(wǎng)內(nèi)的訪問接入方式。從實際的應(yīng)用場景出發(fā),將考慮實現(xiàn)廣域網(wǎng)下的智能路由器NAS應(yīng)用系統(tǒng)。