6g下载网
当前位置: 主页 > 软件教程 > 手机技术 >

Superuser和su是如何工作?Superuser和su介绍

时间: 2017-11-19 17:09 来源: 6g下载网

分享到:

1、 了解授权机制:

Su 被用户调用 —> Su创建了一个socket监听 —> Su 向Superuser发送了一个广播(即是有一个程序要请求root) —> su等待socket 数据接收(有超时处理) —> Superuser 界面收到广播后,弹出一个对话框,询问用户 —> Superuser 向传来的数据中的socket写回用户应答结果 —> Su 根据socket得到的结果处理应该不应该继续执行 —> 完成授权管理

2、 superuser是怎么知道谁想用root权限?

superuser 共有两个activity: SuperuserActivity 和 SuperuserRequestActivity ,其中SuperuserActivity 主要是用来管理白名单的,就是记住哪个程序已经被允许使用root权限了,省的每次用时都问用户。

SuperuserRequestActivity 就是用来询问用户目前有个程序想使用root权限,是否允许,是否一直允许,即放入白名单。

这个白名单比较关键,是一个sqlite数据库文件:

/data/data/com.koushikdutta.superuser/databases/superuser.sqlite

root的本质就是往 /system/bin/ 下放一个su文件,不检查调用者权限的su文件。普通程序可以调用该su来运行root权限的命令。

3、 su为什么一定要放到system?

adb shell mount 命令可以发现

/dev/block/bootdevice/by-name/system /system ext4 rw,seclabel,relatime,data=ordered 0 0

/dev/block/bootdevice/by-name/userdata /data ext4 rw,seclabel,nosuid,nodev,noatime,noauto_da_alloc,data=ordered 0 0

/dev/block/bootdevice/by-name/cache /cache ext4 rw,seclabel,nosuid,nodev,noatime,noauto_da_alloc,data=ordered 0 0

cache,data分区都是nosuid,所以不能给程序加SUID位,所以无法提权;

4、Android 4.2以后需要通过native service拉起su daemon之类的服务进程才能正常使用root相关功能;

Android 5.x以后需要搞定selinux才能正常使用root相关功能,新版的授权管理一般都带有类似

seinject的功能来注入安全策略,依靠替换系统服务如zygote等native service;

(责任编辑:大卫)
标签:Superuser

分享到:

------分隔线----------------------------