android 9.0 selinux 策略配置

主要配置:

(1)文件;

  • 在 file.te 中声明一个文件类型;
type my_file, file_type, data_file_type, core_data_file_type;
  • 在 file_contexts 文件中关联实际的文件路径和文件类型;
/data/my_file(/.*)?                 u:object_r:my_file:s0

注意 my_file 的类型,如果是data目录下的,要添加 core_data_file_type; 是 vendor目录下的,要添加vendor_file_type;

(2)服务;

  • 在 service.te 声明一个service类型;
type my_service, app_api_service, service_manager_type;
  • 在 service_contexts文件中关联 service 名字和 service 类型;
com.example.my_service      u:object_r:my_service:s0
  • 在 my_app.te 中添加规则,允许 my_app 添加 my_service到系统服务;
add_service(my_app, my_service)

只有添加为系统service时,才需要编写策略。

(3)应用;

  • 在seapp_contexts 中将app进程名和角色关联上
user=system seinfo=platform name=com.example.app1 domain=my_system_app type=app_data_file
user=_app seinfo=platform name=com.example.app2 domain=my_platform_app type=app_data_file
user=_app seinfo=cust name=com.example.app3 domain=my_untrust_app type=app_data_file
  • 如果没有合适角色,需要新建一个角色

my_system_app 可以参考系统的 system_app 复制一份,再修改;

my_platform_app 可以参考系统的 platform_app 复制一份,再修改;

seinfo=cust 是自定义seinfo,高通平台可以通过修改 vendor_mac_permissions.xml 文件,将应用签名和seinfo关联起来,这样可以为保留签名的第三方应用创建自定义角色。

seapp_contexts 中关联的是 app 的进程名,如果app 有多个进程,每个都要写一行。

(4)属性;

  • 在 property.te中声明一个属性类型
type my_prop, property_type, mlstrustedsubject;
  • 在 property_contexts文件中关联属性定义和类型
persist.my_prop.   u:object_r:my_prop:s0

编写规则:

按照 selinux 的规则写法,主题访问客体的方式。通常都是allow 方式。

allow my_app my_prop:property_service { set };
allow my_app my_prop:file r_file_perms;

selinux 定义了很多宏,简化策略写法。

说明
create_dir_perms 读写目录
create_file_perms 读写文件
r_dir_perms 读取目录
r_file_perms 读取文件
binder_call(A, B)  允许应用A bind服务B
add_service(A, B) 允许应用A 添加服务B为系统服务
create_socket_perms 创建网络套接字权限

Android 9.0 继承了 Android 8.1 的 Treble 设计,将 system 和 vendor 进行了隔离。

system 目录下应用要读取 vendor 属性或者执行 vendor 文件,会触发错误。

Android 9.0 定义了一系列 violators 属性,允许这种跨域访问:

属性 说明
system_writes_vendor_properties_violators 允许系统应用写vendor属性
socket_between_core_and_vendor_violators 允许系统应用和vendor应用互相使用socket通信
system_executes_vendor_violators 允许系统应用执行vendor应用。

你可能感兴趣的:(安全开发,android)