执行Root操作的方法及装置、终端设备、存储介质
技术领域
本申请涉及终端设备技术领域,尤其涉及一种执行Root操作的方法及装置、终端设备、存储介质。
背景技术
在各类操作系统中,具备Root权限的用户可以拥有对操作系统中任何对象进行操作的最高权限。在相关技术中,一些操作系统并没有向所有用户开放Root权限,但是,可以利用操作系统的漏洞来获得Root权限。以Android操作系统为例,可利用操作系统的漏洞,将预先编译好的su文件拷贝到Android设备的指定目录(如:/system/bin或/system/xbin/)下。此后,普通用户便可通过执行su文件来获取Root权限。
目前的Root方案中,由于是通过将su文件写入到指定目录下来获得Root权限,一旦对操作系统成功Root之后,任意用户或程序都可以对系统的任意资源进行读、写、删等操作,造成一定的系统安全隐患。
发明内容
有鉴于此,本申请提供一种执行Root操作的方法及装置、终端设备、存储介质。
为实现上述目的,本申请提供的技术方案如下:
一种执行Root操作的方法,包括:
Root服务进程接收来自请求方进程的与待执行的Root操作对应的请求;
所述Root服务进程对所述请求进行安全校验;
若安全校验通过,启动Root执行进程并将所述请求发送给所述Root执行进程;
所述Root执行进程获取Root权限,并在获得Root权限后执行所述Root操作。
一种执行Root操作的装置,包括:
请求接收单元,接收来自请求方进程的与待执行的Root操作对应的请求;
校验单元,对所述请求进行安全校验;
进程启动单元,在安全校验通过后,启动Root执行进程并将所述请求发送给所述Root执行进程;
提权单元,使所述Root执行进程获得Root权限;
Root操作执行单元,在获得Root权限后通过所述Root执行进程执行所述Root操作。
一种终端设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
所述处理器被配置为:
Root服务进程接收来自请求方进程的与待执行的Root操作对应的请求;
所述Root服务进程对所述请求进行安全校验;
若安全校验通过,启动Root执行进程并将所述请求发送给所述Root执行进程;
所述Root执行进程获取Root权限,并在获得Root权限后执行所述Root操作。
一种计算机存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如下步骤:
Root服务进程接收来自请求方进程的与待执行的Root操作对应的请求;
所述Root服务进程对所述请求进行安全校验;
若安全校验通过,启动Root执行进程并将所述请求发送给所述Root执行进程;
所述Root执行进程获取Root权限,并在获得Root权限后执行所述Root操作。
通过以上技术方案可以看出,当请求方进程出现进行某种Root操作的需求时,可以通过向Root服务进程发送请求并由Root服务进程对所述请求进行安全校验;此后,若安全校验通过,启动Root执行进程并由Root执行进程获得Root权限并执行上述Root操作。由于上述过程并不需要通过将su文件写入到指定目录下的方式来获得Root权限,在满足请求方进程的Root操作需求的同时,确保了系统的安全性。
附图说明
图1为根据一示例性实施例示出的一种执行Root操作的方法的流程;
图2为根据一示例性实施例示出的一种终端设备的硬件结构;
图3为根据一示例性实施例示出的一种执行Root操作的装置的框图。
具体实施方式
在相关技术中,可通过各种Root工具来获取操作系统的Root权限。以Android为例,常见的Root工具的Root过程大致为:首先,根据操作系统的漏洞,编写一系列跟系统调用相关的特殊函数,并将这些特殊函数编译成一个动态链接库(Dynamic Link Library,DLL)文件,如:so文件。然后,调用者可以在Android native层通过系统函数dlopen()、dlsym()等来动态加载动态链接库文件,并调用动态链接库文件的内部函数来执行系统漏洞。最后,利用系统漏洞将预先编译好的su文件拷贝到Android设备的指定目录(如:/system/bin或者/system/xbin/)下。这样,普通用便可以通过执行指定目录下的su程序来获取Root权限。上述Root方案主要存在如下问题:①需要将su文件拷贝到系统的指定目录下,这一动作对系统目录进行了侵入式读写,容易对系统稳定性造成不可预知的影响;②普通用户可以通过执行su文件直接获取到Root权限,一旦有了Root权限就意味普通用户具有系统的最高权限,可以对系统的任何资源进行读写,用户的行为变得不可控,且随意修改系统文件或者误操作,容易对系统造成不可恢复性的损害,给系统安全性造成一定隐患。本申请为解决以上问题中的至少一个方面,提出一种Root操作的执行方案。
图1为根据一示例性实施例示出的一种执行Root操作的方法的流程。该方法可应用于各类终端设备(如手机等)。如图1所示,在该方法的实现过程中,在终端设备上可运行三个进程:请求方进程、Root服务进程以及Root执行进程。其中,Root服务(Root Service)进程以及Root执行进程构建一种Root安全沙箱(即按照安全策略限制程序行为的用于执行Root操作的环境)。在一实施例中,该方法可以通过如下步骤来实现:
步骤101:请求方进程向Root服务进程发送与待执行的Root操作对应的请求。
举例而言,请求方进程可以是运行于终端设备上的App客户端的进程。对于某些App客户端来说,需要执行一些Root操作,Root操作一般需要在具备操作系统的Root权限的前提下才能执行。例如,某App客户端为了手机上的支付安全,需要将手机安装的某程序进行卸载,而将手机安装的某程序进行卸载的操作便是一种Root操作。
在一实施例中,上述请求可以携带一些参数,包括但不限于:请求方进程的进程ID、待执行的Root操作的类型以及该Root操作所涉及的对象或文件所在目录信息等。
Root服务进程可以对应于Android系统上的一个标准Service组件,该Root服务运行在一个独立的进程中。该Root服务进程可以在终端设备开机后被自动开启,也可在某个请求方进程首次发起某Root操作请求后开启,并可以一直维持运行状态,直至被主动关闭。
本文提及的Root安全沙箱,是手机系统(如:Android系统)上的一个安全执行环境,在该安全执行环境中,普通用户可以运行需要Root权限才能执行的操作命令,且不会对系统产生永久性的影响,也不会破坏到手机系统其它用户的权限。并且,在该执行环境中所作的Root操作的不会留下任何痕迹和/或历史记录。该Root安全沙箱由上述Root服务进程和Root执行进程来维持。
步骤102:Root服务进程在收到上述请求之后,对所述请求进行安全校验。
本申请实施例中,出于防止系统Root权限被滥用的考虑,请求方进程在出现执行Root操作的需求时,请求方进程自身并不具备Root权限,而是需要通过发送请求的方式来请求其他进程(即下文需具体描述的Root执行进程)来执行Root操作。实际应用中,并不希望终端设备上所有的App客户端都具备请求执行相应的Root操作的权限,而是希望将这一权限开放给指定的一个或多个App客户端。
在一种可行的实施例中,可以预先设定好白名单,该白名单中包含具备请求执行Root操作的权限的一个和多个App的标识(如App的名称),该白名单可以存放于终端设备上。则上述步骤102可以通过下述过程来实现:
Root服务进程根据预先确定的白名单,确定所述请求携带的请求方进程ID是否在所述白名单中。若所述请求携带的请求方进程ID在所述白名单中,确定请求方进程具有请求执行所述Root操作的权限(即校验通过);否则,确定请求方进程不具有请求执行所述Root操作的权限(即校验不通过)。
在另一种可行的实施例中,上述步骤102可以通过下述过程来实现:
Root服务进程生成一对公私钥,并将公钥提供给指定的请求方进程(该请求方进程被授权);之后,由请求方进程在发送请求之前,利用上述公钥对请求进行加签;此后,当Root服务进程收到该请求之后,便可以利用上私钥对该请求进行解签,若成功解签,则表明请求方进程具有请求执行所述Root操作的权限(即校验通过),否则,校验不通过。
在又一实施例中,上述步骤102还可以通过下述过程来实现:
所述Root服务进程校验所述请求对应的Root操作是否为安全操作,若是,确定安全校验通过,若否,确定安全校验不通过。
开发者可以预先根据经验,分别确定出会对系统造成损害的操作行为和对系统不会造成损害的操作行为,并分别标为非安全操作以及安全操作。例如,某种行为需要删除系统重要文件,则属于不安全行为,某种行为只是对非系统应用进行卸载,则属于安全行为。通过确定出安全操作集和非安全操作集,可以确定当前请求的Root操作是否属于安全操作,以确定校验结果。
当然,本申请还存在其他校验请求方进程发送的请求是否合法的方式,本文不一一列举。
步骤103:在确定请求方进程具备所述权限后,Root服务进程启动Root执行进程。
本申请实施例中,Root服务进程负责来自请求方进程的各个Root操作请求,对传入的请求命令进行安全扫描(即确定请求方进程是否具备权限),防止请求方进程恶意修改系统的资源,对系统造成不可恢复的损害。Root服务进程的另一作用是隔离请求方进程与Root执行进程,请求方进程无需关心Root操作是如何执行的,提权失败也不会对请求方进程造成任何影响。
在一实施例中,所述Root执行进程可为由所述Root服务进程创建的一个子进程,并由所述Root执行进程结束该子进程。所述Root执行进程可以是一个在短暂的时间段内被启动的进程,该进程只在需要执行Root操作时被启动,一旦Root操作执行完成后就被结束掉。从而确保Root权限不是永久的,以使得该Root执行进程难以被其他进程通过非法动作调用。
当然,执行创建该Root执行进程的这一动作的执行主体并不限于上述Root服务进程,如:Root执行进程也可以由自行开启或由操作系统创建。另外,上述Root执行进程也可以是独立于Root服务进程的另一进程。
步骤104:Root服务进程将所述请求发送给Root执行进程。
Root服务进程在接收到请求后并不直接执行Root操作,而是创建出一个Root执行进程,并将Root操作请求传递给个这个Root执行进程。
步骤105:Root执行进程进行Root提权。在提权成功后,进入下述步骤106,在提权失败后,可向Root服务进程返回提权失败信息。
Root执行进程被启动之后通常不是立刻具备Root权限的,需要通过Root提权操作来获得Root权限。在一实施例中,可通过下述过程来获得Root权限:
利用操作系统的漏洞,将所述Root执行进程的进程ID(进程的UID)添加到具备Root权限的Root用户组中。其中,以Andriod系统为例,由于Andriod是基于Linux的操作系统,所以可以利用Linux内核的漏洞,从用户空间越权到内核空间,并执行内核函数setUid(),将当前Root执行进程的UID设置为Root用户组中的一个。一般情况下,操作系统是不容许普通用户访问到内核空间的,需要利用系统的漏洞方可实现。
其中,现有技术中的Root工具,也是利用了Linux内核的漏洞,但是现有技术通常并不是去执行内核函数setUid(),而是将一个提权程序su文件拷贝到指定的系统目录(如:/system/bin或者/system/xbin/)下,然后通过这个su文件去获得Root权限,一旦系统目录下有了这个su文件,任何程序都可以去调用这个su文件来获得Root权限,那么就相当于系统被永久Root了,除非将su文件删除掉。与现有技术中的常规Root工具的提权原理不同,本方案避免了将su文件写入终端设备的指定系统目录下。一方面,避免写入su文件,可以使得提权过程更为高效;另一方面,不会对系统造成侵入式损害,不会造成系统永久Root以及Root权限滥用。由于系统的漏洞会不断被修复,当原先可以被利用的系统漏洞被修复之后,就可能导致提权过程失败,此后,便需要重新发掘可被利用的系统漏洞来进行提权。
步骤106:Root执行进程执行上述待执行的Root操作。
当Root操作执行结束之后,Root执行进程可以获得执行结果并将该执行结果反馈给Root服务进程,并由该Root服务进程反馈给请求方进程,以便于将执行结果展示给用户。在其他实施例中,执行结果也可不用提供给请求方进程。
步骤107:在执行完所述待执行的Root操作之后,结束该Root执行进程。
如上所述,Root执行进程通常在需要执行Root操作的时候会被创建出来,当Root操作被执行完成后会立即结束,以确保Root权限不会被其他进程滥用,并且确保不会在终端设备上留下任何关于Root操作的痕迹以及历史记录,避免对系统造成侵入式的损害。当然,在其他可行实施例中,在执行完所述待执行的Root操作之后,也可以不立刻结束该Root执行进程。
通过以上技术方案可以达到以下效果:
①、通过创造Root安全沙箱环境,当请求方进程出现进行某种Root操作的需求时,可以通过向Root服务进程发送请求并由Root服务进程来校验其是否具备请求执行所述Root操作的权限,此后,当确定所述请求方进程具备所述权限后,启动Root执行进程并由Root执行进程获得Root权限并执行上述Root操作。上述过程可以在满足请求方进程的Root操作需求的同时,防止Root权限被滥用。
②、可对请求方进程传入的Root操作请求进行安全扫描,防止请求方进程随意修改系统的核心资源,对系统造成不可恢复的损害,即在某种程度限制了请求方进程的操作范围,对于系统的稳定性和安全性提供了一定的保障。
③、本方案通过请求方进程、Root服务进程以及Root执行进程三者分离,来避免对用户造成干扰。对于请求方进程来说,整个Root提权过程是透明无感知的,即使Root提权失败也不会对请求方进程造成任何干扰和影响,确保了Root安全沙箱环境的独立性和无干扰性。
④、Root安全沙箱不会修改任何系统文件,执行完Root操作后,Root执行进程立即退出,不会长期驻留在内存空间,以最小对代价获取Root权限并执行Root操作,不会留下任何操作痕迹和历史记录,对系统无侵入式损害。
图2示出了一示例性实施例提供的一种终端设备的结构。如图2所示,所述电子设备可以为手机等,该电子设备可以包括处理器、内部总线、网络接口、存储器(包括内存以及非易失性存储器),当然还可能包括其他业务所需要的硬件。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行。在一实施例中,所述处理器可以被配置为:
Root服务进程接收来自请求方进程的与待执行的Root操作对应的请求;
所述Root服务进程对所述请求进行安全校验;
若安全校验通过,启动Root执行进程并将所述请求发送给所述Root执行进程;
所述Root执行进程获取Root权限,并在获得Root权限后执行所述Root操作。
当然,除了软件实现方式之外,本申请并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
如图3所示,为根据一示例性实施例示出的一种执行Root操作的装置的框图。该装置200可以包括:
请求接收单元201,接收来自请求方进程的与待执行的Root操作对应的请求;
校验单元202,对所述请求进行安全校验;
进程启动单元203,在安全校验通过后,启动Root执行进程并将所述请求发送给所述Root执行进程;
提权单元204,使所述Root执行进程获得Root权限;
Root操作执行单元205,在所述Root执行进程获得Root权限后,通过所述Root执行进程执行所述Root操作。
在一可选的实施例中,上述装置200还可包括:
进程结束单元,在所述Root执行进程执行完所述Root操作后,结束所述Root执行进程。
在一可选的实施例中,所述提权单元204,利用系统漏洞将所述Root执行进程的进程ID添加到具备Root权限的Root用户组中。
在一可选的实施例中,所述校验单元202:
根据预先确定的白名单,校验述请求携带的请求方进程ID是否在所述白名单中,若是,确定安全校验通过,若否,确定安全校验不通过;
在另一可选的实施例中,所述校验单元202:
校验所述请求对应的Root操作是否为安全操作,若是,确定安全校验通过,若否,确定安全校验不通过。
在一可选的实施例中,所述Root执行进程为由所述Root服务进程创建的子进程,并由所述Root执行进程结束该子进程。
在一可选的实施例中,该装置200还可包括:
结果反馈单元,获得执行所述Root操作的结果,将所述结果通过所述Root服务进程反馈给所述请求方进程。
本申请一实施例中,还提供了一种计算机存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如下步骤:
Root服务进程接收来自请求方进程的与待执行的Root操作对应的请求;
所述Root服务进程对所述请求进行安全校验;
若安全校验通过,启动Root执行进程并将所述请求发送给所述Root执行进程;
所述Root执行进程获取Root权限,并在获得Root权限后执行所述Root操作。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于终端设备实施例、装置实施例以及计算机存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器
(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。