domain_auto_trans,source_domain,untrusted_app

一. domain_auto_trans - 自动域转换宏

它是干什么的?

domain_auto_trans 是一个策略宏 ,它用于在 SELinux 策略中定义一条规则:"当某个域(进程)执行某个特定类型的文件时,新产生的进程应该自动转换到一个新的、指定的域"

它不是一个基本的 SELinux 权限,而是一个为了方便而创建的"快捷方式",它会自动生成实现自动域转换所需的所有底层 allow 规则

参数:

domain_auto_trans(source_domain, target_type, new_domain)

  • source_domain当前正在执行程序的进程 所在的安全域。例如 init, zygote, shell
  • target_type被执行的程序文件 本身的安全上下文类型。例如 adbd_exec, app_process_exec, system_file
  • new_domain:执行成功后,新进程 应该被放置的安全域。例如 adbd, system_server, untrusted_app

它背后做了什么?

这个一条宏指令会扩展为三条基本的 allow 规则和一条 type_transition 规则:

bash 复制代码
# 1. 允许源域进程执行目标类型的文件
allow source_domain target_type:file execute;

# 2. 允许新域将目标类型的文件作为其"入口点"
allow new_domain target_type:file entrypoint;

# 3. 允许源域进程向新域进程转换
allow source_domain new_domain:process transition;

# 4. 最关键的一步:定义默认的类型转换规则。
#    意思是:当 source_domain 进程执行 target_type 文件时,
#            默认情况下,新进程的域应该是 new_domain。
type_transition source_domain target_type:process new_domain;

例子:

domain_auto_trans(zygote, app_exec, system_server)

这意味着:当 zygote 进程执行一个被标记为 app_exec 类型的文件时,新启动的进程会自动从 zygote 域转换到 system_server

二. source_domain - 源域

它是干什么的?

这只是一个占位符参数 ,代表转换过程的起点 。它指的是发起 execve() 系统调用的那个进程所在的安全域

这个进程通常是"孵化器"或"启动器",比如

  • init:第一个用户空间进程,负责启动系统服务
  • zygote:Android 的孵化进程,负责启动应用和系统服务
  • shell:在 ADB 或终端中运行的命令,比如 adb shell

源域进程的权限决定了它能执行哪些文件以及它能将子进程转换到哪些域

三. untrusted_app - 不受信任的应用域

它是干什么的?

untrusted_app 是 Android 为第三方应用程序 分配的标准 SELinux 域(安全上下文)。它的名字就体现了其安全设计初衷:默认不信任

主要特点:

  1. 最小权限原则untrusted_app 域被授予的权限极其有限。它只能访问明确允许的资源,无法访问其他应用的数据、系统日志、大多数设备文件等
  2. 沙盒化 :每个运行在 untrusted_app 域的应用都被隔离在自己的沙盒中,彼此之间以及与系统之间是隔离的
  3. 与平台应用的区别 :Android 还有 platform_app 域,用于预装在系统分区、与系统平台一起签名的应用。platform_appuntrusted_app 拥有稍多的权限,但仍然远少于系统服务域(如 system_server

它是如何被赋予应用的?

这正是一个域转换的完美例子!

  1. 源域zygote 监听请求,准备孵化新应用

  2. 目标文件 :应用本身的代码。Android 应用并非直接执行一个二进制文件,而是由 zygote 复制自身进程,然后加载应用的代码包(DEX/OAT 文件)。但这些代码库文件也有一个类型,比如 apk_data_file

  3. 转换规则 :策略中有一条核心规则:

    bash 复制代码
    domain_auto_trans(zygote, apk_data_file, untrusted_app)
  4. 结果 :当 zygote 为第三方应用 fork 并准备加载其代码时,SELinux 策略会检查到这个转换规则。由于所有条件满足(zygote 有执行/过渡权限,apk 文件是 untrusted_app 的有效入口点),新进程的域就从高权限的 zygote 降权 转换到了限制级的 untrusted_app

它们如何协同工作:

总结与关系图

概念 角色 类比
domain_auto_trans 规则制定者 一份官方文件,规定:"如果A部门(source_domain)的员工使用了B工具(target_type),就必须自动调到C岗位(new_domain)"
source_domain 起点/发起者 A部门的员工(如 zygote)。他的身份决定了他能使用哪些工具以及能调到哪些岗位
untrusted_app 终点/目标之一 C岗位中的一个,即限制最多的基层岗位。第三方应用员工最终都在这里
相关推荐
低调小一5 小时前
Android传统开发 vs Android Compose vs HarmonyOS ArkUI 对照表
android·华为·harmonyos
Ronin3055 小时前
【Linux系统】日志与策略模式
linux·策略模式·日志
雨白5 小时前
Java 多线程指南:从基础用法到线程安全
android·java
ZzzK,6 小时前
JAVA虚拟机(JVM)
java·linux·jvm
00后程序员张6 小时前
详细解析苹果iOS应用上架到App Store的完整步骤与指南
android·ios·小程序·https·uni-app·iphone·webview
Aspiresky7 小时前
浅析Linux进程信号处理机制:基本原理及应用
linux·运维·信号处理
程序员江同学7 小时前
ovCompose + AI 开发跨三端的 Now in Kotlin App
android·kotlin·harmonyos
ajassi20007 小时前
linux C 语言开发 (八) 进程基础
linux·运维·服务器