基于移动通信的文件共享中间件

2011-02-09 01:57赵雪梅
制造业自动化 2011年5期
关键词:文件名代理服务器中间件

赵雪梅

(盐城工学院 计算机基础中心,盐城 224001)

0 引言

基于移动通信的文件共享中间件,是建立在移动Agent平台、Aglet系统上的文件共享中间件。移动Agent就是一个能在异构网络中自主地从一台主机迁移到另一台主机,并可与其他Agent或资源交互的程序。 移动Agent技术是分布式技术和Agent技术相结合的产物。中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,它是在每个主机上都运行的一个Agent Server,Agent可以访问这个Server,通过文件名(URN)来发出请求,然后在本地的文件系统中存放,用关键字查询文件等等。高层次的应用程序建筑于这个中间件(Middleware)之上,如使用设计者的工具,实用程序的索引,搜索存贮在网页上的信息。本文通过上述原理对文件共享中间件进行了设计与运行。

1 文件共享中间件的设计

本文运用移动Agent理论进行文件共享中间件的设计。设计分为三个部分:中间件系统构架设计,中间件系统功能设计和安全性设计。

1.1 中间件系统构架设计

图1是某台主机上的中间件系统框架设计,右框为来访的Agent,到达后Aglet平台与其代理对话,由平台检查来访Agent的操作权限,并获取查询信息。Aglet平台如果在本机资源中查找到要求的信息,就派生Agent代理与来访者对话并执行相关操作。从而避免来访者直接对本级资源进行操作。

图1 中间件系统框架

1.2 中间件系统功能设计

1.2.1 共享申请功能设计

共享申请功能是中间件系统的基础。要实现中间件系统功能,首先就要实现共享的申请,将本地机器的共享申请发送给目标机器,例如talk程序,即可以在两台不同机器上实现聊天。作者计划在此程序上进行设计,将共享的申请借此传输给目标机器,然后中间件系统就可以在接到申请以后,继续进行文件查询功能和文件传输功能,从而实现文件的共享。

1.2.2 文件查询功能设计

接到本地机器的文件共享申请,下一步工作就是在目标机器上进行所要求共享的目标文件的查询。

文件的目录结构是树形结构,树中的叶子节点是真实文件或者虚拟文件(即文件夹),非叶子节点就是文件夹。

本地机器把将共享的文件名在共享申请功能完成后传送给了目标机器,目标机器接受此文件名之后在共享的文件夹中寻找此文件,实现文件查询。

文件共享中间件查询过程中,目标机器先把需要共享的文件名与目标机器上的共享文件夹先进行判断,如果是非叶子节点,则不进行比较,直接进入该文件夹,然后在文件夹中寻找真实文件或者虚拟文件,将真实文件的文件名与需要共享的文件名进行比较,如果是相等的,则查询成功,进入临时空间的创建和文件的传输功能。如果是不相等的,则返回查询失败。如果真实文件均与需要共享的文件不是同一文件,那么则进入虚拟文件,也就是文件夹,继续进行上面的操作。

以上操作,就是对文件的树形目录结构进行遍历,遍历目标机器上共享的文件夹中的文件,将目标机器上共享文件夹中的真实文件的文件名与本地机器要求共享的文件的文件名进行比较,如果相等,则查询成功,如果均不相等,则查询失败,也即目标机器没有本地机器所要求共享的文件[1]。

1.2.3 临时空间与文件传输设计

代理找到匹配的文件之后,传回文件才能实现主机的要求。中间件实现的是通过代理,主机不能在本机上直接访问文件资源,如果直接在文件所在的位置操作,则达不到这个目的。所以代理在判断主机是否拥有传回的权限之后,如果得到的结果为真,开辟一个临时空间,允许主机接触临时文件夹,避免了文件原件被用户恶意删改。中间件把查找到的文件复制到临时空间,遵照FTP传输协议,将放在临时文件夹中的复制文件传到主机的指定位置,传输结束主机发回一个信息,完成传输后代理将复制文件删除。则这次共享请求成功结束。

1.3 方案的安全性设计

1.3.1 对服务器资源的受限访问

由于允许未知的和不信任端来的Agent在主机上执行,主机节点的资源就受到各种攻击的威胁。威胁包括窃取敏感信息,破坏主机资源,拒绝给客户机或Agents提供服务和匿名攻击等。因此,主机系统的各种资源需要受到保护以免受到恶意Agents的攻击。同时,合法的Agents必须能以受限的方式访问这些资源,所以他们不得超越他们的权限(不管是意外的还是恶意的)。因此,我们需要制定这样一种机制:允许Agent服务器提供Agents和资源之间在安全的语言层的绑定。每一种资源必须允许定义它们自己的安全策略并控制自己的执行。需要注意的系统级问题是:将Agents绑定到资源,授权和实施存取控制[2]。

Agent服务器必须给Agent程序和服务器资源提供一种语言层的绑定。有几种方法能实现这种受保护的绑定:

第一种方法是为Agent提供它请求资源的索引,用安全管理器监视所有对资源的访问,就像系统级资源被保护的那样。这就要求每个资源开发者去扩展或修改安全管理器,限制使用资源管理器给系统资源提供一般的保护。

第二种建立受限访问的方法是使用代理对象。当一个Agent第一次请求访问一个资源,服务器查询安全策略,并创建一个资源代理,该代理是一个对象,有到资源的安全接口。如果这个Agent不可信任,资源的特定操作就不可用。为每个Agent都创建了独立的代理,Agent仅有到代理的索引,它的受限接口保证了agent仅能以安全方式访问资源。

第三种方法是每个资源都被封装在一个包装对象中得到保护。Agent仅有到包装的索引而不能绕过它们直接访问资源。包装接受访问资源的请求并确定是否允许基于客户机身份的访问。

1.3.2 基于代理服务器方法的设计

Agent不能直接访问资源——我们提出在资源和它的客户(即Agents)之间插入一个代理服务器(中间件)。当一个Agent发出一个访问资源的请求时,服务器返回一个代理服务器对象作为替代,该代理服务器包含了对实际资源的私有索引。对于每个定义的应用资源类,也必须定义相关的代理服务器类。代理服务器类实现了如资源器所代表的相同的接口。然而,在代理服务器的创建过程中,一些接口方法可能会不可用,这主要基于它的安全策略和客户Agent的证书。对于许可的方法,主要是代理服务器通过嵌入资源传递调用。如果Agent不允许调用这个方法,就抛出安全异常。由于Agent只有到代理服务器的索引,这个受限的接口保证了Agent只能通过策略允许的方法访问资源。如果合适的话,尽管嵌入式资源能被共享,但还是为每个Agent都创建单独的代理服务器[3~5]。

1.3.3 方案的安全性讨论

为保护这些威胁并确保该方案的完整性,我们引入了一些额外的规则—基于Java的安全模型。

代理服务器包含到资源对象的嵌入的索引,Agent可能会绕过代理服务器的存取控制检查,直接(或通过映像)去调用该对象。在这种情况下Agent服务器试图保护自己的资源,那么有理由假定Java虚拟机执行Agent代码时尊重私有的申明,并拒绝让Agent直接访问嵌入的索引。为防止这种情况发生,我们借助Java的封装机制,把嵌入资源的索引设为私有的形式。

如果代理服务器对象能够配合另一类型重新申明私有索引为公有的索引或者使每种方法都绕过存取控制检查,那么Agent无须授权就能访问资源。但是,在我们的方案中,我们制定这样的规则:代理服务器类除了Java的基类Object外没有例外。因此,Java虚拟机不允许Agent将代理服务器实例typecast到其他任何类。

一个恶意的Agent可以串行化一个代理,发送字节流到协同工作的Agent服务器,并用一个伪代理类反串行字节流,从而暴露基本的资源。为防止这种情况发生我们强加这样的规则:代理类内的资源索引必须申明为瞬时状态。Java不包括对象串行化产生的字节流的瞬态索引。因此,资源对象就不会被复制到攻击者的站点上。

遵守正确的协议而获得了代理服务器的Agent,可能会尝试着去克隆它。由于在Java里的克隆相当于浅复制(shallow copy)操作,不会导致基本的资源的克隆。

2 文件共享中间件的实施

接下来我们就将依据上述的设计来对实现文件共享中间件。实现文件共享中间件主要就是实现中间件系统的功能、网络共享的申请、文件的查询以及文件的传输。下面介绍中间件代码的实现,并展示部分系统界面。

2.1 中间件系统的实现

2.1.1 网络共享的申请

首先主机人为输入请求共享的文件名,Aglet将其作为消息存放在子Aglet当中,以便带到远程的机器上提供给中间件查找关键字。

public void sendText(String text) {

try {

masterProxy.sendMessage(new Message("text",name + " : " + text));

}

}

接着以目的地地址为参数,派送子Aglet,完成申请阶段的工作。

2.1.2 文件的查询

函数 IsFileExist(String Response,File dic,String fileName)

它包括三个参数和两个主要功能:

Response:查找文件的结果,分为“succeed”、“fail”两种,并且默认值为“fail”。

Dic:共享目录的地址,主机将可以共享的资源均放在这个目录下面。

filename:要求共享的文件名,由Aglet带来。

名称与请求共享的文件名相同,则返回真。如果不匹配,返回假,如果这一级为目录名称,则遍历下一级子目录或者文件。如此嵌套直至返回结果,完成查询。

2.1.3 文件传输的实现

首先介绍FTP传输类FTPTrans。

Public FTPTrans(){

//在两台主机之间建立连接

Public Boolean getConnection(host,user,passwor d);

//开始文件传输

public Boolean putFile(destination, filename);

}

接着在子Aglet中的run方法里调用该类,查询成功复制文件并传输:

FTPTrans ftp=new FTPTrans();

//创立对象

ftp.getConnect(dest,user,password);

//由文件所在的主机执行传输,指定文件名和目文件夹

文件流开始传输。

TelnetOutputStream outStream = null;

buf.setLength(0);

try{

File f = new File(d + fn);

RandomAccessFile file = new Random-AccessFile(f,"rw");

//给指定传输的文件设定读写权限

outStream = myFtp.put(fn);

byte [] b = new byte[(int)f.length()];file.read(b);

outStream.write(b);

file.close();

//文件流传输结束

outStream.close();

}

2.2 中间件系统的界面

软件演示在两台工作站之间进行,由于UNIX环境下截图困难,故暂时以PC上的演示界面代替。

第一步:启动Aglet平台,如果在一台机器上演示,以不同端口号启动两个Aglet窗口。

图2 Agent窗口

第二步:在一个窗口创建Search的主Aglet,它包括地址簿,对话框,查找输入框。

图3 主Aglet窗口

第三步:选择目标地址,发送请求共享的SlaveAglet,到达后主动生成一个主Aglet。

第四步:如果在目标主机查找成功,返回“succeed”,并且开始传输。

图4 SlaveAglet发送及生成

图5 查找成功

传输结束后,请求共享的主机的指定目录下会看到要求共享的文件,而目标主机下临时文件夹中的文件会自动删除,此次任务结束,派送的Aglet释放。

3 结论

基于移动通信的文件共享中间件是个很复杂的系统,本文从理论上设计了这个基于移动通信的中间件系统,包括文件服务器,Aglet平台,透明代理服务,操作权限限制,访问以及文件临时复制传输。但在实现的时候仅仅完成了一部分内容,在比较单纯的环境中实现了简单的共享。共享问题,除了从技术上保证安全性之外,还应该从社会、伦理、法律的角度去约束、规范。

[1] 赵京胜,巩玉玺.基于移动Agent的信息搜索系统研究[J].计算机工程与设计,2008,20.

[2] 曹双兰.移动Agent安全分析及其密码学解决方案[J].中国西部科技,2009,11.

[3] 曹文英,赵跃龙.基于移动计算的移动Agent技术研究[J].微电子学与计算机,2009,02.

[4] 刘晓辉.移动Agent在网络管理系统中的研究[J].科技创新导报,2009,21.

[5] 范彬,刘鑫,李伟华.移动Agent通信技术的研究与分析[J].电脑知识与技术,2009,05.

猜你喜欢
文件名代理服务器中间件
右键调用多重更名更方便
Excel轻松提取文件名
地铁信号系统中代理服务器的设计与实现
把我的秘密藏起来
RFID中间件技术及其应用研究
基于Android 平台的OSGi 架构中间件的研究与应用
防火墙技术与校园网络安全的研究
中间件在高速公路领域的应用
一种支持智能环境构建的中间件
一种容侵系统的设计