转自 http://blog.youkuaiyun.com/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
property根据AID不同,只能操作指定前缀的属性。比如gsm.* 只能是AID_RADIO process可以set & get,其他USER则无法设置此前缀的property。
AID和UID有如下对应关系:
system\core\include\private\android_filesystem_config.h
通过busybox ps可以查看进程的UID:
在TvSettings.apk写demo验证:
get到结果:
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
类似以前版本,不同的前缀,对应不同的AID,这里对应不同的Scontext。
在上一篇文章<SELinux app配置>:
http://blog.youkuaiyun.com/zhudaozhuan/article/details/50964832
有介绍,对于app,只有domain为system_app的process才可以进行prop相关操作。
因此当我们需要客制化property前缀试,需要在property_contexts进行相关的配置。
例如:
其他domain,比如surfaceflinger.te中配置:
# Set properties.
allow surfaceflinger system_prop:property_service set;
allow surfaceflinger ctl_bootanim_prop:property_service set;
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).

本文详细解析了Android系统中Property的权限管理机制,包括从Android 5.x之前的AID权限分配到引入SEAndroid后SContext的配置变化。同时介绍了如何针对不同应用需求定制Property的权限。

被折叠的 条评论
为什么被折叠?



