一种脚本文件生成和调用方法以及装置与流程

文档序号:15204868发布日期:2018-08-21 07:33阅读:301来源:国知局

本公开涉及分布式技术领域,具体而言,涉及一种脚本文件生成和调用方法以及装置。



背景技术:

分布式存储是一种数据存储技术,通过网络使用企业中的每台机器上的磁盘空间,并将这些分散的资源构成一个虚拟的存储设备,数据分散的存储在企业的各个角落。分布式存储系统作为分布式存储的一种具体应用,其由大量主机通过网络互联构成,对外作为一个整体提供存储服务。在分布式存储系统中,每个主机称为一个节点;节点的集合称为集群。

分布式文件系统想要正常运行,需要各方面的配合;从代码工程层面,需要有前台供客户查看集群状态,需要有后台进行数据存储、采集以及各种消息的处理。这些功能都会通过不同的组件来完成,例如监控组件提供监控与告警功能;数据采集组件提供高频的集群、节点数据采集功能;数据库组件提供部分集群管理和数据库业务;接口组件提供集群及组件的状态和性能数据的接口;通信组件提供基础的通信方式,用于集群内各个节点之间的通信;安装组件提供分布式文件系统的安装、升级和卸载等功能。这些组件经过编译打包,生成一个可以运行在存储服务器上的明文的脚本文件安装包;该明文的脚本文件安装包在存储服务器上安装成功后,客户就可以通过前台页面和后台来管理集群。

但是当前除了c类代码(比如c++以及c语言)本身不提供源代码而只提供接口外,其它编程语言的源代码都是对用户可见的。尤其是诸如shell、python等脚本语言。分布式文件系统明文的脚本文件的脚本文件中会携带分布式文件系统的代码逻辑、实现方式,甚至是如用户名、密码等信息。用户只需要使用最简单的文本编译器打开脚本文件,就可以查看和篡改分布式文件系统的这些信息,甚至基于这些保密信息对明文的脚本文件发布方的自主知识产权进行偷窃,这对于分布式文件系统明文的脚本文件的发布者来说,是极其不安全的。



技术实现要素:

有鉴于此,本公开实施例的目的在于提供一种脚本文件生成和调用方法以及装置,能够对明文的脚本文件中明文的脚本文件编译成可执行的二进制文件,防止明文的脚本文件产品的各类脚本被任意查看、篡改和偷窃,保证明文的脚本文件产品代码的安全。

第一方面,提供一种脚本文件生成和调用方法,用于对分布式文件系统中脚本文件进行调用,该方法包括:

在创建明文的脚本文件后,将创建的所述明文的脚本文件编译为可执行的二进制文件;

将所述明文的脚本文件的调用文件和所述明文的脚本文件之间的调用关系,替换为所述调用文件和所述二进制文件之间的调用关系,以便在所述调用文件需要调用所述明文的脚本文件时,基于替换后的所述调用关系,调用所述二进制文件。

第二方面,提供一种脚本文件生成和调用装置,用于对分布式文件系统中脚本文件进行调用,该方法包括:

编译模块,用于在创建明文的脚本文件后,将创建的所述明文的脚本文件编译为可执行的二进制文件;

调用关系建立模块,用于将所述明文的脚本文件的调用文件和所述明文的脚本文件之间的调用关系,替换为所述调用文件和所述二进制文件之间的调用关系,以便在所述调用文件需要调用所述明文的脚本文件时,基于替换后的所述调用关系,调用所述二进制文件。

第三方面,提供一种脚本文件生成和调用装置,用于对分布式文件系统中脚本文件进行调用,该装置包括:

处理器、存储器和总线,所述存储器存储执行指令,当所述装置运行时,所述处理器与所述存储器之间通过总线通信,所述处理器执行所述执行指令使得所述装置执行如第一方面所述的脚本文件生成和调用方法的步骤。

第四方面,提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序用于对分布式文件系统中脚本文件进行调用,且该计算机程序被处理器运行时执行上述第一方面所述的脚本文件生成和调用方法的步骤。

本公开实施例通过将明文的脚本文件编译为可执行的二进制文件,并将明文的脚本文件和明文的脚本文件的调用文件之间的调用关系,替换为调用文件和二进制文件之间的调用关系,使得调用文件在调用明文的脚本文件时,不去调用明文的脚本文件,而是调用明文的脚本文件编译后生成的二进制文件。二进制文件使用二进制字符作为信息的承载体,而并非是由文字组成的具体信息,该二进制字符能够由计算机识别,而对于人来说则是无法通过二进制字符获得其所要表达的具体的信息(也即源代码所要表达的具体信息),进而实现了脚本文件中的源代码对用户不可见。且由于二进制文件能够直接被计算机执行,因此也就不会存在调用失败的问题。

为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1示出了本公开实施例所提供的一种脚本文件生成和调用方法的流程图;

图2示出了一种将shell脚本文件编译成的二进制文件的具体内容示例;

图3示出了一种将python脚本文件编译成的二进制文件的具体内容示例;

图4示出了本公开实施例所提供的一种脚本文件生成和调用装置的结构示意图;

图5示出了本公开实施例所提供的另一种脚本文件生成和调用装置的结构示意图。

具体实施方式

在分布式文件系统中,文件与文件之间存在调用与被调用的关系;例如如果分布式文件系统如果是使用c类语言,以及脚本语言编程而得,按照系统的实现逻辑,可能会存在c类文件会调用脚本文件,脚本文件调用其它脚本文件的情况;如果对脚本文件使用对称加密算法、哈希加密算法等进行加密,而加密后的文件是不能直接使用的,会导致需要调用该脚本文件的其它文件在调用该脚本文件时失败,进而影响系统功能的实现。

为了解决现有技术中存在的脚本文件中的源代码对用户可见的问题,本公开通过将明文的脚本文件编译为可执行的二进制文件,并将明文的脚本文件和明文的脚本文件的调用文件之间的调用关系,替换为调用文件和二进制文件之间的调用关系,使得调用文件在调用明文的脚本文件时,不去调用明文的脚本文件,而是调用明文的脚本文件编译后生成的二进制文件,进而实现了脚本文件中的源代码对用户不可见。

为使本公开的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本公开做进一步详细的说明。在本公开实施例中,该方法不仅能够对分布式软件系统中明文的脚本文件进行加密,也能够对其它系统中脚本文件的源代码进行加密。执行该方法的主体,通常为实现软件工程的主机设备,也可以为其它主机设备。下面以执行主体为实现软件工程的主机设备为例对该方法加以说明。

参见图1所示,如为本公开实施例提供的脚本文件生成和调用方法的流程图,该方法包括:

s101:在创建明文的脚本文件后,将创建的明文的脚本文件编译为可执行的二进制文件。

此处,明文的脚本文件是分布式文件系统中原来使用的脚本文件。明文的脚本文件中携带了由脚本语言构成的源代码;脚本文件类似于磁盘操作系统(diskoperatingsystem,dos)中的批处理文件,它可以将不同的命令组合起来,并按确定的顺序自动连续地执行。二进制文件是指信息由二进制字符表达的文件,其不需要经过编译就能够被计算机直接执行。该二进制字符能够由计算机识别,而对于人来说则是无法通过二进制字符获得其所要表达的具体的信息,因此,也就无法从二进制文件中查看到分布式文件系统的代码逻辑、实现方式,甚至是如用户名、密码等信息。

下面分别以程序化脚本语言shellscript脚本文件和python脚本文件为例对该步骤加以说明。

shellscript:将各类命令预先放入到一个文件中,方便一次性执行的一个程序文件。

其一,可以使用shell脚本编译器shc将明文的shell脚本文件加密,并编译为二进制的shell脚本文件:

shell脚本编译器(shellscriptcompiler,shc)能够加密shell脚本文件。它的原理是使用rc4算法将明文的脚本文件进行加密,然后将明文的脚本文件加密后生成的数据、加密时使用的秘钥以及解密的程序代码保存为一个c文件;将c文件编译为二进制的shell脚本文件。此外,还可以将c文件删除,仅保留生成的二进制的shell脚本文件。如图2所示提供了一个shell脚本文件编译成的二进制文件的具体内容示例。

例如,在执行了shc加密命令后,生成两个文件:可执行的二进制文件,以及脚本文件经编码加密生成的c文件;假设该shell脚本文件的名称是a,则原加密脚本文件为a.sh,二进制文件为a.sh.x,c文件为a.sh.x.c。此处需要注意的是,由于本公开中仅仅需要二进制文件即可,因此一般情况下,可以将c文件删除。

其二,使用gzexe程序将明文的shell脚本文件加密,并转化为二进制的shell脚本文件:

gzexe程序为linux系统自带的程序,能够在将明文的脚本文件加密的同时,还可以对文件进行压缩。在使用gzexe程序将明文的shell脚本文件加密的时候,可以通过执行gzexefile.sh命令。使用该命令会把原来没有加密的文件备份为file.sh~,同时明文的脚本文件file.sh变成加密文件。

python:是一种面向对象的解释型计算机程序设计语言,能够把用其他编程语言制作的各种模块(尤其是c或c++)很轻松地联结在一起。

使用python编译器能够加密python脚本文件。其将python脚本文件进行编译,生成一种跨平台的字节码,也即可执行的二进制文件pyc。pyc文件可以以二进制字符显示,因此可以将其所要表达的信息隐藏起来。

执行python编译命令对python脚本文件进行编译后,生成二进制文件;假设明文的脚本文件的名称为b,则原加密脚本文件为b.py,二进制文件为b.pyc。

s102:将明文的脚本文件的调用文件和明文的脚本文件之间的调用关系,替换为调用文件和二进制文件之间的调用关系,以便在调用文件需要调用明文的脚本文件时,基于替换后的调用关系,调用二进制文件。

在具体实现的时候,明文的脚本文件的调用文件是指调用明文的脚本文件的其它文件。系统中的文件之间相互调用的时候,调用文件和被调用文件之间需要建立调用关系。一般地,在调动文件中,会写有调用指令,该调用指令在执行的时候,用于调用被调用文件,调用文件一般应当包含可执行的指令,以及被调用文件的调用信息,例如被调用文件的存放路径以及文件名称。

在本公开中,由于明文的脚本文件在经过编译生成可执行的二进制文件后,存放路径以及文件名称都可能会发生变化,例如在对a.sh的明文的脚本文件进行编译后,所生成的二进制文件为a.sh.x,文件名称发生了变化;由于明文的脚本文件会在分布式存储系统发布给用户的时候被删除,以实现明文的脚本文件对用户不可见,因此如果调用文件还去使用原有的调用关系,则无法实现调用。这里在调用文件中,将调用文件和明文的脚本文件之间的调用关系替换为调用文件和二进制文件的调用关系,使得调用文件在需要调用明文的脚本文件的时候,能够基于替换后的调用关系,直接去调用二进制文件。

本公开实施例提供下述两种将明文的脚本文件和明文的脚本文件的调用文件之间的调用关系,替换为调用文件和二进制文件之间的调用关系的具体方法,

ⅰ、建立新脚本文件。

其中,该新脚本文件中携带有二进制文件的调用信息,并具有与明文的脚本文件相同的名称和存放路径,以便调用文件在需要调用明文的脚本文件时,调用新脚本文件,并通过调用的新脚本文件中的调用信息调用二进制文件。

此处,建立的新脚本文件的名称和存放路径与明文的脚本文件的名称和存放路径相同。

当使用二进制文件替换明文的脚本文件被调用的时候,可以在删除了明文的脚本文件之后,建立新的脚本文件,该新脚本文件具有和明文的脚本文件相同的存放路径和文件名称,并且,在新脚本文件中调用二进制文件。这样,当调用文件需要调动明文的脚本文件的时候,根据调用信息,其实际上调用的是新脚本文件;在新脚本文件被调用后,其所携带的代码会被执行,其代码被执行的结果,即为调用二进制文件,从而通过调用新脚本文件实现了对二进制文件的调用。

下面分别以程序化脚本语言shellscript脚本文件和python脚本文件为例对该步骤加以说明。

(1)、当明文的脚本文件为shell脚本文件时,

假设明文的脚本文件为wwe.sh,且原wwe.sh中携带有源代码;调用文件为m,并携带有调用wwe.sh的代码。

使用shc对该wwe.sh进行编译后,生成的二进制文件为wwe.sh.x;

将原wwe.sh删除,并建立新wwe.sh,该新wwe.sh中携带有调用wwe.sh.x的代码。

当m需要调用原wwe.sh时,由于原wwe.sh已经被删除,且新wwe.sh与原wwe.sh具有相同的文件名称和存放路径,因此m执行调用原wwe.sh的代码,所调用的实际上是新wwe.sh。

当新wwe.sh被调用后,其所携带的调用二进制文件wwe.sh.x的代码被执行,实现对wwe.sh.x的调用。

(2)、当明文的脚本文件为python脚本文件时,与上述过程类(1)类似,

假设明文的脚本文件为mm1.py,且原mm1.py中携带有源代码;调用文件为m,并携带有调用mm1.py的代码。

使用python解释器对该mm1.py进行编译后,生成的二进制文件为mm1.pyc;

将原mm1.py删除,并建立新mm1.py,该新mm1.py中携带有调用mm1.pyc的代码。

当m需要调用原mm1.py时,由于原mm1.py已经被删除,且新mm1.py与原mm1.py具有相同的文件名称和存放路径,因此m执行调用原mm1.py的代码,所调用的实际上是新mm1.py。

当新mm1.py被调用后,其所携带的调用二进制文件mm1.pyc的代码被执行,实现对mm1.pyc的调用。

ⅱ、在脚本文件的调用文件中,将明文的脚本文件的调用信息更改为二进制文件的调用信息。

此处,文件之间在进行相互调用的时候,调用文件中需要携带调用被调用文件的相关指令。将调用文件中明文的脚本文件的调用信息,更改为二进制文件的调用信息,当调用文件需要调用明文的脚本文件的时候,直接基于二进制文件的调用信息实现对二进制文件的调用。

这里,明文的脚本文件的调用信息一般包括明文的脚本文件的存放路径以及文件名称;二进制文件的调用信息一般包括二进制文件的存放路径以及文件名称。因此在脚本文件的调用文件中,将明文的脚本文件的调用信息更改为二进制文件的调用信息时,是在调用文件中,将明文的脚本文件的存放路径以及文件名称,替换为二进制文件的存放路径以及文件名称。

在上述方法ⅰ中,不需要对调用文件进行修改,但是需要增加文件之间调用关系,需要根据会在一定程度上增加程序执行的时间。

在上述方法ⅱ中,分布式存储系统中的各文件之间的调用关系实际上是非常复杂的,某个调用文件,可能会调用多个被调用文件;调用文件,也可能作为被调用文件被其他文件所调用,因此所建立的调用文件和被调用文件之间的调用关系也是比较复杂的,因此如果要一一将修改调用文件中的原文本文件的调用信息修改为二进制文件的调用信息,是比较繁琐的,容易出现人为造成的错误。

另外,为了避免明文的脚本文件中的源代码对用户可见,因此在将分布式文件系统向用户发布之前,还可以将明文的脚本文件删除,使得用户无法在明文的脚本文件安装包中找到明文的脚本文件进行查看。

本公开实施例通过将明文的脚本文件编译为可执行的二进制文件,并将明文的脚本文件和明文的脚本文件的调用文件之间的调用关系,替换为调用文件和二进制文件之间的调用关系,使得调用文件在调用明文的脚本文件时,不去调用明文的脚本文件,而是调用明文的脚本文件编译后生成的二进制文件。二进制文件中的信息都是使用二进制字符作为信息的承载体,而并非是由文字组成的具体信息,该二进制字符能够由计算机识别,而对于人来说则是无法通过二进制字符获得其所要表达的具体的信息(也即源代码所要表达的具体信息),进而实现了脚本文件中的源代码对用户不可见。且由于二进制文件能够直接被计算机执行,因此也就不会存在调用失败的问题。

基于同一发明构思,本公开实施例中还提供了与脚本文件生成和调用方法对应的脚本文件生成和调用装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。

参见图4所示,本公开实施例提供的脚本文件生成和调用装置,用于对分布式文件系统明文的脚本文件中脚本文件进行调用,该装置包括:

编译模块401,用于在创建明文的脚本文件后,将创建的明文的脚本文件编译为可执行的二进制文件;

调用关系建立模块402,用于将明文的脚本文件的调用文件和明文的脚本文件之间的调用关系,替换为调用文件和二进制文件之间的调用关系,以便在调用文件需要调用明文的脚本文件时,基于替换后的调用关系,调用二进制文件。

可选地,调用关系建立模块402,具体用于:

建立新脚本文件;

其中,新脚本文件中携带二进制文件的调用信息,并具有与明文的脚本文件相同的文件名称和存放路径,以便调用文件在需要调用明文的脚本文件时,调用新脚本文件,并通过调用的新脚本文件中的调用信息调用二进制文件。

可选地,调用关系建立模块402,具体用于:

在脚本文件的调用文件中,将明文的脚本文件的调用信息更改为二进制文件的调用信息。

可选地,调用关系建立模块402,具体用于根据下述步骤在明文的脚本文件的调用文件中,将明文的脚本文件的调用信息更改为二进制文件的调用信息:

在调用文件中,将明文的脚本文件的存放路径以及文件名称,替换为二进制文件的存放路径以及文件名称。

可选地,还包括,发布模块403,用于在将分布式文件系统向用户发布之前,将明文的脚本文件删除。

可选地,明文的脚本文件为明文的shell脚本文件,编译模块401,具体用于:使用shell脚本编译器shc将明文的shell脚本文件加密,并编译为二进制的shell脚本文件,或使用gzexe程序将明文的shell脚本文件加密,并转化为二进制的shell脚本文件;或,

明文的脚本文件为明文的python脚本文件,编译模块401,具体用于:使用python编译器对python脚本文件进行编译,生成二进制的python脚本文件。

本公开实施例通过将明文的脚本文件编译为可执行的二进制文件,并将明文的脚本文件和明文的脚本文件的调用文件之间的调用关系,替换为调用文件和二进制文件之间的调用关系,使得调用文件在调用明文的脚本文件时,不去调用明文的脚本文件,而是调用明文的脚本文件编译后生成的二进制文件。二进制文件中的信息都是使用二进制字符作为信息的承载体,而并非是由文字组成的具体信息,该二进制字符能够由计算机识别,而对于人来说则是无法通过二进制字符获得其所要表达的具体的信息(也即源代码所要表达的具体信息),进而实现了脚本文件中的源代码对用户不可见。且由于二进制文件能够直接被计算机执行,因此也就不会存在调用失败的问题。

如图5所示,为本公开实施例还提供另外一种脚本文件生成和调用装置50,该装置包括处理器51、存储器52和总线53,存储器52存储执行指令,当装置运行时,处理器51与存储器52之间通过总线53通信,处理器51执行执行指令使得装置执行如下方法:

在创建明文的脚本文件后,将创建的明文的脚本文件编译为可执行的二进制文件;

删除明文的脚本文件,并将明文的脚本文件的调用文件和明文的脚本文件之间的调用关系,替换为调用文件和二进制文件之间的调用关系,以便在调用文件需要调用明文的脚本文件时,基于替换后的调用关系,调用二进制文件。

可选地,处理器51具体用于:建立新脚本文件;

其中,新脚本文件中携带二进制文件的调用信息,并具有与明文的脚本文件相同的文件名称和存放路径,以便调用文件在需要调用明文的脚本文件时,调用新脚本文件,并通过调用的新脚本文件中的调用信息调用二进制文件。

可选地,处理器51具体用于:在脚本文件的调用文件中,将明文的脚本文件的调用信息更改为二进制文件的调用信息。

可选地,处理器51具体用于根据下述步骤在明文的脚本文件的调用文件中,将明文的脚本文件的调用信息更改为二进制文件的调用信息:

在调用文件中,将明文的脚本文件的存放路径以及文件名称,替换为二进制文件的存放路径以及文件名称。

可选地,处理器51还用于:在将分布式文件系统向用户发布之前,将明文的脚本文件删除。

可选地,明文的脚本文件为明文的shell脚本文件;

处理器51具体用于:使用shell脚本编译器shc将明文的shell脚本文件加密,并编译为二进制的shell脚本文件,或使用gzexe程序将明文的shell脚本文件加密,并转化为二进制的shell脚本文件;或者,

可选地,明文的脚本文件为明文的python脚本文件;

处理器51具体用于:使用python编译器对所述python脚本文件进行编译,生成二进制的python脚本文件。

本公开实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述脚本文件生成和调用方法的步骤。

具体地,该存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该存储介质上的计算机程序被运行时,能够执行上述脚本文件生成和调用方法,从而解决现有分布式存储系统软件中脚本文件中的源代码对用户可见所造成的脚本被任意查看、串改和偷窃,软件产品代码不安全的问题,进而能够使得软件中的脚本文件对用户不可见,防止软件产品的各类脚本被任意查看、篡改和偷窃,保证软件产品代码的安全。

本公开实施例所提供的脚本文件生成和调用方法以及装置的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。

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