`
Release2012
  • 浏览: 13158 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【转】Android权限之共享UID和签名

 
阅读更多
共享UID

安装在设备中的每一个Android包文件(.apk)都会被分配到一个属于自己的统一的Linux用户ID,并且为它创建一个沙箱,以防止影响其他应用程序(或者其他应用程序影响它)。用户ID 在应用程序安装到设备中时被分配,并且在这个设备中保持它的永久性。

通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中.所以默认就是可以互相访问任意数据. 也可以配置成运行成不同的进程, 同时可以访问其他APK的数据目录下的数据库和文件.就像访问本程序的数据一样.



对于一个APK来说,如果要使用某个共享UID的话,必须做三步:

1、在Manifest节点中增加Android:sharedUserId属性。

2、在Android.mk中增加LOCAL_CERTIFICATE的定义。

如果增加了上面的属性但没有定义与之对应的LOCAL_CERTIFICATE的话,APK是安装不上去的。提示错误是:Package com.test.MyTest has no signatures that match those in shared user Android.uid.system; ignoring!也就是说,仅有相同签名和相同sharedUserID标签的两个应用程序签名都会被分配相同的用户ID。例如所有和media/download相关的APK都使用android.media作为sharedUserId的话,那么它们必须有相同的签名media。

3、把APK的源码放到packages/apps/目录下,用mm进行编译。

举例说明一下。

系统中所有使用Android.uid.system作为共享UID的APK,都会首先在manifest节点中增加android:sharedUserId="android.uid.system",然后在Android.mk中增加LOCAL_CERTIFICATE := platform。可以参见Settings等

系统中所有使用Android.uid.shared作为共享UID的APK,都会在manifest节点中增加android:sharedUserId="android.uid.shared",然后在Android.mk中增加LOCAL_CERTIFICATE := shared。可以参见Launcher等

系统中所有使用Android.media作为共享UID的APK,都会在manifest节点中增加android:sharedUserId="android.media",然后在Android.mk中增加LOCAL_CERTIFICATE := media。可以参见Gallery等。

另外,应用创建的任何文件都会被赋予应用的用户标识,并且正常情况下不能被其他包访问。当通过getSharedPreferences(String,int)、openFileOutput(String、int)或者openOrCreate Database(String、int、SQLiteDatabase.CursorFactory)创建一个新文件时,开发者可以同时或分别使用MODE_WORLD_READABLE和MODE_WORLD_RITEABLE标志允许其他包读/写此文件。当设置了这些标志后,这个文件仍然属于自己的应用程序,但是它的全局读/写和读/写权限已经设置,所以其他任何应用程序可以看到它。

关于签名:

build/target/product/security目录中有四组默认签名供Android.mk在编译APK使用:

1、testkey:普通APK,默认情况下使用。

2、platform:该APK完成一些系统的核心功能。经过对系统中存在的文件夹的访问测试,这种方式编译出来的APK所在进程的UID为system。

3、shared:该APK需要和home/contacts进程共享数据。

4、media:该APK是media/download系统中的一环。

应用程序的Android.mk中有一个LOCAL_CERTIFICATE字段,由它指定用哪个key签名,未指定的默认用testkey.

转自:http://www.linuxidc.com/Linux/2011-03/33279.htm
分享到:
评论

相关推荐

    android系统签名工具

    通过在每个App中使用sharedUserId设置即可共享系统账户权限,比如android:sharedUserId="android.uid.system" 这样就是用了system这个uid了。给apk增加系统签名,否则一些系统apk将无法安装,使用命令: java -jar ...

    Android-安全架构及权限控制机制剖析

    Android安全架构的核心是基于Linux内核的权限管理系统,它构建在微内核之上,为每个应用程序分配了独立的用户ID(UID)和组ID(GID),以实现进程隔离。Android系统还引入了 SELinux(Security-Enhanced Linux)来...

    Android-sharedUserId数据共享

    2. **插件化框架**:某些插件化框架利用`sharedUserId`实现主应用与插件应用之间的数据和权限共享。 ### 六、最佳实践 1. **最小权限原则**:仅在必要时共享数据,避免不必要的权限暴露。 2. **安全审计**:定期...

    Android通过共享用户ID来实现多Activity进程共享

    在Android开发中,多Activity进程共享是...总之,通过设置共享用户ID,Android开发者可以实现多Activity进程的共享,提高效率和用户体验。但在使用时,务必考虑安全性和权限管理,以确保应用的稳定性和用户数据的安全。

    android 权限问题

    ### Android权限问题详解 #### 一、Android权限体系概述 Android作为一款基于Linux内核的操作系统,继承了Linux系统的安全模型。在Android中,权限管理是保障应用安全运行的重要机制之一。本文将针对“Android权限...

    Android的安全与权限.pdf

    9. **权限分类**:Android权限分为正常权限和危险权限。正常权限对用户隐私或系统稳定性影响较小,安装时自动授予;而危险权限涉及用户隐私或可能影响其他应用,需要用户在运行时确认。 综上所述,Android的安全...

    android混淆与签名与反编译方法

    但请注意,一旦设置了共享UID,普通卸载可能无法彻底删除应用,可能需要root权限。 了解并熟练掌握这些技能,将有助于提升Android应用的安全性和发布效率。混淆能防止代码被轻易破解,签名确保了应用的身份和安全,...

    Android安全技术分析.pdf

    共享UID的应用可以相互访问代码和数据,因为它们在同一进程中运行。 2. 沙箱机制:Android通过“沙箱”策略,利用Linux的UID机制,将不同应用隔离开,使其在各自的进程中独立运行,从而实现多用户级别的隔离。 3. ...

    Android OS手机平台的安全机制分析和应用研究

    2. **权限管理机制**:为了限制应用程序的权限范围,防止其滥用权限导致的安全问题,Android为每个应用程序分配了一个唯一的Linux用户ID(UID),并通过权限管理系统来控制应用程序对系统资源和服务的访问。...

    安卓(与驱动)之 app获取系统级权限1

    首先,要理解Android权限模型。每个Android应用都有自己的运行环境,称为用户ID(UserID,简称UID),这决定了应用能访问哪些资源和执行哪些操作。系统权限通常只授予那些运行在系统核心服务中的应用,而普通应用则...

    Android操作系统的安全机制研究.doc

    Android采用权限管理系统,将权限分为普通、危险、签名和系统/签名四个级别。开发者在manifest文件中声明所需权限,用户在安装时需给予或拒绝这些权限。此外,per-URI权限允许对特定数据块进行临时访问控制,增强了...

    Android系统安全机制

    在安装阶段,系统会根据应用的签名和用户确认来授予相应的权限。一旦权限被授予,除非用户手动撤销,否则在应用的生命周期内一直有效。 - **权限分类**:权限分为普通权限和危险权限。危险权限需要用户明确同意才能...

    基于Android系统的隐私保护技术综述.pdf

    总的来说,Android系统的隐私保护技术是多层次、多角度的,既依赖于系统级别的隔离和权限控制,也依赖于开发者对隐私安全的重视和用户自身的隐私设置。随着技术的发展,未来Android系统的隐私保护能力将进一步提升,...

    浅入浅出Android安全(中文版).pdf

    常见的`sharedUserId`有“android.uid.system”、“android.media”和“android.uid.shared”等。 设置应用权限通常在应用的`AndroidManifest.xml`中进行,例如: ```xml <uses-permission android:name="android....

Global site tag (gtag.js) - Google Analytics