本发明涉及计算机技术领域,具体涉及一种linux下自动加载插件的系统和方法。
背景技术:
linux操作系统由于其良好的可定制性与扩展性,使其在各种应用环境中都能够满足多样化的需求。大型的超级计算机、嵌入式设备、日常办公设备,以及移动计算终端设备,linux操作系统都能够部署在这些应用环境中。
目前存在的大多数的系统实现方案中,均使用巨内核+插件的形式实现,即大部分功能由系统运行的框架来实现,而有极少的功能是由插件来实现的。
基于这种设计的系统实现方案,扩展性很差,甚至没有扩展性。如在某些特定的业务中,这种系统实现方案能够满足业务需求,但是对于其他一些需要经常或频繁增加业务场景的情况,这种系统实现方案展现出不可扩展的弊端,不能满足业务的需要。
技术实现要素:
本发明实施例中提供了一种linux下自动加载插件的系统和方法,以解决现有方案扩展性差的问题。
本发明实施例公开了如下技术方案:
本发明第一方面提供了一种linux下自动加载插件的系统,包括:
插件数据采集模块、插件解析模块、插件执行模块和插件响应模块,所述插件数据采集模块用于采集系统配置文件中的插件信息,所述插件数据采集模块用于将所述插件信息存储到数据库中,所述插件解析模块用于解析数据库中的插件信息,所述插件运行模块用于运行插件,所述插件响应模块用于汇总插件运行结果。
进一步地,所述系统配置文件包括所述系统版本、执行结果输出类型、日志配置参数和插件接入点,所述执行结果输出类型用于定义插件执行结果的文件类型、所述日志配置参数用于定义日志模块记录的日志文件容量、日志文件存储路径和日志级别,所述插件接入点包括一个或多个插件列表,所述插件接入点用于提供插件列表的文件路径,所述插件列表包括一个或多个插件。
进一步地,所述插件解析模块解析数据库中的插件信息具体为:
获取插件列表中的插件级别,并依据插件级别对插件进行降序排列;
获取插件列表中插件的第一hash值,根据插件列表中插件信息求取第二hash值;
若第一hash值和第二hash值相同,则获取插件列表中插件的运行场景;
若运行场景为远程执行,则获取插件列表中插件的类型;
根据插件类型,进行插件的拉起操作。
进一步地,所述根据插件类型,进行插件的拉起操作具体为:
若插件类型为可执行文件,则所述系统使用管道执行指令进行插件的拉起操作;
若插件类型为脚本,则所述系统调用check()函数进行插件的拉起操作。
进一步地,所述系统还包括日志模块,所述日志模块用于记录所述插件数据采集模块、插件解析模块和插件运行模块的执行过程日志,所述日志模块用于记录所述插件响应模块的运行结果日志。
本发明第二方面提供了一种linux下自动加载插件的方法,包括:
采集系统配置文件中的插件信息;
将插件信息存储到数据库中;
解析数据库中的插件信息;
运行插件;
汇总插件运行结果。
进一步地,所述系统配置文件包括所述系统版本、执行结果输出类型、日志配置参数和插件接入点,所述执行结果输出类型用于定义插件执行结果的文件类型、所述日志配置参数用于定义日志模块记录的日志文件容量、日志文件存储路径和日志级别,所述插件接入点包括一个或多个插件列表,所述插件接入点用于提供插件列表的文件路径,所述插件列表包括一个或多个插件。
进一步地,所述解析数据库中的插件信息具体为:
获取插件列表中的插件级别,并依据插件级别对插件进行降序排列;
获取插件列表中插件的第一hash值,根据插件列表中插件信息求取第二hash值;
若第一hash值和第二hash值相同,则获取插件列表中插件的运行场景;
若运行场景为远程执行,则获取插件列表中插件的类型;
根据插件类型,进行插件的拉起操作。
进一步地,所述根据插件类型,进行插件的拉起操作具体为:
若插件类型为可执行文件,则所述系统使用管道执行指令进行插件的拉起操作;
若插件类型为脚本,则所述系统调用check()函数进行插件的拉起操作。
进一步地,所述方法还包括:
记录采集系统配置文件中插件信息、将插件信息存储到数据库、解析数据库中插件信息和运行插件的执行过程日志,记录插件的运行结果日志。
发明内容中提供的效果仅仅是实施例的效果,而不是发明所有的全部效果,上述技术方案中的一个技术方案具有如下优点或有益效果:
1)本发明提供的linux下自动加载插件的系统和方法,在系统配置文件的插件接入点中配置插件列表,通过自动加载插件接入点,自动解析数据库中的插件信息,并自动运行插件,本发明可以将插件统一集成到系统中,实现了在不修改源码的情况下,达到自动加载插件的目的,扩展性极强。
2)本发明提供的linux下自动加载插件的系统和方法,在采集插件信息到数据库,和插件实际运行的过程中,进行hash值比对,防止在采集插件信息和插件实际运行的空档时期,插件内容被有意或无意篡改,确保了插件的完整性和合法性,提高了系统的安全性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明所述系统结构框图;
图2为本发明所述方法流程图。
具体实施方式
为了能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。
如图1所示,为本发明系统结构框图,系统包括:插件数据采集模块、插件解析模块、插件执行模块和插件响应模块,插件数据采集模块用于采集系统配置文件中的插件信息,插件数据采集模块用于将插件信息存储到数据库中,插件解析模块用于解析数据库中的插件信息,插件运行模块用于运行插件,插件响应模块用于汇总插件运行结果。
系统配置文件包括系统版本、执行结果输出类型、日志配置参数和插件接入点,执行结果输出类型用于定义插件执行结果的文件类型、日志配置参数用于定义日志模块记录的日志文件容量、日志文件存储路径和日志级别,插件接入点包括一个或多个插件列表,插件接入点用于提供插件列表的文件路径,插件列表包括一个或多个插件。
系统配置文件样例如下:
上述系统配置文件格式为json,其中涉及的各个配置项说明如下:
version:系统的当前版本;
exporttype:执行结果输出类型,本发明系统在依次按顺序执行完所有插件之后,会将插件执行结果等必要信息进行汇总,并以相应的格式类型进行生成结果文件,文件格式支持json、xml、txt等主流文件格式,默认为json;
loginfo:日志配置参数,此数组中所配置的信息,定义了日志模块的日志文件容量、日志文件存储路径和日志级别;
plugins:插件接入点,此列表中所配置信息为欲加载的插件列表pluginsinfo的文件路径,只有在系统配置文件中配置了pluginsinfo文件路径,并且pluginsinfo文件能够被插件解析模块正确的解析,本发明系统才会对这个插件进行加载并自动运行。
插件列表pluginsinfo(/home/test/test.json)文件样例如下:
上述插件列表pluginsinfo文件中涉及的各个配置项说明如下:
author:插件作者,可空;
plugintype:插件类型,参数值可为exe或script;
scene:运行场景,参数值可为local或remote,local表明当前pluginsinfo文件中配置的所有运行插件,均会在本地执行;remote表明当前pluginsinfo文件中配置的所有运行插件会在远程主机执行;
ip:远程主机ipv4地址,可为空,当运行场景为remote,此配置不可为空;
userandpasswd:远程主机用户名和密码,可为空,当运行场景为remote,此配置不可为空;
plugin:此列表所配置的内容,即为当前pluginsinfo文件中包含的所有插件列表,列表中插件个数可以为0个或多个。
插件类型exe表明当前pluginsinfo文件中配置的所有运行插件,均是可执行文件,即可直接运行的可执行程序,这类插件可以是自研插件,也可以是第三方插件,本发明所述的系统在执行此种类型的插件的时候,会直接使用管道执行指令行进行插件程序的拉起操作;script表明当前pluginsinfo文件中配置的所有运行插件,均是脚本,即python脚本,或者是shell脚本,一般不具有可直接运行的能力,插件内容为一个或几个函数,这些函数具有统一的入口函数check(),本发明所述的系统在执行此种类型的插件的时候,会直接调用check()函数进行插件程序的拉起操作。
插件的各项参数说明如下:
plugin_id:插件id;
plugin_name:插件名称;
plugin_exe:插件可执行程序;
plugin_config:插件的命令行参数;
plugin_level:插件级别,从高到低的级别是5/4/3/2/1;
version:插件版本。
在同一个pluginsinfo文件中,可以通过plugin_id和version两个字段来唯一的确定一个插件的版本。
本发明所述的系统的实现方案中,插件数据采集模块会获取系统配置文件的所有信息和插件列表文件中的所有信息,并存储到数据库中,数据库每条记录的字段信息包括:主键(作为插件的唯一值)、pluginsinfo、plugin_id、version、plugin_name、plugin_exe、hashvalue、plugin_config、plugin_level、scene、ip、userandpasswd等,并对pluginsinfo、plugin_id、version三个字段建立联合唯一索引,三个字段能唯一确定一个插件。hashvalue字段为plugin_exe字段的hash值,为后期插件运行的时候,做插件完整性及合法性校验做准备。相同pluginsinfo、plugin_id,不同version的信息,只有version值最大的那条数据才会被录入到数据库中。
插件解析模块解析数据库中的插件信息具体为:
1)获取插件列表中的插件级别,并依据插件级别对插件进行降序排列;
2)获取插件列表中插件的第一hash值,根据插件列表中插件信息求取第二hash值;
3)若第一hash值和第二hash值相同,则获取插件列表中插件的运行场景,若第一hash值和第二hash值不相同,则说明在此期间,程序被有意或者无意篡改过,可能是恶意攻击,则跳过本插件的执行,继续执行下一个插件;
4)若运行场景为远程执行,则通过ssh协议将插件配置信息传送到的远程主机;并获取插件列表中插件的类型;
5)根据插件类型,进行插件的拉起操作。
根据插件类型,进行插件的拉起操作具体为:
若插件类型为可执行文件,则系统使用管道执行指令进行插件的拉起操作;
若插件类型为脚本,则系统调用check()函数进行插件的拉起操作。
ssh是一种通讯协议,可以实现远程安全登录。ssh命令的用户名密码在userandpasswd字段中配置,中间用“/”进行间隔;如果字段配置为local,系统不做任何操作;其次判断插件信息的plugintype字段,如果字段配置为exe,则系统使用管道执行插件指令,插件指令为plugin_exe字段和plugin_config字段两个组合起来的内容,如plugin_exe配置为“/home/test/safe_centos_001.py”,plugin_config字段配置为“01”,则本专利所述的系统在执行插件的时候,会执行“/home/test/safe_centos_001.py01”,如果字段配置为script,则系统调用plugin_exe字段所配置的脚本中的check()函数,脚本所传入的参数,由plugin_config字段指定。
不管是使用管道执行命令行参数,还是调用脚本中配置的函数,都能获取插件的运行结果,系统将对所获取到的运行结果进行汇总为系统配置文件中exporttype配置项中配置的类型格式,即如exporttype字段配置的为json,则结果文件为json串。
json串样例为:
json串样例中各个字段解释如下:
totalpluginnum:执行插件总个数;
successnum:执行成功插件总个数;
failnum:执行失败插件总个数;
faillist:执行失败插件列表及失败原因;
successlist:执行成功列表。
生成结果文件之后,插件执行模块运行完成。
系统还包括日志模块,日志模块用于记录插件数据采集模块、插件解析模块和插件运行模块的执行过程日志,日志模块用于记录插件响应模块的运行结果日志。
本系统在程序启动伊始,就对日志模块进行初始化,单个日志文件最大值,由系统配置文件中的loginfo数组中的logmaxsize参数指定,默认为2m,最大为20m;日志级别由loglevel字段指定,分别为1/2/3三个级别,代表error、info、debug三个级别的日志;日志路径由logpath字段指定,当日志路径存在时,直接将日志文件存储在指定的日志路径下;如果日志路径不存在,则首先创建日志路径,再进行日志文件的存储,日志日志模块存储的日志便于后期对异常内容进行分析。
如图2所示,为本发明方法流程图,方法包括:
采集系统配置文件中的插件信息;
将插件信息存储到数据库中;
解析数据库中的插件信息;
运行插件;
汇总插件运行结果。
方法还包括:
记录采集系统配置文件中插件信息、将插件信息存储到数据库、解析数据库中插件信息和运行插件的执行过程日志,记录插件的运行结果日志。
系统配置文件包括系统版本、执行结果输出类型、日志配置参数和插件接入点,执行结果输出类型用于定义插件执行结果的文件类型、日志配置参数用于定义日志模块记录的日志文件容量、日志文件存储路径和日志级别,插件接入点包括一个或多个插件列表,插件接入点用于提供插件列表的文件路径,插件列表包括一个或多个插件。
解析数据库中的插件信息具体为:
获取插件列表中的插件级别,并依据插件级别对插件进行降序排列;
获取插件列表中插件的第一hash值,根据插件列表中插件信息求取第二hash值;
若第一hash值和第二hash值相同,则获取插件列表中插件的运行场景;
若运行场景为远程执行,则获取插件列表中插件的类型;
根据插件类型,进行插件的拉起操作。
本发明中存储到数据库中的插件的hash值,可以使用aes等对称加密算法进行加密,密钥由系统的命令行参数来指定。
根据插件类型,进行插件的拉起操作具体为:
若插件类型为可执行文件,则系统使用管道执行指令进行插件的拉起操作;
若插件类型为脚本,则系统调用check()函数进行插件的拉起操作。
本发明能够自动加载在系统配置文件中配置的插件,并运行插件,实现插件的自加载和自运行,提高了系统拓展性。每次加载插件的时候,通过校验插件的hash值,来确保插件的完整性和合法性,提高了系统的安全性。
以上所述只是本发明的优选实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也被视为本发明的保护范围。