当前位置: 首页 > news >正文

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当前正在执行程序的进程所在的安全域。例如 initzygoteshell
  • target_type被执行的程序文件本身的安全上下文类型。例如 adbd_execapp_process_execsystem_file
  • new_domain:执行成功后,新进程应该被放置的安全域。例如 adbdsystem_serveruntrusted_app

它背后做了什么?

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

# 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_app 比 untrusted_app 拥有稍多的权限,但仍然远少于系统服务域(如 system_server

它是如何被赋予应用的?
这正是一个域转换的完美例子!

  1. 源域zygote 监听请求,准备孵化新应用
  2. 目标文件:应用本身的代码。Android 应用并非直接执行一个二进制文件,而是由 zygote 复制自身进程,然后加载应用的代码包(DEX/OAT 文件)。但这些代码库文件也有一个类型,比如 apk_data_file
  3. 转换规则:策略中有一条核心规则:
    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岗位中的一个,即限制最多的基层岗位。第三方应用员工最终都在这里
http://www.dtcms.com/a/380790.html

相关文章:

  • prometheus安装部署与alertmanager邮箱告警
  • 【数据可视化-112】使用PyEcharts绘制TreeMap(矩形树图)完全指南及电商销售数据TreeMap绘制实战
  • rust语言 (1.88) 学习笔记:客户端和服务器端同在一个项目中
  • Java多线程分块下载文件
  • 玩转deepseek之自动出试卷可直接导出word
  • 智慧城管源码,java版城管综合执法监督系统微服务源码
  • FastAPI学习(四)——中间件
  • 维特imu ros2-foxy
  • Dubbo2 与 Dubbo3 的主要区别与演进
  • 【二分查找】
  • 新疆移动中兴B862AV3.1-M2_晨星mso9385_uwe5621ds_优盘免拆卡刷固件包
  • C++:map容器
  • Java内存模型与线程私有共享区域与直接内存的理解
  • MCP专题五、MCP 的未来趋势与展望
  • SIFT特征匹配实战:KNN算法实现指纹认证
  • ETL 不只是数据搬运工:如何实现智能转换与清洗?
  • UDP套接字的使用
  • 【Vue2手录11】Vue脚手架(@vue_cli)详解(环境搭建+项目开发示例)
  • Vue 使用docx-preview,渲染word后,继续其他操作(word中内容相关)的实现
  • [优选算法专题二——NO.16最小覆盖子串]
  • Nginx生产级优化配置全解析和配置原因解析
  • 14自由度汽车动力学模型
  • FS950R08A6P2B 双通道汽车级IGBT模块Infineon英飞凌 电子元器件核心解析
  • 交换机协议栈FRR中使用
  • C++ 二叉搜索树的详解与实现
  • 记录:离线部署
  • python逆向-逆向pyinstaller打包的exe程序反编译获取源代码
  • 最大连续 1 的个数
  • LVS负载均衡群集和LVS+Keepalived群集
  • 嵌入式开发:中断配置全解析