Go to file
openharmony_ci 320f17752d
!27 更新部件化接口
Merge pull request !27 from steven_Q/master
2022-01-19 05:13:16 +00:00
config 修复了代码检查中的一些问题 2021-11-02 17:39:09 +08:00
docs/images 添加从 third_party_selinux 中踢出的自研代码 2021-10-08 10:28:19 +08:00
interfaces add restorecon and setcon for hap 2022-01-18 22:13:02 +08:00
scripts add sepolicy 2022-01-11 16:16:15 +08:00
sepolicy add restorecon and setcon for hap 2022-01-18 22:13:02 +08:00
test optimize selinux_test.c src 2021-11-08 10:22:11 +08:00
.gitignore 修复了代码检查中的一些问题 2021-11-02 17:39:09 +08:00
BUILD.gn add restorecon and setcon for hap 2022-01-18 22:13:02 +08:00
bundle.json modify bundle.json 2022-01-19 09:30:12 +08:00
LICENSE 修复了代码检查中的一些问题 2021-11-02 17:39:09 +08:00
OAT.xml 修复了代码检查中的一些问题 2021-11-02 17:39:09 +08:00
README.md 根据编译参数 enforce_selinux 来确定是否开启 enforce 模式 2022-01-04 16:43:46 +08:00

security_selinux

目标

SELinux (安全增强式 Linux Security-Enhanced Linux )是 Linux 历史上杰出的安全子系统。 SELinux SIG 的工作目标是将 SELinux 引入 OpenHarmony 。

  1. SELinux 是一组内核修改和用户空间工具,其提供了访问控制安全策略机制,包括了强制访问控制( Mandatory Access Control MAC )。
  2. SELinux 已经被添加到各种 Linux 发行版中。其软件架构力图将安全决策的执行与安全策略分离,并简化涉及执行安全策略的软件的数量。

仓库

涉及到的仓库有以下几个。

仓库 源码目录 说明
security_selinux base/security/selinux/ 策略和一些自研接口
third_party_selinux third_party/selinux/ SELinux 的主仓库
productdefine_common productdefine/common/ 添加 SELinux 组件定义
third_party_toybox third_party/toybox/ 完善了 ls 的 SELinux 支持
startup_init_lite base/startup/init_lite/ 系统启动加载策略并分化服务的标签
third_party_FreeBSD third_party/FreeBSD/ 提供 fts 库
third_party_pcre third_party/pcre/ 提供 pcre2 库
build build/ 编译控制

架构

整体架构

整体架构

third_party_selinux 中使用了下面四个 SELinux 的组件。

组件 来源 作用 形式
checkpolicy/ selinux/checkpolicy checkpolicy 可执行文件
libselinux/ selinux/libselinux libselinux.sogetenforcesetenforce 动态库
libsepol/ selinux/libsepol 提供内部使用的 API 动态库
seclic/ selinux/seclic seclic 可执行文件

本仓库主要位于图中的编译侧,在板侧有两个动态库供 init 调用三方库。

目录结构

.
├── config                  # 板侧    三方库配置文件
├── docs                    #         文档资源
│   └── images
├── interfaces
│   ├── policycoreutils     # 板侧    libload_policy.so、librestorecon.so
│   │   ├── include
│   │   └── src
│   └── tools               # 板侧    load_policy、restorecon
│       ├── load_policy
│       └── restorecon
├── scripts                 # 编译侧  策略编译脚本
├── sepolicy                # 编译侧  策略文件
└── test                    #         测试程序

验证

编译代码

  1. 根据文档《获取源码》获取主线代码。
  2. 根据文档《源码编译》编译主线代码。

编译镜像

运行以下命令编译打包支持 SELinux 的镜像。

./build.sh --product-name Hi3516DV300 --gn-args "build_selinux=true"

运行验证

将镜像烧录到 Hi3516DV300 开发板上,开机,通过串口拿到 Shell ,在其中执行。

ls -lZ /         # 查看文件标签是否成功
ps -eZ           # 查看进程标签是否成功
setenforce 1     # 进行各种操作,观察是否被拦截,以及串口是否有 avc denied