Android Selinux详解[六]--新增属性标签相关

时间:2024-03-22 20:47:38

属性有很多种命名方法,但对应的标签也不同,安卓原生的一个属性标签可以参考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下可以使用,没有任何限制