Android 深入系统完全讲解(15)

Posted 程序员入门进阶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 深入系统完全讲解(15)相关的知识,希望对你有一定的参考价值。

4 权限相关的知识

1 安卓权限
上层 APK 权限获取方式,配置 androidManifest.xml,系统会对应的给 gid,在创建进程的时候就带下去,这样子就可以访问对应的设备。

而系统相关的,会限制必须是 uid=system 这类,这个就必须使用系统签名,从而保证安全。

再一个就是一部分权限是限制在 priv-app 里面的,这个原因是让系统内置的 APP 可以方便运行,而不受权限的约束。

1 权限纵览
安卓权限从大的类别分类,分为上层的权限机制,主要是我们在 AndroidManifest.xml,我们配置的比如蓝牙模块权限,最终设备是配置了对应的组,我们上层的 APP 是通过 setgids 在创建进程的时候赋值下去的。

而怎么对应过去的,这个主要是在/etc/permissions/platform.xml 下面放置。对应的这个privapp-permissions-platform.xml 是配置白名单,不需要授权就可以允许的系统级别APP。

我们这里看到生成的地方和使用的地方:


/frameworks/base/data/etc/platform.xml ,我们看下内容,就知道是什么了。

这个就是我们对应的 gid,也就是你要访问对应的蓝牙设备就需要在这个组里面。

android/system/core/include/private 目录下有头文件 android_filesystem_config.h,这里面定义
了很多系统使用的 uid,

上 层 的 APP 设 计 的 权 限 是 通 过 配 置 AndroidManifest.xml 来 的
/frameworks/base/core/res/AndroidManifest.xml,而这个就是系统提供的所有权限,而比较关键的一些特殊权限,我们这里截图几个看看:


这个就是限定必须要系统签名才能用,上层的权限就是这样子给赋值的,我检索的时候没用signature,而是用了相关的一个,原因很简单,这个单词不特殊,搜索出来会超级多,没法判断。


从这里主要找到具体对应的变量是什么,依据这个就可以定位到系统的代码,这里关键点就是要找到相关代码的定义,从而找到 Java 中用的值,依据这个定义代码,找相关使用的地方,分析流程用的。



我们这里看完了这种配置的权限,下来我们说下 systemuid 的相关代码 :

这个是对应关系,而这个会在创建进程的时候,赋予对应的 uid,这样子 uid.system 就会在uid 是 system 这个上下文运行,对应的很多权限也就可以获取到。

系统很多时候会对 uid=system 放行,这也是它的意义。而这里核心就是 uid=system 需要签名是系统的,不是随便一个 APK 就可以配置,这是最关键的一环,权限是从这里被限制住的。

所以我们一般情况是配置不出来这个 uid 的,原因就是我们没有系统签名。
讲到这里再简单说下系统 db,setting.db 的权限限制策略,这里主要是 system, secure, global,系统相关的是可以操作 system 和 secure,一般我们使用的是 global,但是因为这个都能访问,所以系统开发的时候都是在 system 这里的,也是提供给系统相关的 APP,服务调用的。

以上是关于Android 深入系统完全讲解(15)的主要内容,如果未能解决你的问题,请参考以下文章

Android深入系统完全讲解(40)

Android 深入系统完全讲解(11)

Android 深入系统完全讲解

Android 深入系统完全讲解

Android 深入系统完全讲解

Android 深入系统完全讲解(19)