配套系列教学视频链接:
说明
系统:Android10.0
设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)
前言
本章节介绍SeAndroid中常见的几个安全上下文文件。
一,安全上下文文件
在Android源码中会存在几个重要的上下文文件, 用来描述系统和属性,服务等的上下文信息, 路径在system/sepolicy
file_contexts | 根系统中所有文件的安全上下文, 如/system/bin, /system/etc等文件,源码路径如: system/sepolicy/private/file_contexts |
property_contexts | 属性的安全上下文,源码路径如: system/sepolicy/private/property_contexts |
genfs_contexts | Generalized filesystem虚拟文件系统安全上下文,如proc, sysfs,debugfs文件系统,源码路径如: system/sepolicy/private/genfs_contexts |
service_contexts | service文件安全上下文,用于为 Android Binder 服务分配标签,以便控制哪些进程可以为相应服务添加(注册)和查找(查询)Binder 引用。在启动期间,servicemanager 进程会读取此配置,HIDL机制出现后,就有两个,源码路径: system/sepolicy/private/hwservice_contexts system/sepolicy/private/service_contexts |
mac_permission.xml | 用于根据应用签名和应用软件包名称(后者可选)为应用分配 seinfo 标记。随后,分配的 seinfo 标记可在 seapp_contexts 文件中用作密钥,以便为带有该 seinfo 标记的所有应用分配特定标签。在启动期间,system_server 会读取此配置, 源码路径为: system/sepolicy/private/mac_permissions.xml |
seapp_contexts | app安全上下文,用于描述apk安装之后的目录文件和 /data/data 目录分配标签。在每次应用启动时,zygote 进程都会读取此配置;在启动期间,installd 会读取此配置。源码路径如: system/sepolicy/private/seapp_contexts |
Android 8.0 之后使用了新的treble项目, 分区分为平台和非平台:
selinux相关上下文和策略文件也被分成平台和非平台,system/sepolicy/Android.mk中有说明:
system/sepolicy/private:平台私有规则,不会向vendor部分暴露。里面包含了各种策略控制te文件,以及上面提到的上下文文件。
system/sepolicy/public: 平台共有策略的全部定义,里面包含了各种策略控制te文件,
system/sepolicy/vendor 厂商规则,可引用public的规则,不能引用private的规则
device/manufacturer/device-name/sepolicy 厂商自定义的规则,包括如上的vendor部分
一般我们开发都只修改厂商device里面定义的规则,修改平台里面的策略很容易出错,而且很难去找出问题点。
以上scontext文件都在编译之后被放到根文件系统中的以下目录:
# ls /system/etc/selinux/
mapping plat_mac_permissions.xml plat_service_contexts
plat_and_mapping_sepolicy.cil.sha256 plat_property_contexts selinux_denial_metadata
plat_file_contexts plat_seapp_contexts
plat_hwservice_contexts plat_sepolicy.cil
# ls /vendor/etc/selinux/
plat_pub_versioned.cil vendor_file_contexts vendor_seapp_contexts
plat_sepolicy_vers.txt vendor_hwservice_contexts vendor_sepolicy.cil
precompiled_sepolicy vendor_mac_permissions.xml vndservice_contexts
precompiled_sepolicy.plat_and_mapping.sha256 vendor_property_contexts
特别要说明的几个文件:
plat_sepolicy.cil: 所有平台策略转成cil,会在init启动的时候进行动态编译, 由很多的te文件组合而来
vendor_sepolicy.cil: 所有厂商策略转成cil,会在init启动的时候进行动态编译, 由很多的te文件组合而来