diff --git a/Software/Development/OperatingSystem/Android/SELinux/Android_SELinux_详解.md b/Software/Development/OperatingSystem/Android/SELinux/Android_SELinux_详解.md index 3e96860..8a9ac98 100644 --- a/Software/Development/OperatingSystem/Android/SELinux/Android_SELinux_详解.md +++ b/Software/Development/OperatingSystem/Android/SELinux/Android_SELinux_详解.md @@ -44,7 +44,7 @@ SEAndroid 工作大致分为两部分:打标签和根据标签做权限控制 ### 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 由四部分组成,每一部分用冒号隔开,来看一个例子: @@ -53,7 +53,7 @@ u:r:init:s0 u:object_r:rootfs:s0 ``` -* 第一部分 u 代表用户,在 SeAndroid 中只有一个用户,就是 u; +* 第一部分 u 代表用户,在 SEAndroid 中只有一个用户,就是 u; * 第二部分 r 或者 object_r 代表用户的角色,如果角色是 r 代表的是进程,如果角色是 object_r 代表的是文件; * 第三部分 init 或者 rootfs 等,代表类型或者域,一般管文件的这部分叫类型,管进程的这部分叫域。不同的域拥有不同的权限; * 第四部分 s0 代表安全等级,我们不用关注。 @@ -86,9 +86,9 @@ action domain type:object_class operation 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 文件下定义了角色,每一个角色都有不同的功能,所以每一个角色都和一个域相关联,比如: @@ -102,7 +102,7 @@ role r types domain user u roles {r} ``` -这样就把用户 u 和角色 r 关联起来了。多个角色之间有层级关系,比如老板比总经理大,SeLinux 用 dominance 来表示,比如: +这样就把用户 u 和角色 r 关联起来了。多个角色之间有层级关系,比如老板比总经理大,SELinux 用 dominance 来表示,比如: ```bash dominance{role 老板 {role 总经理;role 总监}} @@ -112,7 +112,7 @@ dominance{role 老板 {role 总经理;role 总监}} ### 3.4.基于角色的控制 -在 SeAndroid 中定义的 u 和 r 是怎么做到基于角色的控制呢? +在 SEAndroid 中定义的 u 和 r 是怎么做到基于角色的控制呢? 使用 constrain 关键字,形式如下: ```bash @@ -172,14 +172,14 @@ allow init_t apache_t : process transition; allow apache_t apache_exec_t : file entrypoint; ``` -由于这样使用起来很麻烦,所以 SeAndroid 在 te_macros 中定义了很多宏来帮助我们实现, +由于这样使用起来很麻烦,所以 SEAndroid 在 te_macros 中定义了很多宏来帮助我们实现, 比如上面的四句就可以用以下一句宏来实现: ```bash domain_auto_trans(init_t, apache_exec_t, apache_t) ``` -SeAndroid中还有一个常见的宏就是给一个目录下的新建的文件打标签的宏,比如: +SEAndroid 中还有一个常见的宏就是给一个目录下的新建的文件打标签的宏,比如: ```bash file_type_auto_trans(appdomain, download_file, download_file) @@ -197,13 +197,13 @@ Android 预先打的标签在 XXX_context 文件中,比如: 一般 XXX_context 文件都是与预置好的给某些文件或者目录打标签。 -### 3.7.apk 以及其使用的 data 目录是如何被 SeAndroid 打标签的 +### 3.7.apk 以及其使用的 data 目录是如何被 SEAndroid 打标签的 在 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 文件