在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
复制代码 自定义的系统服务,在没有特别指定的情况下,默认的安全上下文是ubject_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 目次下。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |