移植步骤:
- 检查openwrt19.07是否存在selinux相关的配置。
检查package目录及子目录是否有selinux-policy、checkpolicy、policycoreutils、libselinux、setools、libsemanage等selinux相关的配置文件。
没有则需要从openwrt官方网站或其他地方下载并拷贝到相应的目录。(GitHub - openwrt/packages at openwrt-21.02)。
- 通过 make menuconfig命令去配置selinux。不建议直接修改.config文件,通过make menuconfig配置selinux可以自动配置相关依赖选项。

- 在保存退出menuconfig后,如果有WARNING信息,检查是否有selinux相关的信息。若有selinux相关WARNING则分析警告信息。主要会告诉编译相关模块的所依赖的库文件或工具,则需要根据信息继续添加依赖的库或工具。
- 执行“make menuconfig”命令,重复执行步骤3,直到无selinux相关模块的WARNING信息。(若未添加依赖,在编译过程中也会报错提示)
例:下图的WARNING中显示编译policycoreutils需要依赖libaudit; selinux-python需要依赖setools。

- 保存menuconfig然后运行make命令编译。
注意事项:
- 在make menuconfig后并非所有的WARNING信息都需要解决,若没有编译相关模块则可以不用关心。
- 在从openwrt21复制selinux相关模块时,应注意检查Makefile中的include所指路径是否正确,若不正确需要修改为正确的路径。
- 在从openwrt21复制selinux相关模块时,文件存放路径应尽量与openwrt21路径一致。
- Selinux相关工具的压缩包,若有现成的,直接拷贝到dl/目录下,可以减少编译前下载相关压缩包的时间。
- 在修改selinux规则后,把编译生成的policy.33(不同版本可能后面的数字不同,如policy.19)替换文件系统下/etc/selinux/targeted/policy/policy.33,运行load_policy命令就能把修改规则load到当前系统。
1. Package xxx is missing dependencies for the following libraries: xxx

解决方法:添加相应的lib库到packages目录中去。
2.编译出来的系统起来之后无/sys/fs/selinux/目录,且修改/etc/selinux/config中的状态无效。
解决方法:检查内核是否配置selinux,运行make kernel_menuconfig命令配置NSA SELinux Support enable,在配置SELinux Support enable需要依赖Audit与security。
①.General setup->Auditing support
②.Security options->Enable different security models
- . Security options->NSA SELinux Support

3.在系统中/etc/selinux/targeted/seuser文件可完成linux用户和SElinux用户的映射。如下图seuser文件中的第一个root对应的Linux用,第二个root对应的是SELinux用户。seuser中定义每个登录用户SELinux用户,如果不想为每一个用户都定义SELinux用户,可以使用__default__指定未定义SELinux用户时使用的默认SELinux用户名。

|