3.15. Software Collection SELinux 支持
由于 Software Collections 设计为在备用目录中安装 Software Collection 软件包,所以请设置必要的 SELinux 标签,以便 SELinux 了解备用目录。
如果 Software Collection 软件包的文件系统层次结构代表相应传统软件包的文件系统层次结构,您可以运行 semanage fcontext 和 restorecon 命令来设置 SELinux 标签。
例如,如果 Software Collection
软件包中的 /opt/provider/software_collection_1/root/usr
/ 目录代表您的传统软件包的 /usr/
目录,请设置 SELinux 标签,如下所示:
semanage fcontext -a -e /usr /opt/provider/software_collection_1/root/usr
restorecon -R -v /opt/provider/software_collection_1/root/usr
以上命令确保
/opt/provider/software_collection_1/root/usr/
目录中的所有目录和文件都被 SELinux 标记,就像它们位于 /usr/
目录中一样。
3.15.1. Red Hat Enterprise Linux 7 中的 SELinux 支持
当为 Red Hat Enterprise Linux 7 打包 Software Collection 时,将以下命令添加到 Software Collection metapackage 中的
%post
部分来设置 SELinux 标签:
semanage fcontext -a -e /usr /opt/provider/software_collection_1/root/usr
restorecon -R -v /opt/provider/software_collection_1/root/usr
selinuxenabled && load_policy || :
最后一个命令可确保正确加载新创建的 SELinux 策略,并且软件集合中软件包安装的文件也会使用正确的 SELinux 上下文创建。通过在 metapackage 中使用此命令,您不需要在 Software Collection 中的所有软件包中包含 restorecon 命令。
请注意, semanage fcontext 命令由 policycoreutils-python 软件包提供,因此您必须在 Software Collection metapackage 的
policycoreutils-python
中包含 Requires
非常重要。
注意
在 Red Hat Enterprise Linux 7 中,启动服务的 SELinux 方面发生了很大 变化。最重要的是,在 systemd 服务文件中使用 scl enable ... wrapper 会导致服务作为
unconfined _service_t
上下文以不受限制的进程运行。由于此上下文没有按照设计过渡规则,因此如果该服务应该使用 SELinux 策略限制,服务将无法过渡到 SELinux 策略表示的目标 SELinux 上下文,这意味着,如果服务启动,则无法在 Red Hat Enterprise Linux 7 上使用 scl enable ...。