为什么安卓系统root权限获取不给用户root的权限

(天天饱饭饭)
(茼蒿夫君)
(天天饱饭饭)
(天天饱饭饭)
(天天饱饭饭)
第三方登录:>>《root是什么意思、root的好处及怎样获取root权限》
root是什么意思、root的好处及怎样获取root权限
编辑:甜椒刷机助手&&&&
  Root是什么意思?
  ROOT,原本是计算机领域的专业术语,而在UNIX系统(如AIX、BSD等)和类UNIX系统(如Debian、Redhat、Ubuntu等各个发行版的Linux)以及Android系统中,超级用户一般命名为root。
  也就是说,ROOT现在主要用于安卓智能手机或平板领域,它相当于电脑中的超级管理员账户。一旦获得了手机root权限,就成为了在Android系统中可以进行任意启动或停止一个进程、删除或增加用户、增加或者禁用硬件等等涉及最高权限操作的唯一账户。
  安卓智能手机获取root权限就像是苹果手机的越狱,手机root成功后,用户就可以任意下载更多免费的安卓游戏和应用,增强手机的娱乐性和个性化。
  总的来说,安卓手机获取root后主要有以下几点好处:
  1、可以备份手机中的系统和软件应用等重要的私人资料,这样即使手机出现故障丢失了相关数据,也可以在备份中还原;
  2、可以下载安装使用高级的程序应用。这是因为Android平台碎片化问题与各安卓手机制造厂商导致其版本不一,而一些高级的程序和应用在一些没有root的安卓手机上是无法正常安装使用相关功能的;
  3、可以修改手机系统,也就是root后可以给安卓,体验不同安卓系统的丰富乐趣。这也是目前安卓手机用户比较强烈的需求;
  4、可以把一些程序应用安装在SD卡上(不过Android2.2以下的程序应用默认只能安装到手机),减轻手机负担,加快手机运行速度。相信很多安卓用户都会发现,手机在没有root之前,下载的程序和应用都是默认安装到手机内存里的,用户不能将其安装到SD卡中,这样一旦下载多了应用和游戏,手机就容易出现卡顿、死机的现象,获得root权限后,你就可以自由选择将程序应用下载到SD卡里安装了。
  5.可以汉化手机系统:拥有ROOT权限,我们就可以加载汉化包,实现系统汉化!这主要是针对那些自带默认语言为非中文汉语的安卓手机,这些手机原本是面向非中文国家和地区销售的,但最后有中文汉语的用户也在使用,为了能更好地使用这些手机,贴合国人的操作使用习惯,就必须对这些手机汉化系统。
  要获得安卓手机ROOT权限,方法也十分简单:用户既可以自己动手完成,也可以送到手机维修处帮忙解决,而最终都是采取线刷或卡刷来完成的。
  线刷就是借助工具软件,一键获取手机root权限。在安卓手机root权限破取的软件工具中,工具就很不错,十分快速便捷。小白用户只需在电脑上下载安装好甜椒刷机助手,然后连上手机打开USB调试、安装驱动。在欢迎界面中可以看到你的手机信息中手机是否root。
  如果你的手机还没有ROOT的话,那进入甜椒刷机助手的&实用工具&栏,找到&&、点击,接着就只要等待root指令自动完成就可以了。
  而卡刷主要针对线刷没有成功和刷机技术比较好的用户,具体是指用户自己下载安装包放在手机sd卡目录下后,然后按照网上相关机型的root破解教程或步骤一步一步手动操作完成。机型不同,操作步骤也不一样,如果是root小白用户的话,可以在甜椒刷机助手的知识库中找到对应机型中的root图文教程,自己手动操作完成root破解,获得手机root权限。
上一篇文章
下一篇文章
关于栏目入口甜椒实验室博客访问: 463619
博文数量: 188
博客积分: 1992
博客等级: 上尉
技术积分: 1765
注册时间:
重庆乐潮信息技术有限公司
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: 嵌入式
转自:最近在移植Android过程中遇到了Android程序(apk)权限的问题。最近也对这方面进行了一些了解,在此和大家分享。&&&& Android框架是基于Linux内核构建,所以Android安全系统也是基于Linux的安全架构建立的。在Linux安全系统中,用户和组起着重要的作用,Linux中所有的资源给不同的用户和用户组设置了不同的访问属性。如果你对Linux下面用户和组的概念不熟悉,请先补习一下Linux基础知识。&&& 在Android系统中,系统为每一个应用程序(apk)创建了一个用户和组。这个用户和组都是受限用户,不能访问系统的数据,只能访问自己的文件和目录,当然它也不能访问其他应用程序的数据。这样设计可以尽可能地保护应用程序的私有数据,增强系统的安全性和健壮性。&&&& 但是有一些应用程序是需要访问一些系统资源的。比如Setting程序,他就需要访问wiffi,在系统中创建删除文件等等操作。怎样做到这一点儿呢?Android通过一定途径可以获得system权限。获得system用户权限,需要以下步骤:1. 在应用程序的AndroidManifest.xml中的manifest节点中加入android:sharedUserId="android.uid.system"这个属性。&2. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行&3. 使用mm命令来编译,生成的apk就有修改系统时间的权限了。&&&& 一般情况下system用户权限就已经够用了,system用户可以在系统中创建和删除文件,访问设备等等。但是有些情况下system权限还是不够的。比如:设置网卡IP地址,ifconfig命令是需要root权限的。我可以很肯定的说,在Android下面应用程序是没有可能拿到root权限的。但是如果我的应用程序需要root权限怎么办呢?只能想办法绕般过去。就以我的问题为例,设置网卡IP地址,root权限下面命令为:ifconfig eth0 192.168.1.188在普通用户或者system用户权限下面这条命令是不起作用的,但是不会返回失败和异常,这个我个人认为是Android的bug。那么怎样实现这个功能呢?我想出了两个办法。1、系统启动的时候init进程创建一个后台进程,该进程处于root用户权限下面。用来监听系统中应用程序的请求(可以用socket实现),并代其完成。这样应用程序就可以执行root用户权限的任务了。2、实现一个虚拟的设备,该设备的功能就是在内核态帮应用程序执行相应的命令。Linux内核态没有权限的问题了。肯定可以执行成功。&&&& 我解决设置网卡IP地址问题时,选择是后者。相对来说设计比较简单。&&&& 如果你到网上去搜一下,你会发现很多文章说怎样让Android应用程序获得root权限。如果你不想浪费时间就不要相信他们,因为那些途径是根本不可能获得root权限的。问题&&& 我遇到的问题是我想在Java应用程序中动态mount一个NFS的系统,但是执行mount命令必须要要root权限才可以。一般情况下,在Android的Java层是不能获得root权限的。思路&& 我在博文《》中提到两种思路:1、实现一个init实现一个Service,来帮助Android应用程序执行root权限的命令。&2、实现一个虚拟设备,这个设备帮助Android应用程序执行root权限的命令。&& 本文将会选择第一种来解决Android应用程序mount NFS文件系统的问题。Init.rc Service&& 在Android系统init.rc中定义很多Service,具体定义格式可以参考《》中的“Android Init Language”。Init.rc中定义的Service将会被Init进程创建,这样将可以获得root权限。&& 现在问题是Android应用程序怎样启动让init进程知道我们想运行那个进程呢?答案是设置系统属性“ctl.start”,把“ctl.start”设置为你要运行的Service,假设为“xxx”,Android系统将会帮你运行“ctl.start”系统属性中指定的Service。那么运行结果init进程将会将会写入命名为“init.svc.+Service名称”的属性中,也就是“init.svc.xxx”属性,应用程序可以参考查阅这个值来确定Service执行的情况。想更深入了解Android property系统可以参考博文《》。Android property权限&&& 难道Android属性“ctl.start”是所有进程都可以设置的吗?那世界不就乱套了,谁都可以可以执行init.rc中Service了,查看property_service.c中的源码,设置Android系统属性的函数为handle_property_set_fd:
1: void handle_property_set_fd(int fd)
switch(msg.cmd) {
case PROP_MSG_SETPROP:
msg.name[PROP_NAME_MAX-1] = 0;
msg.value[PROP_VALUE_MAX-1] = 0;
if(memcmp(msg.name,"ctl.",4) == 0) {
if (check_control_perms(msg.value, cr.uid, cr.gid)) {
handle_control_message((char*) msg.name + 4, (char*) msg.value);
ERROR("sys_prop: Unable to %s service ctl [%s] uid: %d pid:%d\n",
msg.name + 4, msg.value, cr.uid, cr.pid);
19: }&&& 从源码中我们发现如果设置“ctl.”开头的Android系统property,将会调用check_control_perms函数来检查调用者的权限,其定义如下:
1: static int check_control_perms(const char *name, int uid, int gid) {
if (uid == AID_SYSTEM || uid == AID_ROOT)
/* Search the ACL */
for (i = 0; control_perms[i]. i++) {
if (strcmp(control_perms[i].service, name) == 0) {
if ((uid && control_perms[i].uid == uid) ||
(gid && control_perms[i].gid == gid)) {
16: }&&& 我们发现root权限和system权限的应用程序将会授权修改“ctl.”开头的Android系统属性。否则将会检查control_perms全局变量中的定义权限和Service。&&& 如果想更深入的了解Android Init进程和Android Property的权限控制,请参考《》。实例&&& 通过上面的介绍我们基本已经有思路了,下面以上面提出的mount nfs文件系统为例说明:1、首先定义一个执行mount的脚本,我把它位于/system/etc/mount_nfs.sh,定义如下:
1: #!/system/bin/sh
3: /system/bin/busybox mount -o rw,nolock -t nfs 192.168.1.6:/nfs_srv /data/mnt不要忘了把它加上可执行权限。2、在init.rc中加入一个Service定义,定义如下:
1: service mount_nfs /system/etc/mount_nfs.sh
disabled3、让自己的应用程序获得system权限,博文《》中提到了怎样获得system权限,请参考,这里就不赘述了。4、在自己应用程序中设置System系统属性“ctl.start”为“mount_nfs”,这样Android系统将会帮我们运行mount_nfs系统属性了。这里需要强调的是不能够调用,这个函数只是修改JVM中的系统属性。而不能修改Android的系统属性。可以调用android.os.SystemProperties(Android 2.1 Eclair系统可以调用这个API),如果你的Android版本不能调用这个类,只能通过JNI,调用C/C++层的API property_get和property_set函数了。如果想详细了解请参考《》。代码如下:
1: SystemProperties.set("ctl.start", "mount_nfs");5、最后在自己应用程序中,读取“init.svc.mount_nfs”Android系统Property,检查执行结果。代码如下:
1: while(true)
mount_rt = SystemProperties.get("init.svc.mount_nfs", "");
if(mount_rt != null && mount_rt.equals("stopped"))
Thread.sleep(1000);
}catch(Exception ex){
Log.e(TAG, "Exception: " + ex.getMessage());
15: }&&& init进程维护一个service的队列,所以我们需要轮训来查询service的执行结果。&&& 通过上面的这些步骤,Android应用程序就能够调用init.rc中定义的Service了。这样你的Android应用程序也就获得了root权限。总结&& 通过上文可以看出,在Android获得root权限还是需要一些前提的,比如:1、必须是Android系统开发人员,否则你无法修改init.rc等文件。 2、你的应用程序必须要获得system权限。&&& 这样可以防止root权限被应用程序无限制的使用,最终危及Android系统安全。
阅读(14636) | 评论(1) | 转发(2) |
相关热门文章
给主人留下些什么吧!~~
如此好文居然没有顶?怒赞,转走之
请登录后评论。安卓手机如何Root 安卓手机Root权限获取图为教程 - 手机技巧 - 电脑百事网
手机扫描二维码
安卓手机如何Root 安卓手机Root权限获取图为教程
编辑:admin
手机中的很多预装软件是厂商和运营商捆绑附加的,有些软件占地方,设置还有些软件我们稀里糊涂的就被扣费了。但是,你的手机如果没有root就是删不掉。网上有很多关于如何root的方法,有些太过复杂,我觉得还是用计算机版本的360手机助手root比较简单。
小白思考篇:?
ROOT具体方法:
1、使用USB数据线将手机与电脑连接起来。我们选择&USB调试&,其它的手机可以通过&设置&-&版本&-&开发者&中找到这项,一般都会在设置里。不过,你就算没有找&USB调试&也没有关系,后面的软件会有相关的说明和自我寻找。如第八步中,点击&如何打开&usb调试模式&&,里面还有详细的说明。
&2、 在电脑上,打开360安全卫士,找到360手机助手,点击&立即连接&。如果你的电脑没有安装360手机助手,它自动安装,手机也是一样的。当然,如果你不需要,我们ROOT后,可以进行卸载。如下图。
3、下载并安装手机版360手机助手,也需要点时间。如果你觉得没有需要的话,可以root成功后在手机上卸载。
4、如果之前已经下载了,系统如下图。
5、画面会显示,让你查毒,为了更安全,建议你查毒。
提示:支持键盘“← →”键翻页}

我要回帖

更多关于 系统自带root权限 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信