在SELinux上运行OpenWRT

2020-09-14 09:25:14

这篇博客文章描述了如何创建和测试运行SELinux的OpenWRT映像以提高安全性。支持仍然是有限的,还没有做好任何生产性使用的准备,但是这篇文章应该会给出它的现状的一个基本概念。

早在2019年11月,Thomas Petazzoni就发布了第一个补丁集,为OpenWRT添加了可选的SELinux支持。由于将SELinux集成到OpenWRT构建系统的复杂性以及补丁集中缺少的位,补丁从未进入主分支。

2020年7月,W.Michael Petullo对补丁集进行了第二次更新,将遗留的Python2更新为Python3,重新调整了所有基础,并重新处理了评审者提出的所有更改请求。特别感谢丹尼尔·戈尔。由于在操作系统中深度集成了SELinux,因此创建了busybox、procdand F2fs-tools的特殊版本,使常规(非SELinux)映像保持较小,同时允许通过打包安装集成额外的SELinux功能。

要在OpenWRT上试用SELinux,目前需要使用附加选项编译内核。有一些想法可以为双内核ImageBuilders提供一个常规版本和一个SELinux就绪版本,但是现在还没有准备好。

从2020/09开始,只有x86/64、armvirt/64和ath79/Generc使用了在SELinux上测试过的squashfs文件系统,如果您使用不同的目标,请共享您的结果。

全局生成设置->;#CONFIG_TARGET_ROOTFS_SECURITY_LABEL=y[*]启用rootfs安全标签内核生成选项->;#CONFIG_KERNEL_SECURITY_SELINUX=y[*]NSA SELinux支持。

这些选项将自动选择包refpolicy,以在创建的squashfs文件系统中设置标签。

选择prod、busybox和(可选)mkf2fs的SELinux变体。请务必取消选择常规版本,因为如果同时选择了两个变体,则会出现依赖错误。

基本系统->;<;*>;busybox-selinux<;*>;procd-selinuxUtilities->;Filessystem->;#可选:仅当目标使用F2FS<;*>;mkf2fs-selinux。

Bin_DIR=./bin/target/armvirt/64qemu-system-aarch64\-M virt\-append";console=ttyAMA0,115200 root=/dev/vda";\-cpu corp-a57\-device virtio-blk-device,drive=hd\-drive file=";$BIN_DIR/OpenWRT-armvirt-64-rootfs-squashfs.img&。\-图形。

引导日志直接写入使用的终端,并应显示如下行:

[0.002483]LSM:安全框架初始化[0.005608]SELinux:正在初始化...。[2.732347]SELinux:策略能力NETWORK_PEER_CONTROLS=1[2.732662]SELinux:策略能力OPEN_PERMS=1[2.732773]SELinux:策略能力EXTENDED_SOCKET_CLASS=1[2.732899]SELinux:策略能力ALWAYS_CHECK_NETWORK=0[2.733022]SELinux:策略能力CGROUP_SECLABEL=1[2.733132]SELinux:策略能力NNP_NOSUID_TRANSION=1[2.753174]审计:TYPE=1403AUDIT(1599863280.884:2):AUID=4294967295SES=4。

Root@openwrt:/#ls-zSystem_u:object_r:bin_t binsystem_u:object_r:tmpfs_t devsystem_u:object_r:etc_t etcsystem_u:object_r:default_t initsystem_u:object_r:lib_t libsystem_u:object_r:lib_t lib64system_u:object_r:mnt_t mntsystem_u:object_r:unlabed_t。Object_r:user_home_dir_t rootsystem_u:object_r:bin_t sbinsystem_u:object_r:sysfs_t syssystem_u:object_r:tmpfs_t tmpsystem_u:object_r:usr_t usrsystem_u:object_r:default_t varsystem_u:object_r:default_t www。

进程也会收到一个标签,但是prod还没有设置上下文,这涉及到一些C编程,应该在不久的将来解决。下面的列表显示DropBear、netifd和odhcpd都共享相同的上下文标签。

Root@OpenWRT:/#ps-Z PID上下文STAT命令1 system_u:system_r:init_t S/sbin/procd 2 system_u:system_r:kernel_t sw[kthreadd]3 system_u:system_r:kernel_t Iw<;[RCU_GP]4 system_u:system_r:kernel_t Iw<;[RCU_PAR_GP]5 system_u:system_r:kernel_t IW[kworker/0:0-eve]6 system_u:system_r:kernel_t IW<;[kworker/0:0h-kb]7 system_u:system_r:kernel_t IW[kworker/u2:0-ev]...。985 system_u:system_r:init_t S/usr/sbin/dropear-F-P/var/run/1060 system_u:system_r:init_t S/sbin/netifd 1100 system_u:system_r:init_t S/usr/sbin/odhcpd 1327 system_u:system_r:init_t S<;/usr/sbin/ntpd-n-N-。

这将总结当前状态。还有更多的事情要做,下一节有几点。