博客專欄

EEPW首頁 > 博客 > NXP iMX8集成SELinux支持

NXP iMX8集成SELinux支持

發(fā)布人:toradex 時間:2021-03-02 來源:工程師 發(fā)布文章

By Toradex胡珊逢

SELinux Security-Enhanced Linux 的簡稱,它是為 Linux 提供安全子系統(tǒng)的內核模塊。其主要作用是控制進程對資源的訪問,在基于用戶權限的 DAC 之外對進程提供更加精細的強制訪問控制( MAC)。在常見的 Linux 發(fā)行版中 SELinux 功能可以通過安裝相應的軟件來開啟,但在嵌入式 Linux 設備上往往需要重新生成 BSP。本文接下來將介紹如何使用 Yocto Apalis iMX8 計算機模塊生成支持 SELinux BSP。

 

Yocto 編譯環(huán)境搭建可以參考這里。如果無法直接下載 repo 文件,也可以使用國內鏡像。配置完成后,下載用于編譯 SELinux meta-selinux layer。Linux 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 目錄。根據(jù)需要,在 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 相關日志,完成首次初始化后系統(tǒng)會自動重啟。

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

[    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.

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

 

進入系統(tǒng)后查看 SELinux 運行狀態(tài)。

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

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

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

 

至此用戶可以根據(jù)項目需要創(chuàng)建對應的安全策略,并修改 /etc/selinux/config 使其生效。

 

 

總結

SELinux 為系統(tǒng)提供更加完善的訪問控制,通過制定合適的安全策略,使系統(tǒng)更加安全、可靠地運行。


*博客內容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯(lián)系工作人員刪除。

tcp/ip相關文章:tcp/ip是什么




關鍵詞:

相關推薦

技術專區(qū)

關閉