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进程存在的意义相关推荐

  1. Android NDK开发之 Android系统开发中LOG的使用

    浅谈Android系统开发中LOG的使用 转自:http://blog.csdn.net/luoshengyang/article/details/6581828

  2. android 电话回音消除,android系统通话中回声消除的实现.pdf

    android系统通话中回声消除的实现.pdf 2011年第11期,第44卷 通 信 技 术 Vol.44,No.11,2011 总第239期 Communications Technology No ...

  3. android获得系统自带颜色,这些Android系统样式中的颜色属性你知道吗?

    Android 系统样式中的颜色属性 几个常用的颜色属性 先放上一张经典的图片,图片来自网络. 这张图在网上很是流传,也不知道当初是哪位大神标注的,很好的说明了 Android 系统中的几个常用的颜色 ...

  4. android回声消除方案,android系统通话中回声消除的实现.doc

    总第 239 期Communications TechnologyNo.239,Totallyandroid 系统通话中回声消除的实现曾光, 侯嘉(苏州大学 电子信息学院,江苏 苏州 215001) ...

  5. Android系统的心脏-Zygote进程启动流程分析

    简介: Android中,Zygote是整个Android系统的核心进程,是Android系统的心脏.所有的Android应用程序,包括Android框架层所在的进程system_server,都是由 ...

  6. Android系统10 RK3399 init进程启动(三十八) 属性Selinux实战编程

    配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask 说明 系统:Android10.0 设备: FireFly RK3399 (ROC-RK3399-PC-PLUS) 前言 上一节 ...

  7. Android系统10 RK3399 init进程启动(三十三) property属性系统框架

    配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask 说明 系统:Android10.0 设备: FireFly RK3399 (ROC-RK3399-PC-PLUS) 前言 属性系 ...

  8. 浅谈Android系统开发中LOG的使用【转】

    本文转载自:http://blog.csdn.net/luoshengyang/article/details/6581828 在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以 ...

  9. 浅谈Android系统开发中LOG的使用

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6581828 在程序开发过程中,LOG是广泛使用 ...

最新文章

  1. 拜托别在问我 MySQL 性能优化了!
  2. 脂肪肝,应该拿你怎么办
  3. 试编写一个汇编语言程序,大写---小写 要求对键盘输入的大写字母用小写字母显示出来。
  4. 企业生产环境下不同业务的linux分区建议
  5. LeetCode Maximum Subarray
  6. 【Rényi差分隐私和零集中差分隐私(差分隐私变体)代码实现】差分隐私代码实现系列(九)
  7. 双向链表示意图_图文详解双向链表原理
  8. 读写生信流程必备的 Perl 语法
  9. CDOJ 28 补兵(kill)
  10. MySQL--Select条件判断、in、not in、and、or、以及like匹配字符语句查询
  11. 一周极客热文:看马云李彦宏马明哲等大佬手绘未来图
  12. Go语言(Golang)的Web框架比较:gin VS echo
  13. drawio界面自定义配置
  14. 硬盘连接计算机后怎么使用,台式机硬盘如何接笔记本【方法步骤】
  15. 阿里巴巴获得商品详情 API 返回值说明
  16. 关于tomcat启动时的警告 :maxActive is not used inDBCP2
  17. 使用anaconda配置python3.6环境安装pyltp超详细教程,使用pycharm调用
  18. 关于error: multiple definition 的问题来源
  19. 状态变量及状态空间表达式的模拟结构图
  20. 电商商品列表应以SPU还是SKU展示商品?

热门文章

  1. linux电脑闪屏是什么原因,电脑显示器突然闪屏是什么原因
  2. 海思HiKey 970内核下载与编译
  3. 回收站会清理也能恢复不久之前删除的文件
  4. 【Lucene】分词器详解,常用的分词器,IKANalyzer
  5. 云计算与虚拟化概述-你不得不知的云计算与虚拟化基础知识
  6. Postman官方64位版本下载
  7. 画课堂计算机作业答案,袁老师课堂:孩子们的电脑画
  8. 川渝地区高温、缺水,水电大省的困局让源网荷储一体化来缓解
  9. 【基础知识】Oracle查询密码修改记录
  10. Cannot read property 'classList' of null