2024年6月10日发(作者:)

(19)中华人民共和国国家知识产权局

(12)发明专利说明书

(21)申请号 CN2.4

(22)申请日 2014.06.30

(71)申请人 上海斐讯数据通信技术有限公司

地址 201620 上海市松江区广富林路4855弄20号、90号

(72)发明人 周玲莉 耿兴欢

(74)专利代理机构 上海信好专利代理事务所(普通合伙)

代理人 张妍

(51)

(10)申请公布号 CN 104063303 A

(43)申请公布日 2014.09.24

权利要求说明书 说明书 幅图

(54)发明名称

一种获取和释放root权限的方法

(57)摘要

一种获取和释放root权限的方法,

应用程序使用系统调用与linux内核通信,

向linux内核发送权限设置命令,linux内

核根据权限设置命令修改进程控制结构中

的应用程序进程的权限控制变量;当应用

程序需要获取root权限时,应用程序向

linux内核发送获取root权限命令,linux内

核将进程控制结构中的应用程序进程的权

限控制变量修改为root进程权限值,从而

使应用程序apk进程获得root权限;当应

用程序需要释放root权限时,应用程序向

linux内核发送释放root权限命令,linux内

核将进程控制结构中的应用程序进程的权

限控制变量修改为原始权限值,从而使应

用程序apk恢复原始权限。本发明减少了

频繁执行su命令的内存占用和时间开销。

法律状态

法律状态公告日

法律状态信息

2020-12-15

专利权的转移

2019-07-16

授权

2017-04-12

实质审查的生效

2014-09-24

公开

法律状态

专利权的转移

授权

实质审查的生效

公开

权 利 要 求 说 明 书

1.一种获取和释放root权限的方法,其特征在于,应用程序使用系统调用与linux

内核通信,向linux内核发送权限设置命令,linux内核根据权限设置命令修改进程

控制结构中的应用程序进程的权限控制变量;

当应用程序需要获取root权限时,应用程序向linux内核发送获取root权限命令,

linux内核将进程控制结构中的应用程序进程的权限控制变量修改为root进程权限

值,从而使应用程序apk进程获得root权限;

当应用程序需要释放root权限时,应用程序向linux内核发送释放root权限命令,

linux内核将进程控制结构中的应用程序进程的权限控制变量修改为原始权限值,

从而使应用程序apk恢复原始权限。

2.如权利要求1所述的获取和释放root权限的方法,其特征在于,在linux内核初

始化时,通过linux标准的字符设备接口生成一个设备节点,应用程序将向linux

内核发送的权限设置命令写入该设备节点中。

3.如权利要求2所述的获取和释放root权限的方法,其特征在于,linux内核在使

应用程序获得root权限的同时,保存该应用程序进程原来的权限值。

4.一种获取root权限的方法,其特征在于,该方法包含以下步骤:

步骤1、在linux内核初始化时,通过linux标准的字符设备接口生成一个设备节点;

步骤2、当应用程序需要获取root权限时,通过系统调用,向linux内核的设备节

点中写入获取root权限的命令;

步骤3、linux内核根据写入设备节点的命令,将进程控制结构中的应用程序进程

的权限控制变量修改为root进程权限值,从而使应用程序进程获得root权限。

5.如权利要求4所述的获取root权限的方法,其特征在于,inux内核在使应用程序

获得root权限的同时,保存该应用程序进程原来的权限值。

6.一种释放root权限的方法,其特征在于,该方法包含以下步骤:

步骤1、当应用程序需要放弃root权限时,通过系统调用,向linux内核的设备节

点中写入权限恢复命令;

步骤2、linux内核根据写入设备节点的命令,将进程控制结构中的应用程序进程

的权限控制变量修改为保存的原来的权限值,从而恢复应用程序的原始权限。

说 明 书

技术领域

本发明涉及一种获取和释放root权限的方法,尤其涉及一种在安卓(Android)操

作系统中应用程序获取和释放root权限的方法。

背景技术

在安卓(Android)操作系统中,为每一个应用程序(apk)创建了一个用户和组。

这个用户和组都是受限用户,不能访问系统的数据,只能访问自己的文件和目录,

当然该应用程序(apk)也不能访问其他应用程序的数据。这样的设计可以尽可能

地保护应用程序的私有数据,增强系统的安全性和健壮性。但是有一些应用程序

(apk)是需要访问一些系统资源,一般情况下系统(system)用户权限就够用了,

但是有些情况下system权限还是不够的,这时应用程序就需要root权限。

安卓(Android)框架是基于Linux内核构建,所以安卓(Android)安全系统也是

基于Linux的安全架构建立的。在Linux安全系统中,用户和组起着重要作用,

Linux中所有的资源给不同的用户和用户组设置了不同的访问属性。安卓(Android)

与Linux分别有自己的一套严格的安全及权限机制。比如:-rwxr-xr-x system

system 4156 2013-03-03 11:00 ,这个安卓(Android)应用程序文件代表的

是系统(system)用户拥有对此文件的读写执行权限,系统(system)组的用户对

此文件拥有读、执行权限,其他人对此文件只具有执行权限。而文件运行

起来具有的权限完全与此不相关,千万不要看应用程序(apk)文件系统上属于

system/system用户及用户组,或者root/root用户及用户组,就认为应用程序(apk)

具有system或root权限。通过文件系统看到的权限,是其他程序操作这个文件时

所需要的权限,而不是这个文件所具有的的权限。现有的方案是使应用程序(apk)

执行su命令获取root权限。su命令是linux中获取root权限的工具程序。在java

语言中,借助安卓(Android)应用程序执行linux命令的标准接口:

time().exec(String command)(其中的command表示要执行的linux

命令)访问底层Linux下的程序或脚本,就能执行su命令,使应用程序(apk)具

有root权限。由于需要su程序获得root权限,并且只有执行su命令的应用程序

(apk)才能拥有root权限,就造成了应用程序频繁执行su命令,造成时间和内存

占用的增加,同时,su命令这种方式只能执行linux命令,不方便执行复杂操作。

发明内容

本发明提供一种获取和释放root权限的方法,能够减少频繁执行su命令的内存占

用和时间开销。

为了达到上述目的,本发明提供一种获取和释放root权限的方法,应用程序使用

系统调用与linux内核通信,向linux内核发送权限设置命令,linux内核根据权限

设置命令修改进程控制结构中的应用程序进程的权限控制变量;

当应用程序需要获取root权限时,应用程序向linux内核发送获取root权限命令,

linux内核将进程控制结构中的应用程序进程的权限控制变量修改为root进程权限

值,从而使应用程序apk进程获得root权限;

当应用程序需要释放root权限时,应用程序向linux内核发送释放root权限命令,

linux内核将进程控制结构中的应用程序进程的权限控制变量修改为原始权限值,

从而使应用程序apk恢复原始权限。

在linux内核初始化时,通过linux标准的字符设备接口生成一个设备节点,应用

程序将向linux内核发送的权限设置命令写入该设备节点中。

linux内核在使应用程序获得root权限的同时,保存该应用程序进程原来的权限值。

本发明还提供一种获取root权限的方法,该方法包含以下步骤:

步骤1、在linux内核初始化时,通过linux标准的字符设备接口生成一个设备节点;

步骤2、当应用程序需要获取root权限时,通过系统调用,向linux内核的设备节

点中写入获取root权限的命令;

步骤3、linux内核根据写入设备节点的命令,将进程控制结构中的应用程序进程

的权限控制变量修改为root进程权限值,从而使应用程序进程获得root权限。

inux内核在使应用程序获得root权限的同时,保存该应用程序进程原来的权限值。

本发明还提供一种释放root权限的方法,该方法包含以下步骤:

步骤1、当应用程序需要放弃root权限时,通过系统调用,向linux内核的设备节

点中写入权限恢复命令;

步骤2、linux内核根据写入设备节点的命令,将进程控制结构中的应用程序进程

的权限控制变量修改为保存的原来的权限值,从而恢复应用程序的原始权限。

本发明减少了频繁执行su命令的内存占用和时间开销。

附图说明

图1和图2是本发明的流程图。

具体实施方式

以下根据图1和图2具体说明本发明的较佳实施例。

如图1所示,本发明提供一种获取root权限的方法,包含以下步骤:

步骤1、在linux内核初始化时,通过linux标准的字符设备接口生成一个设备节点;

步骤2、当应用程序apk需要获取root权限时,通过系统调用,向linux内核的设

备节点中写入设置root权限的命令;

所述的设置root权限的命令可自行设置,如:写入0代表设置root权限;

所述的系统调用可采用open函数、write函数等实现;

步骤3、linux内核根据写入设备节点的命令,将进程控制结构(struct task)中的

应用程序进程的权限控制变量修改为root进程权限值,从而使应用程序apk进程获

得root权限;

linux内核在使应用程序apk获得root权限的同时,保存该应用程序apk进程原来

的权限值;将该应用程序apk进程原来的权限值和该应用程序apk进程的ID同时

保存到一个数组中;

所述的权限控制变量为uid(用户名,User Identifier)、suid(终端设备标识,Set

User Identifier)、gid(群体身份,Group Identification)、sgid(分段标识,Set

Group Identification)等。

如图2所示,本发明还提供一种释放root权限的方法,包含以下步骤:

步骤1、当应用程序apk需要放弃root权限时,通过系统调用,向linux内核的设

备节点中写入权限恢复命令;

所述的权限恢复命令可自行设置,如:写入0xFFFF代表恢复原来的权限值;

所述的系统调用可采用open函数、write函数等实现;

步骤2、linux内核根据写入设备节点的命令,将进程控制结构(struct task)中的

应用程序进程的权限控制变量修改为保存的原来的权限值,从而恢复应用程序apk

的原始权限;

所述的权限控制变量为uid、suid、gid、sgid等。

本发明是在apk程序中使用系统调用(open、write等),让apk和linux内核进行

通信,然后由linux内核改变当前apk进程权限相关的设置,从而改变apk进程的

权限,同时保存当前进程的权限设置。当apk需要修改回原始权限时,再给linux

内核发送相应的通信指令,由内核负责将apk进程修改为原始权限。

本发明是基于linux进程管理实现的,linux通过进程控制结构(struct task)来控制

进程的所有状态和权限。本发明主要通过修改进程控制结构中权限控制变量状态,

从而达到修改进程权限的目的。

尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描

述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发

明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利

要求来限定。