属性有很多种命名方法,但对应的标签也不同,安卓原生的一个属性标签可以参考property_contexts - OpenGrok cross reference for /system/sepolicy/private/property_contexts
对于这个,我们先理解一下这个里面的内容分别是什么意思,
1. 对于没有在property_contexts中定义的属性,默认标签为default_prop
# default property context
* u:object_r:default_prop:s0
2. 以下这种代表以sys.开头的属性标签都为system_prop,其他的也都是一样的
sys. u:object_r:system_prop:s0
那列几个我们常用的吧
hw. u:object_r:system_prop:s0
debug. u:object_r:debug_prop:s0
ro.hw. u:object_r:system_prop:s0
ro.config. u:object_r:config_prop:s0
persist.sys. u:object_r:system_prop:s0
3. 以system_server为例,因为它本身对system_prop的属性有set权限,如果需要在systemserver中新增属性的话,可以以sys.开头,或者以persist.sys.开头,都不用再去新增对应的权限了
system_server.te - OpenGrok cross reference for /system/sepolicy/private/system_server.te
# Property Service write
set_prop(system_server, system_prop)
4. 如果你是新增其他新的属性,并重新打标签,那可以按照如下方法
在对应目录的property_contexts中新增标签
sys.new.biaoqian u:object_r:new_biaoqian_prop:s0
type声明有以下几种方式:
system_internal_prop(new_biaoqian_prop)
system_restricted_prop(new_biaoqian_prop)
system_public_prop(new_biaoqian_prop)
......
对应的函数解释如下:
基本定义define_prop如下
# define_prop(name, owner, scope)
# Define a property with given owner and scope
#
define(`define_prop', `
type $1, property_type, $2_property_type, $2_$3_property_type;
')
函数定义 | 解释 |
---|---|
define(`system_internal_prop', ` define_prop($1, system, internal) treble_sysprop_neverallow(` neverallow { domain -coredomain } $1:file no_rw_file_perms; ') ') |
# Define a /system-owned property used only in /system 只在system使用 |
define(`system_restricted_prop', ` define_prop($1, system, restricted) treble_sysprop_neverallow(` neverallow { domain -coredomain } $1:property_service set; ') ') |
# Define a /system-owned property which can't be written outside /system 在system使用,外部不能write |
define(`system_public_prop', `define_prop($1, system, public)') |
# Define a /system-owned property with no restrictions 在system使用,没有任何限制 |
define(`system_vendor_config_prop', ` system_public_prop($1) set_prop(vendor_init, $1) neverallow { domain -init -vendor_init } $1:property_service set; ') |
# Define a /system-owned property which can only be written by vendor_init 定义一个只在system使用的属性,但vendor_init可以写 |
define(`product_internal_prop', ` define_prop($1, product, internal) treble_sysprop_neverallow(` neverallow { domain -coredomain } $1:file no_rw_file_perms; ') ') |
# Define a /product-owned property used only in /product 定义一个只在product下使用的属性 |
define(`product_restricted_prop', ` define_prop($1, product, restricted) treble_sysprop_neverallow(` neverallow { domain -coredomain } $1:property_service set; ') ') |
# Define a /product-owned property which can't be written outside /product 定义一个product下可以使用的属性,在product外无法写 |
define(`product_public_prop', `define_prop($1, product, public)') |
# Define a /product-owned property with no restrictions 在product下可以使用,没有任何限制 |
define(`vendor_internal_prop', ` define_prop($1, vendor, internal) treble_sysprop_neverallow(` # init and dumpstate are in coredomain, but should be able to read all props. neverallow { coredomain -init -dumpstate } $1:file no_rw_file_perms; ') ') |
# Define a /vendor-owned property used only in /vendor 只在vendor下使用的属性 |
define(`vendor_restricted_prop', ` define_prop($1, vendor, restricted) treble_sysprop_neverallow(` # init is in coredomain, but should be able to write all props. neverallow { coredomain -init } $1:property_service set; ') ') |
# Define a /vendor-owned property which can't be written outside /vendor 在vendor下可以使用,vendor以外不能写 |
define(`vendor_public_prop', `define_prop($1, vendor, public)') |
# Define a /vendor-owned property with no restrictions 在vendor下可以使用,没有任何限制 |