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