在SeLinux 框架中,需要为每个主体和客体设置好安全上下文。在Android中,常见的安全上下文文件有file_contexts、genfs_contexts、service_contexts、mac_permissions.xml和seapp_contexts
file_contexts
根系统中所有文件的安全上下文, 如/system/bin, /system/etc 等文件
/system(/.*)? u:object_r:system_file:s0
/system/apex/com.android.art u:object_r:art_apex_dir:s0
/system/lib(64)?(/.*)? u:object_r:system_lib_file:s0
/system/lib(64)?/bootstrap(/.*)? u:object_r:system_bootstrap_lib_file:s0
/system/bin/atrace u:object_r:atrace_exec:s0
/system/bin/auditctl u:object_r:auditctl_exec:s0
genfs_contexts
虚拟文件系统的安全上下文,如proc、sys、debugfs
genfscon proc / u:object_r:proc:s0
genfscon proc /asound u:object_r:proc_asound:s0
genfscon proc /buddyinfo u:object_r:proc_buddyinfo:s0
genfscon sysfs / u:object_r:sysfs:s0
genfscon sysfs /devices/system/cpu u:object_r:sysfs_devices_system_cpu:s0
genfscon sysfs /class/android_usb u:object_r:sysfs_android_usb:s0
genfscon sysfs /class/extcon u:object_r:sysfs_extcon:s0
genfscon debugfs /kprobes u:object_r:debugfs_kprobes:s0
genfscon debugfs /mmc0 u:object_r:debugfs_mmc:s0
genfscon debugfs /tracing u:object_r:debugfs_tracing_debug:s0
genfscon tracefs / u:object_r:debugfs_tracing_debug:s0
genfscon debugfs /tracing/tracing_on u:object_r:debugfs_tracing:s0
service_contexts
系统binder服务的安全上下文,在启动过程中,servermanger会读取该配置
media.audio_flinger u:object_r:audioserver_service:s0
media.audio_policy u:object_r:audioserver_service:s0
media.camera u:object_r:cameraserver_service:s0
wifiaware u:object_r:wifiaware_service:s0
wifirtt u:object_r:rttmanager_service:s0
window u:object_r:window_service:s0
* u:object_r:default_android_service:s0
自定义的系统服务,在没有特别指定的情况下,默认的安全上下文是u:object_r:default_android_service:s0
mac_permissions.xml和seapp_contexts
mac_permissions.xml用于根据应用签名和应用软件包名称(后者可选)为应用分配seinfo 标记。随后,分配的seinfo 标记可在seapp_contexts 文件中用作密钥,以便为带有该seinfo 标记的所有应用分配特定标签。在启动期间,system_server 会读取此配置
<signer signature="@PLATFORM"><seinfo value="platform"/></signer><!-- Media key in AOSP --><signer signature="@MEDIA"><seinfo value="media"/></signer><signer signature="@NETWORK_STACK"><seinfo value="network_stack"/></signer>
seapp_contexts,app的安全上下文,用于描述apk 安装之后的目录文件和/data/data 目录分配标签。在每次应用启动时,zygote 进程都会读取此配置;在启动期间,installd 会读取此配置
user=_app seinfo=platform name=com.android.traceur domain=traceur_app type=app_data_file levelFrom=all
user=system seinfo=platform domain=system_app type=system_app_data_file
user=bluetooth seinfo=platform domain=bluetooth type=bluetooth_data_file
user=_app isPrivApp=true name=com.google.android.gms:* domain=gmscore_app type=privapp_data_file levelFrom=user
user=_app isPrivApp=true name=com.google.android.gsf domain=gmscore_app type=privapp_data_file levelFrom=user
user=_app minTargetSdkVersion=30 domain=untrusted_app type=app_data_file levelFrom=all
user=_app minTargetSdkVersion=29 domain=untrusted_app_29 type=app_data_file levelFrom=all
user=_app minTargetSdkVersion=28 domain=untrusted_app_27 type=app_data_file levelFrom=all
在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 部分
上面说的安全上下文文件在编译之后,都会放到system/etc/seliunx和vendor/etc/seliunx 目录下。
版权归原作者 Kbattery 所有, 如有侵权,请联系我们删除。