原创 NXP iMX8集成SELinux支持

2021-3-2 12:11 903 5 5 分类: MCU/ 嵌入式

By Toradex胡珊逢

SELinux Security-Enhanced Linux 的简称,它是为 Linux 提供安全子系统的内核模块。其主要作用是控制进程对资源的访问,在基于用户权限的 DAC 之外对进程提供更加精细的强制访问控制( MAC)。在常见的 Linux 发行版中 SELinux 功能可以通过安装相应的软件来开启,但在嵌入式 Linux 设备上往往需要重新生成 BSP。本文接下来将介绍如何使用 Yocto Apalis iMX8 计算机模块生成支持 SELinux BSP

 

Yocto 编译环境搭建可以参考这里。如果无法直接下载 repo 文件,也可以使用国内镜像。配置完成后,下载用于编译 SELinux meta-selinux layerLinux BSP 5.x 使用 dunfell 分支,用 git 命令下载相同版本的 meta-selinux

----------------------------------

$ cd layers

$ git clone -b dunfell git://git.yoctoproject.org/meta-selinux

----------------------------------

 

conf/local.conf 文件的结尾添加以下内容。

----------------------------------

DISTRO_FEATURES_append = " xattrs pam selinux"

PREFERRED_PROVIDER_virtual/refpolicy ?= "refpolicy-minimum"

IMAGE_INSTALL_append = " packagegroup-core-full-cmdline packagegroup-core-selinux"

----------------------------------

 

Toradex 提供精简地 minimal console 和包含 Qt5 gstreamer 等的 multimedia 两种参考镜像,配置文件位于 layers/meta-toradex-demos/recipes-images/images 目录。根据需要,在 tdx-reference-minimal-image.bb 或者 tdx-reference-multimedia-image.bb inherit 后面添加 selinux-image

----------------------------------

$ vi tdx-reference-minimal-image.bb

inherit core-image selinux-image

 

SUMMARY = "Toradex Embedded Linux Reference Minimal Image"

DESCRIPTION = "Minimal image without graphical interface that just boots"

 

$ vi tdx-reference-multimedia-image.bb

require tdx-reference-minimal-image.bb

 

SUMMARY = "Toradex Embedded Linux Reference Multimedia Image"

DESCRIPTION = "Image for BSP verification with QT and multimedia features"

 

inherit populate_sdk_qt5 selinux-image

----------------------------------

 

默认的 Linux 内核配置是没有添加 SELinux 支持,因此在生成 BSP 之前做相应的修改。

----------------------------------

$ MACHINE=apalis-imx8 bitbake -c menuconfig virtual/kernel

----------------------------------

 

在“General setup Security options 中开启以下功能。

----------------------------------

CONFIG_AUDIT=y

CONFIG_SECURITYFS=y

CONFIG_SECURITY_NETWORK=y

CONFIG_SECURITY_SELINUX=y

CONFIG_SECURITY_SELINUX_BOOTPARAM=y

CONFIG_SECURITY_SELINUX_DISABLE=y

CONFIG_SECURITY_SELINUX_DEVELOP=y

CONFIG_SECURITY_SELINUX_AVC_STATS=y

CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=0

CONFIG_DEFAULT_SECURITY_SELINUX=y

----------------------------------

 

最后编译所需的镜像,这里使用 minimal console 镜像。

----------------------------------

$ MACHINE=apalis-imx8 bitbake tdx-reference-minimal-image

----------------------------------

 

生成的 BSP 使用 Toradex Easy Installer 安装到 Apalis iMX8 计算机模块上。

 

开机启动后将 SELinux 配置为 permissive 模式,由于没有配置任何策略,采用默认的 enforcing 模式会阻止进程对相关资源文件的访问,从而影响启动。所以在配置相应策略前,permissive 模式仅记录进程的操作但不进行阻止。

----------------------------------

root@apalis-imx8:~# vi /etc/selinux/config

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#     enforcing - SELinux security policy is enforced.

#     permissive - SELinux prints warnings instead of enforcing.

#     disabled - No SELinux policy is loaded.

SELINUX=permissive

 

root@apalis-imx8:~# sync

----------------------------------

 

保存配置后重启。在调试串口中按空格进入 U-Boot 命令模式,运行下面命令。

----------------------------------

Apalis iMX8 # setenv defargs security=selinux selinux=1

Apalis iMX8 # saveenv

Apalis iMX8 # reset

----------------------------------

 

重启后可以看到 SELinux 相关日志,完成首次初始化后系统会自动重启。

----------------------------------

[    0.001418] SELinux:  Initializing.

[    4.652222] SELinux:  Permission watch in class filesystem not defined in policy.

[    4.660034] SELinux:  Permission watch in class file not defined in policy.

[    4.667029] SELinux:  Permission watch_mount in class file not defined in policy.

[    4.674527] SELinux:  Permission watch_sb in class file not defined in policy.

[    4.681764] SELinux:  Permission watch_with_perm in class file not defined in policy.

[    4.689612] SELinux:  Permission watch_reads in class file not defined in policy.

[    4.697116] SELinux:  Permission watch in class dir not defined in policy.

[    4.704003] SELinux:  Permission watch_mount in class dir not defined in policy.

----------------------------------

 

进入系统后查看 SELinux 运行状态。

----------------------------------

root@apalis-imx8:~# sestatus

SELinux status:                 enabled

SELinuxfs mount:                /sys/fs/selinux

SELinux root directory:         /etc/selinux

Loaded policy name:             minimum

Current mode:                   permissive

Mode from config file:          permissive

Policy MLS status:              enabled

Policy deny_unknown status:     allowed

Memory protection checking:     actual (secure)

Max kernel policy version:      31

----------------------------------

 

至此用户可以根据项目需要创建对应的安全策略,并修改 /etc/selinux/config 使其生效。

 

 

总结

SELinux 为系统提供更加完善的访问控制,通过制定合适的安全策略,使系统更加安全、可靠地运行。

作者: hai.qin_651820742, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-1864768.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论0条评论)

登录后参与讨论
相关推荐阅读
hai.qin_651820742 2021-06-04 15:49
使用VS Code 将 Qt 项目导入到 Torizon
​简介 如果您正在阅读本文,您可能已经了解了 Torizon(易于使用的工业 Linux 软件平台)的基础知识。 您知道它使用容器来提供一个平台,您可以专注于编写自己的应用程序,而 T...
hai.qin_651820742 2021-04-23 15:18
NXP iMX8基于Ycoto Project编译ROS2
By Toradex秦海 1). 简介 基于类似NXP iMX8这样性能强劲的ARM平台处理器,越来越多的工业智能/机器人应用比如AGV/AMR产品控制器在ARM平台上面实现,在这个过程...
hai.qin_651820742 2021-04-22 15:06
VisualStudioCode开发Arm嵌入式Linux应用
By Toradex胡珊逢Visual Studio Code 在软件开发领域具有十分广泛的应用,其支持多种编程语言,丰富的插件极大得提高了开发效率,同时这也是一个非常开放的平台。本文接下来...
hai.qin_651820742 2021-04-22 12:21
iMX8模块Ubuntu移植
By Toradex胡珊逢本文将介绍如何将 Ubuntu 系统移植到 Toradex Apalis iMX8 计算机模块上。该方法也同样使用与其他使用 eMMC 作为存储介质的模块,例如 Colibr...
hai.qin_651820742 2021-03-16 17:26
在iMX8上使用MIPI-CSI摄像头
By Toradex胡珊逢NXP i.MX8QM/QP处理器能够支持2路4 lane的MIPI CSI-2输入,每路最高为4K@30分辨率。文章接下来将使用Apalis iMX8QM计算机模块配合e-...
hai.qin_651820742 2021-03-11 14:23
NXP iMX8基于eIQ框架测试Machine Learning
By Toradex秦海1). 简介随着嵌入式处理器性能的提升甚至一些嵌入式处理器已经开始集成针对人工智能和机器学习的硬件加速单元NPU,机器学习应用在嵌入式边缘设备的应用也慢慢展现。为此,...
广告
我要评论
0
5
1
2
3
4
5
6
7
8
9
0
广告
关闭 热点推荐上一条 /5 下一条