一种进程访问文件的控制方法及装置与流程

文档序号:19893008发布日期:2020-02-11 12:55阅读:153来源:国知局
一种进程访问文件的控制方法及装置与流程

本发明涉及系统安全技术领域。本发明进一步涉及一种进程访问文件的控制方法及装置。



背景技术:

在linux系统上可以通过selinux来实现主体进程对客体文件的访问控制,这里的主体进程指的是可执行的二进制文件,如果想要控制某个脚本程序对客体文件的访问控制,则无法实现。

然而现在linux服务器上有大量的业务是基于脚本运行的,所以本发明提出了一种方法,可以实现主体为脚本的访问控制,保护用户重要的业务数据只允许指定的脚本程序执行。

因此,需要提出一种对主体进程访问客体文件进行控制,只允许指定的脚本程序进行访问的方法,来保护重要的数据不被非法篡改。



技术实现要素:

一方面,本发明基于上述目的提出了一种进程访问文件的控制方法,其中该方法包括以下步骤:

监测系统进程,并响应于监测到新建的进程,识别进程的脚本程序;

将进程及其脚本程序的结构数据存入脚本执行树缓存;

响应于监测到进程发起对文件的访问,在脚本执行树缓存中查询进程及其脚本程序的结构数据以确定对文件发起访问的脚本程序;

根据脚本程序的预设权限控制脚本程序对文件的访问。

根据本发明的进程访问文件的控制方法的实施例,其中监测系统进程,并响应于监测到新建的进程,识别进程的脚本程序进一步包括:

判断进程是否为bash进程;

响应于进程为bash进程,解析bash命令行参数以确定进程的脚本程序路径。

根据本发明的进程访问文件的控制方法的实施例,其中将进程及其脚本程序的结构数据存入脚本执行树缓存进一步包括:

根据进程id、进程路径、脚本程序路径、子程序链表头、子程序链表节点构建进程及其脚本程序的结构数据;

将结构数据存入脚本执行树缓存。

根据本发明的进程访问文件的控制方法的实施例,其中根据进程id、进程路径、脚本程序路径、子程序链表头、子程序链表节点构建所述进程及其脚本程序的结构数据进一步包括:

在脚本执行树缓存中查找当前进程的进程id;

基于进程id在脚本执行树缓存中查找当前进程的父进程;

以父进程的脚本程序路径作为当前进程的脚本程序路径来构建当前进程的结构数据,并将当前进程的结构数据关联到父进程的子程序链表头中。

根据本发明的进程访问文件的控制方法的实施例,其中响应于监测到进程发起对文件的访问,在脚本执行树缓存中查询进程及其脚本程序的结构数据以确定对文件发起访问的脚本程序进一步包括:

响应于监测到进程发起对文件的访问,在脚本执行树缓存中查找进程的进程id;

响应于查找到进程id,以进程id对应的结构数据中的程序脚本路径作为发起文件的访问的当前主体路径。

另一方面,本发明还提出了一种进程访问文件的控制装置,其中该装置包括:

至少一个处理器;和

存储器,该存储器存储有处理器可运行的程序指令,该程序指令在被处理器运行时执行以下步骤:

监测系统进程,并响应于监测到新建的进程,识别进程的脚本程序;

将进程及其脚本程序的结构数据存入脚本执行树缓存;

响应于监测到进程发起对文件的访问,在脚本执行树缓存中查询进程及其脚本程序的结构数据以确定对文件发起访问的脚本程序;

根据脚本程序的预设权限控制脚本程序对文件的访问。

根据本发明的进程访问文件的控制装置的实施例,其中监测系统进程,并响应于监测到新建的进程,识别进程的脚本程序进一步包括:

判断进程是否为bash进程;

响应于进程为bash进程,解析bash命令行参数以确定进程的脚本程序路径。

根据本发明的进程访问文件的控制装置的实施例,其中将进程及其脚本程序的结构数据存入脚本执行树缓存进一步包括:

根据进程id、进程路径、脚本程序路径、子程序链表头、子程序链表节点构建进程及其脚本程序的结构数据;

将结构数据存入脚本执行树缓存。

根据本发明的进程访问文件的控制装置的实施例,其中根据进程id、进程路径、脚本程序路径、子程序链表头、子程序链表节点构建所述进程及其脚本程序的结构数据进一步包括:

在脚本执行树缓存中查找当前进程的进程id;

基于进程id在脚本执行树缓存中查找当前进程的父进程;

以父进程的脚本程序路径作为当前进程的脚本程序路径来构建当前进程的结构数据,并将当前进程的结构数据关联到父进程的子程序链表头中。

根据本发明的进程访问文件的控制装置的实施例,其中响应于监测到进程发起对文件的访问,在脚本执行树缓存中查询进程及其脚本程序的结构数据以确定对文件发起访问的脚本程序进一步包括:

响应于监测到进程发起对文件的访问,在脚本执行树缓存中查找进程的进程id;

响应于查找到进程id,以进程id对应的结构数据中的程序脚本路径作为发起文件的访问的当前主体路径。

采用上述技术方案,本发明至少具有如下有益效果:通过建立脚本执行树缓存并在其中存储进程及其脚本程序的结构数据将进程与相应的脚本程序对应起来,在监测到主体进程访问客体文件时就可以通过查询脚本执行树缓存来确定实际发起访问客体文件的脚本程序,由于预先为脚本程序分配了预设的权限,所以可以根据该脚本程序的权限来控制主体进程对客体文件的访问是否被允许,从而实现了仅允许指定的脚本程序访问指定的文件,保护了重要的数据不被非法篡改。

本发明提供了实施例的各方面,不应当用于限制本发明的保护范围。根据在此描述的技术可设想到其它实施方式,这对于本领域普通技术人员来说在研究以下附图和具体实施方式后将是显而易见的,并且这些实施方式意图被包含在本申请的范围内。

下面参考附图更详细地解释和描述了本发明的实施例,但它们不应理解为对于本发明的限制。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对现有技术和实施例描述中所需要使用的附图作简单地介绍,附图中的部件不一定按比例绘制,并且可以省略相关的元件,或者在一些情况下比例可能已经被放大,以便强调和清楚地示出本文描述的新颖特征。另外,如本领域中已知的,结构顺序可以被不同地布置。

图1示出了根据本发明的进程访问文件的控制方法的实施例的示意性框图。

具体实施方式

虽然本发明可以以各种形式实施,但是在附图中示出并且在下文中将描述一些示例性和非限制性实施例,但应该理解的是,本公开将被认为是本发明的示例并不意图将本发明限制于所说明的具体实施例。

图1示出了根据本发明的进程访问文件的控制方法的实施例的示意性框图。在如图所示的实施例中,该方法至少包括以下步骤:

s1:监测系统进程,并响应于监测到新建的进程,识别进程的脚本程序;

s2:将进程及其脚本程序的结构数据存入脚本执行树缓存;

s3:响应于监测到进程发起对文件的访问,在脚本执行树缓存中查询进程及其脚本程序的结构数据以确定对文件发起访问的脚本程序;

s4:根据脚本程序的预设权限控制脚本程序对文件的访问。

本发明的实现在另一方面包括应用程序和内核驱动两部分。

应用程序的主要功能包括:

1)下发访问控制策略到内核驱动,指定某个受保护的文件/目录只允许指定的脚本程序访问。

2)接收内核驱动发送的访问控制日志,并将日志保存到日志文件。

内核驱动的主要功能包括:

1)拦截程序的执行操作,并判断执行的程序是否为bash程序,如果是则解析程序的参数,根据参数提取脚本的文件的路径。

2)构建脚本程序执行树的缓存,将脚本程序与其调用的子程序通过数据结构连接起来。

3)拦截文件的访问操作,查询缓存并判断当前主体进程是否由某个脚本程序调用,如果是则查询访问控制策略判断是否允许本次文件访问操作。

4)接收应用程序发送的访问控制策略,发送访问控制日志到应用层守护程序。

具体地,内核驱动初始化时做以下工作:

1)注册字符设备,用来和应用程序进行通信。

2)遍历进程列表,将脚本程序及其子程序记录到脚本执行树缓存中。

3)通过系统调用hook等方式hook系统的程序执行、程序退出功能,用来维护脚本执行树缓存的添加、删除。

4)通过系统调用hook等方式hook系统的文件访问操作,用来决策对受保护的文件访问许可。

此外,应用程序初始化时做以下工作:

1)下发访问控制策略到内核驱动。

2)创建守护线程等待接收内核驱动发送的访问控制日志。

基于上述应用程序和内核驱动,根据本发明的方法首先在步骤s1中监测系统进程,并在监测到新建的进程时,识别进程的脚本程序。将进程及其识别出的脚本程序生成结构数据,并在步骤s2中将该数据结构存入脚本执行树缓存。当监测到进程发起对文件的访问时,由于根据本发明的构思是给脚本程序分配了相应的访问权限,所以需要确定访问该文件的进程相对应的脚本程序。因此步骤s3在脚本执行树缓存中查询进程及其脚本程序的结构数据以确定对文件发起访问的脚本程序。然后就可以在步骤s4中根据脚本程序的预设权限控制脚本程序对文件的访问。如果该脚本程序有权限访问该文件,则正常进行主体进程对客体文件的访问。如果该脚本程序没有访问该文件的权限,则禁止此次文件访问操作并发送日志到应用层日志守护线程。另外,根据本发明的实施例,可以理解,方法还包括为各个脚本程序分配相应的访问权限。

下文将说明本发明的进一步实施例,需要注意的是,其中提到的步骤的编号在没有特殊说明的情况下,仅用于便捷明确地指示该步骤,并不限定所述步骤的顺序。

在本发明的进程访问文件的控制方法的一些实施例中,步骤s1监测系统进程,并响应于监测到新建的进程,识别进程的脚本程序进一步包括:

s11:判断进程是否为bash进程;

s12:响应于进程为bash进程,解析bash命令行参数以确定进程的脚本程序路径。

脚本程序是由脚本解释器解释执行的,比如执行bashtest.sh,主体进程为bash进程,test.sh为脚本文件。所以需要在脚本执行时将主体由bash进程转换成test.sh脚本程序。脚本执行分为两种方式,一种是执行bashtest.sh,另一种是直接执行./test.sh,前一种方式需要分析程序执行的参数并获取到test.sh,后一种方式在内核驱动中可以直接获取到test.sh的路径。

因此,在监测到新建的进程时,要首先在步骤s11中判断进程是否为bash进程以确定该进程是否是由脚本程序执行的。当确定了该进程是bash进程后,步骤s12解析bash命令行参数以确定进程的脚本程序路径。具体地说,在拦截到程序的执行动作时,首先获取当前主体进程的全路径。如果当前进程的主体是/bin/bash,则进一步解析当前进程的参数,如果bash是正在解释脚本程序,则提取出脚本程序的路径。如果当前进程的主体不是/bin/bash,则解析当前主体是否是脚本程序文件,通过判断文件头是否包含#!/bin/bash来判断,如果包含则当前进程主体就是一个脚本执行文件。

在本发明的进程访问文件的控制方法的若干实施例中,步骤s2将进程及其脚本程序的结构数据存入脚本执行树缓存进一步包括:

s21:根据进程id、进程路径、脚本程序路径、子程序链表头、子程序链表节点构建进程及其脚本程序的结构数据;

s22:将结构数据存入脚本执行树缓存。

其中,步骤s21中构建的结构数据包含<pid,进程路径,脚本程序路径,子程序链表头,子程序链表节点>,上述参数中:

pid:进程id;

进程路径:该进程的路径,(即脚本解释器的路径);

脚本程序路径:该进程的脚本程序的路径;

子程序链表头:一个脚本程序所运行的子脚本程序链表头;

子程序链表节点:一个脚本程序所链接到子脚本程序。

在本发明的进程访问文件的控制方法的进一步实施例中,步骤s21根据进程id、进程路径、脚本程序路径、子程序链表头、子程序链表节点构建所述进程及其脚本程序的结构数据进一步包括:

s211:在脚本执行树缓存中查找当前进程的进程id;

s212:基于进程id在脚本执行树缓存中查找当前进程的父进程;

s213:以父进程的脚本程序路径作为当前进程的脚本程序路径来构建当前进程的结构数据,并将当前进程的结构数据关联到父进程的子程序链表头中。

当识别到一个脚本程序时,将结构数据初始化,设置pid为当前进程pid,进程路径/bin/bash,脚本程序路径设置为识别到的脚本程序路径,初始化子程序链表头。

在监测到一个新的程序执行时,首先步骤s211根据当前进程的pid在脚本执行树缓存中查找。如果查找到则表示当前进程是由一个脚本程序调用的,则步骤s212确定脚本执行树缓存中查找到的pid所对应的进程为当前进程的父进程。然后,步骤s213将结构数据初始化,设置pid为当前进程pid,进程路径为当前程序路径,以父进程的脚本程序路径作为当前进程的脚本程序路径来构建当前进程的结构数据,最后将当前进程的结构数据关联到父进程的子程序链表头中。

另外,当拦截到进程的退出操作时,根据当前进程pid在脚本执行树缓存中查找,如果查找到则在脚本执行树缓存中删除相应的结构数据,以保证脚本执行树缓存中所缓存的结构数据与实际运行中的进程的一致性。

在本发明的进程访问文件的控制方法的一些实施例中,步骤s3响应于监测到进程发起对文件的访问,在脚本执行树缓存中查询进程及其脚本程序的结构数据以确定对文件发起访问的脚本程序进一步包括:

s31:响应于监测到进程发起对文件的访问,在脚本执行树缓存中查找进程的进程id;

s32:响应于查找到进程id,以进程id对应的结构数据中的程序脚本路径作为发起文件的访问的当前主体路径。

当拦截到文件的访问操作时,步骤s31根据当前进程pid在脚本执行树缓存中查找。如果查找到,则在提取脚本执行树缓存中的对应结构数据的程序脚本路径为发起文件的访问的当前主体路径。如果没有查找到则提取当前进程路径为当前主体路径。最后根据访问控制策略中限制的主体对客体的访问来判断此次文件访问操作是否被允许,如果返回拒绝则禁止此次文件访问操作并发送日志到应用层日志守护线程。

另一方面,本发明还提出了一种进程访问文件的控制装置,其中该装置包括:至少一个处理器;和存储器,该存储器存储有处理器可运行的程序指令,该程序指令在被处理器运行时执行以下步骤:

s1:监测系统进程,并响应于监测到新建的进程,识别进程的脚本程序;

s2:将进程及其脚本程序的结构数据存入脚本执行树缓存;

s3:响应于监测到进程发起对文件的访问,在脚本执行树缓存中查询进程及其脚本程序的结构数据以确定对文件发起访问的脚本程序;

s4:根据脚本程序的预设权限控制脚本程序对文件的访问。

在本发明的进程访问文件的控制装置的一些实施例中,步骤s1监测系统进程,并响应于监测到新建的进程,识别进程的脚本程序进一步包括:

s11:判断进程是否为bash进程;

s12:响应于进程为bash进程,解析bash命令行参数以确定进程的脚本程序路径。

在本发明的进程访问文件的控制装置的若干实施例中,步骤s2将进程及其脚本程序的结构数据存入脚本执行树缓存进一步包括:

s21:根据进程id、进程路径、脚本程序路径、子程序链表头、子程序链表节点构建进程及其脚本程序的结构数据;

s22:将结构数据存入脚本执行树缓存。

在本发明的进程访问文件的控制装置的进一步实施例中,步骤s21根据进程id、进程路径、脚本程序路径、子程序链表头、子程序链表节点构建所述进程及其脚本程序的结构数据进一步包括:

s211:在脚本执行树缓存中查找当前进程的进程id;

s212:基于进程id在脚本执行树缓存中查找当前进程的父进程;

s213:以父进程的脚本程序路径作为当前进程的脚本程序路径来构建当前进程的结构数据,并将当前进程的结构数据关联到父进程的子程序链表头中。

在本发明的进程访问文件的控制装置的一些实施例中,步骤s3响应于监测到进程发起对文件的访问,在脚本执行树缓存中查询进程及其脚本程序的结构数据以确定对文件发起访问的脚本程序进一步包括:

s31:响应于监测到进程发起对文件的访问,在脚本执行树缓存中查找进程的进程id;

s32:响应于查找到进程id,以进程id对应的结构数据中的程序脚本路径作为发起文件的访问的当前主体路径。

本发明实施例公开所述的装置、设备等可为各种电子终端设备,例如手机、个人数字助理(pda)、平板电脑(pad)、智能电视等,也可以是大型终端设备,如服务器等,因此本发明实施例公开的保护范围不应限定为某种特定类型的装置、设备。本发明实施例公开所述的客户端可以是以电子硬件、计算机软件或两者的组合形式应用于上述任意一种电子终端设备中。

本文所述的计算机可读存储介质(例如存储器)可以是易失性存储器或非易失性存储器,或者可以包括易失性存储器和非易失性存储器两者。作为例子而非限制性的,非易失性存储器可以包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦写可编程rom(eeprom)或快闪存储器。易失性存储器可以包括随机存取存储器(ram),该ram可以充当外部高速缓存存储器。作为例子而非限制性的,ram可以以多种形式获得,比如同步ram(dram)、动态ram(dram)、同步dram(sdram)、双数据速率sdram(ddrsdram)、增强sdram(esdram)、同步链路dram(sldram)、以及直接rambusram(drram)。所公开的方面的存储设备意在包括但不限于这些和其它合适类型的存储器。

采用上述技术方案,本发明至少具有如下有益效果:通过建立脚本执行树缓存并在其中存储进程及其脚本程序的结构数据将进程与相应的脚本程序对应起来,在监测到主体进程访问客体文件时就可以通过查询脚本执行树缓存来确定发起访问客体文件的脚本程序,由于预先为脚本程序分配了预设的权限,所以可以根据该脚本程序的权限来控制主体进程对客体文件的访问是否被允许,从而实现了仅允许指定的脚本程序访问指定的文件,保护了重要的数据不被非法篡改。

应当理解的是,在技术上可行的情况下,以上针对不同实施例所列举的技术特征可以相互组合,从而形成本发明范围内的另外实施例。此外,本文所述的特定示例和实施例是非限制性的,并且可以对以上所阐述的结构、步骤及顺序做出相应修改而不脱离本发明的保护范围。

在本申请中,反意连接词的使用旨在包括连接词。定或不定冠词的使用并不旨在指示基数。具体而言,对“该”对象或“一”和“一个”对象的引用旨在表示多个这样对象中可能的一个。然而,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。此外,可以使用连接词“或”来传达同时存在的特征,而不是互斥方案。换句话说,连接词“或”应理解为包括“和/或”。术语“包括”是包容性的并且具有与“包含”相同的范围。

上述实施例,特别是任何“优选”实施例是实施方式的可能示例,并且仅仅为了清楚理解本发明的原理而提出。在基本上不脱离本文描述的技术的精神和原理的情况下,可以对上述实施例做出许多变化和修改。所有修改旨在被包括在本公开的范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1