openharmony之sandbox沙箱机制详解
1. 概述
1.1 沙箱机制定义
鸿蒙系统沙箱(Sandbox)是一种安全隔离机制,通过mount命名空间和控制组(cgroup)技术,为系统服务和应用创建独立的运行环境,限制其对系统资源的访问权限。
为什么要有沙箱这个概念:
为了把每个应用关进“小黑屋”,防止它偷窥、篡改、破坏别人或系统的数据与资源。
- 数据隔离:应用 A 的文件、配置、数据库默认只能自己看,连应用 B 都碰不到,更别提系统。
- 权限最小化:即使应用申请了敏感权限(如麦克风、通讯录),也只能在沙箱里“有限使用”,超出范围立即被内核拒绝。
- 故障/攻击面最小化:应用崩溃或被植入恶意代码,最坏也只是把自己的沙箱玩坏,不会拖垮整个系统或其他应用。
简单来说就是HAp与系统间接隔离,防止应用直接访问系统资源。造成系统损坏
2. 沙箱配置文件结构
写在前面: APP启动沙箱相关源码在base\startup\appspawn\modules\sandbox路劲下
相关的沙箱json文件:
base\startup\appspawn\appdata-sandbox-app.json
base\startup\appspawn\appdata-sandbox.json
base\startup\appspawn\appdata-sandbox64.json
=====================================================================
Init进程启动时沙箱相关配置文件:
base\startup\init\services\sandbox\system-sandbox.json
base\startup\init\services\sandbox\chipset-sandbox.json
2.1 配置文件类型
配置文件类型 | 适用架构 | 作用域 | 路径 |
---|---|---|---|
system-sandbox.json | 32位系统 | 系统组件 | /system/etc/sandbox/ |
system-sandbox64.json | 64位系统 | 系统组件 | /system/etc/sandbox/ |
chipset-sandbox.json | 32位系统 | 芯片组件 | /system/etc/sandbox/ |
chipset-sandbox64.json | 64位系统 | 芯片组件 | /system/etc/sandbox/ |
2.2 配置语法规范
{"sandbox-root": "/mnt/sandbox/[system|chipset]","mount-bind-paths": [...],"mount-bind-files": [...],"symbol-links": [...]
}
3. 配置参数详解
3.1 根目录配置
{"sandbox-root": "/mnt/sandbox/system"
}
- system: 系统服务沙箱根目录
- chipset: 芯片组件沙箱根目录
3.2 目录挂载配置(mount-bind-paths)
3.2.1 基本结构
{"mount-bind-paths": [{"src-path": "/system/lib","sandbox-path": "/system/lib","sandbox-flags": ["bind", "rec", "private"],"ignore": 1}]
}
3.2.2 参数说明
参数名 | 类型 | 必填 | 说明 | 示例 |
---|---|---|---|---|
src-path | string | 是 | 源目录路径 | “/system/lib” |
sandbox-path | string | 是 | 沙箱内挂载路径 | “/system/lib” |
sandbox-flags | array | 是 | 挂载标志 | [“bind”, “rec”, “private”] |
ignore | int | 否 | 是否忽略挂载失败(1=忽略,0=检查) | 1 |
3.2.3 挂载标志详解
- bind: 绑定挂载
- rec: 递归挂载子目录
- private: 私有挂载,不共享挂载事件