run-as命令
功能
以root身份运行命令,可以在未root的情况下查看某个(debug模式的)应用的内部信息(沙盒文件夹)
介绍
在没有root过的手机中,用户权限是无法查看很多信息的,包括各个应用的沙盒
而run-as就向开发者提供了未root情况下访问沙盒信息的权限
执行run-as + 包名,就可以直接以root权限进入该应用的沙盒中查看包括数据库、xml、各种信息文件
条件
应用需为debug模式,即AndroidManifest.xml文件中,android:debugable需要为true
原理
Linux系统下除了rwx三个基本权限以外,还有特殊的s(setuid)权限和g(setgid)权限
s权限可以使得低权限用户以该程序的所有者的权限去执行命令
在某些情况下可以提供极大的方便,例如普通用户想要修改密码或者一些关键程序,就可以通过root用户设定好的特定程序来在规则内修改本无法修改的文件
但是s权限也具有相当程度的危险性,当该程序存在漏洞,最坏的情况下具备任意代码执行的能力时,则说可以利用其提权,即普通用户可以通过它得到完全的root权限
回到正题
run-as程序正是通过s权限使得普通用户可以在满足条件(应用为debug模式时、操作目录仅在应用沙盒下)时具备root权限
延伸
除了提权以外,s权限还可以用来降权
root用户可以更改文件的拥有者,从而可以通过s权限任意更改程序执行时的权限
在安卓系统中,所有进程都是由zygote进程fork出来的,如果不降权的话则所有进程都与父进程相同、具备了root权限,这显然是不安全的。因此zygote通过forkAndSpecializeCommon函数来进行降权处理,使得子进程具备可控的权限