嵌入式linux集成selinux

摘要:
背景:该项目使用NXPIMX8MM CPU,rootfs使用yocto构建,yocto版本是sumo。报告了以下错误:注意:运行任务352of2707注意:recipee2fsprogs-native-1.43.8-r0:taskdo_patch:Started注意:运行707的任务1413注意:recepee2fsrogs-1.43.8-r0:taskdo_patch:StartedERROR:e2fsprogs-native-43.8-r0do-patch:CommandError:'bett--bettrcApplyingpatchmisc_create_inode.c-label_rootfs.patchpatchfilemisc/create_inode。cHunk#1FailEDat979,commit=78eca8242ea5397c4dc0654d6224453b4260151=“refpolicy minimum”PREFERRED_version_refpolicyminimum=“2.20170204”PREFER RED_ERSION_refpolicy=“2.220170204“DISTRO_FEATURES_remove=“sysvinit”DISTRO_ FEATURES_append=“systemd”VIRTUAL-RUNTIME_init_manager=“systemd”DISTRO_ FEATURES _ BACKFILL_ CONSIDERED=“”此信息可在meta selinx的README、FAQ文件中找到。

背景:项目使用NXP IMX8MM CPU,rootfs使用yocto构建,yocto版本是sumo。

步骤

1.clone selinux源码到sources路径

git clone git://git.yoctoproject.org/meta-selinux

理论上是应该用sumo分支的,但是实际上sumo分支编译不过。报以下错误:

NOTE: Running task 352 of 2707
(virtual:native:/sources/poky/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.43.8.bb:do_patch)
NOTE: recipe e2fsprogs-native-1.43.8-r0: task do_patch: Started
NOTE: Running task 1413 of 2707
(/sources/poky/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.43.8.bb:do_patch)
NOTE: recipe e2fsprogs-1.43.8-r0: task do_patch: Started
ERROR: e2fsprogs-native-1.43.8-r0 do_patch: Command Error: 'quilt --quiltrc
Applying patch misc_create_inode.c-label_rootfs.patch
patching file misc/create_inode.c
Hunk #1 FAILED at 979.
Hunk #2 FAILED at 987.

google搜到维护人员的回复,让使用主分支,commit id=78eca8242ea5397c4dc0654d62244453b4260151的版本。

嵌入式linux集成selinux第1张

2.切换到对应的commit id=8ecad12b2ccb612fdf4906392d26fa6bfae20460

git reset --hard8ecad12b2ccb612fdf4906392d26fa6bfae20460

理论上讲要切换到78eca8242ea5397c4dc0654d62244453b4260151,这个维护人员建议的分支,但是实测还是报上述错误。

继续回退版本,发现8ecad12b2ccb612fdf4906392d26fa6bfae20460可用。

3.在build/conf/bblayers.conf结尾加入selinux层

BBLAYERS += " ${BSPDIR}/sources/meta-selinux "

4.在build/conf/local.conf结尾加入配置

DISTRO_FEATURES_append = "acl xattrs pam selinux"
PREFERRED_PROVIDER_virtual/refpolicy ?= "refpolicy-minimum"
PREFERRED_VERSION_refpolicy-minimum = "2.20170204"
PREFERRED_VERSION_refpolicy = "2.20170204"
DISTRO_FEATURES_remove = " sysvinit"
DISTRO_FEATURES_append = " systemd"
VIRTUAL-RUNTIME_init_manager = "systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED = ""

这些信息是在meta-selinx的README,FAQ文件中找到的。

5.修改生成image的bb或者bbapend文件,把selinux文件打包进镜像

可以通过find sources -name core-image-base*找到image相关的bb或者bbappend文件

其中sources为层所在的文件夹,core-image-base为要集成selinux的镜像的名称。

嵌入式linux集成selinux第2张

sources/meta-myir/meta-myir-bsp/recipes-myir/images/core-image-base.bbappend文件中增加如下2行

packagegroup-core-full-cmdline
packagegroup-core-selinux

嵌入式linux集成selinux第3张

sources/poky/meta/recipes-core/images/core-image-base.bb文件中增加selinux-image

嵌入式linux集成selinux第4张

6.修改内核,在“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
CONFIG_EXT4_FS_SECURITY=y

实验发现CONFIG_EXT4_FS_SECURITY=y不打开,会报以下错误:

[ 17.955632] SELinux: (dev mmcblk0p26, type ext4) has no security xattr handler

selinux在初始化的时候执行/usr/bin/selinux-init.sh会导致系统shutdown

进一步分析发现脚本中执行/usr/bin/chcon system_u:object_r:root_t:s0 / 时报错

chcon: failed to change context of ‘/’ to ‘system_u:object_r:root_t:s0’: Operation not supported

7.将生成的镜像烧录进设备,启动系统,修改/etc/selinux/config,然后sync

默认selinux是未开启的,需要在selinux未开启前改为permissive模式,否则启动不了

myd-imx8mm:~# cat /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
# SELINUXTYPE= can take one of these values:
# minimum - Minimum Security protection.
# standard - Standard Security protection.
# mls - Multi Level Security protection.
# targeted - Targeted processes are protected.
# mcs - Multi Category Security protection.
SELINUXTYPE=minimum

8.重启,修改u-boot环境变量,启动参数中增加security=selinux selinux=1

嵌入式linux集成selinux第5张

然后saveenv,用boot命令启动系统,会看到selinx的输出信息

嵌入式linux集成selinux第6张

登陆系统,执行/usr/sbin/sestatus查看状态

嵌入式linux集成selinux第7张

至此selinux集成工作已经完成。

免责声明:文章转载自《嵌入式linux集成selinux》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VMware Workstation 15 安装教程Sql Server 2008 增加字段、修改字段、修改类型、修改默认值下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Ambari2.7.4+HDP3.1.4在centos7.6部署

一.下载安装包 使用在线安装特别慢,所有的安装包加起来有9个G左右,所以需要先下载相关安装包到服务器,通过配置本地源的方式来实现的离线安装。 在私有集群中部署时,客户机房的网络情况不可预测,因此也需要使用离线部署的方式。 根据官方文档 https://docs.cloudera.com/HDPDocuments/Ambari-2.7.4.0/bk_am...

大数据之Linux服务器集群搭建

之前写过一篇关于Linux服务器系统的安装与网关的配置,那么现在我们要进一步的搭建多台Linux服务器集群。 关于单台服务器的系统搭建配置就不在赘述了,详情见https://www.cnblogs.com/sky9408251/p/12034904.html 那么好,现在我们来开始搭建多台Linux服务器集群。   首先第一步,准备环境,我们需要准备环境有...

如何在嵌入式Linux上开发一个语音通信解决方案

开发一个语音通信解决方案是一个软件项目。既然是软件项目,就要有相应的计划:有多少功能,安排多少软件工程师去做,这些工程师在这一领域的经验如何,是否需要培训,要多长时间做完,中间有几个主要的milestone等。我们曾经四个人花了近一年时间开发了一个语音解决方案,成功通过验收,各项关键指标(语音质量、单向时延)均达到运营商要求。当时是在芯片公司,在公司自己的...

Samba服务配置及配置文件说明

前言 1、配置Samba服务为什么要关闭防火墙(firewalld)和Selinux? 在linux操作系统中默认开启了防火墙,Selinux也处于启动状态,一般状态为enforing;所以,在我们搭建任何服务(每个服务都有自己的端口),由于防火墙和Selinux的存在导致服务的端口被拦截了,虽然可以用命令查看服务的监听端口,任然会访问不到自己搭建的服务!...

SELinux的启动和关闭

1、SELinux简介 SELinux是Security Enhanced Linux的缩写,字面上的意思就是安全强化的Linux,它是由美国国家安全局 (NSA) 开发的,整合到Linux核心的一个模块,是对于强制访问控制(MAC)的实现,是 Linux历史上最杰出的新安全子系统,提供了比传统的UNIX权限更好的访问控制。在SELinux的访问控制体系的...

嵌入式Linux学习笔记(四) 设备树和UART驱动开发

目录 (1).参考资料 (2).Uart硬件配置 (3).设备树的说明和修改 (4).测试代码     通过完成LED的驱动,我们熟悉了驱动编写的大致结构框架,然而在实际开发中,嵌入式Linux和普通单片机最大的不同就是提供大量的代码,满足大部分的应用需求,如本节中,我们使用的UART驱动已经被集成到内核。不过通过对底层驱动更高级的抽象,使用设备树实现了底...