Android security model 基于:
UID 在android framework定义如下:
#define AID_ROOT 0 /* traditional unix root user */
#define AID_SYSTEM 1000 /* system server */
#define AID_RADIO 1001 /* telephony subsystem, RIL */
...
#define AID_APP 10000 /* first app user */
...
static const struct android_id_info android_ids[] = {
{ "root", AID_ROOT, },
{ "system", AID_SYSTEM, },
{ "radio", AID_RADIO, },
GID是一个包含一个或者多个user的唯一标示
Android用UID和GID为资源分配不同的特权,比如SD card、network。UID和GID映射在Linux权限下
默认时,系统为APP生成UID,你也可以在AndroidManifest.xml中指定
如果两个进程想要同一个UID,他们必须用同一个证书进行签名。
举例:system UID是1000,如果APP想使用这个UID,APP必须用platform签名并且设置UID
android:sharedUserId="android.id.system"
每一个用户至少是一个group的一员,默认时,GID和UID一样。一个用户也可能被列在多个group里。
当APP请求具有GID保护的权限时,APP将被加入到相应的group中。
以下文件的那个一了所有和Linux group相关的权限。
framework/base/data/etc/platform.xml
<permission name="android.permission.BLUETOOTH_ADMIN" >
<group gid="net_bt_admin" />
permission>
<permission name="android.permission.BLUETOOTH" >
<group gid="net_bt" />
permission>
启动APP的时候检查log
如果APP想要运行是查询GID,使用:
mContext.getPackageManger().getPackageGids("PACKAGE_NAME");
每一个GID都和一个特权相关,比如1006是Camera, 3003 network socket
Android用signing作为一个作者标示的方式,并且在APP之间建立信任关系
signing并不等同加密,也并没有加密任何东西
证书是为了标示APP的作者
举例来说,证书分为:platform,shared, media
可以在Android.mk中定义sign的证书
LOCAL_PACKAGE_NAME := Bluetooth
LOCAL_CERTIFICATE := platform
所有的APP都必须经过证书signing。没有signing的APP是不能被安装的。
用SDK开发的时候,APP会被会SDK编译工具signing,用的是SDK build tools生成的debug key。这样signing的APP是没有办法发布的
生成自己的额key并且sign
方法1: key tool + jarsigner(available in JDK)
方法2: openssl + signapk
证书全部在
“/build/target/product/security”
私有证书的类型
platform - a key for packages that are part of the core platform
shared - a key for things that are shared in the home/contacts process
media - a key for packages that are part of the media/download system
releasekey(testacy) - a generic key for packages that do noe otherwise specify a key
release key 用在商业ROM,testacy用在debug ROM
如果APP没有在Android.mk中定义 LOCAL_CERTIFICATE :=, 那么默认会被releasekey sign
如果一个APP想要使用系统特权,需要在AndroidManifest.xml中声明权限
APP 没有申请资源,访问受限的西苑会又SecurityException
Protection Level