Android的安全策略

          这篇文章是讲解Android的安全策略。

         Android系统的安全策略是基于安全机制的逻辑。策略的核心内容则在Java服务库的PackageManagerService中实现。从PackageManagerService.java的源码类的注释中可以看到如下的的注释:

         /* * * Keep track of all those .apks everywhere.
          * * * This is very central to the platform's security * * */

       安全策略体现在下面的几个方面

           1.用户id的控制

         Android中系统中进程分为两种,一种是本地进程,另一种是Java虚拟机启动的进程。两种进程的用户id和组id的含义相同。区别是本地进程id是由init等父进程根据配置信息在分裂的时候确定的,而Java进程的id则是根据应用程序包的安装信息,由zygote在分裂它们时确定。关于进程号的定义可以参考http://blog.csdn.net/yangxuehui1990/article/details/41891263

          查看进程的状态信息可以使用命令:cat  /proc/进程号/status查看。例如:

|root@android:/system/app # cat /proc/2803/status

Name:   cn.ccdt.ims
State:  S (sleeping)
Tgid:   2803
Pid:    2803
PPid:   2274
TracerPid:      0
Uid:    1000    1000    1000    1000
Gid:    1000    1000    1000    1000

FDSize: 256
Groups: 1006 1015 3001 3002 3003 3005
          由此可见,cn.ccdt.ims进程运用于系统用户(AID_SYSTEM =1000)和系统用户组,并且这个进程也属于(AID_CAMERA    =1006)、(AID_SDCARD_RW =1015)、(AID_NET_BT_ADMIN =3001)、(AID_NET_BT = 3002)、(AID_INET     =3003)、(AID_NET_ADMIN =3005 )组。

         负责启动Java系统的的进程为zygote,他的用户和组都是root。zygote进行分裂后,启动的第一个Java进程程序是系统服务system_server.system_server进程运行予系统用户和系统用户组。


         程序中启动的各个Java进程,都将由system_server进程中的PackageManagerService指定相关的id,安装阶段的基本逻辑如下:

         第一,根据每一个应用程序包AndroidMenifest.xml中android:sharedUserId定义的共享用户信息,为应用程序包指定特殊的Uid,共享用户id要求ak包具有相同的签名。

       第二,如果没有指定共享用户,则一次为用用程序增加用户的id,默认的做法是从10000开始一次递增。


        Android中,涉及Linux进程id权限的安全策略有以下几个方面

        一,可以定义文件系统中的每个文件和目录具有不同的用户和权限。

        二,init.rc中定义各个被init启动的可执行程序的用户和组。

        三,init.rc中可以更改某些文件的权限。

        四,init可执行程序中定义每一类属性(property)的权限(仅考虑uid和gid)。

        五,init.rc中定义各个套接字(socket)文件的权限。

        六,ueventd.rc中定义各个设备节点的权限。

        七,servicemanager中“本地服务”简历的权限(仅考虑Uid)。


            文件系统中一下内容的权限如下:

130|root@android:/ # ls -l /mnt/                                               
drwxr-xr-x            root         system               1970-01-01 08:00 asec
drwxr-xr-x            root         system               1970-01-01 08:00 obb
drwx------             root          root                     1970-01-01 08:00 secure
d---rwxr-x            system    sdcard_rw          1970-01-01 08:00 sdcard   (这是一种拥有者权限最低的特殊情况)

sdcard的用户名是system,组名是sdcard_rw,权限是d---rwxr-x。含义为:进程的用户名是system,不能做任何操作,进程用户不是system,在sdcard_rw组内的,可以进行读/写执行操作,其他的用户只有读和执行的权限。(这是一种拥有者权限最低的特殊情况)


          2.许可的限制

        即Permission的检查限制。可以声明使用系统的某些权限,也可以自定义权限,并在组建中使用android:permission声明权限。这样使用该组件时就需要声明对应的权限才行。

          

需要注意的是,在声明权限时需要一个android:protectionLevel的属性,它代表“风险级别”。必须是以下值之一:

normal、dangerous、signature、signatureOrSystem。

normal表示权限是低风险的,不会对系统、用户或其他应用程序造成危害。

dangerous表示权限是高风险的,系统将可能要求用户输入相关信息,才会授予此权限。

signature告诉Android,只有当应用程序所用数字签名与声明此权限的应用程序所有数字签名相同时,才能将权限授给它。

signatureOrSystem告诉Android,将权限授给具有相同数字签名的应用程序或Android包类,这一级别适用于非常特殊的情况,比如多个供应商需要通过系统影像共享功能时

       

       3.由许可增加到用户组

         意思是由于用用程序包获得了某些许可(permission),这个应用程序包可以从Linux进程的角度被增加到特定的如。例如在AndroidMenifest.xml中声明了<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />,则应用将被添加到sdcard_rw组中。


       




          

           



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值