SEAndroid property 问题——property set 不是任何地方都能设置的

转自 http://blog.csdn.net/zhudaozhuan/article/details/50966080 

property是Android常用的一个TOOL(可以理解为TOOL),使用起来非常方便,不管是Java层还是c++层,都可以使用property。

1.非SEAndroid property限定

android 5.X之前,例如kikat4.4 :
system\core\init\property_service.c
[java]  view plain  copy
  1.  property_perms[] = {  
[java]  view plain  copy
  1. "ril.",             AID_RADIO,    0 },  
  2. "gsm.",             AID_RADIO,    0 },  
  3. "persist.radio",    AID_RADIO,    0 },  
  4. "net.dns",          AID_RADIO,    0 },  
  5. "sys.usb.config",   AID_RADIO,    0 },  
  6. "net.",             AID_SYSTEM,   0 },  
  7. "dev.",             AID_SYSTEM,   0 },  
  8. "runtime.",         AID_SYSTEM,   0 },  
  9. "hw.",              AID_SYSTEM,   0 },  
  10. "sys.",             AID_SYSTEM,   0 },  
  11. "sys.powerctl",     AID_SHELL,    0 },  
  12. "service.",         AID_SYSTEM,   0 },  
  13. "wlan.",            AID_SYSTEM,   0 },  
property根据AID不同,只能操作指定前缀的属性。比如gsm.* 只能是AID_RADIO process可以set & get,其他USER则无法设置此前缀的property。
AID和UID有如下对应关系:
system\core\include\private\android_filesystem_config.h
[java]  view plain  copy
  1. #define AID_SYSTEM        1000  /* system server */  
  2.   
  3. #define AID_RADIO         1001  /* telephony subsystem, RIL */  
  4. #define AID_BLUETOOTH     1002  /* bluetooth subsystem */  
  5. #define AID_GRAPHICS      1003  /* graphics devices */  
  6. #define AID_INPUT         1004  /* input devices */  
  7. #define AID_AUDIO         1005  /* audio devices */  
  8. #define AID_CAMERA        1006  /* camera devices */  
  9. #define AID_LOG           1007  /* log devices */  
  10. #define AID_COMPASS       1008  /* compass device */  
  11. #define AID_MOUNT         1009  /* mountd socket */  
  12. #define AID_WIFI          1010  /* wifi subsystem */  
通过busybox ps可以查看进程的UID:
[java]  view plain  copy
  1. PID   USER     TIME   COMMAND  
  2.  1741 10004      0:00 {d.process.media} android.process.media  
  3.  1804 10011      0:01 {ndroid.systemui} com.android.systemui  
  4.  1987 10005      0:00 {externalstorage} com.android.externalstorage  
  5.  2083 10038      0:00 {utmethod.pinyin} com.android.inputmethod.pinyin  
  6.  2176 1001       0:00 {m.android.phone} com.android.phone  
  7.  2195 1000       0:01 {droid.launcher3} com.android.launcher3  

android5.X之后,在system\core\init\property_service.c以及其他文件,没有看到对property_perms的定义。
在TvSettings.apk写demo验证:
[java]  view plain  copy
  1. SystemProperties.set("jacky.debug.prop","1");  
  2. SystemProperties.set("log.jacky.prop","1");  
  3. SystemProperties.set("gsm.jacky.prop","1");  
get到结果:
[java]  view plain  copy
  1. [gsm.jacky.prop]: [1]  
  2. [jacky.debug.prop]: [1]  
  3. [log.jacky.prop]: [1]  
gsm和log前缀对于kikat4.4,UID=1000的process是无法设置的,但是在android 5.1平台可以设置,说明android 5.X后已经没有对property前缀的限制了。

2.SEAndroid对property配置

在property_service.c里面没有对property的限制了,但是在SEAndroid还是有根据前缀,给予不同的SContext。
external\sepolicy\property_contexts
[java]  view plain  copy
  1. net.                    u:object_r:system_prop:s0  
  2. dev.                    u:object_r:system_prop:s0  
  3. runtime.                u:object_r:system_prop:s0  
  4. hw.                     u:object_r:system_prop:s0  
  5. sys.                    u:object_r:system_prop:s0  
  6. sys.powerctl            u:object_r:powerctl_prop:s0  
  7. service.                u:object_r:system_prop:s0  
  8. wlan.                   u:object_r:system_prop:s0  
  9. dhcp.                   u:object_r:dhcp_prop:s0  
  10. dhcp.bt-pan.result      u:object_r:pan_result_prop:s0  
  11. bluetooth.              u:object_r:bluetooth_prop:s0  
类似以前版本,不同的前缀,对应不同的AID,这里对应不同的Scontext。

在上一篇文章<SELinux app配置>: http://blog.csdn.net/zhudaozhuan/article/details/50964832
有介绍,对于app,只有domain为system_app的process才可以进行prop相关操作。
因此当我们需要客制化property前缀试,需要在property_contexts进行相关的配置。
例如:
[java]  view plain  copy
  1. ms.media.            u:object_r:audio_prop:s0  
  2. ms.dvfs.             u:object_r:audio_prop:s0  
其他domain,比如surfaceflinger.te中配置:
# Set properties.
allow surfaceflinger system_prop:property_service set;
allow surfaceflinger ctl_bootanim_prop:property_service set;
也可以对prop进行设置,所以当其他的domain process无法设置prop时,可以添加allow语句添加权限。

总结:
SEAndroid对property的配置,和kikat4.4版本的AID配置一样,对应的前缀,指定对应的SContext即可。以及当其他domain的process需要设置property时,可以通过allow语句添加权限(不确定是否会违反neverallow).
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值