- 1 linux 两个uid:真实uid和有效uid.
A:real uid:通过getuid()获取,描述用户是谁。
B:effective uid:通过geteuid()获取,指程序执行时的用户组别,用于判断程序是否有权去进行一些操作。
C:一个程序启动另一个程序,后者的real uid等于parent的real uid,而effective uid通常会继承于parent启动者real uid,但是下面的情况不会。
- 2 su的4577权限,也就是设置了suid,sgid权限,这样让su运行时的euid不继承于它的启动者real uid,而是直接来只有文件属主root.而euid才是真正权限的判断,所有在后面su就可以做root的事:
A:把自己的real uid 也设置为root。
B:调用sh执行命令,这是sh的real uid来至于su,也就是root。
- 3 在2.2系统中,su在把自己的real uid 也设置为root之前,做了判断:
myuid = getuid(); if (myuid != AID_ROOT && myuid != AID_SHELL) { fprintf(stderr,"su: uid %d not allowed to su\n", myuid); return 1; }
- 所以,在android原生系统中,如果启动su的不是root或者shell,那么就不能通过su root,只能在recovery模式下升级系统,刷入新编译的su。而在某些自有尝试的手机中,如hike
等系统中已经没有那一步的判断,才可以通过su获取root
关于Android通过su申请root的补充
最新推荐文章于 2024-04-29 15:55:02 发布