1、root优缺

  android的root跟苹果越狱很类似,可以享受“解禁”后的很多自由。

  1、删除系统中不需要的一些app,特别是一些厂商强制安装的app。

  2、美化系统,例如修改字体,修改开关机音乐、动画等;

  3、可以更细致的优化系统,例如屏蔽掉一些自动运行的app;

  当然,android root后带来的肯定远不止这些好处。但root后毫无约束的自由就会产生很多不可控的问题,例如流氓软件可以很轻易的植入广告、病毒、修改系统文件,并且root并非官方支持的行为,root后会影响保修。

2、root原理

  android的系统管理员为root,该用户可以在系统最高许可范围内进行任何操作(并不是所有操作root都有权执行)。而root android手机的过程也就是获取root用户的权限,同时为了防止不良软件随意利用root权限,我们需要给系统安装一个Superuser.apk的应用,当有应用需要通过su获取root权限时,Superuser会拦截该动作并向用户做出询问,当用户允许才执行。所以root的过程简单来说就是将su文件放到/system/bin下,将Superuser.apk放到/system/app下,还需要设置/system/bin/su能让任意用户执行,需要set uid,即需要设置adb shell chmod 4755 /system/bin/su。但由于厂商并不支持该行为,所以一般会有诸多限制让我们很难顺利完成root提限,需要合理的利用系统进程的一些漏洞来完成这一操作(一般所谓的“不完全root”就是指通过Superuser来防止未经授权的应用随意获取root权限)。

3、root方法

  1> adb push su /system/bin                                             #复制su到bin目录

  2> chown root:root su                                                        #将su的拥有者以及所属群组设置为root

  3> chmod 4755 /system/bin/su                                   #将su设置为-rwsr-xr-x,使所有用户都可以使用

  4> adb push Superuser.apk /system/app                 #安装Superuser应用,对root权限进行授权使用

  上述步骤看似简单,实际却很难实现。在linux中,如果想获取root权限可以通过执行su切换到root权限,或者通过sudo临时获取root权限,且不管哪一种方式,系统都要求输入正确的root用户密码才能获取相应的root权限。而android本身就不希望用户得到root权限,所以大部分手机出厂的时候根本就没有su这个程序,即使有,一般也都将4755权限设置为了755,使普通用户无法使用。并且android的su和linux里的su还不一样,在android中不是靠密码验证,而是看你原来的权限是什么,如果你是非root用户,就无法切换到root,会提示permission denied,也就是说只有root运行su才有用。而且system目录对于普通用户一般也都是只读,无法写入,同样chmod也需要root权限才能运行。sudo在android中也不支持。

  要想完成上面的root步骤,首先需要root权限,所以只能通过找一个本身已经有root权限,并且存在漏洞的进程来执行上述命令。所以想要root android手机,首先需要找到一些拥有root权限的程序漏洞,再通过该漏洞执行上述root步骤。目前最常用的root工具都是pc客户端程序,通过android系统的adb shell运行漏洞利用程序,也有一些是能直接在android设备上运行。由于漏洞并不具有完全的适用性,不同的方法也只适应一定的机型,所以这里不讨论具体的实现步骤。下面三个链接比较细致的讲解了root的相关知识,需要进一步了解的可以看看。其中讲解了如何利用RageAgainstTheCage漏洞,使adb拿到root权限。

  http://www.cnblogs.com/xiaoxiaoboke/archive/2012/02/13/2349719.html

  http://www.cnblogs.com/xiaoxiaoboke/archive/2012/02/13/2349723.html

  http://www.cnblogs.com/xiaoxiaoboke/archive/2012/02/13/2349711.html

4、关于suid和sgid

  在讲解root步骤时,我们提到一个为su设置set uid,或者说4755权限的步骤。那我们需要了解一下什么是suid,什么是sgid,什么是sbit以及4755的意思。

  在linux中文件和目录的默认权限通常由上述结构表示,r表示可读,w表示可写,x表示可执行,-表示无权限(当用数字模式时,r为4,w为2,x为1,-为0,而4755的后三位表示默认权限,即对于文件拥有者,有4+2+1=7,即可读可写可执行权限;对于文件所属群组,4+1=5,具有可读可执行权限;而对于其他用户,4+1=5,同样具有可读可执行权限)。而除了这些默认权限外,还有三个特殊权限:suid、sgid、sbit,数字模式时,suid为4,sgid为2,sbit为1,而4755的第一位表示特殊权限,也就是4,所以4755的特殊权限为suid。

  1、suid,控制用户执行的文件,以文件所属用户的身份执行,而不是执行文件的用户本身。当一个可执行的文件拥有suid时,会将文件拥有者的x位变成s,这时称为set uid,简写就是suid。而android root时,就是需要确保su已经suid为root用户,这样其他用户也可以通过root身份来执行su,也就取得了root权限。

  suid权限仅对二进制程序(系统中的一些命令)有效,不能用在脚本上,因为脚本是将很多程序集合到一起来执行,而不是脚本本身在执行;suid放在目录上是无效的;suid权限仅在执行该程序的过程中有效(run-time);程序执行者对于该程序来说,需要具备x的权限。

  2、sgid,对目录的控制是以目录所属群组的身份运行,在目录中创建的任何子目录或文件的所属群组都与目录所属群组一致。

  sgid同样对二进制程序有效;程序执行者对于该程序来说,需要具备x的权限;sgid主要用在目录上。

  3、sbit,主要针对其他用户(others)来设置的,只对目录有效,当用户在该目录下建立文件或目录时,仅有自己与root才有权利删除。例如/tmp目录,任何人都可以在/tmp内增加,修改文件,因为权限都是rwx,但仅有该文件或目录的建立者与root才能够删除自己的目录或文件。

  特殊权限的设置和默认权限一样,使用chmod命令,也同样可采用UGO模式或数字模式,具体如何设置请自行查阅。

5、root在开发中的影响

  在实际开发中,经常会有一些功能由于没有足够的权限而无法实现。例如设置系统时间,静默安装,读取一些系统的配置文件等,要解决这些问题,最常见的就是查找源码中是否存在隐藏的api可以在不需要root权限的情况下通过反射机制实现,否则就只能加入android:sharedUserId=“android.uid.system”属性,通过配置和系统进程中运行的apk一样的userid,这样就可以使apk运行在系统进程中,也就拥有了相应权限。由于采用uid方式需要目标系统的platform key,所以生成的apk只能安装在目标系统中。

参考资源

http://www.opsers.org/base/learning-linux-the-day-that-the-special-privileges-suid-sgid-sbit.html

关于root的更多相关文章

  1. Centos 下 mysql root 密码重置

    重置mysql密码的方法有很多,官网也提供了很方便的快捷操作办法,可参考资料 resetting permissions .本文重置密码的具体步骤如下: 一.停止MySQL(如果处于运行状态) #se ...

  2. CentOS7 重置root密码

    1- 在启动grub菜单,选择编辑选项启动 2 - 按键盘e键,来进入编辑界面 3 - 找到Linux 16的那一行,将ro改为rw init=/sysroot/bin/sh 4 - 现在按下 Con ...

  3. Mac上MySQL忘记root密码且没有权限的处理办法&workbench的一些tips (转)

    忘记Root密码肿么办 Mac上安装MySQL就不多说了,去mysql的官网上下载最新的mysql包以及workbench,先安装哪个影响都不大.如果你是第一次安装,在mysql安装完成之后,会弹出来 ...

  4. Atitit  godaddy 文件权限 root权限设置

    Atitit  godaddy 文件权限 root权限设置 1. ubuntu需要先登录,再su切换到root1 2. sudo 授权许可使用的su,也是受限制的su1 3. ubuntu默认吗roo ...

  5. Mysql 忘记root密码处理办法

    一.更改my.cnf配置文件 1.用命令编辑/etc/my.cnf配置文件,即:vim /etc/my.cnf 或者 vi /etc/my.cnf 2.在[mysqld]下添加skip-grant-t ...

  6. Ubuntu设置root用户登录图形界面

    Ubuntu默认的是root用户不能登录图形界面的,只能以其他用户登录图形界面.这样就很麻烦,因为权限的问题,不能随意复制删除文件,用gedit编辑文件时经常不能保存,只能用vim去编辑. 解决的办法 ...

  7. php利用root权限执行shell脚本

    vi /etc/sudoers , 为apache用户赋予root权限,并且不需要密码,还有一步重要的修改(我被困扰的就是这个地方) root  ALL=(ALL)  ALL apache  ALL= ...

  8. linux下如何添加一个用户并且让用户获得root权限

    1.添加用户,首先用adduser命令添加一个普通用户,命令如下: #adduser tommy //添加一个名为tommy的用户 #passwd tommy //修改密码 Changing pass ...

  9. 如何重置硬盘遭到“损坏”的Linux系统root用户密码

    传统印象下Linux是非常坚不可摧的,具有千年不更新,万年不重启的美名.而随着虚拟化的推进,很多跑在虚拟化上的Linux由于先前基础架构的脆弱,变得适应性“越来越不好”,体现在IP存储如果出现节点故障 ...

  10. centos下MYSQL 没有ROOT用户的解决方法。

    SbTest for using sysbench creating scritps: sysbench --test=oltp --oltp-table-size=100000 --mysql-db ...

随机推荐

  1. 【loj6145】「2017 山东三轮集训 Day7」Easy 动态点分治+线段树

    题目描述 给你一棵 $n$ 个点的树,边有边权.$m$ 次询问,每次给出 $l$ .$r$ .$x$ ,求 $\text{Min}_{i=l}^r\text{dis}(i,x)$ . $n,m\le ...

  2. 解决MySQL复制出错 Last_SQL_Errno:1146

    背景:我们在做数据迁移或者拆分的时候,使用Tablespace transcation 这种解决方案时,很有可能就会遇到 从库复制出错,报: Last_SQL_Errno: 1146 那么具体错误内容 ...

  3. BZOJ3246 IOI2013Dreaming

    如果将森林里每棵树都各自看做一个点,那么最后所连成的树应该是一颗菊花,否则将叶子节点父亲改为根不会更劣. 对于每个点所代表的树,其和根节点相连的点应该是到其他点距离最大值最小的点.这个点显然是直径的中 ...

  4. MT【129】常数变易法

    已知数列\(\{x_n\}\)满足\[x_{n+1}=\left(\dfrac 2{n^2}+\dfrac 3n+1\right)x_n+n+1,n\in\mathbf N^*,\]且\(x_1=3\ ...

  5. 【刷题】BZOJ 2243 [SDOI2011]染色

    Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段), 如 ...

  6. 关于UIInterfaceOrientation的一个bug

    在ios中获取设备当前方向的枚举有UIInterfaceOrientation和UIDeviceOrientation ,前者包含枚举 Unknown//未知 Portrait//屏幕竖直,home键 ...

  7. 【BZOJ3609】人人尽说江南好(博弈论)

    [BZOJ3609]人人尽说江南好(博弈论) 题面 BZOJ 洛谷 题解 昨天考试的时候,毒瘤出题人出了一个\(noip\)博弈十合一然后他就被阿鲁巴了,因为画面残忍,就不再展开. 这题是他的十合一中 ...

  8. LINUX第四周学习

    <Linux内核设计与实现>第四周读书笔记——第五章 5.1 与内核通信57 系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: 首先它为用户空间提供了一种硬件的抽 ...

  9. PostgreSQL 修改字段类型从int到bigint

    由于现在pg的版本,修改int到bigint仍然需要rewrite表,会导致表阻塞,无法使用.但可以考虑其他方式来做.此问题是排查现网pg使用序列的情况时遇到的. 由于int的最大值只有21亿左右,而 ...

  10. python抓取

    我要抓取奥巴马每周的演讲内容http://www.putclub.com/html/radio/VOA/presidentspeech/index.html 如果手动提取,就需要一个个点进去,再复制保 ...