Android内核基于linux内核开发,但一些安全访问限制有所不同。
如果是Linux系统,可执行文件设置了suid标记,则该程序运行时可以拥有创建者的euid,比如自己编写的一个idpie程序
$ ls -l /system/bin/idpie -rwsr-xr-x root shell 651379 2013-10-30 15:21 idpie
这个程序运行时会显示自己的uid和euid,然后尝试利用setuid,seteuid等提权,再输出提权后的uid和euid
$ idpie uid:2000,euid:0 uid:0,euid:0
目前来看,Android和Linux的情况相同,但Android系统下如果将这个程序放到/data/local/tmp目录执行,执行结果:
$ /data/local/tmp/idpie uid:2000,euid:2000
结论是:Android下,suid位并不是程序权限提升的唯一因素,程序所在目录也会限制,虽然没有全面测试,但至少/system/bin目录下的suid标记可以生效,/data/local/tmp目录下则不行
Update:
参考Ron的研究
suid程序不能放在nosuid挂载点的文件夹,否则无法获取相应的权限
$ cat /proc/mounts | grep nosuid 可以获取mount挂载文件夹到底支不支持suid
显然 /data 和 /cache 都不行