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

Gra*_*ett 11 rpm packaging selinux

RHEL7 提供的 tomcat 包通过创建目录和符号链接支持多个实例。一旦创建了这样的多个实例并将其打包为 RPM,由于 selinux 故障,额外的实例将无法启动。

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

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

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

seb*_*sth 5

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

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

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

正如Graham Legett所指出的,需要注意的是,使用semanagein%pre%post部分规范将添加完整的 python 堆栈以及policycoreutils-python安装时间依赖项。使用restorecon将 add policycoreutils,这又引入sed,gawkgrep,作为安装时间依赖项。

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

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

policy_module(mymodule, 1.0)
Run Code Online (Sandbox Code Playgroud)

文件标签规则在mymodule.fc并遵循相同的:

/path/to/file   --  gen_context(system_u:object_r:type_t,s0)
Run Code Online (Sandbox Code Playgroud)

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

make -f /usr/share/selinux/devel/Makefile
Run Code Online (Sandbox Code Playgroud)

关于打包策略模块,SELinux Policy Modules Packaging Draft 同样推荐使用规范文件的%post%postun部分来安装策略,使用semodulerestorecon/ fixfiles。还提供了一个示例规范文件。


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

  • 为了增强这个答案 - 这里是一个作为独立包提供的小型 SELinux 模块的例子:https://pagure.io/copr/copr/blob/master/f/selinux 这应该给你足够的例子如何实现你自己的模块. (3认同)