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岗位中的一个,即限制最多的基层岗位。第三方应用员工最终都在这里
相关推荐
酉鬼女又兒24 分钟前
零基础入门Linux指南:每天一个Linux命令_pwd
linux·运维·服务器
云飞云共享云桌面26 分钟前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能
zl_dfq28 分钟前
Linux 之 【多线程】(pthread_xxx、轻量级进程、原生线程库、线程ID、__thread、线程栈、线程与信号、线程与程序替换)
linux
choke23328 分钟前
Python 基础语法精讲:数据类型、运算符与输入输出
java·linux·服务器
AZ996ZA42 分钟前
自学linux的第二十一天【DHCP 服务从入门到实战】
linux·运维·服务器·php
lxysbly1 小时前
md模拟器安卓版带金手指2026
android
_OP_CHEN1 小时前
【Linux系统编程】(二十八)深入 ELF 文件原理:从目标文件到程序加载的完整揭秘
linux·操作系统·编译·c/c++·目标文件·elf文件
Fleshy数模1 小时前
MySQL 表创建全攻略:Navicat 图形化与 Xshell 命令行双模式实践
linux·mysql
儿歌八万首1 小时前
硬核春节:用 Compose 打造“赛博鞭炮”
android·kotlin·compose·春节
神梦流2 小时前
GE 引擎的非标准数据流处理:稀疏张量与自定义算子在图优化中的语义保持
linux·运维·服务器