1# security_selinux 2 3## 简介 4 5SELinux (安全增强式 Linux , Security-Enhanced Linux )是 Linux 历史上杰出的安全组件, 包含一组内核修改和用户空间工具,并提供了基于安全策略的强制访问控制机制( Mandatory Access Control , MAC )。SELinux 已经被添加到各种 Linux 发行版中。其软件架构力图将软件执行与安全策略设计分离。本部件负责对文件,属性,服务等系统资源提供强制访问控制保护。提供neverallow规则限制系统中的高危操作,减少系统安全风险。 6 7访问控制基本流程如下图所示: 8 9 10## 目录 11 12``` 13. 14├── config # 板侧 三方库配置文件 15├── docs # 文档资源 16│ └── images 17├── interfaces 18│ ├── policycoreutils # 板侧 libload_policy.so、librestorecon.so 19│ │ ├── include 20│ │ └── src 21│ └── tools # 板侧 load_policy、restorecon 22│ ├── load_policy 23│ └── restorecon 24├── scripts # 编译侧 策略编译脚本 25├── sepolicy # 编译侧 策略文件 26└── test # 测试程序 27``` 28 29## 约束 30 31目前Selinux只支持RK3568 32 33## 使用说明 34 35### 编译代码 36 371. 根据文档[《获取源码》](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/quick-start/quickstart-standard-sourcecode-acquire.md)获取主线代码。 381. 根据文档[《源码编译》](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/quick-start/quickstart-standard-running-hi3516-build.md)编译主线代码。 39 40### 编译镜像 41 42运行以下命令编译打包支持 SELinux 的镜像: 43 44``` 45本模块单独编译命令 46./build.sh --product-name=rk3568 -T selinux --ccache 47``` 48### 运行验证 49 50将镜像烧录到开发板上,开机,通过串口拿到 Shell ,在其中执行: 51 52``` 53ls -lZ / # 查看文件标签 54ls -lLZ / # 查看link源文件标签 55ps -eZ # 查看进程标签 56setenforce 1 # 使能selinux强制模式 57setenforce 0 # 是能selinux宽容模式,当前默认宽容模式 58getenforce # 获取selinux工作模式 59``` 60策略文件 /etc/selinux/targeted/policy/policy.31 61 62文件标签规则 /etc/selinux/targeted/policy/file_contexts 63 64selinux模式开关 /etc/selinux/config 65 66验证时,可单独替换上述文件。 67 68### 日志信息 69 70``` 71audit: type=1400 audit(1502458430.566:4): avc: denied { open } for pid=1658 comm="setenforce" path="/sys/fs/selinux/enforce" dev="selinuxfs" ino=4 scontext=u:r:hdcd:s0 tcontext=u:object_r:selinuxfs:s0 tclass=file permissive=1 72 73日志解读 74open #操作为open 75pid=1658 #访问主体进程号为1658 76comm="setenforce" #访问主体进程名为setenforce 77path="/sys/fs/selinux/enforce" #被访问客体为/sys/fs/selinux/enforce 78dev="selinuxfs" #被访问文件属于selinuxfs这一文件系统 79ino=4 #文件节点编号为4 80scontext=u:r:hdcd:s0 #访问主体selinux标签为u:r:hdcd:s0 81tcontext=u:object_r:selinuxfs:s0 #被访问客体selinux标签为u:object_r:selinuxfs:s0 82tclass=file #当前告警属于file类型的操作 83permissive=1 #当前selinux处于宽容模式,只告警不做访问拦截。强制模式时,做拦截, permissive=0 84``` 85 86### 策略编写 87 88``` 89根据avc告警,获取访问信息 90如: 91audit: type=1400 audit(1502458430.566:4): avc: denied { open } for pid=1658 comm="setenforce" path="/sys/fs/selinux/enforce" dev="selinuxfs" ino=4 scontext=u:r:hdcd:s0 tcontext=u:object_r:selinuxfs:s0 tclass=file permissive=1 92对应规则为 93allow hdcd selinuxfs:file open; 94``` 95 96## 相关仓 97 98涉及到的仓库有以下几个: 99 100| 仓库 | 源码目录 | 说明 | 101| --- | --- | --- | 102| [security_selinux](https://gitee.com/openharmony/security_selinux.git) | `base/security/selinux/` | 策略和一些自研接口 | 103| [third_party_selinux](https://gitee.com/openharmony/third_party_selinux.git) | `third_party/selinux/` | SELinux 的主仓库 | 104| [productdefine_common](https://gitee.com/openharmony/productdefine_common.git) | `productdefine/common/` | 添加 SELinux 组件定义 | 105| [third_party_toybox](https://gitee.com/openharmony/third_party_toybox.git) | `third_party/toybox/` | 完善了 `ls` 的 SELinux 支持 | 106| [startup_init_lite](https://gitee.com/openharmony/startup_init_lite.git) | `base/startup/init_lite/` | 系统启动加载策略并分化服务的标签 | 107| [third_party_FreeBSD](https://gitee.com/openharmony/third_party_FreeBSD.git) | `third_party/FreeBSD/` | 提供 fts 库 | 108| [third_party_pcre](https://gitee.com/openharmony/third_party_pcre2.git) | `third_party/pcre/` | 提供 pcre2 库 | 109| [build](https://gitee.com/openharmony/build.git) | `build/` | 编译控制 | 110 111