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

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

我正在尝试构建一个针对 RHEL4 和 5 的 RPM。现在我打电话chcon%post,但多个 Google 条目说“这不是你应该这样做的”,但对以下问题的帮助非常有限正确的方式。我还注意到,当fixfiles -R mypackage check文件正确时,却说文件是错误的(正如预期的那样;RPM DB 没有意识到我想要什么)。

  • 我特别说 RHEL4 因为它确实不是semanage似乎是正确的方法之一。 (添加新策略,然后restorecon在 中的目录上运行%post。)

    • 我也不需要自己的上下文,只httpd_cache_t需要非标准目录。
  • 我还看到过“让我们来cpio处理它” - 但随后我遇到了一个新问题,即非 root RPM 构建用户无法chcon在构建目录上运行。我作弊并sudo在规范文件中添加了内容,但这似乎并不重要。

答案1

Fedora 打包指南有一份文档草案解释了如何处理包中的 SELinux,并且他们使用semanage.如果没有semanage,看起来支持 RHEL 4 将变得很困难,而且没有办法解决这个问题。

根据rpm 4.9.0 发行说明,rpm 中直接提供了一些用于管理 SELinux 策略的支持,但历史上它已被破坏:

  • 旧版本的 RPM 支持规范中的 %policy 指令,用于将 SELinux 策略附加到包头中,但这从未真正用于任何用途。应删除规范中对 %policy 指令的任何使用,因为此未使用的指令会阻止使用 RPM 4.9.0 及更高版本进行构建,同时不会对旧版本执行任何操作。
  • 从 RPM 4.9.0 开始,通过规范中新的 %sepolicy 部分支持 SELinux 策略打包。此类软件包无法构建,但也可以安装在较旧的 RPM 版本上(但不会以任何方式使用所包含的策略)。

我在那里没有看到任何有关文件上下文的提及,而且我也找不到任何有关直接文件上下文支持的提及(如参考资料部分%attr中所示%files)。无论如何,看起来 RHEL 6 仅支持 rpm 4.8.0,因此(除非我错过了某些内容)这条semanage路线至少在 RHEL 7 之前是我们能够做到的。

相关内容