我有一个任务,在运行 openssh-server 8.0 的多个 RHEL8 系统上构建和部署 openssh-server 8.6(这是由于安全合规性发现)。不幸的是,似乎没有适合我们版本要求的 RPM 包。
如果我必须从 src tarball 构建,我可以执行构建过程吗 (./configure、make、make install)在一个系统上,然后只需将可执行文件 sshd (/usr/local/sbin/sshd) 复制到所有其他系统?还是我必须在所有需要升级的系统上从 src tarball 执行完整的构建过程?
答案1
从技术上来说,是的,您始终可以在具有必要库的系统之间自由地复制二进制文件。(毕竟,这实际上是您首先安装 RPM 时发生的事情 - 二进制文件由 RHEL 构建一次,然后安装在所有地方。)
但是,作为系统管理员,当包管理器显示 X,但系统实际显示 Y 时,这有点像管理噩梦。如果你有两个相同的东西(/usr 中的旧 sshd,/usr/local 中的新 sshd,很容易意外启动错误的 sshd),情况就很糟糕了——如果你复制新的 sshd 二进制文件,情况就更糟了在上面新的,然后过了一段时间它就消失了,因为另一个管理员刚刚在上面安装了“关键的 openssh 8.0 安全更新” RPM。
正确做法构建 RPM新版本的,它正确地指示了它的版本,并允许包管理器跟踪哪些文件属于它。例如,您可以使用 openssh.spec 文件来自 Fedora(恰好是 8.7 版),或者附带 OpenSSH 源(始终是最新版本),甚至是来自 RHEL 的版本(手动编辑它以构建 8.6 而不是 8.0)。
将 .spec 转换为 .rpm 的主要工具是rpmbuild
。下面是Red Hat 介绍和另一个和一个通用 .spec 指南。
不过,这只是在基本软件包管理方面“正确”而已。 在您的情况中,它还存在其他问题,例如 RHEL 中的 8.0 软件包作为 RHEL 的一部分进行维护– 只要 RHEL8 整体是最新的,Red Hat 就会确保后续版本中的任何安全修复都会移植到发行版附带的 OpenSSH 包中。(如果您的规模足够大,可以处理安全审计,那么您甚至可能会支付Red Hat 支持 RHEL。)
但是一旦你安装了你自己的版本,你就得自己处理了——如果 OpenSSH 8.9 中有安全修复程序,你必须记得安装它,如果它有安全修复程序和与 RHEL8 不兼容,您必须以某种方式处理它。(更不用说,除非您使用 RHEL8 openssh.spec 作为基础,否则您将失去 RHEL 版本中的大量 SELinux 补丁、FIPS 合规补丁和各种奇怪的错误修复。)
因此最终的结果就是你很可能会成为较少的这样做符合安全要求。