【Android安全】Android中的应用沙箱和UID | Android多用户
Android中的应用沙箱和UID
参考:
《Android安全架构深究(美)NIKOLAY ELENKOV》
Linux 用户和用户组管理:
https://www.runoob.com/linux/linux-user-manage.html
Android系统多用户:
https://blog.csdn.net/qq_14978113/article/details/94654401
1 Linux中的UID
Linux系统是一个多用户的操作系统。任何一个物理用户,必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
一个用户不能访问其他用户的文件(除非有明确的授权)。
每个进程以启动它的用户UID和GID运行(例外情况是当可执行文件的SUID或SGID被设置时)。
也就是说,Linux中的UID主要是用来 区分不同物理用户和系统守护进程 的。
这里需要注意,在Linux系统中,一个UID可以被分配给某个通过shell执行命令的物理用户,也可以被分配给某个系统服务守护进程。这是因为,守护进程通常可以通过网络被访问, 每个守护进程使用专用的UID,可以降低守护进程被攻击后带来的损失。
2 Android中的UID
2.1 UID的作用
Android 最初是为智能手机设计的, 由于智能手机是私人设备, 所以不需要区分物理用户。所以 UID被用来区别应用程序。这构成了Android应用程序沙箱的基础。
在每个app的安装阶段, Android自动为每个app赋予一个专属的UID。该UID的值是恒定的。app执行时就在自身UID对应的进程内运行。
另外, 每个app都有一个只有它具有读写权限的私有数据目录。
因此, 安卓app是隔离的,包括进程级隔离(分别运行在各自的进程中) 和文件级隔离(具有私有的数据目录)。
系统服务和应用程序都在恒定的UID 下运行。例如,重启手机后,各服务/应用的UID不会发生变化。
2.2 UID与用户名
- 系统服务的UID从1000开始;1000是AID_SYSTEM,具有一些特殊权限
- 应用程序的UID从10000开始;10000是AID_APP
- 在不支持多用户的Android中,UID对应的用户名是app_XXX,其中XXX是UID从AID_APP起的偏移。
- 在支持多用户的Android中(Android 从4.2 开始真正支持多用户),UID对应的用户名是uY_aXXX,其中Y是当前物理用户的user ID,XXX是UID从AID_APP起的偏移。
例如,10037 UID对应的用户名可以是u0_a37,其中0是当前物理用户的user ID,37是10037-10000。Android的主用户(所谓“机主”)的user ID为0,之后添加的新用户的user ID从10开始递增。比如,新添加的第一个用户的user ID是10,第二个用户是11。
如下,添加新用户后,使用ps -A,能看到user ID为10的用户:
重启系统后,app的UID和用户名不变,如下面的com.oneplus.faceunlock:
2.3 UID的存储
app的UID会被写入/data/system/packages.list
例如对于com.oneplus.faceunlock:
com.oneplus.faceunlock 10122 0 /data/user/0/com.oneplus.faceunlock default:privapp:targetSdkVersion=28 none 0 20390141
这里:
第一个字段com.oneplus.faceunlock是包名,
第二个字段10122是应用 UID ,
第三个字段0是调试标志位 (1表示可调试),
第四个字段/data/user/0/com.oneplus.faceunlock是app的数据目录路径,
第五个字段default:privapp:targetSdkVersion=28是seinfo标签(由SELinux使用)。
第六个字段none是supplementary GID 列表。每个 GID 通常与一个A ndroid 权限相关联,GID 列表基于赋给应用程序的权限而产生。
普通用户app,例如:
com.atominvention.rootchecker 10236 0 /data/user/0/com.atominvention.rootchecker default:targetSdkVersion=26 3003 0 2
2.4 共享UID
应用程序可以使用同一个 UID 安装,叫作共享UID,在这种情况下,它们共享文件,甚至在同一个进程中运行。
为模块化考虑,共享用户ID被广泛应用在系统app之间,因为系统app需要在不同的包之间共享使用相同资源。
比如,在Android 4.4中,系统UI和键盘锁(实现锁屏)共享同一 个 UID 10012:
grep ‘10012’ /data/system/packages.list
com.android.keyguard 10012 0 /data/data/com.android.keyguard platform 1028,1015,1035,3002,3001
com.android.systemui 10012 0 /data/data/com.android.systemui platform 1028,1015,1035,3002,3001
共享用户ID 对第三方app来说也是可用的。
为共享同一个UID,app需要使用同一个开发者密钥进行代码签名。
共享UID不可以追加,只有应用一开始就设计使用UID才行。
2.5 特殊UID
参考:https://blog.csdn.net/SweetTool/article/details/72864229
AID_ROOT是0
可以通过检测系统中的特权文件来判断设备的Root状态,例如Root过的设备中通常会增加一些uid为0(root用户的UID)的文件。
【Android安全】Android中的应用沙箱和UID | Android多用户相关推荐
- 微信扫码 android sdk,H5中js-sdk扫码功能,Android手机微信中无法调用扫码?
我的H5对接微信JS-SDK中的扫码功能,发现在Android手机微信中无法调用扫码功能,在苹果手机微信中可以使用. 报如下错误: errMsg:scanQRCode:permissi on deni ...
- Android实例开发中如何创建第一个项目(android studio)
当我们配置好android环境后,如何创建第一个项目,每一项代表了什么意思,这里以Android studio 为例,其他软件如eclipse等是类似的操作 当我们安装好AS后 这里我们选择第一项 其 ...
- Android 8.0学习(31)---Android 8.0 中的 ART 功能改进
Android 8.0 中的 ART 功能改进 在 Android 8.0 版本中,Android Runtime (ART) 有了极大改进.下面的列表总结了设备制造商可以在 ART 中获得的增强功能 ...
- android程序root权限,android应用程序中应用root权限
android应用程序中使用root权限 要在android应用程序中使用root权限,那么运行程序的设备必须具有root权限. http://www.eoeandroid.com/code/2012 ...
- android单例模式代码,设计模式(一):Android 源码中的单例模式
设计模式(一):Android 源码中的单例模式 2020-08-17 22:51 阅读数 57 <>什么是单例模式? 单例模式(Singleton) 是最常见也最简单的设计模式,它的目的 ...
- Android 在xml中更改纯色图片颜色
Android 在xml中更改纯色图片颜色 使用Android:tint属性,设置想要的颜色,就是发现纯色图片变为设置的颜色了
- 设计模式(一):Android 源码中的单例模式
什么是单例模式? 单例模式(Singleton) 是最常见也最简单的设计模式,它的目的就是在全局只生成一个类的实例. 什么场合用单例模式 应用中经常有多任务进行信息共享的需求,比如火车票售卖示例中,多 ...
- android preference-headers 字体颜色,android 批改preference中view属性(title,summary字体颜色等)...
当前位置:我的异常网» Android » android 批改preference中view属性(title,summary字 android 批改preference中view属性(title,s ...
- Android 10 根文件系统和编译系统(十八):Android.bp语法
配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask 说明 系统:AOSP Android10.0 设备:Android x86模拟器 前言 由于make在编译时表现出效率不够高.增 ...
最新文章
- .Net Core分布式部署中的DataProtection密钥安全性
- 网络爬虫--11.XPath和lxml
- 计算机网络应用是学什么类型的,计算机网路中服务类型及应用
- 利用ambassador实现container跨主机连接
- atheros蓝牙设备驱动 小米_双十一值得买的蓝牙耳机,真无线蓝牙耳机音质排行榜...
- PCA(主成分分析)和FA(因子分析)区别
- JavaScript:Web APIsDOMBOM
- Visual Studio 最常用的13个快捷键
- 阿里云正式发布云原生人才培养合作计划
- 大学生计算机vfp,计算机vfp教学课件
- 火绒软件+软媒雷达(win10,弥补了火绒无优化内存服务)
- ArcGIS实验教程——实验二:ArcGIS地理配准完整操作步骤
- 高中补习数学:导数与函数的综合问题(2019年测试题)
- (转)男人的梦想之野性篇 什么是真正的越野车
- Excel 中超链接转换为相应的 URL
- PTA(接口)用java写 7-10 房屋、住宅、写字楼类
- 【单片机】含有闹钟的时钟设计
- 不蒜子实现网站访问量访客数统计
- 允许或禁止未知来源apk的安装
- python求圆柱表面积_ZZULIOJ.1011: 圆柱体表面积 —— 1021:三个整数的最大值(C语言 Vs Python)...