2014501能运行的android系统,Android中installd进程存在的意义
1. 为什么需要installd
从下面的输出可以看出,system_server以system用户的身份运行。我们知道,PackageManager运行于system_server中。也就是说,PackageManager的身份也是system用户。
shell@HM2014501:/$ busybox ps
busyboxps
PID USER TIME COMMAND
……
701 system 0:23 system_server
146 install 0:00 /system/bin/installd
但是,system用户并没有访问应用程序目录的权限。下面的输出显示当前用户是system,它不能访问/data/data/com.xiaomi.shop目录(此目录应为小米应用程序商店应用的目录)。
system@HM2014501:/data/data$ id
id
uid=1000(system) gid=1000(system)context=u:r:toolbox:s0
system@HM2014501:/data/data$ ls -l com.xiaomi.shop
ls -lcom.xiaomi.shop
opendir failed, Permission denied
这就是installd存在的原因。
2. Installd为什么可以访问应用程序的目录(比如/data/data/com.xiaomi.shop)?
installd的源程序在frameworks\native\cmds\installd目录下。
在install.c文件中有下面的代码。
static void drop_privileges() {
……
struct __user_cap_header_struct capheader;
struct __user_cap_data_struct capdata[2];
memset(&capheader, 0,sizeof(capheader));
memset(&capdata, 0, sizeof(capdata));
capheader.version =_LINUX_CAPABILITY_VERSION_3;
capheader.pid = 0;
capdata[CAP_TO_INDEX(CAP_DAC_OVERRIDE)].permitted |= CAP_TO_MASK(CAP_DAC_OVERRIDE);
……
if (capset(&capheader, &capdata[0])< 0) {
ALOGE("capset failed: %s\n",strerror(errno));
exit(1);
}
}
int main(const int argc__unused, const char *argv[] __unused) {
……
drop_privileges();
……
}
从上面的代码中可以看出,installd进程具有CAP_DAC_OVERRIDE特权(Privilege)。根据http://linux.die.net/man/7/capabilities, 对于具有CAP_DAC_OVERRIDE特权的进程,Linux会跳过文件的读、写、执行权限的检查。所以,installd可以访问任何目录下的文件。
CAP_DAC_OVERRIDE
Bypass file read, write, and executepermission checks. (DAC is an abbreviation of "discretionary accesscontrol".)
2014501能运行的android系统,Android中installd进程存在的意义相关推荐
- Android NDK开发之 Android系统开发中LOG的使用
浅谈Android系统开发中LOG的使用 转自:http://blog.csdn.net/luoshengyang/article/details/6581828
- android 电话回音消除,android系统通话中回声消除的实现.pdf
android系统通话中回声消除的实现.pdf 2011年第11期,第44卷 通 信 技 术 Vol.44,No.11,2011 总第239期 Communications Technology No ...
- android获得系统自带颜色,这些Android系统样式中的颜色属性你知道吗?
Android 系统样式中的颜色属性 几个常用的颜色属性 先放上一张经典的图片,图片来自网络. 这张图在网上很是流传,也不知道当初是哪位大神标注的,很好的说明了 Android 系统中的几个常用的颜色 ...
- android回声消除方案,android系统通话中回声消除的实现.doc
总第 239 期Communications TechnologyNo.239,Totallyandroid 系统通话中回声消除的实现曾光, 侯嘉(苏州大学 电子信息学院,江苏 苏州 215001) ...
- Android系统的心脏-Zygote进程启动流程分析
简介: Android中,Zygote是整个Android系统的核心进程,是Android系统的心脏.所有的Android应用程序,包括Android框架层所在的进程system_server,都是由 ...
- Android系统10 RK3399 init进程启动(三十八) 属性Selinux实战编程
配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask 说明 系统:Android10.0 设备: FireFly RK3399 (ROC-RK3399-PC-PLUS) 前言 上一节 ...
- Android系统10 RK3399 init进程启动(三十三) property属性系统框架
配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask 说明 系统:Android10.0 设备: FireFly RK3399 (ROC-RK3399-PC-PLUS) 前言 属性系 ...
- 浅谈Android系统开发中LOG的使用【转】
本文转载自:http://blog.csdn.net/luoshengyang/article/details/6581828 在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以 ...
- 浅谈Android系统开发中LOG的使用
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6581828 在程序开发过程中,LOG是广泛使用 ...
最新文章
- 拜托别在问我 MySQL 性能优化了!
- 脂肪肝,应该拿你怎么办
- 试编写一个汇编语言程序,大写---小写 要求对键盘输入的大写字母用小写字母显示出来。
- 企业生产环境下不同业务的linux分区建议
- LeetCode Maximum Subarray
- 【Rényi差分隐私和零集中差分隐私(差分隐私变体)代码实现】差分隐私代码实现系列(九)
- 双向链表示意图_图文详解双向链表原理
- 读写生信流程必备的 Perl 语法
- CDOJ 28 补兵(kill)
- MySQL--Select条件判断、in、not in、and、or、以及like匹配字符语句查询
- 一周极客热文:看马云李彦宏马明哲等大佬手绘未来图
- Go语言(Golang)的Web框架比较:gin VS echo
- drawio界面自定义配置
- 硬盘连接计算机后怎么使用,台式机硬盘如何接笔记本【方法步骤】
- 阿里巴巴获得商品详情 API 返回值说明
- 关于tomcat启动时的警告 :maxActive is not used inDBCP2
- 使用anaconda配置python3.6环境安装pyltp超详细教程,使用pycharm调用
- 关于error: multiple definition 的问题来源
- 状态变量及状态空间表达式的模拟结构图
- 电商商品列表应以SPU还是SKU展示商品?