Go to file
Qin Fandong a9fc0320c2 Update README.md
Signed-off-by: Qin Fandong <qinfd@superred.com.cn>
2021-10-22 09:07:59 +08:00
config 目录拆分(未测试) 2021-09-28 12:17:02 +08:00
docs/images 添加从 third_party_selinux 中踢出的自研代码 2021-10-08 10:28:19 +08:00
interfaces LICENSE 放到顶级目录以避免 gitee 的警告 2021-10-12 09:58:29 +08:00
scripts LICENSE 放到顶级目录以避免 gitee 的警告 2021-10-12 09:58:29 +08:00
sepolicy 目录拆分(未测试) 2021-09-28 12:17:02 +08:00
test LICENSE 放到顶级目录以避免 gitee 的警告 2021-10-12 09:58:29 +08:00
BUILD.gn Add license_file in BUILD.gn 2021-10-22 08:40:02 +08:00
LICENSE.txt LICENSE 放到顶级目录以避免 gitee 的警告 2021-10-12 09:58:29 +08:00
ohos.build add ohos.build and update BUILD.gn 2021-09-30 05:43:46 +00:00
README.md Update README.md 2021-10-22 09:07:59 +08:00

security_selinux

目标

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

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

仓库

目前2021年10月9日15:43:21涉及到的仓库有以下几个。

仓库 源码目录 说明
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 可执行文件
depends/fts/ openbsd 提供 fts 静态链接
depends/pcre/pcre/ pcre 提供 libpcre2.so 动态库

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

目录结构

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

验证

同步 OpenHarmony 代码

首先配置好环境。

sudo apt update
sudo apt-get update && sudo apt-get install binutils git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby
git config --global user.name "yourname"
git config --global user.email "your-email-address"
git config --global credential.helper store
sudo sh -c 'curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/bin/repo'
sudo chmod a+x /usr/bin/repo
sudo pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests

然后开始同步代码。

mkdir -pv openharmony/
cd ./openharmony/
repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'

进行编译

同步完成后,执行下面的命令编译项目,注意需要使用参数 --gn-args "build_selinux=true" 启用 SELinux 。

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

运行验证

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

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