• Home
Name Date Size #Lines LOC

..--

config/12-May-2024-3632

docs/images/12-May-2024-

interfaces/12-May-2024-4,0543,146

scripts/12-May-2024-1,8961,493

sepolicy/12-May-2024-45,52439,629

test/12-May-2024-1,8331,135

.gitignoreD12-May-2024334 4434

BUILD.gnD12-May-202434.8 KiB1,2431,144

CODEOWNERSD12-May-2024735 2119

LICENSED12-May-20249.9 KiB178150

OAT.xmlD12-May-20245.6 KiB8337

README-en.mdD12-May-20245.4 KiB10780

README.mdD12-May-20244.6 KiB10680

bundle.jsonD12-May-20242.5 KiB8787

selinux.gniD12-May-20241 KiB3329

README-en.md

1# selinux_adapter
2
3## Introduction
4
5Security-Enhanced Linux (SELinux) is an outstanding security module in the history of Linux with a set of kernel modifications and user-space tools supporting mandatory access control (MAC) based on security rules.SELinux has been added to various Linux distributions. The software architecture of SELinux attempts to separate enforcement of security decisions from the security policy and streamlines the amount of software involved with security policy enforcement.This component provide MAC protect for system object like file, parameter, service and so on. Providing neverallow rules to limit high-risk operations in the system and reduce system security risks.
6
7The flow of access control shown in following figure:
8
9![Overall architecture](docs/images/SELinux.png)
10
11## Directory Structure
12
13```
14.
15├── config                  # Third-party library configuration file of the board.
16├── docs                    # Documents.
17│   └── images
18├── interfaces
19│   ├── policycoreutils     # libload_policy.so and librestorecon.so of the board.
20│   │   ├── include
21│   │   └── src
22│   └── tools               # load_policy and restorecon of the board.
23│       ├── load_policy
24│       └── restorecon
25├── scripts                 # Security policy compilation scripts.
26├── sepolicy                # Security policy files.
27└── test                    # Test program.
28```
29
30## Constraints
31
32Currently, SELinux supports only the RK3568 device.
33
34## Usage
35
36### Building the Image
37
38Run the following command to build the image that supports SELinux:
39
40```
41Independent build command of this module:
42./build.sh --product-name=rk3568 -T selinux_adapter --ccache
43```
44### Verifying Basic Functions
45
46Burn the image to the development board, start the board, run **shell** through the serial port, and run the following commands:
47
48```
49ls -lZ /          # View the file label.
50ls -lLZ /         # View the link source file label.
51ps -eZ            # View the process label.
52setenforce 1      # Enable the enforcing mode.
53setenforce 0      # Enable the permissive mode, which is the default mode.
54getenforce        # Obtain the SELinux working mode.
55```
56Policy file: **/etc/selinux/targeted/policy/policy.31**
57
58File labeling rule: **/etc/selinux/targeted/policy/file_contexts**
59
60SELinux mode switch: **/etc/selinux/config**
61
62During the verification, you can replace the preceding files separately.
63
64### Log
65
66```
67audit: 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
68
69The log information is interpreted as follows:
70open                                # The operation is open.
71pid=1658                            # The process ID is 1658.
72comm="setenforce"                   # The process name is setenforce.
73path="/sys/fs/selinux/enforce"      # The path accessed by the process is /sys/fs/selinux/enforce.
74dev="selinuxfs"                     # The file accessed belongs to the SELinux filesystem (selinuxfs).
75ino=4                               # The file node No. is 4.
76scontext=u:r:hdcd:s0                # The SELinux label of the process is u:r:hdcd:s0.
77tcontext=u:object_r:selinuxfs:s0    # The SELinux label of the accessed file is u:object_r:selinuxfs:s0.
78tclass=file                         # The current alarm is about a file operation.
79permissive=1                        # The SELinux is running in permissive mode, that is, the system does not deny any operation but only logs Access Vector Cache (AVC) message for troubleshooting or debugging. If permissive is set to 0, the SELinux is running in enforcing mode and denies access based on SELinux policy rules.
80```
81
82### Writing a Policy Rule
83
84```
85Obtain the access information based on the AVC message.
86Example:
87audit: 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
88The rule is as follows:
89allow hdcd selinuxfs:file open;
90```
91
92## Repositories
93
94The table below lists the repositories involved.
95
96| Repository| Source Code| Description|
97| --- | --- | --- |
98| [selinux_adapter](https://gitee.com/openharmony/security_selinux_adapter.git) | `base/security/selinux_adapter/` | Provides policies and self-developed APIs.|
99| [third_party_selinux](https://gitee.com/openharmony/third_party_selinux.git) | `third_party/selinux/` | SELinux main repository.|
100| [productdefine_common](https://gitee.com/openharmony/productdefine_common.git) | `productdefine/common/` | Provides SELinux component definitions.|
101| [third_party_toybox](https://gitee.com/openharmony/third_party_toybox.git) | `third_party/toybox/` | Provides the support for SELinux of `ls`.|
102| [startup_init_lite](https://gitee.com/openharmony/startup_init_lite.git) | `base/startup/init_lite/` | Provides the init_lite module, which starts the first application.|
103| [third_party_FreeBSD](https://gitee.com/openharmony/third_party_FreeBSD.git) | `third_party/FreeBSD/` | Provides the fts library.|
104| [third_party_pcre](https://gitee.com/openharmony/third_party_pcre2.git) | `third_party/pcre/` | Provides the pcre2 library.|
105| [build](https://gitee.com/openharmony/build.git) | `build/` | Provides the code for build.|
106
107

README.md

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