parent
2e56dbb075
commit
00c2378bc4
|
@ -44,7 +44,7 @@ SEAndroid 工作大致分为两部分:打标签和根据标签做权限控制
|
||||||
|
|
||||||
### 3.1.打标签
|
### 3.1.打标签
|
||||||
|
|
||||||
SeAndroid 会给所有的文件(包括进程贴上标签),这些标签称为 Security Context。我们可以通过 ls -Z 来查看文件的 Security Context 或者通过 ps -Z 来查看进程的 Security Context。
|
SEAndroid 会给所有的文件(包括进程贴上标签),这些标签称为 Security Context。我们可以通过 ls -Z 来查看文件的 Security Context 或者通过 ps -Z 来查看进程的 Security Context。
|
||||||
|
|
||||||
Security Context 由四部分组成,每一部分用冒号隔开,来看一个例子:
|
Security Context 由四部分组成,每一部分用冒号隔开,来看一个例子:
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ u:r:init:s0
|
||||||
u:object_r:rootfs:s0
|
u:object_r:rootfs:s0
|
||||||
```
|
```
|
||||||
|
|
||||||
* 第一部分 u 代表用户,在 SeAndroid 中只有一个用户,就是 u;
|
* 第一部分 u 代表用户,在 SEAndroid 中只有一个用户,就是 u;
|
||||||
* 第二部分 r 或者 object_r 代表用户的角色,如果角色是 r 代表的是进程,如果角色是 object_r 代表的是文件;
|
* 第二部分 r 或者 object_r 代表用户的角色,如果角色是 r 代表的是进程,如果角色是 object_r 代表的是文件;
|
||||||
* 第三部分 init 或者 rootfs 等,代表类型或者域,一般管文件的这部分叫类型,管进程的这部分叫域。不同的域拥有不同的权限;
|
* 第三部分 init 或者 rootfs 等,代表类型或者域,一般管文件的这部分叫类型,管进程的这部分叫域。不同的域拥有不同的权限;
|
||||||
* 第四部分 s0 代表安全等级,我们不用关注。
|
* 第四部分 s0 代表安全等级,我们不用关注。
|
||||||
|
@ -86,9 +86,9 @@ action domain type:object_class operation
|
||||||
type type_name, attribute_name
|
type type_name, attribute_name
|
||||||
```
|
```
|
||||||
|
|
||||||
attribute_name 表示 type 所属的属性组,一个 type 可以属于多个属性组。这样我们在编译 SeLinux 策略的时候通过对属性组编写,就可以应用到该属性组之下的所有 type 了。Android 系统定义的属性组一般都放在 attribute 文件中。
|
attribute_name 表示 type 所属的属性组,一个 type 可以属于多个属性组。这样我们在编译 SELinux 策略的时候通过对属性组编写,就可以应用到该属性组之下的所有 type 了。Android 系统定义的属性组一般都放在 attribute 文件中。
|
||||||
|
|
||||||
### 3.3.SeLinux 中用户和角色的定义
|
### 3.3.SELinux 中用户和角色的定义
|
||||||
|
|
||||||
在 roles 文件下定义了角色,每一个角色都有不同的功能,所以每一个角色都和一个域相关联,比如:
|
在 roles 文件下定义了角色,每一个角色都有不同的功能,所以每一个角色都和一个域相关联,比如:
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ role r types domain
|
||||||
user u roles {r}
|
user u roles {r}
|
||||||
```
|
```
|
||||||
|
|
||||||
这样就把用户 u 和角色 r 关联起来了。多个角色之间有层级关系,比如老板比总经理大,SeLinux 用 dominance 来表示,比如:
|
这样就把用户 u 和角色 r 关联起来了。多个角色之间有层级关系,比如老板比总经理大,SELinux 用 dominance 来表示,比如:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dominance{role 老板 {role 总经理;role 总监}}
|
dominance{role 老板 {role 总经理;role 总监}}
|
||||||
|
@ -112,7 +112,7 @@ dominance{role 老板 {role 总经理;role 总监}}
|
||||||
|
|
||||||
### 3.4.基于角色的控制
|
### 3.4.基于角色的控制
|
||||||
|
|
||||||
在 SeAndroid 中定义的 u 和 r 是怎么做到基于角色的控制呢?
|
在 SEAndroid 中定义的 u 和 r 是怎么做到基于角色的控制呢?
|
||||||
使用 constrain 关键字,形式如下:
|
使用 constrain 关键字,形式如下:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@ -172,14 +172,14 @@ allow init_t apache_t : process transition;
|
||||||
allow apache_t apache_exec_t : file entrypoint;
|
allow apache_t apache_exec_t : file entrypoint;
|
||||||
```
|
```
|
||||||
|
|
||||||
由于这样使用起来很麻烦,所以 SeAndroid 在 te_macros 中定义了很多宏来帮助我们实现,
|
由于这样使用起来很麻烦,所以 SEAndroid 在 te_macros 中定义了很多宏来帮助我们实现,
|
||||||
比如上面的四句就可以用以下一句宏来实现:
|
比如上面的四句就可以用以下一句宏来实现:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
domain_auto_trans(init_t, apache_exec_t, apache_t)
|
domain_auto_trans(init_t, apache_exec_t, apache_t)
|
||||||
```
|
```
|
||||||
|
|
||||||
SeAndroid中还有一个常见的宏就是给一个目录下的新建的文件打标签的宏,比如:
|
SEAndroid 中还有一个常见的宏就是给一个目录下的新建的文件打标签的宏,比如:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
file_type_auto_trans(appdomain, download_file, download_file)
|
file_type_auto_trans(appdomain, download_file, download_file)
|
||||||
|
@ -197,13 +197,13 @@ Android 预先打的标签在 XXX_context 文件中,比如:
|
||||||
|
|
||||||
一般 XXX_context 文件都是与预置好的给某些文件或者目录打标签。
|
一般 XXX_context 文件都是与预置好的给某些文件或者目录打标签。
|
||||||
|
|
||||||
### 3.7.apk 以及其使用的 data 目录是如何被 SeAndroid 打标签的
|
### 3.7.apk 以及其使用的 data 目录是如何被 SEAndroid 打标签的
|
||||||
|
|
||||||
在 PMS 启动的时候会去读取 mac_permissions.xml 文件,该文件中保留了签名和 seinfo 的对应关系,比如 platform 签名对应的 seinfo 是 platform,这个 seinfo 信息在安装 app 的时候会用到。
|
在 PMS 启动的时候会去读取 mac_permissions.xml 文件,该文件中保留了签名和 seinfo 的对应关系,比如 platform 签名对应的 seinfo 是 platform,这个 seinfo 信息在安装 app 的时候会用到。
|
||||||
|
|
||||||
然后在安装 app 的时候,PMS 会根据 app 的签名,给该 app 赋予一个 seinfo。这个 seinfo 就是 Selinux 给这个 app 打标签时候的第三个参数:type。
|
然后在安装 app 的时候,PMS 会根据 app 的签名,给该 app 赋予一个 seinfo。这个 seinfo 就是 SELinux 给这个 app 打标签时候的第三个参数:type。
|
||||||
|
|
||||||
在启动 app 的时候,PMS 会使用到 seapp_contexts 文件,这个文件定义了不同 seinfo 的 app 启动之后的domin,SeLinux 就是根据这个文件为 app 进程和其使用的 data 目录打标签。
|
在启动 app 的时候,PMS 会使用到 seapp_contexts 文件,这个文件定义了不同 seinfo 的 app 启动之后的domin,SELinux 就是根据这个文件为 app 进程和其使用的 data 目录打标签。
|
||||||
|
|
||||||
## 4.TE 文件
|
## 4.TE 文件
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue