用Python和wxPython开发主机安全监控系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

用Python和wxPython开发主机安全监控系统王世华,沈卫超(北京应用物理与计算数学研究所,高性能计算中心)摘要:本文简要介绍Python,wxPython语言以及Boa图形界面生成器,以及用Python+wxPython快速开发跨平台图形用户界面的方法。同时描述了主机安全监控系统的功能及结构,主要针对于安全管理员图形界面的开发,详细阐述了其中的几个关键技术。关键词:主机安全,安全审计,Python,wxPython,图形用户界面DevelopingMonitoringSystemofHost-SecuritywithPythonandwxPythonWangShihua,ShenWeichao(HighPerformanceComputingCenter,InstituteofAppliedPhysicsandComputationalMathematics,Beijing,100088)Abstract:ThispaperintroducesthePython,wxPythonlanguage,andtheBoaconstructorshortly,thenexplainssomebasicmethodsofthesetoolsforrapidlydevelopingcross-platformGUIapplication.Wedescribestructureandfunctionsofhost-securitymonitoringsystematthesametime,focusonGUIdevelopmentofthesecurityadministrator,andsomecriticaltechnologiesarepresentedindetails.Keywords:host-security,security-audit,Python,wxPython,GUI(GraphicalUserInterface)1引言随着来自企业或单位内部的安全风险越来越受到重视,内部资源的滥用是网络安全管理中的焦点问题。本文将要介绍的是我们利用Python和wxPython开发的一套主机安全监控系统,以达到强化主机系统安全的目的,它分为三个部分,即:监控代理程序、监控信息中心和管理员控制台。目前我们所使用的绝大多数计算服务器均基于UNIX或者Linux操作系统,但是它们在图形方面的表现能力欠佳,界面不够友好,如何开发一款具有跨平台能力且界面表现友好的应用程序给我们提出了新的挑战。2开发工具简介2.1Python语言Python是一种解释型、面向对象、动态语义、语法优美的脚本型语言,也是开发具有工业强度的商业应用程序的优秀语言,尤其适合开发基于Internet和Web的、数据库密集型的、多层的客户机/服务器系统。Python是当前移植能力最强的程序语言之一,最初,它是在UNIX上实现的,但之后扩展到了其它许多平台,其中包括MS-Windows、MacOSX、Linux、Solaris等,而且它的源程序和二进制代码都可以免费获得。2.2wxPython和BoawxPython是Python语言的一个GUI工具集,它可以使Python程序员简单而轻松的创建一个健壮的、具有高级功能的图形用户界面。它在Python中是以扩展模块的方式实现的,拥有自身的窗体/控制,还加入了许多独立于操作系统的窗体,并且封装了流行的wxWindows跨平台GUI库,并且这些库文件是用C++编写的。wxPython同样具有跨平台能力,这意味着我们编写出来的代码可以不经修改的运行在绝大多数操作系统之上,提高了代码的利用率和生产效率。它的基本结构如下图所示:Boa是一款wxPython图形界面生成器,也是一个Python的集成开发环境,它建立在wxPython、wxWidgets和Python之上。Boa被设计成为一个用于wxPython的简易Delphi,它不仅是Python开发的集成环境,如:wxPython可视化框架的设计、对象浏览、文档生成、调试、源码控制(CVS)等等,而且还集成了其它Python技术,如:Zope、PyChecker、Py2EXE、Distutils以及Cyclops。3系统结构和功能3.1系统结构主机安全监控系统由三个部分组成:监控代理程序、监控信息中心和管理员控制台。图2主机安全监控系统结构图监控代理程序从受监控主机采集并根据安全规则分析日志数据,然后将报警信息和归档日志传送给监控信息中心;监控信息中心负责从各监控主机的代理程序收集报警信息和归档日志,并将这些信息转存到后台数据库中;管理员控制台用于接收来自监控信息中心的实时报警信息,以及对归档日志的查询与统计、分析。3.2监控代理程序读模块负责从操作系统的审计日志文件中读取连续的审计日志数据,并将其转换为一个便于存取操作的通用记录格式,传送给数据分析模块。数据分析模块根据安全规则对收到的审计数据进行分析。如果安全规则给出了明确的响应动作,则向动作响应模块发出动作指令,操作系统PlatformGUIwxWidgets工具包wxPython扩展模块wxPython库代理类图1wxPython体系结构同时向发送模块传送匹配的数据记录。发送模块负责将接收到的数据传送给监控信息中心服务器。接收模块负责接收控制中心传来的安全规则和动作指令,刷新安全规则和向动作相应模块发送动作指令。动作响应模块负责切断用户与系统的连接和封锁用户系统帐号。各模块关系框图如下:图3监控代理程序的功能模块3.3监控信息中心图4监控信息中心的功能模块监控信息中心服务器的接收模块负责接收多个监控代理发送的数据,并传送给数据分析模块。数据分析模块根据安全规则对接收到的数据进行分析,通过发送模块将动作响应传送给特定的监控代理。报警信息通过管理模块传送给管理员控制台,同时归档的数据存入数据库中。管理模块为管理员控制台提供安全监控系统的各种管理、监控与数据分析服务,包括修改和部署安全规则,查询和分析数据库的审计数据,并通过发送模块向各个监控代理部署新的安全规则和发起响应动作。3.4管理员控制台监控代理程序监控信息中心接收模块发送模块系统状态模块报警模块策略编辑模块统计分析模块身份认证模块用户界面模块安全管理员管理员控制台图5管理员控制台的功能模块管理员控制台可以集中的显示安全报警信息并拥有对归档审计数据的分析和查询功能,并且安全管理员能够对主机安全监控系统进行安全策略的集中配置和部署。主要分为7个模块:用户界面模块、身份认证模块、报警模块、统计分析模块、策略编辑模块,系统状态模块和通信模块(发送与接收)。下面就开发该界面的几个关键技术进行论述。4关键技术分析4.1用户界面设计用户界面的设计采用前面提到的Boa,需要注意的是各窗体控件之间的包容关系,位于顶层的窗体为wx.Frame、wx.Dialog、wx.MiniFrame、wx.MDIParentFrame、wx.MDIChildFrame,基本窗体为wx.Windows、wx.Panel、wx.ScrolledWindow等等,它们之间的包容关系为先顶层后基本,如果包容关系混乱,将会对以后的窗体布局控制产生影响。另外,如果在界面中使用了图形文件,那么请拷贝到你所保存源码文件的目录下,并手动更改为相对路径,否则在不同平台上运行会出现运行时错误,这是由于Boa默认的保存方式为绝对路径。管理员用户界面如图6、7所示。图6开始主界面图7显示报警信息时的界面4.2窗体布局的处理图形用户界面应该可以很好的处理各窗体之间的布局问题,在wxPython中通常使用Sizers进行布局控制,它类似于Java中的LayoutManagers。在图形界面中每个窗体都拥有一个最小尺寸,基于这个尺寸,当包容窗口改变它自身大小或状态时(更改了字体或标签),窗体布局机制就会自动计算子窗体的大小及位置以进行调整,在Boa中内置了wx.BoxSizer,wx.GridSizer,wx.FlexGridSizer,wx.StaticBoxSizer以及wx.NotebookSizer供我们使用。使用Sizers时最重要的一点就是窗体之间的嵌套问题,如果不注意窗体之间的相互关系,既包容窗口和被包容窗口(子窗口)的关系,Sizers可能无法满足你的要求。下面是实现Sizers的一些关键代码,这里还包含了嵌套的Sizers:#处于最上层的主Sizers,可管理附着于上面的子Sizers。mainSizer=wx.BoxSizer(wx.VERTICAL)#依次添加位于最上层窗体的各控件mainSizer.Add(topLbl,0,wx.ALL,5)mainSizer.Add(wx.StaticLine(panel),0,wx.EXPAND|wx.TOP|wx.BOTTOM,5)#notesSizer是一个Grid控件,它包含了所有用户输入的信息notesSizer=wx.FlexGridSizer(cols=2,hgap=5,vgap=5)#依次添加位于该层面上的各控件notesSizer.AddGrowableCol(1)notesSizer.Add(usernameLbl,0,wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)notesSizer.Add(username,0,wx.EXPAND)notesSizer.Add(passLbl,0,wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)notesSizer.Add(pass,0,wx.EXPAND)#把notesSizer加入到主Sizers当中去mainSizer.Add(notesSizer,0,wx.EXPAND|wx.ALL,10)#这里并排放置了两个按钮,并且按钮的间隔可以随着主窗体大小的改变而变化。buttonSizer=wx.BoxSizer(wx.HORIZONTAL)buttonSizer.Add((20,20),1)buttonSizer.Add(OKBtn)buttonSizer.Add((20,20),1)buttonSizer.Add(quitBtn)buttonSizer.Add((20,20),1)mainSizer.Add(buttonSizer,0,wx.EXPAND|wx.BOTTOM,10)#加入到主Sizers中#最后,通知wx.Panel,让Sizers进行布局处理panel.SetSizer(mainSizer)#将Frame放在所需要的Sizer当中,并防止它小于默认尺寸mainSizer.Fit(self)self.SetSizeHints(*self.GetSize())4.3多线程处理wxPython提供一个wxTimer类进行多线程处理,它可以在固定的时间间隔里进行不同的事务处理,并可以根据需要随时启动或停止该线程,且程序稳定性好,所以本系统采用轮询机制进行报警信息的查询。以下是实现的关键代码:self.timer1=wxTimer(evtHandler=self,id=wxID_AIC_GUITIMER1)#初始化一个wxTimerEVT_TIMER(self,wxID_AIC_GUITIMER1,self.OnTimer1Timer)#建立事件处理句柄self.timer1.Start(1000)#启动wxTimer,括号中为时间,单位毫秒。self.timer1.Stop()#停止wxTimerdefOnTimer1Timer(self,event):#编写你需要处理事务的代码,从略。4.4报警信息的显示在实际的系统中,一旦产生事件,就会引发大量的报警信息,如何显示这些信息,使得安全管理员能够一目了然的了解系统状况,是值得我们考虑的事情。我们利用wxPython中的wxListCtrl类进行实现。首先,我们把从数据库中查询到的信息进行分离显示,主窗口只显示最主要的信息,如果管理员对于某一条记录感兴趣的话,可以点

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功