提交 b11e1411 编写于 作者: L laiguizhong

添加应用沙盒指导

Signed-off-by: Nlaiguizhong <laiguizhong@huawei.com>
上级 493933c2
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
- 启动恢复 - 启动恢复
- [启动恢复子系统概述](subsys-boot-overview.md) - [启动恢复子系统概述](subsys-boot-overview.md)
- [init启动引导组件](subsys-boot-init.md) - [init启动引导组件](subsys-boot-init.md)
- [appspawn应用孵化组件](subsys-boot-appspawn-standard.md) - [appspawn应用孵化组件](subsys-boot-appspawn.md)
- [bootstrap服务启动组件](subsys-boot-bootstrap.md) - [bootstrap服务启动组件](subsys-boot-bootstrap.md)
- [syspara系统属性组件](subsys-boot-syspara.md) - [syspara系统属性组件](subsys-boot-syspara.md)
- [常见问题](subsys-boot-faqs.md) - [常见问题](subsys-boot-faqs.md)
......
...@@ -17,9 +17,9 @@ appspawn接收的消息为json格式,如下所示: ...@@ -17,9 +17,9 @@ appspawn接收的消息为json格式,如下所示:
| 字段名 | 说明 | | 字段名 | 说明 |
| -------- | -------- | | -------- | -------- |
| bundleName | 即将启动的应用服务进程名,长度≥7字节,≤127字节。 | | bundleName | 即将启动的应用服务进程名,长度≥7字节,≤127字节。 |
| identityID | AMS为新进程生成的标识符,由appspawn透传给新进程,长度≥1字节,≤24字节 | | identityID | AMS为新进程生成的标识符,由appspawn透传给新进程,长度≥1字节,≤24字节。 |
| uID | 即将启动的应用服务进程的uID,必须为正值。 | | uID | 即将启动的应用服务进程的uID。 |
| gID | 即将启动的应用服务进程的gID,必须为正值。 | | gID | 即将启动的应用服务进程的gID。 |
| capability | 即将启动的应用服务进程所需的capability权限,数量≤10个。 | | capability | 即将启动的应用服务进程所需的capability权限,数量≤10个。 |
## 标准系统 ## 标准系统
...@@ -35,8 +35,8 @@ appspawn注册的服务名称为“appspawn”。appspawn 通过监听本地sock ...@@ -35,8 +35,8 @@ appspawn注册的服务名称为“appspawn”。appspawn 通过监听本地sock
| processName | 即将启动的应用服务进程名,最大256字节。 | | processName | 即将启动的应用服务进程名,最大256字节。 |
| bundleName | 即将启动的应用程序包名,最大256字节。 | | bundleName | 即将启动的应用程序包名,最大256字节。 |
| soPath | 即应用程序指定的动态库的路径,最大256字节。 | | soPath | 即应用程序指定的动态库的路径,最大256字节。 |
| uid | 即将启动的应用进程的uid,必须为正值。 | | uid | 即将启动的应用进程的uid。 |
| gid | 即将启动的应用进程的gid,必须为正值。 | | gid | 即将启动的应用进程的gid。 |
| gidTable | 即将启动的应用进程组信息,长度由gidCount指定,最大支持64个进程组,必须为正值。 | | gidTable | 即将启动的应用进程组信息,长度由gidCount指定,最大支持64个进程组,必须为正值。 |
| gidCount | 即将启动的应用进程组个数。 | | gidCount | 即将启动的应用进程组个数。 |
| accessTokenId | 即应用进程权限控制的token id。 | | accessTokenId | 即应用进程权限控制的token id。 |
...@@ -49,10 +49,10 @@ appspawn注册的服务名称为“appspawn”。appspawn 通过监听本地sock ...@@ -49,10 +49,10 @@ appspawn注册的服务名称为“appspawn”。appspawn 通过监听本地sock
### 功能简介<a name="section56901555911"></a> ### 功能简介<a name="section56901555911"></a>
- 安全控制 - 安全控制
<br> &emsp; 支持为app设置SELinux标签。 <br>&emsp;支持为app设置SELinux标签。
SELinux标签接口代码如下: SELinux标签接口代码如下:
``` ```c++
AppSpawnClientExt *appProperty = (AppSpawnClientExt *)client; AppSpawnClientExt *appProperty = (AppSpawnClientExt *)client;
HapContext hapContext; HapContext hapContext;
ret = hapContext.HapDomainSetcontext(appProperty->property.apl, appProperty->property.processName); ret = hapContext.HapDomainSetcontext(appProperty->property.apl, appProperty->property.processName);
...@@ -76,7 +76,7 @@ appspawn注册的服务名称为“appspawn”。appspawn 通过监听本地sock ...@@ -76,7 +76,7 @@ appspawn注册的服务名称为“appspawn”。appspawn 通过监听本地sock
``` ```
- 冷启动 - 冷启动
<br> &emsp; 支持通过aa命令冷启动应用。 <br>&emsp;支持通过aa命令冷启动应用。
``` ```
param set appspawn.cold.boot true // 打开冷启动开关 param set appspawn.cold.boot true // 打开冷启动开关
...@@ -85,6 +85,48 @@ appspawn注册的服务名称为“appspawn”。appspawn 通过监听本地sock ...@@ -85,6 +85,48 @@ appspawn注册的服务名称为“appspawn”。appspawn 通过监听本地sock
aa start -d 12345 -a ohos.acts.startup.sysparam.function.MainAbility -b ohos.acts.startup.sysparam.function -C aa start -d 12345 -a ohos.acts.startup.sysparam.function.MainAbility -b ohos.acts.startup.sysparam.function -C
``` ```
- 应用沙盒
<br>&emsp;应用独立运行于自身沙盒环境。
沙盒配置项:
1. 应用沙盒的配置入口,在json中配置。
2. 根据应用需要,结合沙盒目录化的规范,在下列三个json文件中,添加应用依赖的目录或文件。
沙盒配置文件如下:
```c++
namespace {
#ifdef __aarch64__
const std::string APP_JSON_CONFIG("/system/etc/sandbox/appdata-sandbox64.json");
#else
const std::string APP_JSON_CONFIG("/system/etc/sandbox/appdata-sandbox.json");
#endif
const std::string PRODUCT_JSON_CONFIG("/system/etc/sandbox/product-sandbox.json");
}
```
沙盒流程:
1. 读取/修改沙盒配置文件。
2. 解析json文件中的配置项。
3. 调用mount与link的函数实现挂载和隔离。
json文件中配置项如下:
```json
{
"src-path" : "/sys_prod",
"sandbox-path" : "/sys_prod",
"sandbox-flags" : [ "bind", "rec" ],
"check-action-status": "false"
}
{
"target-name" : "/system/bin",
"link-name" : "/bin",
"check-action-status": "false"
}
```
调用mount与link的函数。即,将src-path挂载至sandbox-path路径下。
```c++
int SandboxUtils::DoAllMntPointsMount(const ClientSocket::AppProperty *appProperty, nlohmann::json &appConfig);
int SandboxUtils::DoAllSymlinkPointslink(const ClientSocket::AppProperty *appProperty, nlohmann::json &appConfig);
```
### 开发指导<a name="section56901555913"></a> ### 开发指导<a name="section56901555913"></a>
接口定义路径: “/interfaces/innerkits/include/client_socket.h“,接口说明参见表3。 接口定义路径: “/interfaces/innerkits/include/client_socket.h“,接口说明参见表3。
...@@ -103,8 +145,8 @@ appspawn注册的服务名称为“appspawn”。appspawn 通过监听本地sock ...@@ -103,8 +145,8 @@ appspawn注册的服务名称为“appspawn”。appspawn 通过监听本地sock
#### 开发实例<a name="section56901555915"></a> #### 开发实例<a name="section56901555915"></a>
<br> &emsp; 接口使用参考: <br>&emsp;接口使用参考:
``` ```
std::shared_ptr<AppSpawn::ClientSocket> clientSocket = std::make_unique<AppSpawn::ClientSocket>("AppSpawn"); std::shared_ptr<AppSpawn::ClientSocket> clientSocket = std::make_unique<AppSpawn::ClientSocket>("AppSpawn");
if (clientSocket == nullptr) { if (clientSocket == nullptr) {
return -1; return -1;
...@@ -121,15 +163,15 @@ appspawn注册的服务名称为“appspawn”。appspawn 通过监听本地sock ...@@ -121,15 +163,15 @@ appspawn注册的服务名称为“appspawn”。appspawn 通过监听本地sock
int pid; int pid;
clientSocket->ReadSocketMessage((void *)&pid, sizeof(pid)); clientSocket->ReadSocketMessage((void *)&pid, sizeof(pid));
// 如果失败,返回pid小于等于0;否则返回应用的进程id // 如果失败,返回pid小于等于0;否则返回应用的进程id
``` ```
### 常见问题<a name="section56901555916"></a> ### 常见问题<a name="section56901555916"></a>
#### 冷启动应用失败<a name="section56901555917"></a> #### 冷启动应用失败<a name="section56901555917"></a>
&emsp; **现象描述** &emsp;**现象描述**
<br> &emsp; &emsp; 通过命令冷启动应用失败。 <br>&emsp;&emsp;通过命令冷启动应用失败。
&emsp; **解决方法** &emsp;**解决方法**
<br> &emsp; &emsp; 1. 确认是否打开冷启动设置。 <br>&emsp;&emsp;1. 确认是否打开冷启动设置。
<br> &emsp; &emsp; 2. 确认冷启动命令是否正确。 <br>&emsp;&emsp;2. 确认冷启动命令是否正确。
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册