局域网下基于智能路由器的NAS 应用系统
2022-11-18王乐欣
王乐欣
(武汉邮电科学研究院,湖北武汉 430073)
当今,国内NAS(Network Attached Storage)市场主要被台湾企业占据[1],市场上的NAS 存储系统专业性强、存储容量大,未能在家庭中广泛使用。家用NAS 的普及并不理想,一方面它存在专业操作性太强、价格高昂、能耗大等问题,另一方面人们更热衷于通过硬盘和网盘备份。硬盘仅能满足用户的数据存储需求,网盘虽然具备强大的文件管理与共享功能,但是用户数据最终存储于服务器商,存在一定的风险,可能会导致用户数据泄露或者丢失[2-3]。
该文设计和实现的局域网下基于智能路由器的NAS 应用系统,以“傻瓜式”、轻量级、低成本为核心进行开发,普通用户访问系统地址,输入账号和密码即可进行文件操作,用户数据通过路由器存储在本地。系统具备文件管理与共享的功能,解决了家庭用户数据存储、共享问题。所开发系统基于家庭已有智能路由器设备,减轻了设备冗余,减少了用户多设备开销,使用简单,扩展灵活。
1 系统总体结构设计
1.1 系统结构
系统整体框架如图1 所示,路由操作系统为Linux,利用其扩展USB 接口挂载存储设备作为存储介质,部署Samba 服务,连接路由器与应用系统之间的通信。系统采用B/S 结构,用户在浏览器中输入系统地址,登录成功后即可上传文件或获取服务器数据,其共分为三层:浏览器、Web 服务器和数据库服务器[4]。
1.2 系统功能模块设计
根据家庭用户对数据存储与分享的日常需求,系统需要实现数据上传、下载、分享、删除等功能。为了进一步方便用户管理文件,系统增加分类、排序、收藏、搜索等功能,同时用户也可以查看文件被分享、收藏和下载的次数。系统功能模块设计如图2所示。
1.3 数据库设计
数据库设计的合理与否,直接影响到系统的效能及拓展性[5]。所构建系统,主要使用数据库存储以下几方面的数据。
用户信息表(users):用于存放用户信息。包括用户ID(uid)、用户名(name)、密码(password)、注册时间(time)以及最后一次退出系统的时间(lastLogin Time)、token、用户文件数量(fileNumbers)、文件大小(filesize)。
总文件表(allInfo):用于存放所有上传文件信息。包括uid、文件名(filename)、path(存储地址)、mime、文件类型(type)、size、上传时间。
共享文件表(share):用于存放共享文件信息。包括分享者uid、type、文件在allInfo 中的id、链接密码(可选)、分享时间、过期时间(可选)。
回收表(recycle):用于存放被删除文件信息。包括文件在文件信息表中的id、被删除文件的用户id、filename、path、type、文件大小、删除时间。
文件信息表(info):用于存放文件信息、hash、type、path、md5、filesize,上传多次的重复文件只保存一条信息。
收藏表(collection):用于存放uid、文件在allInfo中的id、path、filesize 和收藏时间。
1.4 环境搭建与相关技术
系统采用B/S 架构进行设计,用户不需要安装客户端,通过浏览器即可操作。采用Xampp 集成环境,不需要单独搭建Apache、MySQL、PHP 和PERL。项目采用Navicat 数据库管理工具,Navicat 自带图形用户界面,数据库的创建、管理简易快捷,如用户权限设置、数据库备份或移植,数据查看也更直观[6-7]。后台业务逻辑开发采用PHP 的ThinkPHP 框架,前端使用了Javascript、HTML、Ajax 等Web 编程技术。
2 部署Samba服务
客户端和服务器之间的通信使用SMB(Server Message Block)协议,在Linux 系统上采用免费软件Samba 来实现SMB 协议。为了在NAS 系统中引入Samba 服务,选取Samba 软件包用于提供相关开源服务,Samba 启动的关键服务是smbd 和nmbd,同时也需要其他服务程序[8]。smbd 管理Samba 主机分享的目录,nmbd 管理如NetBIOS name 和群组等的解析。linux 主机需要设定一个架构在NetBIOS 协议上的名称NetBIOS Name。Linux 主机必需要加入Windows主机的群组,才能使用Windows 提供的档案数据,在同一个群组当中,NetBIOS Name 具有唯一性[9]。Samba 服务的核心在于smb.conf 配置,如下所示:
消息头用[]表示,参数格式Parameter=value。重点配置参数工作群组workgroup,确保群组在所在局域网内相同。netbios name 是主机名。security 用来规定Samba 主机的安全登入项目,security 等于share 时,不进行安全登入,亦即没有设定账号与密码,security 等于user 时,设定主机的密码文件作为登入的验证档案[10]。usb1 表示共享目录,writable 表示是否可以写入,public 表示是否让所有可以登录的使用者看到这个项目。
用户可在路由器管理界面配置Samba 的开启、是否允许匿名操作、用户名和密码。路由器开启Samba 后,管理系统便可通过用户名和密码建立与路由器共享盘之间的连接。
3 系统功能模块实现
系统主要页面包括用户登录页面、系统主页面和个人设置界面。用户注册或者登录后到主页面才可使用系统相关功能,主页面同时提供个人设置界面的入口以及退出系统的出口。
3.1 登录模块
用户登录模块用于实现用户初次注册、二次登录的权限认证。用户初次登录需要用户名和密码,认证成功后便可获取token 信息,后续的认证可直接通过token 进行。用户登录流程如图3 所示。
3.2 用户设置模块
该模块实现对用户基本信息进行查看和维护功能。用户基本信息包括手机号、邮箱、昵称、头像等。同时该模块会记录用户的活动信息(比如最近登录时间)。用户设置流程如图4 所示。
3.3 文件管理模块
文件上传功能是文件管理系统的核心,用于传输用户本地数据,文件的管理也是基于用户所上传的文件来实现的[11]。文件上传采用Plupload 插件,上传方式有flash、HTML5 和silverlight 等。Plupload 会根据所属环境,选择最适合的方式进行文件传输,HTML5 有最大优先级。支持大文件切割成小块上传,如果上传列表中存在文件大小大于chunk_size 但是小于max_file_size 的文件,Plupload 会将其分解成最大为chunk_size 的几个小块,然后再将文件中的各个文件(包括分解后的小块)依次上传给服务器[12-13]。
文件上传、下载过慢是文件传输中常碰到的难题之一。该应用系统针对这一问题,采用MD5 消息摘要算法。用户上传的文件通过MD5 消息摘要算法处理后生成唯一的MD5 码,二次上传文件会查询对比MD5 码,若文件的MD5 已存在,则只需复制服务器上的文件,即可实现文件秒传。
MD5 消息摘要算法具体过程如下:
1)数据填充
对信息进行数据填充,使信息的长度对512 取模得448,如果信息长度为L,则需满足Lmod 512=448[14]。
填充方法:在信息后面添加一个1,1 后面添加多个0,添加后的信息长度为(N×512+448)。
2)记录信息长度
以64 位为间隔来存储填充前的信息长度。将这64 位加在第一步结果的后面,若信息长度大于264 位,则只使用低64 位的值(Lmode 264),这样信息长度就变为512 的整数倍,即N×512+448+64=(N+1)×512 位[15]。
3)初始化四个32 位链接变量
A=0X01234567,B=0X89ABCDEF,
C=0XFEDCBA98,D=0X76543210。
4)四轮循环运算
循环N+1 次,A 复制到a,B 复制到b,C 复制到c,D 复制到c,这样就得到了8 个初始变量。共有四轮主循环,一轮操作16 次,每一轮运算含一个非线性函数。每次操作对复制后的初始变量执行非线性函数运算。非线性函数为:
继续定义四个分别用于四轮变换的函数,每轮只使用FF、HH、GG 和II 中的一种操作。将512 bit 的数据子段拆分为Mj(j=0,1,2,…,15)子块。<<<s表示循环左移s位,四个函数为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),用公式分别表示如下:
经过多步计算,输出四组32 位长度的散列值,通过级联得到128 位长度的数字签名[16]。
文件分类:根据每个文件的mime 划分为相对应的type 类型存储在数据库中,根据不同type 值把文件分为图片、音乐、文档、视频、其他。从数据库中选择所对应的type 值实现文件分类。
文件下载:用户将上传到系统中的文件、其他用户共享文件下载到本地的操作,下载功能利用fileDown()函数实现[17]。
文件排序:文件排序支持根据文件名、文件上传日期和文件大小三种方式排序,用户根据自己的需求选择对应方式对文件排序,方便用户更直观地查看文件。
文件删除:文件删除包括单文件删除和多文件删除,可以利用搜索功能对指定文件进行删除,文件删除功能利用fileDel()函数实现,所删除的文件还会在回收站中记录。
文件共享:文件共享包括分享给我和我的分享,用于存储他人分享给所属账户,以及所属账户分享给他人的文件。用户既可以实现一对一文件共享,又可以实现一对多的文件共享。
文件收藏:文件收藏用来存储用户收藏的重要文件,用户可把一些重要的文件点击收藏,再次访问便可直接到收藏文件夹快速访问文件。
回收站:回收站存储已经删除的文件信息,防止用户误删文件。用户可在回收站模块选择还原资料和彻底删除文件,删除后不能再找回。
4 结束语
该文提出并实现了一种局域网下基于智能路由器的NAS 应用系统,普通用户访问系统地址,输入账号和密码即可进行文件操作,解决了现有NAS 专业性操作强的问题。支持用户上传文件至路由器外挂的存储设备,并对上传的文件进行分类式、精细化管理,在实现现有网盘文件管理功能的同时解决现有网盘数据存储在云端的安全性问题。系统具备文件共享功能,用户既可以实现一对一文件共享,又可以实现一对多的文件共享。所开发系统基于家庭已有设备智能路由器,减轻设备冗余,减少用户多设备开销,同时对NAS 应用今后的发展方向具有很大的意义。所实现的系统虽然具备基本的用户数据存储、共享、管理功能,性能尚可,出于安全考虑,应用系统只提供了局域网内的访问接入方式。从实际的应用场景出发,将考虑实现广域网下的智能路由器NAS应用系统。