在 RPM .spec 中设置 SELinux 上下文的正确方法是什么? (2018 年的 RHEL7)

在 RPM .spec 中设置 SELinux 上下文的正确方法是什么? (2018 年的 RHEL7)

RHEL7 提供的 tomcat 软件包通过创建目录和符号链接来支持多个实例。一旦创建了这样的多实例并将其打包为 RPM,多余的实例就会因 selinux 故障而无法启动。

解决方案是在 RPM 包中正确配置 selinux,但是我正在努力寻找如何执行此操作的规范描述。

RHEL7安装tomcat时selinux配置从何而来?

编辑:问题在在 RPM .spec 中设置 SELinux 上下文的正确方法是什么?,是否有人愿意真正阅读它,提到过时的 RHEL4 和 RHEL5 发行版,并且已经有 7 年历史了。正如这个问题中明确指出的,这是指 2018 年的 RHEL7。7 年前的问题的答案和这个问题的答案彼此非常不同。

答案1

SELinux配置由package提供selinux-policy-targeted,其中包含发行版的默认策略配置,包括tomcat的SELinux配置。

我可以找到两个旧的 Fedora 打包草稿,描述 RPM 打包中的 SELinux 配置。

打包草案/SELinux建议通过分别执行和并在之后运行/来将文件标签配置包含在规范文件的%post和部分中。%postunsemanage fcontext -asemanage fcontext -drestoreconfixfiles

值得注意的是,正如指出的那样格雷厄姆·莱吉特,使用规范semanage%pre或部分将添加完整的 python 堆栈以及安装时依赖项。使用will add ,这又会引入、和,作为安装时依赖项。%postpolicycoreutils-pythonrestoreconpolicycoreutilssedgawkgrep

提供所需文件标签规则的更好方法是通过 SELinux 策略模块。策略模块提供更清晰的界面来管理模块化策略(标签规则不与使用 完成的本地修改混合semanage)。

对于具有文件标签规则的策略模块,您需要提供类型强制文件和文件上下文标签文件。即使您没有对策略添加任何修改,也需要类型强制文件。虚拟类型强制文件示例mymodule.te

policy_module(mymodule, 1.0)

文件标签规则如下mymodule.fc

/path/to/file   --  gen_context(system_u:object_r:type_t,s0)

使用,可以使用[注1]selinux-policy-devel编译模块包:

make -f /usr/share/selinux/devel/Makefile

关于打包政策模块,SELinux 策略模块打包草案 同样,建议使用规范文件的%post和部分来使用和/%postun安装策略。还提供了示例规范文件。semodulerestoreconfixfiles


[注1]selinux-policy-devel示例策略模块可以不使用checkmodule和直接生成semodule_package。这需要在没有宏的情况下编写策略文件。

相关内容