0x1 概述
Root本身是指linux系统当中的root账户,它对整个linux系统有着最高的权限,可以操作所有的对象.对于Android手机用户来说,Root就是拥有root权限.然而Android本身就是不想让你获取root权限,大部分手机在出厂时,都默认在普通用户权限下,无法操纵系统中的文件和数据.
Linux下su以后,输入正确的密码后就可以root了,但是Android里的su和linux下的su不太一样.Android里的su不是靠密码验证,而是看你原来的权限是什么.如果你本身是root用户,你可以su切换到其他中户,比如shell,camera等等.但是如果你是root或shell以外的用户,就不能切换到root用户,会提示Permission denied.(su只能被root或者shell权限执行)
//摘自AOSP \system\extras\su\su.c
myuid = getuid();
if (myuid != AID_ROOT && myuid != AID_SHELL)
{
fprintf(stderr,"su: uid %d not allowed to su\n", myuid);
return 1;
}
if(argc < 2)
{
uid = gid = 0;
}
else
{
int gids_count = sizeof(gids)/sizeof(gids[0]);
extract_uidgids(argv[1], &uid, &gid, gids, &gids_count);
if(gids_count)
{
if(setgroups(gids_count, gids))
{
fprintf(stderr, "su: failed to set groups\n");
return 1;
}
}
}
if(setgid(gid) || setuid(uid))
{
fprintf(stderr,"su: permission denied\n");
return 1;
}
也就是说在root下执行su才有用,但是我这时候还没有root怎么办?一般我们在linux下查看某文件的权限的是ls –l xxx.
比如-rwxr-xr-x,r代表可读,w代表可写,x代表可执行,-代表没有权限.
第一个rwx代表文件所有者的权限,第二个xr代表文件所有者同属一个用户组的其他用户可读可执行,第三个x代表其他用户组的权限.