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

Aar*_*sco 14 compiling rpm selinux

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

  • 我说具体RHEL4,因为它并没有具备semanage这似乎是正确的方式去做一个。(添加新策略,然后restorecon%post.

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

Ste*_*ard 9

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 之前能够做到的一样好。