![在 RPM .spec 中设置 SELinux 上下文的正确方法是什么?](https://linux22.com/image/16699/%E5%9C%A8%20RPM%20.spec%20%E4%B8%AD%E8%AE%BE%E7%BD%AE%20SELinux%20%E4%B8%8A%E4%B8%8B%E6%96%87%E7%9A%84%E6%AD%A3%E7%A1%AE%E6%96%B9%E6%B3%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我正在尝试构建一个针对 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 之前是我们能够做到的。