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。

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

android 应用上层 权限 在应用上层权限_xml


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

android 应用上层 权限 在应用上层权限_android 应用上层 权限_02


这个就是我们对应的 gid,也就是你要访问对应的蓝牙设备就需要在这个组里面。android/system/core/include/private 目录下有头文件 android_filesystem_config.h,这里面定义

了很多系统使用的 uid,

android 应用上层 权限 在应用上层权限_android 应用上层 权限_03


上 层 的 APP 设 计 的 权 限 是 通 过 配 置 AndroidManifest.xml 来 的

/frameworks/base/core/res/AndroidManifest.xml,而这个就是系统提供的所有权限,而比较关键的一些特殊权限,我们这里截图几个看看:

android 应用上层 权限 在应用上层权限_android_04


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

android 应用上层 权限 在应用上层权限_xml_05


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

android 应用上层 权限 在应用上层权限_android 应用上层 权限_06


android 应用上层 权限 在应用上层权限_java_07


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

android 应用上层 权限 在应用上层权限_java_08


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

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

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

android 应用上层 权限 在应用上层权限_android_09