基于Linux的USB移动设备的控制与研究

2015-03-16 09:53翟哲
电脑知识与技术 2015年1期
关键词:移动设备

翟哲

摘要:USB可移动设备所造成的数据丢失日益严重,对USB设备有效的控制,可以阻止数据的泄露。该文主要研究基于Linux环境下对USB移动设备进行控制,并且从驱动模型和用户态这两个不同层次提出了可行的USB移动设备访问控制机制。针对各自不同的特点,对相应的关键技术与可行性进行了分析。这两种方法均可以有效地进行USB移动设备的控制。

关键词:USB 移动设备;UDEV;驱 动程序

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2015)01-0168-04

Control and Research of USB Mobile Equipment Based on Linux

ZHAI Zhe1,2

(1.School of Information, Qingdao University of Science and Technoloty, Qingdao 266042, China; 2.Heze Medical College, Heze 274000,China

Abstract: USB mobile equipment caused by the loss of data is becoming increasingly serious, to control the USB device effectively, can prevent data leakage effectively. This paper mainly studies based on Linux of USB under the environment of mobile devices for control, and from the driver model and the user state of the two different levels of proposed USB mobile equipment feasible access control mechanism. According to the different characteristics, the key technique and analyzes the feasibility of corresponding. These two methods are effective for USB mobile device access control.

Key words: USB mobile equipment; UDEV; divers

Linux操作系统[7]是一款自由软件。它功能强大、源码公开、结构清晰,已成为一个安全可靠功能完善的系统。所以在一些安全部门得了广泛的应用。USB总线是IBM、INTEL等公司联合提出的一种新的通用串行总线。USB移动设备在Linux操作系统下得到了广泛应用[8]。USB移动设备具有体积小、支持热插拔等优势,已应用到了各种场合。用户在享受它的易用性的同时,也面临着带来的数据泄露问题[4]。尤其是学校承担的国家一级、二级等级考试,为了阻止数据泄露和计算机病毒侵入考试系统就需要禁用USB设备的使用。曾调查机构也明确指出,有49%的机密资料泄漏都与USB可移动设备有关。由此可见,对USB移动设备进行访问控制是非常必要的,特别是国家保密机构单位来说。

1 基于udev 控制USB移动设备

1.1 什么是udev

udev 是 Linux Kernel2.6 [2]以上内核里的一个功能,不同于早期的Linux设备管理工具。它替代了hotplug(热插拔)及 devfs,成为目前 Linux操作系统的设备工具集。udev 通过用户空间并以守护进程的方式运行,如果要管理 /dev目录下的USB设备,那么就通过侦听内核发出来的 uevent 事件。不像之前的设备管理器,udev不在内核空间 (kernel space) 运行,而在用户空间 (user space)[2] 运行。用户能够指 定 不 同 的硬件设备来使用不同的设备文件。其工作流程如图1:

Udev 添 加 硬件设备[5]的操作步骤如下:

1) 首先在LINUX操作系统内核启动进程中,每条总线的驱动程序都要通过总线协议为每个硬件设备建立一个设备对象。内核中每个总线对象都有一个 kset 对象,每个硬件设备都嵌入了一个 对象 kobject。

把Kobject对象连接到kset上,这样总线与设备之间就组成了一颗树状结构。如果总线驱动程序扫描到该设备对象时,它将对kobject()对象初始化,并且把它连接该设备树上,也会同时调用这个函数kobject uevent()。这个函数会把从systs中获取相关的信息及添加新设备事件通过netlink发送到用户态中。

2) 在用户态,udevd通过创建socket机制连接来获得内核的uevent事件,并对这个uevernt事件进行解析。

3) Udev进程读取文件(/etc/udev/udev.conf)中設置的规则文件所在的目录。

4) Udev进程将/etc/udev/rules.d规则文件读取到内存。Udev并逐个检验该目录下的文件,该目录下的文件都是针对某个设备必须实施扫描的规则文件。

5) Udev会按照文件名的字符编码(ASCII)顺序来读取全部的规则文件。

如果Udev找到了与新设备相符合的规则时,那么将按规则定义的举措在/dev下创建设备文件,并完成驱动模块的加载以及其他的附加操作。

1.2 基于udev 控制USB存储设备设计方案

当 Udev设备管理器动态添加或删除设备时,因为规则是UDEV中最重要的一部分,默认存放的位置就是在/ etc/ udev/ rules.d下,所以这种行 为主要受到/ etc/ udev/ rules.d中的规则文件控制。Udev 规则 中的守 护 进 程将监视来自内核的 uevent 事 件,从而添加或删除/dev / 目录下的相应设备文件。Udev 设备管理器仅为已添加的 设备产生相应的 设备文件,但对无用的、多余 的设备文件不会产生。在/etc/ udev / rules.d目录下加上一条规则,然后对插入电脑上的所有设备与USB可移动设备进行相匹 配,如果一旦 搭 配 成功,那么忽略 该 设备 插入 uevent 事件并拒绝为该设备插入事件做任何处理。这就成功实现了USB移动设备禁用的目的。

首先介绍常用的Udev键,如下表所示。

通过以上 规 则,如果当 Udevd 获 得 设 备 插 入 事 件uevent 时,那么它将读取这个规则并询问匹配这个设备的 驱动 是 否 为 usb,如果搭 配 成 功,那么就表示当前计算机中插入的硬件设备是USB设备,否则跳过执行这个uevent事件的操作,并对设备插入事件不做 任 何 操作与处理。工作过程如图2所示。

通 过成 功配 置 UDEV规 则,已经实现了对USB移动设备的访问与控制。此方法优点:第一 实现比较简单,第二不需要编程实现,只是通过配置udev规则提供的工具及配置的规则文件就可实现对USB移动设备的禁用。这种方法的缺点:一方面,因为设备访问控制是在用户层实现的,所以容易被旁路。而另一方面,访问控制粒度比较大,对USB设备的读写控制无法实现。

因为驱动程序是在内核模块[1]中实现的,所以这种方式要比用 户 空间(user space)守 护进程要可靠、安全。正因为这一点又相继提出了关于驱动的USB移动设备 控 制 的研究,从而来改进易被 旁 路及 控 制 粒度大的问题。

2 基于驱动程序控制USB移动设备

2.1 了解Linux操作系统 内 核 加载USB设备驱动过程[3]

Linux作为开源系统操作系统已经实现了对USB的支持,从一定意义上说,对USB的支持越强大,Linux应用的也越广泛。首先介绍一下USB总线体系结构,如图3所示。

通过以上图1可知,usb总线结构采用的是分层星形结构,主机是该结构的瓶颈,每一个USB设备都要通过集线器(HUB中心)连接主机的,根集线器(主HUB)提供USB的连接点,全部的传输事物都是由主机发起的。如果一个USB 设备插入集线器时,那么该集线器的 状 态就会发生变化。当系统收 到这个 状 态变 化 后,它 将会为该USB 移动设 备 建立一个硬件设 备 对 象kobject,然后把相应的USB总线(BUS)设备 列 表 及 USB 子 系 统 添 加 到 USB设备中;紧接着将会调用 函 数 bus_ attach _ device (),然后与该设 备 驱 动程序进行相 匹 配。如果 搭配成功,那么该系统将为这个USB设备向usb总线类型注册,并完成相应驱动程序的加载过程。

2.2 基于驱动控制USB移动设备设计方法

通过调用的驱动所属总线的probe()函数可以有效控制USB驱动程序模块的加载。当USB设备在与驱动程序的匹 配 过 程中,将会调 用 probe()探测 函 数并判断驱动与所插入的设备是否相匹配。如果调用函数匹配成功则返回1,那么则返回0。 从而使USB移动存储设备无法匹配到合适的驱动,这样就达到USB移动存储设备禁用的目的。整个实现过程如图4。

在Linux 内 核 目 录中当 总 线 驱 动 扫 描 到 该 USB 设备 时,系统为设备建立一个 对 象,然后就会调用 probe() 探测 函 数并判断是否为USB移动设备。如果检测结果不是USB设备则返回1,否则检测结果是USB设备则返回0并将全部的后续操作中 断。在系统测試中如果插入优盘,它将会提示已发现USB设备,然后并禁用该设备,并提醒用户将该硬件设备插入事件。该方法是在内核驱动层实现的,不容易旁路的。

总之,文中分别从用户态、驱动机制这两个方面分别提出了两种可行有效的USB移动设备控制方案。第一种方案是根据配置UDEV规则来实现的,这种方案实现较简单,不需要编程,但访问控制难度大,也不能完成读 写的控制。而另一种方案是在驱动程序下访问控制USB设备,此方案利用了探测函数 probe()来控制 USB程序模块的加载,这种方案不容易被旁路。

参考文献:

[1] Robert Love. Linux内核设计与实现[M].陈君,等,译.北京:机械工业出版社,2004.

[2] Corbet J, Rubini A,Kroah-Hartman G . Linux Device Driver 2th .OReilly, 2007.4

[3] Alessandro Rubini. Linux设备驱动程序[M]. LISOLEG,译.北京:中国电力出版社,2001.

[4] 计世网Ice.妥善管理USB防止数据泄露[EB/0l].2012-07-01.http://soft.ccw.com.cn/news/htm2008/20080531.htm

[5] http://zh.wikipedia.org/wiki/udev

[6] http://www.ibm.com/developerworks/cn/linux/l-cn-udev/index.html?ca=drs-cn-0304

[7] 肖季东,刘岩.Linux那些事儿之我是USB[M].北京:电子工业出版社,2010.

[8] Bovet D2,casati M.Understanding the Linux Kernel[M].南京:东南大学出版社,2006.

猜你喜欢
移动设备
如何在高中物理学习过程中使用移动设备
手游立法探析
移动端界面设计中“容错性”思考
基于移动设备的富媒体儿童电子书研究
移动式学习在职业学校翻转课堂中的运用
CSS3在响应式网页设计中的应用
增强型儿童电子书《三字经》的设计与实现
无线网络在校园中的重要性
移动范式发展研究
增强现实技术在移动学习中的应用刍议