我们查看cat /proc/174/status 这个里面是这个进程的一些状态信息。
我们关注三行:
Uid: 1000 1000 1000 1000
Gid: 1000 1000 1000 1000
Groups: 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1018 3001 3002 3003 30
06 3007
这里我们便看到了系统进程的权限配置信息。这里的数字具体代表意义,可以在
android\system\core\include\private\android_filesystem_config.h
里面看到,这里做了个删减,列出个大概
#define AID_ROOT 0 /* traditional unix root user */
#define AID_SYSTEM 1000 /* system server */
#define AID_RADIO 1001 /* telephony subsystem, RIL */
#define AID_BLUETOOTH 1002 /* bluetooth subsystem */
#define AID_GRAPHICS 1003 /* graphics devices */
#define AID_INPUT 1004 /* input devices */
#define AID_AUDIO 1005 /* audio devices */
#define AID_CAMERA 1006 /* camera devices */
#define AID_LOG 1007 /* log devices */
#define AID_COMPASS 1008 /* compass device */
#define AID_MOUNT 1009 /* mountd socket */
#define AID_WIFI 1010 /* wifi subsystem */
。。。。。
/* The 3000 series are intended for use as supplemental group id's only.
* They indicate special Android capabilities that the kernel is aware of. */
#define AID_NET_BT_ADMIN 3001 /* bluetooth: create any socket */
#define AID_NET_BT 3002 /* bluetooth: create sco, rfcomm or l2cap sockets */
#define AID_INET 3003 /* can create AF_INET and AF_INET6 sockets */
#define AID_NET_RAW 3004 /* can create raw INET sockets */
#define AID_NET_ADMIN 3005 /* can configure interfaces and routing tables. */
#define AID_NET_BW_STATS 3006 /* read bandwidth statistics */
#define AID_NET_BW_ACCT 3007 /* change bandwidth statistics accounting */
#define AID_MISC 9998 /* access to misc storage */
#define AID_NOBODY 9999
#define AID_APP 10000 /* first app user */
3:为了控制访问的安全,加入安全机制。
3.1:系统级权限配置文档(1)
alps\frameworks\base\data\etc\platform.xml 存放着一些权限配置,我们可以看到类似
<permission ame="android.permission.READ_EXTERNAL_STORAGE" >
<group gid="sdcard_r" />
</permission>
<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
<group gid="sdcard_rw" />
</permission>
的权限配置。
这里的配置为读取外部存储卡的权限 以及写入外部存储卡的权限。
<permission name="android.permission.READ_EXTERNAL_STORAGE" >
里面的
<group gid="sdcard_r" 这里的意义为:如果apk申请读外部存储卡,则会在创建apk时,给此进程增加一个组,组名为sdcard_r,使用的接口为setgid();
然后我们来连接上adb,查看下权限:
这里我们可以看到读权限是对所有用户开启的,不需要配置读权限也是可以的。主要配置的为写存储卡,则必须配置权限,否则对于other用户来说,只有读和执行,没有写权限。关于sdcard挂载,具体查看android\system\vold 目录
3.2:系统级权限配置文档(2)
android\frameworks\base\core\res里面的AndroidManifest.xml,这个里面可以看到更多的系统权限配置表。我们这里随便拿出两个是normal等级的权限:
可以看到,应用在AndroidManifest.xml配置这两个权限,则可以顺利的得到读取网络和wifi的状态信息。这个权限normal只是一个提醒作用,因为我们直接配置就可以无阻碍的使用,其目的只是提示用户使用了此权限而已。
我们来看下这个配置里面的详细信息:
<permission android:name="android.permission.CALL_PHONE"
android:permissionGroup="android.permission-group.COST_MONEY"
android:protectionLevel="dangerous"
android:label="@string/permlab_callPhone"
android:description="@string/permdesc_callPhone" />
这里面的内容:
android:name 权限名称。
android:permissionGroup 权限组,这个是在安装应用时显示在哪个组下的。
android:protectionLevel 保护等级
android:label 权限图标
android:description 权限详细描述
3.3:apk安装之后申请的权限存放位置
/data/system/packages.xml 里面。我们使用
adb pull /data/system/packages.xml "D:\1.xml" ,打开1.xml,里面可以看到
这里这个<item name="com.lxm.test" package="com.example.test1" />
是我在自己的test1的apk里面写的自定义权限。
权限名字为com.lxm.test,权限所在包为:com.example.test1。 此权限为普通保护,因此不需要protection=“1”类似语句。
查看其它的权限,后面的 protection="1"保护等级。这里 如果为1 dangerous
为2 signature 为3 signatureOrSystem
关于normal dangerous signature signatureOrSystem 保护等级的区别,下面继续来讲解。
这里为
Packagename="com.example.test1" 包名codePath="/data/app/com.example.test1-1.apk" 安装路径
nativeLibraryPath="/data/data/com.example.test1/lib" apk如果包含库,在此位置查找
userId="10058" apk的userId